summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore99
-rw-r--r--.travis.yml12
-rw-r--r--CMakeLists.txt20
-rw-r--r--CONTRIBUTING.md107
-rw-r--r--README.txt13
-rw-r--r--build/android/AndroidManifest.xml.template35
-rw-r--r--build/android/Makefile445
-rw-r--r--build/android/build.gradle49
-rw-r--r--build/android/build.xml16
-rw-r--r--build/android/jni/Android.mk56
-rw-r--r--build/android/jni/Application.mk3
-rw-r--r--build/android/patches/irrlicht-back_button.patch (renamed from build/android/irrlicht-back_button.patch)15
-rw-r--r--build/android/patches/irrlicht-texturehack.patch (renamed from build/android/irrlicht-texturehack.patch)0
-rw-r--r--build/android/patches/irrlicht-touchcount.patch (renamed from build/android/irrlicht-touchcount.patch)0
-rw-r--r--build/android/patches/libiconv_android.patch (renamed from build/android/libiconv_android.patch)0
-rw-r--r--build/android/patches/libiconv_stdio.patch (renamed from build/android/libiconv_stdio.patch)0
-rw-r--r--build/android/patches/libvorbis-libogg-fpu.patch (renamed from build/android/libvorbis-libogg-fpu.patch)0
-rw-r--r--build/android/patches/openssl_arch.patch (renamed from build/android/openssl_arch.patch)14
-rw-r--r--build/android/project.properties1
-rw-r--r--build/android/settings.gradle2
-rw-r--r--build/android/src/debug/AndroidManifest.xml4
-rw-r--r--build/android/src/main/AndroidManifest.xml34
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java (renamed from build/android/src/net/minetest/minetest/MinetestAssetCopy.java)44
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java (renamed from build/android/src/net/minetest/minetest/MinetestTextEntry.java)0
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java (renamed from build/android/src/net/minetest/minetest/MtNativeActivity.java)33
-rw-r--r--build/android/src/main/res/drawable-hdpi/irr_icon.png (renamed from build/android/res/drawable-hdpi/irr_icon.png)bin5490 -> 5490 bytes
-rw-r--r--build/android/src/main/res/drawable-ldpi/irr_icon.png (renamed from build/android/res/drawable-ldpi/irr_icon.png)bin2262 -> 2262 bytes
-rw-r--r--build/android/src/main/res/drawable-mdpi/irr_icon.png (renamed from build/android/res/drawable-mdpi/irr_icon.png)bin3110 -> 3110 bytes
-rw-r--r--build/android/src/main/res/drawable-xhdpi/irr_icon.png (renamed from build/android/res/drawable-xhdpi/irr_icon.png)bin7610 -> 7610 bytes
-rw-r--r--build/android/src/main/res/layout/assetcopy.xml (renamed from build/android/res/layout/assetcopy.xml)6
-rw-r--r--build/android/src/main/res/values/strings.xml5
-rw-r--r--build/android/src/main/res/values/styles.xml (renamed from build/android/res/values/styles.xml)0
-rw-r--r--builtin/common/filterlist.lua2
-rw-r--r--builtin/common/misc_helpers.lua59
-rw-r--r--builtin/common/serialize.lua13
-rw-r--r--builtin/common/strict.lua14
-rw-r--r--builtin/fstk/buttonbar.lua61
-rw-r--r--builtin/fstk/dialog.lua8
-rw-r--r--builtin/fstk/tabview.lua36
-rw-r--r--builtin/fstk/ui.lua12
-rw-r--r--builtin/game/auth.lua2
-rw-r--r--builtin/game/chatcommands.lua166
-rw-r--r--builtin/game/constants.lua17
-rw-r--r--builtin/game/deprecated.lua16
-rw-r--r--builtin/game/falling.lua176
-rw-r--r--builtin/game/features.lua7
-rw-r--r--builtin/game/init.lua4
-rw-r--r--builtin/game/item.lua89
-rw-r--r--builtin/game/item_entity.lua24
-rw-r--r--builtin/game/misc.lua157
-rw-r--r--builtin/game/privileges.lua1
-rw-r--r--builtin/game/register.lua34
-rw-r--r--builtin/game/static_spawn.lua22
-rw-r--r--builtin/init.lua35
-rw-r--r--builtin/mainmenu/common.lua224
-rw-r--r--builtin/mainmenu/dlg_config_world.lua38
-rw-r--r--builtin/mainmenu/dlg_create_world.lua6
-rw-r--r--builtin/mainmenu/dlg_delete_mod.lua9
-rw-r--r--builtin/mainmenu/dlg_delete_world.lua8
-rw-r--r--builtin/mainmenu/dlg_rename_modpack.lua12
-rw-r--r--builtin/mainmenu/dlg_settings_advanced.lua760
-rw-r--r--builtin/mainmenu/init.lua116
-rw-r--r--builtin/mainmenu/init_simple.lua2
-rw-r--r--builtin/mainmenu/modmgr.lua40
-rw-r--r--builtin/mainmenu/tab_credits.lua138
-rw-r--r--builtin/mainmenu/tab_mods.lua6
-rw-r--r--builtin/mainmenu/tab_multiplayer.lua284
-rw-r--r--builtin/mainmenu/tab_server.lua4
-rw-r--r--builtin/mainmenu/tab_settings.lua440
-rw-r--r--builtin/mainmenu/tab_simple_main.lua214
-rw-r--r--builtin/mainmenu/tab_singleplayer.lua4
-rw-r--r--builtin/mainmenu/tab_texturepacks.lua50
-rw-r--r--builtin/mainmenu/textures.lua4
-rw-r--r--builtin/settingtypes.txt1214
-rw-r--r--client/shaders/default_shader/opengl_fragment.glsl4
-rw-r--r--client/shaders/default_shader/opengl_vertex.glsl9
-rw-r--r--client/shaders/nodes_shader/opengl_fragment.glsl74
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl224
-rw-r--r--client/shaders/selection_shader/opengl_fragment.glsl9
-rw-r--r--client/shaders/selection_shader/opengl_vertex.glsl9
-rw-r--r--client/shaders/water_surface_shader/opengl_fragment.glsl52
-rw-r--r--client/shaders/water_surface_shader/opengl_vertex.glsl270
-rw-r--r--client/shaders/wielded_shader/opengl_vertex.glsl68
-rw-r--r--cmake/Modules/FindJson.cmake2
-rw-r--r--cmake/Modules/FindLua.cmake25
-rw-r--r--cmake/Modules/FindLuaJIT.cmake50
-rw-r--r--cmake/Modules/FindNcursesw.cmake204
-rw-r--r--doc/Doxyfile.in45
-rw-r--r--doc/lua_api.txt632
-rw-r--r--doc/main_page.dox8
-rw-r--r--doc/menu_lua_api.txt8
-rw-r--r--doc/minetest.63
-rw-r--r--doc/world_format.txt (renamed from doc/mapformat.txt)44
-rwxr-xr-xfonts/lucida_sans_100.pngbin12245 -> 12012 bytes
-rwxr-xr-xfonts/lucida_sans_110.pngbin15193 -> 14739 bytes
-rwxr-xr-xfonts/lucida_sans_120.pngbin16596 -> 16295 bytes
-rwxr-xr-xfonts/lucida_sans_140.pngbin47080 -> 42429 bytes
-rwxr-xr-xfonts/lucida_sans_160.pngbin53771 -> 48106 bytes
-rwxr-xr-xfonts/lucida_sans_180.pngbin63899 -> 56766 bytes
-rwxr-xr-xfonts/lucida_sans_200.pngbin76914 -> 69059 bytes
-rwxr-xr-xfonts/lucida_sans_220.pngbin82941 -> 74427 bytes
-rwxr-xr-xfonts/lucida_sans_240.pngbin94928 -> 83532 bytes
-rwxr-xr-xfonts/lucida_sans_260.pngbin105072 -> 93958 bytes
-rwxr-xr-xfonts/lucida_sans_280.pngbin114619 -> 101952 bytes
-rwxr-xr-xfonts/lucida_sans_360.pngbin162310 -> 143453 bytes
-rwxr-xr-xfonts/lucida_sans_40.pngbin8487 -> 7642 bytes
-rwxr-xr-xfonts/lucida_sans_480.pngbin231593 -> 205578 bytes
-rwxr-xr-xfonts/lucida_sans_560.pngbin278999 -> 246505 bytes
-rwxr-xr-xfonts/lucida_sans_60.pngbin15405 -> 13992 bytes
-rwxr-xr-xfonts/lucida_sans_80.pngbin10040 -> 9740 bytes
-rwxr-xr-xfonts/lucida_sans_90.pngbin10974 -> 10704 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_100.pngbin61308 -> 56121 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_110.pngbin74668 -> 67613 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_120.pngbin80486 -> 73938 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_140.pngbin98222 -> 89073 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_160.pngbin111526 -> 101939 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_180.pngbin134816 -> 122274 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_200.pngbin152413 -> 138662 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_220.pngbin168185 -> 152844 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_240.pngbin187484 -> 170247 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_260.pngbin210322 -> 190156 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_280.pngbin223051 -> 200848 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_40.pngbin17182 -> 15668 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_60.pngbin31749 -> 29291 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_80.pngbin49875 -> 45552 bytes
-rwxr-xr-xfonts/mono_dejavu_sans_90.pngbin55338 -> 50995 bytes
-rw-r--r--games/minimal/mods/default/mapgen.lua2
-rw-r--r--minetest.conf.example2027
-rw-r--r--misc/minetest.appdata.xml5
-rw-r--r--misc/minetest.desktop2
-rw-r--r--misc/minetest.svg (renamed from misc/minetest-icon.svg)2
-rw-r--r--po/be/minetest.po3951
-rw-r--r--po/ca/minetest.po4214
-rw-r--r--po/cs/minetest.po4559
-rw-r--r--po/da/minetest.po4645
-rw-r--r--po/de/minetest.po5399
-rw-r--r--po/eo/minetest.po4229
-rw-r--r--po/es/minetest.po4577
-rw-r--r--po/et/minetest.po4569
-rw-r--r--po/fr/minetest.po5283
-rw-r--r--po/he/minetest.po4047
-rw-r--r--po/hu/minetest.po4937
-rw-r--r--po/id/minetest.po4687
-rw-r--r--po/it/minetest.po5157
-rw-r--r--po/ja/minetest.po4641
-rw-r--r--po/jbo/minetest.po4120
-rw-r--r--po/ko/minetest.po3956
-rw-r--r--po/ky/minetest.po4445
-rw-r--r--po/lt/minetest.po4397
-rw-r--r--po/minetest.pot3557
-rw-r--r--po/nb/minetest.po4047
-rw-r--r--po/nl/minetest.po5266
-rw-r--r--po/pl/minetest.po4689
-rw-r--r--po/pt/minetest.po4852
-rw-r--r--po/pt_BR/minetest.po5024
-rw-r--r--po/ro/minetest.po4540
-rw-r--r--po/ru/minetest.po4906
-rw-r--r--po/tr/minetest.po4537
-rw-r--r--po/uk/minetest.po4617
-rw-r--r--po/zh_CN/minetest.po4712
-rw-r--r--po/zh_TW/minetest.po4524
-rw-r--r--src/CMakeLists.txt63
-rw-r--r--src/ban.cpp22
-rw-r--r--src/ban.h8
-rw-r--r--src/camera.cpp211
-rw-r--r--src/camera.h46
-rw-r--r--src/cavegen.cpp19
-rw-r--r--src/cavegen.h6
-rw-r--r--src/cguittfont/CMakeLists.txt2
-rw-r--r--src/chat.cpp86
-rw-r--r--src/chat.h27
-rw-r--r--src/chat_interface.h82
-rw-r--r--src/client.cpp191
-rw-r--r--src/client.h33
-rw-r--r--src/client/clientlauncher.cpp49
-rw-r--r--src/client/clientlauncher.h4
-rw-r--r--src/client/inputhandler.h20
-rw-r--r--src/client/tile.cpp153
-rw-r--r--src/client/tile.h1
-rw-r--r--src/clientiface.cpp52
-rw-r--r--src/clientiface.h28
-rw-r--r--src/clientmap.cpp280
-rw-r--r--src/clientmap.h13
-rw-r--r--src/clientmedia.cpp2
-rw-r--r--src/clientobject.cpp2
-rw-r--r--src/clientobject.h2
-rw-r--r--src/clouds.cpp2
-rw-r--r--src/clouds.h6
-rw-r--r--src/cmake_config.h.in8
-rw-r--r--src/collision.cpp319
-rw-r--r--src/collision.h10
-rw-r--r--src/content_cao.cpp121
-rw-r--r--src/content_cao.h17
-rw-r--r--src/content_mapblock.cpp383
-rw-r--r--src/content_mapnode.cpp66
-rw-r--r--src/content_mapnode.h4
-rw-r--r--src/content_nodemeta.cpp14
-rw-r--r--src/content_nodemeta.h4
-rw-r--r--src/content_sao.cpp52
-rw-r--r--src/content_sao.h11
-rw-r--r--src/convert_json.cpp8
-rw-r--r--src/craftdef.cpp14
-rw-r--r--src/database-dummy.cpp1
-rw-r--r--src/database-leveldb.cpp4
-rw-r--r--src/database-redis.cpp37
-rw-r--r--src/database-sqlite3.cpp111
-rw-r--r--src/database-sqlite3.h4
-rw-r--r--src/debug.cpp170
-rw-r--r--src/debug.h57
-rw-r--r--src/defaultsettings.cpp48
-rw-r--r--src/drawscene.cpp192
-rw-r--r--src/drawscene.h8
-rw-r--r--src/dungeongen.cpp31
-rw-r--r--src/dungeongen.h1
-rw-r--r--src/emerge.cpp778
-rw-r--r--src/emerge.h123
-rw-r--r--src/environment.cpp644
-rw-r--r--src/environment.h161
-rw-r--r--src/event_manager.h8
-rw-r--r--src/exceptions.h6
-rw-r--r--src/filesys.cpp40
-rw-r--r--src/filesys.h4
-rw-r--r--src/fontengine.cpp2
-rw-r--r--src/game.cpp594
-rw-r--r--src/gamedef.h6
-rw-r--r--src/gameparams.h9
-rw-r--r--src/genericobject.cpp2
-rw-r--r--src/gettext.cpp133
-rw-r--r--src/gettext.h14
-rw-r--r--src/guiChatConsole.cpp171
-rw-r--r--src/guiChatConsole.h17
-rw-r--r--src/guiEngine.cpp12
-rw-r--r--src/guiFileSelectMenu.cpp1
-rw-r--r--src/guiFormSpecMenu.cpp262
-rw-r--r--src/guiFormSpecMenu.h87
-rw-r--r--src/guiKeyChangeMenu.cpp6
-rw-r--r--src/guiTable.cpp51
-rw-r--r--src/guiscalingfilter.cpp4
-rw-r--r--src/httpfetch.cpp81
-rw-r--r--src/httpfetch.h3
-rw-r--r--src/hud.cpp311
-rw-r--r--src/hud.h58
-rw-r--r--src/inventory.cpp24
-rw-r--r--src/inventorymanager.cpp10
-rw-r--r--src/irrlichttypes.h15
-rw-r--r--src/itemdef.cpp125
-rw-r--r--src/itemdef.h1
-rw-r--r--src/jthread/CMakeLists.txt14
-rw-r--r--src/jthread/LICENSE.MIT20
-rw-r--r--src/jthread/jevent.h59
-rw-r--r--src/jthread/jmutex.h79
-rw-r--r--src/jthread/jmutexautolock.h43
-rw-r--r--src/jthread/jthread.h117
-rw-r--r--src/jthread/pthread/jevent.cpp67
-rw-r--r--src/jthread/pthread/jmutex.cpp58
-rw-r--r--src/jthread/pthread/jsemaphore.cpp156
-rw-r--r--src/jthread/pthread/jthread.cpp168
-rw-r--r--src/jthread/win32/jevent.cpp43
-rw-r--r--src/jthread/win32/jmutex.cpp68
-rw-r--r--src/jthread/win32/jsemaphore.cpp104
-rwxr-xr-xsrc/jthread/win32/jthread.cpp146
-rw-r--r--src/localplayer.cpp63
-rw-r--r--src/localplayer.h5
-rw-r--r--src/log.cpp407
-rw-r--r--src/log.h216
-rw-r--r--src/luaentity_common.h30
-rw-r--r--src/main.cpp274
-rw-r--r--src/mainmenumanager.h21
-rw-r--r--src/map.cpp431
-rw-r--r--src/map.h10
-rw-r--r--src/mapblock.cpp140
-rw-r--r--src/mapblock.h14
-rw-r--r--src/mapblock_mesh.cpp272
-rw-r--r--src/mapblock_mesh.h32
-rw-r--r--src/mapgen.cpp132
-rw-r--r--src/mapgen.h37
-rw-r--r--src/mapgen_flat.cpp622
-rw-r--r--src/mapgen_flat.h124
-rw-r--r--src/mapgen_fractal.cpp746
-rw-r--r--src/mapgen_fractal.h134
-rw-r--r--src/mapgen_singlenode.cpp28
-rw-r--r--src/mapgen_singlenode.h5
-rw-r--r--src/mapgen_v5.cpp197
-rw-r--r--src/mapgen_v5.h13
-rw-r--r--src/mapgen_v6.cpp78
-rw-r--r--src/mapgen_v6.h19
-rw-r--r--src/mapgen_v7.cpp400
-rw-r--r--src/mapgen_v7.h18
-rw-r--r--src/mapgen_valleys.cpp1017
-rw-r--r--src/mapgen_valleys.h187
-rw-r--r--src/mapnode.cpp115
-rw-r--r--src/mapnode.h6
-rw-r--r--src/mapsector.cpp2
-rw-r--r--src/mesh.cpp347
-rw-r--r--src/mesh.h8
-rw-r--r--src/mg_biome.cpp4
-rw-r--r--src/mg_decoration.cpp48
-rw-r--r--src/mg_decoration.h11
-rw-r--r--src/mg_ore.cpp134
-rw-r--r--src/mg_ore.h33
-rw-r--r--src/mg_schematic.cpp82
-rw-r--r--src/mg_schematic.h5
-rw-r--r--src/minimap.cpp94
-rw-r--r--src/minimap.h23
-rw-r--r--src/modalMenu.h6
-rw-r--r--src/mods.cpp9
-rw-r--r--src/mods.h18
-rw-r--r--src/nameidmapping.cpp2
-rw-r--r--src/network/clientpackethandler.cpp31
-rw-r--r--src/network/connection.cpp145
-rw-r--r--src/network/connection.h62
-rw-r--r--src/network/networkpacket.cpp3
-rw-r--r--src/network/networkprotocol.h59
-rw-r--r--src/network/serverpackethandler.cpp181
-rw-r--r--src/nodedef.cpp240
-rw-r--r--src/nodedef.h74
-rw-r--r--src/nodemetadata.cpp31
-rw-r--r--src/nodemetadata.h6
-rw-r--r--src/nodetimer.cpp24
-rw-r--r--src/noise.cpp16
-rw-r--r--src/objdef.h4
-rw-r--r--src/object_properties.cpp22
-rw-r--r--src/object_properties.h9
-rw-r--r--src/particles.cpp182
-rw-r--r--src/particles.h10
-rw-r--r--src/pathfinder.cpp906
-rw-r--r--src/pathfinder.h298
-rw-r--r--src/player.cpp63
-rw-r--r--src/player.h18
-rw-r--r--src/porting.cpp257
-rw-r--r--src/porting.h170
-rw-r--r--src/porting_android.cpp114
-rw-r--r--src/porting_android.h6
-rw-r--r--src/profiler.h20
-rw-r--r--src/quicktune.cpp14
-rw-r--r--src/rollback.cpp10
-rw-r--r--src/rollback_interface.cpp2
-rw-r--r--src/script/common/c_content.cpp179
-rw-r--r--src/script/common/c_converter.cpp9
-rw-r--r--src/script/common/c_converter.h2
-rw-r--r--src/script/common/c_internal.cpp49
-rw-r--r--src/script/common/c_internal.h25
-rw-r--r--src/script/common/c_types.h4
-rw-r--r--src/script/cpp_api/s_async.cpp95
-rw-r--r--src/script/cpp_api/s_async.h30
-rw-r--r--src/script/cpp_api/s_base.cpp64
-rw-r--r--src/script/cpp_api/s_base.h20
-rw-r--r--src/script/cpp_api/s_entity.cpp31
-rw-r--r--src/script/cpp_api/s_env.cpp195
-rw-r--r--src/script/cpp_api/s_env.h20
-rw-r--r--src/script/cpp_api/s_internal.h42
-rw-r--r--src/script/cpp_api/s_inventory.cpp33
-rw-r--r--src/script/cpp_api/s_item.cpp56
-rw-r--r--src/script/cpp_api/s_item.h2
-rw-r--r--src/script/cpp_api/s_mainmenu.cpp10
-rw-r--r--src/script/cpp_api/s_node.cpp47
-rw-r--r--src/script/cpp_api/s_nodemeta.cpp33
-rw-r--r--src/script/cpp_api/s_player.cpp6
-rw-r--r--src/script/cpp_api/s_security.cpp13
-rw-r--r--src/script/cpp_api/s_security.h5
-rw-r--r--src/script/cpp_api/s_server.cpp12
-rw-r--r--src/script/lua_api/CMakeLists.txt1
-rw-r--r--src/script/lua_api/l_areastore.cpp72
-rw-r--r--src/script/lua_api/l_areastore.h18
-rw-r--r--src/script/lua_api/l_base.cpp4
-rw-r--r--src/script/lua_api/l_env.cpp166
-rw-r--r--src/script/lua_api/l_env.h50
-rw-r--r--src/script/lua_api/l_http.cpp193
-rw-r--r--src/script/lua_api/l_http.h (renamed from src/logoutputbuffer.h)58
-rw-r--r--src/script/lua_api/l_internal.h10
-rw-r--r--src/script/lua_api/l_inventory.cpp3
-rw-r--r--src/script/lua_api/l_item.cpp2
-rw-r--r--src/script/lua_api/l_mainmenu.cpp53
-rw-r--r--src/script/lua_api/l_mainmenu.h2
-rw-r--r--src/script/lua_api/l_mapgen.cpp181
-rw-r--r--src/script/lua_api/l_mapgen.h10
-rw-r--r--src/script/lua_api/l_nodemeta.cpp21
-rw-r--r--src/script/lua_api/l_nodetimer.cpp6
-rw-r--r--src/script/lua_api/l_noise.cpp126
-rw-r--r--src/script/lua_api/l_noise.h33
-rw-r--r--src/script/lua_api/l_object.cpp132
-rw-r--r--src/script/lua_api/l_particles.cpp6
-rw-r--r--src/script/lua_api/l_rollback.cpp4
-rw-r--r--src/script/lua_api/l_server.cpp25
-rw-r--r--src/script/lua_api/l_server.h3
-rw-r--r--src/script/lua_api/l_util.cpp140
-rw-r--r--src/script/lua_api/l_util.h9
-rw-r--r--src/script/lua_api/l_vmanip.cpp35
-rw-r--r--src/script/scripting_game.cpp3
-rw-r--r--src/script/scripting_mainmenu.cpp2
-rw-r--r--src/serialization.cpp4
-rw-r--r--src/serialization.h12
-rw-r--r--src/server.cpp578
-rw-r--r--src/server.h33
-rw-r--r--src/serverlist.cpp10
-rw-r--r--src/serverobject.cpp2
-rw-r--r--src/settings.cpp50
-rw-r--r--src/settings.h6
-rw-r--r--src/settings_translation_file.cpp620
-rw-r--r--src/shader.cpp65
-rw-r--r--src/shader.h3
-rw-r--r--src/sky.cpp9
-rw-r--r--src/sky.h5
-rw-r--r--src/socket.cpp16
-rw-r--r--src/socket.h6
-rw-r--r--src/sound_openal.cpp172
-rw-r--r--src/staticobject.cpp14
-rw-r--r--src/staticobject.h2
-rw-r--r--src/strfnd.h176
-rw-r--r--src/subgame.cpp52
-rw-r--r--src/terminal_chat_console.cpp453
-rw-r--r--src/terminal_chat_console.h131
-rw-r--r--src/threading/CMakeLists.txt7
-rw-r--r--src/threading/atomic.h139
-rw-r--r--src/threading/event.cpp89
-rw-r--r--src/threading/event.h72
-rw-r--r--src/threading/mutex.cpp108
-rw-r--r--src/threading/mutex.h81
-rw-r--r--src/threading/mutex_auto_lock.h60
-rw-r--r--src/threading/semaphore.cpp162
-rw-r--r--src/threading/semaphore.h (renamed from src/jthread/jsemaphore.h)51
-rw-r--r--src/threading/thread.cpp430
-rw-r--r--src/threading/thread.h183
-rw-r--r--src/threads.h69
-rw-r--r--src/tool.cpp10
-rw-r--r--src/touchscreengui.cpp631
-rw-r--r--src/touchscreengui.h116
-rw-r--r--src/unittest/CMakeLists.txt1
-rw-r--r--src/unittest/test.cpp18
-rw-r--r--src/unittest/test.h91
-rw-r--r--src/unittest/test_areastore.cpp69
-rw-r--r--src/unittest/test_collision.cpp32
-rw-r--r--src/unittest/test_serialization.cpp263
-rw-r--r--src/unittest/test_threading.cpp182
-rw-r--r--src/unittest/test_utilities.cpp35
-rw-r--r--src/util/CMakeLists.txt1
-rw-r--r--src/util/areastore.cpp (renamed from src/areastore.cpp)192
-rw-r--r--src/util/areastore.h (renamed from src/areastore.h)180
-rw-r--r--src/util/auth.cpp107
-rw-r--r--src/util/auth.h35
-rw-r--r--src/util/basic_macros.h53
-rw-r--r--src/util/container.h171
-rw-r--r--src/util/numeric.cpp11
-rw-r--r--src/util/numeric.h19
-rw-r--r--src/util/serialize.cpp73
-rw-r--r--src/util/serialize.h251
-rw-r--r--src/util/srp.cpp693
-rw-r--r--src/util/srp.h91
-rw-r--r--src/util/strfnd.h82
-rw-r--r--src/util/string.h81
-rw-r--r--src/util/thread.h64
-rw-r--r--src/wieldmesh.cpp116
-rw-r--r--src/wieldmesh.h8
-rw-r--r--textures/base/pack/camera_btn.pngbin789 -> 729 bytes
-rw-r--r--textures/base/pack/chat_btn.pngbin777 -> 399 bytes
-rw-r--r--textures/base/pack/debug_btn.pngbin960 -> 895 bytes
-rw-r--r--textures/base/pack/dirt_bg.pngbin1586 -> 0 bytes
-rw-r--r--textures/base/pack/down.pngbin1917 -> 1328 bytes
-rw-r--r--textures/base/pack/down_arrow.pngbin843 -> 373 bytes
-rw-r--r--textures/base/pack/drop_btn.pngbin561 -> 1035 bytes
-rw-r--r--textures/base/pack/fast_btn.pngbin935 -> 875 bytes
-rw-r--r--textures/base/pack/fly_btn.pngbin783 -> 720 bytes
-rw-r--r--textures/base/pack/gear_icon.pngbin0 -> 1005 bytes
-rw-r--r--textures/base/pack/halo.pngbin194 -> 144 bytes
-rw-r--r--textures/base/pack/inventory_btn.pngbin733 -> 343 bytes
-rw-r--r--textures/base/pack/jump_btn.pngbin621 -> 434 bytes
-rw-r--r--textures/base/pack/left_arrow.pngbin742 -> 400 bytes
-rw-r--r--textures/base/pack/logo.pngbin12190 -> 12188 bytes
-rw-r--r--textures/base/pack/menu_bg.pngbin0 -> 124 bytes
-rw-r--r--textures/base/pack/menu_header.pngbin133115 -> 1628 bytes
-rw-r--r--textures/base/pack/minimap_mask_round.pngbin4081 -> 1858 bytes
-rw-r--r--textures/base/pack/minimap_mask_square.pngbin1951 -> 420 bytes
-rw-r--r--textures/base/pack/minimap_overlay_round.pngbin20630 -> 22044 bytes
-rw-r--r--textures/base/pack/minimap_overlay_square.pngbin2889 -> 1686 bytes
-rw-r--r--textures/base/pack/no_screenshot.pngbin476 -> 140 bytes
-rw-r--r--textures/base/pack/noclip_btn.pngbin1151 -> 1087 bytes
-rw-r--r--textures/base/pack/object_marker_red.pngbin0 -> 449 bytes
-rw-r--r--textures/base/pack/player_marker.pngbin3885 -> 2178 bytes
-rw-r--r--textures/base/pack/rangeview_btn.pngbin1604 -> 1476 bytes
-rw-r--r--textures/base/pack/rare_controls.pngbin0 -> 349 bytes
-rw-r--r--textures/base/pack/right_arrow.pngbin770 -> 396 bytes
-rw-r--r--textures/base/pack/server_flags_damage.pngbin774 -> 713 bytes
-rw-r--r--textures/base/pack/server_flags_favorite.pngbin0 -> 916 bytes
-rw-r--r--textures/base/pack/server_flags_pvp.pngbin1056 -> 1048 bytes
-rw-r--r--textures/base/pack/smoke_puff.pngbin1334 -> 1233 bytes
-rw-r--r--textures/base/pack/sunrisebg.pngbin4587 -> 4231 bytes
-rw-r--r--textures/base/pack/unknown_item.pngbin294 -> 292 bytes
-rw-r--r--textures/base/pack/up_arrow.pngbin704 -> 373 bytes
-rwxr-xr-xutil/buildbot/buildwin32.sh26
-rwxr-xr-xutil/buildbot/buildwin64.sh22
-rwxr-xr-xutil/bump_version.sh8
-rwxr-xr-xutil/travis/before_install.sh42
-rwxr-xr-xutil/travis/script.sh20
-rwxr-xr-xutil/updatepo.sh3
494 files changed, 143086 insertions, 30940 deletions
diff --git a/.gitignore b/.gitignore
index 7b2b030af..f9c664da6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,29 +1,46 @@
-## Generic ignorable patterns and files
+## Editors and Development environments
*~
-.*.swp
-.*-swp
-*bak*
-tags
-*.vim
+*.swp
+*.bak*
*.orig
-*.rej
+# Vim
+*.vim
+# Kate
+.*.kate-swp
+.swp.*
+# KDevelop4
+.kdev4/
+*.kdev4
+# Eclipse (CDT and LDT)
+.project
+.cproject
+.settings/
+.buildpath
+.metadata
+# GNU Global
+tags
+!tags/
+gtags.files
## Files related to minetest development cycle
/*.patch
+# GNU Patch reject file
+*.rej
-## Non-static Minetest directories
+## Non-static Minetest directories or symlinks to these
/bin/
/games/*
!/games/minimal/
-/cache/
+/cache
/textures/*
!/textures/base/
-/sounds/
+/screenshots
+/sounds
/mods/*
!/mods/minetest/
/mods/minetest/*
!/mods/minetest/mods_here.txt
-/worlds/
+/worlds
/world/
## Configuration/log files
@@ -36,64 +53,34 @@ doc/html/
doc/doxygen_*
## Build files
-CMakeFiles/*
-src/CMakeFiles/*
-src/Makefile
-src/android_version_githash.h
+CMakeFiles
+Makefile
+!build/android/Makefile
+cmake_install.cmake
+CMakeCache.txt
+CPackConfig.cmake
+CPackSourceConfig.cmake
src/android_version.h
+src/android_version_githash.h
src/cmake_config.h
src/cmake_config_githash.h
-src/cmake_install.cmake
-src/script/CMakeFiles/*
-src/script/common/CMakeFiles/*
-src/script/cpp_api/CMakeFiles/*
-src/script/lua_api/CMakeFiles/*
-src/util/CMakeFiles/*
-src/unittest/CMakeFiles/*
-src/jthread/CMakeFiles/*
-src/jthread/Makefile
-src/jthread/cmake_config.h
-src/jthread/cmake_install.cmake
-src/jthread/libjthread.a
-src/json/libjson.a
src/lua/build/
-src/lua/CMakeFiles/
-src/cguittfont/CMakeFiles/
-src/cguittfont/libcguittfont.a
-src/cguittfont/cmake_install.cmake
-src/cguittfont/Makefile
-src/gmp/CMakeFiles/
-src/gmp/libgmp.a
-src/json/CMakeFiles/
-src/json/libjsoncpp.a
-src/sqlite/CMakeFiles/*
-src/sqlite/libsqlite3.a
-src/client/CMakeFiles/
-src/network/CMakeFiles/
-CMakeCache.txt
-CPackConfig.cmake
-CPackSourceConfig.cmake
-Makefile
-cmake_install.cmake
locale/
.directory
-.kdev4/
*.cbp
-*.kdev4
*.layout
*.o
+*.a
## Android build files
-build/android/assets
-build/android/bin
-build/android/Debug
+build/android/src/main/assets
+build/android/build
build/android/deps
-build/android/gen
-build/android/jni/src
build/android/libs
+build/android/jni/src
+build/android/src/main/jniLibs
build/android/obj
-build/android/path.cfg
-build/android/and_env
-build/android/AndroidManifest.xml
+build/android/local.properties
+build/android/.gradle
timestamp
diff --git a/.travis.yml b/.travis.yml
index d17af5463..9d1600818 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,12 +2,16 @@ language: cpp
compiler:
- gcc
- clang
+os:
+ - osx
+ - linux
env:
- PLATFORM=Win32
- PLATFORM=Win64
- - PLATFORM=Linux
+ - PLATFORM=Unix
before_install: ./util/travis/before_install.sh
script: ./util/travis/script.sh
+sudo: required
notifications:
email: false
matrix:
@@ -17,3 +21,9 @@ matrix:
compiler: clang
- env: PLATFORM=Win64
compiler: clang
+ - env: PLATFORM=Win32
+ os: osx
+ - env: PLATFORM=Win64
+ os: osx
+ - compiler: gcc
+ os: osx
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b9dfd8ace..998cdc9a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ set(PROJECT_NAME_CAPITALIZED "Minetest")
# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 0)
set(VERSION_MINOR 4)
-set(VERSION_PATCH 13)
+set(VERSION_PATCH 14)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Change to false for releases
@@ -113,6 +113,9 @@ endif()
set(CUSTOM_DOCDIR "" CACHE STRING "Directory to install documentation into")
if(NOT CUSTOM_DOCDIR STREQUAL "")
set(DOCDIR "${CUSTOM_DOCDIR}")
+ if(NOT RUN_IN_PLACE)
+ set(EXAMPLE_CONF_DIR ${DOCDIR})
+ endif()
message(STATUS "Using DOCDIR=${DOCDIR}")
endif()
@@ -149,16 +152,9 @@ endif()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/builtin" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client" DESTINATION "${SHAREDIR}")
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games")
-set(MINETEST_GAME_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game")
-if(EXISTS ${MINETEST_GAME_SOURCE} AND IS_DIRECTORY ${MINETEST_GAME_SOURCE})
- install(FILES ${MINETEST_GAME_SOURCE}/game.conf DESTINATION "${SHAREDIR}/games/minetest_game/")
- install(FILES ${MINETEST_GAME_SOURCE}/README.txt DESTINATION "${SHAREDIR}/games/minetest_game/")
- install(DIRECTORY ${MINETEST_GAME_SOURCE}/mods DESTINATION "${SHAREDIR}/games/minetest_game")
- install(DIRECTORY ${MINETEST_GAME_SOURCE}/menu DESTINATION "${SHAREDIR}/games/minetest_game")
-endif()
+install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games" DESTINATION "${SHAREDIR}" PATTERN ".git*" EXCLUDE)
+
if(BUILD_CLIENT)
- #install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/sounds/base/pack" DESTINATION "${SHAREDIR}/sounds/base")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base")
endif()
if(RUN_IN_PLACE)
@@ -171,14 +167,14 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}")
install(FILES "README.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/lua_api.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/menu_lua_api.txt" DESTINATION "${DOCDIR}")
-install(FILES "doc/mapformat.txt" DESTINATION "${DOCDIR}")
+install(FILES "doc/world_format.txt" DESTINATION "${DOCDIR}")
install(FILES "minetest.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}")
if(UNIX AND NOT APPLE)
install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6")
install(FILES "misc/minetest.desktop" DESTINATION "${XDG_APPS_DIR}")
install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}")
- install(FILES "misc/minetest-icon.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
+ install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
endif()
if(APPLE)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..986f60027
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,107 @@
+# Contributing
+
+Contributions are welcome! Here's how you can help:
+
+- [Contributing code](#code)
+- [Reporting issues](#issues)
+- [Requesting features](#feature-requests)
+- [Translating](#translations)
+- [Donating](#donations)
+
+## Code
+
+If you are planning to start some significant coding, you would benefit from asking first on [our IRC channel](http://www.minetest.net/irc/) before starting.
+
+1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and [clone](https://help.github.com/articles/cloning-a-repository/) your fork.
+
+2. Start coding!
+ - Refer to the [Lua API](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt), [Developer Wiki](http://dev.minetest.net/Main_Page) and other [documentation](https://github.com/minetest/minetest/tree/master/doc).
+ - Follow the [C/C++](http://dev.minetest.net/Code_style_guidelines) and [Lua](http://dev.minetest.net/Lua_code_style_guidelines) code style guidelines.
+ - Check your code works as expected and document any changes to the Lua API.
+
+3. Commit & [push](https://help.github.com/articles/pushing-to-a-remote/) your changes to a new branch (not `master`, one change per branch)
+ - Commit messages should:
+ - Use the present tense
+ - Have a title which begins with a capital letter
+ - Be descriptive. (e.g. no `Update init.lua` or `Fix a problem`)
+ - Have a first line with less than *80 characters* and have a second line that is *empty*
+ - Do **not** [sign your commits](https://git-scm.com/book/uz/v2/Git-Tools-Signing-Your-Work), as Minetest offers automatically built ppas over launchpad and it [would break](https://bugs.launchpad.net/bzr-git/+bug/1084403) if there were signed commits in master
+
+4. Once you are happy with your changes, submit a pull request.
+ - Open the [pull-request form](https://github.com/minetest/minetest/pull/new/master)
+ - Add a short description explaining briefly what you've done (or if it's a work-in-progress - what you need to do)
+
+##### A pull-request is considered merge-able when:
+
+1. It follows the [roadmap](https://forum.minetest.net/viewtopic.php?t=9177) in some way and fits the whole picture of the project.
+2. It works.
+3. It follows the code style for [C/C++](http://dev.minetest.net/Code_style_guidelines) or [Lua](http://dev.minetest.net/Lua_code_style_guidelines).
+4. The code's interfaces are well designed, regardless of other aspects that might need more work in the future.
+5. It uses protocols and formats which include the required compatibility.
+
+## Issues
+
+If you experience an issue, we would like to know the details - especially when a stable release is on the way.
+
+1. Do a quick search on GitHub to check if the issue has already been reported.
+2. Is it an issue with the Minetest *engine*? If not, report it [elsewhere](http://www.minetest.net/development/#reporting-issues).
+3. [Open an issue](https://github.com/minetest/minetest/issues/new) and describe the issue you are having - you could include:
+ - Error logs (check the bottom of the `debug.txt` file)
+ - Screenshots
+ - Ways you have tried to solve the issue, and whether they worked or not
+ - Your Minetest version and the content (subgames, mods or texture packs) you have installed
+ - Your platform (e.g. Windows 10 or Ubuntu 15.04 x64)
+
+After reporting you should aim to answer questions or clarifications as this helps pinpoint the cause of the issue (if you don't do this your issue may be closed after 1 month).
+
+## Feature requests
+
+Feature requests are welcome but take a moment to see if your idea follows the [roadmap](https://forum.minetest.net/viewtopic.php?t=9177) in some way and fits the whole picture of the project. You should provide a clear explanation with as much detail as possible.
+
+## Translations
+
+Translations of Minetest are performed using Weblate. You can access the project page with a list of current languages [here](https://hosted.weblate.org/projects/minetest/minetest/).
+
+### Donations
+
+If you'd like to monetarily support Minetest development, you can find donation methods on [our website](http://www.minetest.net/development/#donate).
+
+# Maintaining
+
+*This is a concise version of the [Rules & Guidelines](http://dev.minetest.net/Category:Rules_and_Guidelines) on the developer wiki.*
+
+These notes are for those who have push access Minetest (core developers / maintainers).
+
+- See the [project organisation](http://dev.minetest.net/Organisation) for the people involved.
+
+## Reviewing pull requests
+
+Pull requests should be reviewed and, if appropriate, checked if they achieve their intended purpose. You can show that you are in the process of, or will review the pull request by commenting *"Looks good"* or something similar.
+
+**If the pull-request is not [merge-able](#a-pull-request-is-considered-merge-able-when):**
+
+Submit a comment explaining to the author what they need to change to make the pull-request merge-able.
+
+- If the author comments or makes changes to the pull-request, it can be reviewed again.
+- If no response is made from the author within 1 month (when improvements are suggested or a question is asked), it can be closed.
+
+**If the pull-request is [merge-able](#a-pull-request-is-considered-merge-able-when):**
+
+Submit a :+1: (+1) or "Looks good" comment to show you believe the pull-request should be merged. "Looks good" comments often signify that the patch might require (more) testing.
+
+- Two core developers must agree to the merge before it is carried out and both should +1 the pull request.
+- Who intends to merge the pull-request should follow the commit rules:
+ - The title should follow the commit guidelines (title starts with a capital letter, present tense, descriptive).
+ - Don't modify history older than 10 minutes.
+ - Use rebase, not merge to get linear history:
+ - `curl https://github.com/minetest/minetest/pull/1.patch | git am`
+
+## Reviewing issues and feature requests
+
+- If an issue does not get a response from its author within 1 month (when requiring more details), it can be closed.
+- When an issue is a duplicate, refer to the first ones and close the later ones.
+- Tag issues with the appropriate [labels](https://github.com/minetest/minetest/labels) for devices, platforms etc.
+
+## Releasing a new version
+
+*Refer to [dev.minetest.net/Releasing_Minetest](http://dev.minetest.net/Releasing_Minetest)*
diff --git a/README.txt b/README.txt
index 06122dee1..9ca9b331e 100644
--- a/README.txt
+++ b/README.txt
@@ -105,11 +105,17 @@ Compiling on GNU/Linux:
Install dependencies. Here's an example for Debian/Ubuntu:
$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
+For Fedora users:
+$ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl* 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
+
You can install git for easily keeping your copy up to date.
If you dont want git, read below on how to get the source without git.
This is an example for installing git on Debian/Ubuntu:
$ sudo apt-get install git-core
+For Fedora users:
+$ sudo dnf install git-core
+
Download source (this is the URL to the latest of source repository, which might not work at all times) using git:
$ git clone --depth 1 https://github.com/minetest/minetest.git
$ cd minetest
@@ -159,6 +165,7 @@ CMAKE_BUILD_TYPE - Type of build (Release vs. Debug)
RelWithDebInfo - Release build with Debug information
MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible
ENABLE_CURL - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
+ENABLE_CURSES - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
ENABLE_FREETYPE - Build with FreeType2; Allows using TTF fonts
ENABLE_GETTEXT - Build with Gettext; Allows using translations
ENABLE_GLES - Search for Open GLES headers & libraries and use them
@@ -375,13 +382,13 @@ Authors of media files
Everything not listed in here:
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
-BlockMen:
- textures/base/pack/menuheader.png
+Paramat:
+ textures/base/pack/menu_header.png
erlehmann:
misc/minetest-icon-24x24.png
misc/minetest-icon.ico
- misc/minetest-icon.svg
+ misc/minetest.svg
textures/base/pack/logo.png
License of Minetest source code
diff --git a/build/android/AndroidManifest.xml.template b/build/android/AndroidManifest.xml.template
deleted file mode 100644
index 0f75ca648..000000000
--- a/build/android/AndroidManifest.xml.template
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="net.minetest.minetest"
- android:versionCode="###ANDROID_VERSION###"
- android:versionName="###BASE_VERSION###.###ANDROID_VERSION###"
- android:installLocation="auto">
- <uses-sdk android:minSdkVersion="9"/>
- <uses-feature android:glEsVersion="0x00010000" android:required="true"/>
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- ###DEBUG_BUILD###
- <application android:icon="@drawable/irr_icon" android:label="Minetest" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" ###DEBUG_FLAG###>
- <activity android:name=".MtNativeActivity"
- android:label="Minetest"
- android:launchMode="singleTask"
- android:configChanges="orientation|keyboard|keyboardHidden|navigation"
- android:screenOrientation="sensorLandscape"
- android:clearTaskOnLaunch="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <meta-data android:name="android.app.lib_name" android:value="minetest" />
- </activity>
- <activity android:name=".MinetestTextEntry"
- android:theme="@style/Theme.Transparent"
- android:excludeFromRecents="true">
- </activity>
- <activity android:name=".MinetestAssetCopy"
- android:theme="@style/Theme.Transparent"
- android:excludeFromRecents="true">
- </activity>
- </application>
-</manifest>
diff --git a/build/android/Makefile b/build/android/Makefile
index 6d3791550..4ac9760f8 100644
--- a/build/android/Makefile
+++ b/build/android/Makefile
@@ -8,53 +8,33 @@ OS := $(shell uname)
# build for build platform
APP_PLATFORM = android-9
-# paths used for timestaps, dependencys, tree config and libs
-PATHCFGFILE = path.cfg
-
-ROOT = $(shell pwd)
+ANDR_ROOT = $(shell pwd)
+PROJ_ROOT = $(shell realpath $(ANDR_ROOT)/../..)
+APP_ROOT = $(ANDR_ROOT)/src/main
GAMES_TO_COPY = minetest_game
+MODS_TO_COPY =
-VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+VERSION_MAJOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
-VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+VERSION_MINOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ')
-VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+VERSION_PATCH := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ')
################################################################################
-# Android Version code
-# Increase for each build!
-################################################################################
-# Play Store actual version (16/03/15): 11
-ANDROID_VERSION_CODE = 13
-
-################################################################################
-# toolchain config for arm old processors
-################################################################################
-#TARGET_HOST = arm-linux
-#TARGET_ABI = armeabi
-#TARGET_LIBDIR = armeabi
-#TARGET_TOOLCHAIN = arm-linux-androideabi-
-#TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfp
-#TARGET_ARCH = arm
-#CROSS_PREFIX = arm-linux-androideabi-
-#COMPILER_VERSION = 4.8
-#HAVE_LEVELDB = 1
-
-################################################################################
# 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
+TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 -O3
TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
TARGET_ARCH = armv7
CROSS_PREFIX = arm-linux-androideabi-
-COMPILER_VERSION = 4.8
+COMPILER_VERSION = 4.9
HAVE_LEVELDB = 1
################################################################################
@@ -66,7 +46,7 @@ HAVE_LEVELDB = 1
#TARGET_TOOLCHAIN = mipsel-linux-android-
#TARGET_ARCH = mips32
#CROSS_PREFIX = mipsel-linux-android-
-#COMPILER_VERSION = 4.8
+#COMPILER_VERSION = 4.9
#HAVE_LEVELDB = 0
################################################################################
@@ -78,76 +58,80 @@ HAVE_LEVELDB = 1
#TARGET_TOOLCHAIN = x86-
#CROSS_PREFIX = i686-linux-android-
#TARGET_ARCH = x86
-#COMPILER_VERSION = 4.8
+#COMPILER_VERSION = 4.9
#HAVE_LEVELDB = 1
################################################################################
ASSETS_TIMESTAMP = deps/assets_timestamp
-LEVELDB_DIR = $(ROOT)/deps/leveldb/
+LEVELDB_DIR = $(ANDR_ROOT)/deps/leveldb/
LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
-LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp
-LEVELDB_URL_GIT = https://code.google.com/p/leveldb/
+LEVELDB_TIMESTAMP_INT = $(ANDR_ROOT)/deps/leveldb_timestamp
+LEVELDB_URL_GIT = https://github.com/google/leveldb
+LEVELDB_COMMIT = 2d0320a458d0e6a20fff46d5f80b18bfdcce7018
-OPENAL_DIR = $(ROOT)/deps/openal-soft/
+OPENAL_DIR = $(ANDR_ROOT)/deps/openal-soft/
OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
-OPENAL_TIMESTAMP_INT = $(ROOT)/deps/openal_timestamp
+OPENAL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openal_timestamp
OPENAL_URL_GIT = https://github.com/apportable/openal-soft
-OGG_DIR = $(ROOT)/deps/libvorbis-libogg-android/
+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 = $(ROOT)/deps/ogg_timestamp
+OGG_TIMESTAMP_INT = $(ANDR_ROOT)/deps/ogg_timestamp
OGG_URL_GIT = https://github.com/vincentjames501/libvorbis-libogg-android
-IRRLICHT_DIR = $(ROOT)/deps/irrlicht/
+IRRLICHT_REVISION = 5122
+IRRLICHT_DIR = $(ANDR_ROOT)/deps/irrlicht/
IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
-IRRLICHT_TIMESTAMP_INT = $(ROOT)/deps/irrlicht_timestamp
-IRRLICHT_URL_SVN = http://svn.code.sf.net/p/irrlicht/code/branches/ogl-es/
+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.1l
+OPENSSL_VERSION = 1.0.2h
OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
-OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/
+OPENSSL_DIR = $(ANDR_ROOT)/deps/$(OPENSSL_BASEDIR)/
OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0
OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
-OPENSSL_TIMESTAMP_INT = $(ROOT)/deps/openssl_timestamp
-OPENSSL_URL = http://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
+OPENSSL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openssl_timestamp
+OPENSSL_URL = https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
-CURL_VERSION = 7.41.0
-CURL_DIR = $(ROOT)/deps/curl-$(CURL_VERSION)
+CURL_VERSION = 7.48.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 = $(ROOT)/deps/curl_timestamp
-CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
+CURL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/curl_timestamp
+CURL_URL_HTTP = https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
-GMP_VERSION = 6.0.0
-GMP_DIR = $(ROOT)/deps/gmp-$(GMP_VERSION)
+GMP_VERSION = 6.1.0
+GMP_DIR = $(ANDR_ROOT)/deps/gmp-$(GMP_VERSION)
GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.so
GMP_TIMESTAMP = $(GMP_DIR)/timestamp
-GMP_TIMESTAMP_INT = $(ROOT)/deps/gmp_timestamp
+GMP_TIMESTAMP_INT = $(ANDR_ROOT)/deps/gmp_timestamp
GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2
-FREETYPE_DIR = $(ROOT)/deps/freetype2-android/
+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 = $(ROOT)/deps/freetype_timestamp
+FREETYPE_TIMESTAMP_INT = $(ANDR_ROOT)/deps/freetype_timestamp
FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
ICONV_VERSION = 1.14
-ICONV_DIR = $(ROOT)/deps/libiconv/
+ICONV_DIR = $(ANDR_ROOT)/deps/libiconv/
ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
-ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp
-ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
+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-3080704
-SQLITE3_URL = http://www.sqlite.org/2014/$(SQLITE3_FOLDER).zip
+SQLITE3_FOLDER = sqlite-amalgamation-3120200
+SQLITE3_URL = https://www.sqlite.org/2016/$(SQLITE3_FOLDER).zip
--include $(PATHCFGFILE)
+ANDROID_SDK = $(shell grep '^sdk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
+ANDROID_NDK = $(shell grep '^ndk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
+NDK_MODULE_PATH = $(ANDROID_NDK)/toolchains
#use interim target variable to switch leveldb on or off
ifeq ($(HAVE_LEVELDB),1)
@@ -161,54 +145,50 @@ endif
freetype_download clean_freetype freetype \
apk clean_apk \
clean_all clean prep_srcdir \
- install_debug install envpaths all \
- manifest clean_manifest\
+ install_debug install_release envpaths all \
$(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
- $(OPENSSL_TIMESTAMP) curl_binary \
- $(ROOT)/jni/src/android_version.h \
- $(ROOT)/jni/src/android_version_githash.h
+ $(OPENSSL_TIMESTAMP) \
+ $(ANDR_ROOT)/jni/src/android_version.h \
+ $(ANDR_ROOT)/jni/src/android_version_githash.h
-debug : $(PATHCFGFILE)
+debug : local.properties
export NDEBUG=; \
export BUILD_TYPE=debug; \
$(MAKE) apk
all : debug release
-release : $(PATHCFGFILE)
+release : local.properties
@export NDEBUG=1; \
export BUILD_TYPE=release; \
$(MAKE) apk
reconfig: delconfig
- @$(MAKE) $(PATHCFGFILE)
+ @$(MAKE) local.properties
-delconfig :
- $(RM) ${PATHCFGFILE}
+delconfig:
+ $(RM) local.properties
-$(PATHCFGFILE) :
+local.properties:
@echo "Please specify path of ANDROID NDK"; \
- echo "e.g. /home/user/android-ndk-r9c/"; \
+ echo "e.g. $$HOME/Android/ndk-r11c/"; \
read ANDROID_NDK ; \
if [ ! -d $$ANDROID_NDK ] ; then \
echo "$$ANDROID_NDK is not a valid folder"; \
exit 1; \
fi; \
- echo "ANDROID_NDK = $$ANDROID_NDK" > ${PATHCFGFILE}; \
- echo "NDK_MODULE_PATH = $$ANDROID_NDK/toolchains" >> ${PATHCFGFILE}; \
- echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
- echo "+ Note: NDK_MODULE_PATH is set to $$ANDROID_NDK/toolchains"; \
- echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
+ echo "ndk.dir = $$ANDROID_NDK" > local.properties; \
echo "Please specify path of ANDROID SDK"; \
- echo "e.g. /home/user/adt-bundle-linux-x86_64-20131030/sdk/"; \
+ echo "e.g. $$HOME/Android/sdk/"; \
read SDKFLDR ; \
if [ ! -d $$SDKFLDR ] ; then \
echo "$$SDKFLDR is not a valid folder"; \
exit 1; \
fi; \
- echo "SDKFOLDER = $$SDKFLDR" >> ${PATHCFGFILE};
+ 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" "); \
@@ -219,15 +199,15 @@ $(OPENAL_TIMESTAMP) : openal_download
openal_download :
@if [ ! -d ${OPENAL_DIR} ] ; then \
echo "openal sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd ${ROOT}/deps ; \
+ 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; \
+ + @REFRESH=0; \
if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
@@ -235,14 +215,14 @@ $(OPENAL_LIB): $(OPENAL_TIMESTAMP)
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for openal detected building..."; \
cd ${OPENAL_DIR}; \
- ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- APP_ABI=${TARGET_ABI} TARGET_ARCH_ABI=${TARGET_ABI} \
- APP_PLATFORM=${APP_PLATFORM} TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
- TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
- TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
+ ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
+ NDK_MODULE_PATH=${NDK_MODULE_PATH} APP_ABI=${TARGET_ABI} \
+ TARGET_ARCH_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
+ TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
+ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OPENAL_TIMESTAMP}; \
touch ${OPENAL_TIMESTAMP_INT}; \
else \
@@ -261,18 +241,18 @@ $(OGG_TIMESTAMP) : ogg_download
ogg_download :
@if [ ! -d ${OGG_DIR} ] ; then \
echo "ogg sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd ${ROOT}/deps ; \
+ mkdir -p ${ANDR_ROOT}/deps; \
+ cd ${ANDR_ROOT}/deps ; \
git clone ${OGG_URL_GIT}|| exit 1; \
cd libvorbis-libogg-android ; \
- patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \
+ patch -p1 < ${ANDR_ROOT}/patches/libvorbis-libogg-fpu.patch || exit 1; \
sed -i 's-:-?-' jni/Application.mk; \
fi
ogg : $(OGG_LIB)
$(OGG_LIB): $(OGG_TIMESTAMP)
- @REFRESH=0; \
+ + @REFRESH=0; \
if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
REFRESH=1; \
@@ -281,14 +261,14 @@ $(OGG_LIB): $(OGG_TIMESTAMP)
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for ogg detected building..."; \
cd ${OGG_DIR}; \
- ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
- TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
- TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
- TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
+ ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
+ NDK_MODULE_PATH=${NDK_MODULE_PATH} \
+ APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
+ TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
+ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OGG_TIMESTAMP}; \
touch ${OGG_TIMESTAMP_INT}; \
else \
@@ -307,17 +287,17 @@ $(OPENSSL_TIMESTAMP) : openssl_download
openssl_download :
@if [ ! -d ${OPENSSL_DIR} ] ; then \
echo "openssl sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd ${ROOT}/deps ; \
+ 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 < ../../openssl_arch.patch; \
+ patch -p1 < ${ANDR_ROOT}/patches/openssl_arch.patch; \
fi
openssl : $(OPENSSL_LIB)
-$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
+$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) $(GMP_LIB)
@REFRESH=0; \
if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
@@ -332,10 +312,11 @@ $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
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} \
- --install-dir=$${TOOLCHAIN}; \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
- CC=${CROSS_PREFIX}gcc ./Configure android-${TARGET_ARCH} no-idea no-seed -no-sha0 -DL_ENDIAN;\
+ CC=${CROSS_PREFIX}gcc ./Configure enable-gmp -DL_ENDIAN -I${GMP_DIR} -L${GMP_DIR}/usr/lib android-${TARGET_ARCH};\
+ CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend; \
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
touch ${OPENSSL_TIMESTAMP}; \
touch ${OPENSSL_TIMESTAMP_INT}; \
@@ -346,8 +327,8 @@ $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
clean_openssl :
$(RM) -rf ${OPENSSL_DIR}; \
- $(RM) -rf $(ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz; \
- $(RM) -rf $(ROOT)/deps/openssl
+ $(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" "); \
@@ -358,9 +339,11 @@ $(LEVELDB_TIMESTAMP) : leveldb_download
leveldb_download :
@if [ ! -d ${LEVELDB_DIR} ] ; then \
echo "leveldb sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd ${ROOT}/deps ; \
+ 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)
@@ -374,22 +357,21 @@ $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
- export PATH=$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for leveldb detected building..."; \
cd deps/leveldb; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-leveldb; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --install-dir=$${TOOLCHAIN}; \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
- export CPPFLAGS="$${CPPFLAGS} ${TARGET_CFLAGS_ADDON}"; \
+ export CPPFLAGS="$${CPPFLAGS} ${TARGET_CXXFLAGS_ADDON}"; \
export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
- $(MAKE) -s || exit 1; \
+ $(MAKE) || exit 1; \
touch ${LEVELDB_TIMESTAMP}; \
touch ${LEVELDB_TIMESTAMP_INT}; \
$(RM) -rf $${TOOLCHAIN}; \
@@ -409,7 +391,7 @@ $(FREETYPE_TIMESTAMP) : freetype_download
freetype_download :
@if [ ! -d ${FREETYPE_DIR} ] ; then \
echo "freetype sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
+ mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
git clone ${FREETYPE_URL_GIT} || exit 1; \
fi
@@ -417,7 +399,7 @@ freetype_download :
freetype : $(FREETYPE_LIB)
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
- @REFRESH=0; \
+ + @REFRESH=0; \
if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
@@ -429,14 +411,14 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${FREETYPE_DIR}; \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for freetype detected building..."; \
cd ${FREETYPE_DIR}/Android/jni; \
- ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \
- TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
- TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
- TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
+ ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
+ NDK_MODULE_PATH=${NDK_MODULE_PATH} \
+ APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \
+ TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
+ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${FREETYPE_TIMESTAMP}; \
touch ${FREETYPE_TIMESTAMP_INT}; \
else \
@@ -455,15 +437,15 @@ $(ICONV_TIMESTAMP) : iconv_download
iconv_download :
@if [ ! -d ${ICONV_DIR} ] ; then \
echo "iconv sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd ${ROOT}/deps; \
+ 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; \
cd ${ICONV_DIR}; \
- patch -p1 < ${ROOT}/libiconv_android.patch; \
- patch -p1 < ${ROOT}/libiconv_stdio.patch; \
+ patch -p1 < ${ANDR_ROOT}/patches/libiconv_android.patch; \
+ patch -p1 < ${ANDR_ROOT}/patches/libiconv_stdio.patch; \
fi
iconv : $(ICONV_LIB)
@@ -481,14 +463,13 @@ $(ICONV_LIB) : $(ICONV_TIMESTAMP)
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${ICONV_DIR}; \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for iconv detected building..."; \
cd ${ICONV_DIR}; \
\
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --install-dir=$${TOOLCHAIN}; \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
@@ -515,13 +496,13 @@ clean_iconv :
irrlicht_download :
@if [ ! -d "deps/irrlicht" ] ; then \
echo "irrlicht sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
+ mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \
cd irrlicht; \
- patch -p1 < ../../irrlicht-touchcount.patch || exit 1; \
- patch -p1 < ../../irrlicht-back_button.patch || exit 1; \
- patch -p1 < ../../irrlicht-texturehack.patch || exit 1; \
+ 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; \
fi
$(IRRLICHT_TIMESTAMP) : irrlicht_download
@@ -533,7 +514,7 @@ $(IRRLICHT_TIMESTAMP) : irrlicht_download
irrlicht : $(IRRLICHT_LIB)
$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
- @REFRESH=0; \
+ + @REFRESH=0; \
if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
@@ -545,14 +526,14 @@ $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${IRRLICHT_DIR}; \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for irrlicht detected building..."; \
cd deps/irrlicht/source/Irrlicht/Android; \
- ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
- TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
- TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
- TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
+ ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
+ NDK_MODULE_PATH=${NDK_MODULE_PATH} \
+ APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
+ TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
+ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${IRRLICHT_TIMESTAMP}; \
touch ${IRRLICHT_TIMESTAMP_INT}; \
else \
@@ -571,7 +552,7 @@ $(CURL_TIMESTAMP) : curl_download
curl_download :
@if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then \
echo "curl sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
+ mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
wget ${CURL_URL_HTTP} || exit 1; \
tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1; \
@@ -594,20 +575,18 @@ $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${CURL_DIR}; \
- export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \
echo "changed timestamp for curl detected building..."; \
cd deps/curl-${CURL_VERSION}; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --install-dir=$${TOOLCHAIN}; \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
- export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include \
- -L${OPENSSL_DIR} ${TARGET_CFLAGS_ADDON}"; \
+ 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; \
@@ -623,18 +602,6 @@ clean_curl :
$(RM) -rf deps/curl-${CURL_VERSION} \
$(RM) -f deps/curl
-
-curl_binary:
- @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
- echo "curl binary missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
- cd deps; \
- wget http://curl.haxx.se/gknw.net/7.34.0/dist-android/curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
- tar -xzf curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
- mv curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android curl-${CURL_VERSION_BINARY};\
- rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \
- fi
-
$(GMP_TIMESTAMP) : gmp_download
@LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
@@ -644,7 +611,7 @@ $(GMP_TIMESTAMP) : gmp_download
gmp_download :
@if [ ! -d "${GMP_DIR}" ] ; then \
echo "gmp sources missing, downloading..."; \
- mkdir -p ${ROOT}/deps; \
+ mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
wget ${GMP_URL_HTTP} || exit 1; \
tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1; \
@@ -667,14 +634,13 @@ $(GMP_LIB): $(GMP_TIMESTAMP)
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${GMP_DIR}; \
- export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \
echo "changed timestamp for gmp detected building..."; \
cd deps/gmp-${GMP_VERSION}; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --install-dir=$${TOOLCHAIN}; \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
@@ -706,11 +672,11 @@ clean_sqlite3:
$(RM) -f sqlite
$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
- @mkdir -p ${ROOT}/deps; \
+ @mkdir -p ${ANDR_ROOT}/deps; \
for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \
- LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
+ 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 ${ROOT}/../../${DIRNAME}/timestamp; \
+ touch ${PROJ_ROOT}/${DIRNAME}/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
echo ${DIRNAME} changed $$LAST_MODIF; \
fi; \
@@ -720,11 +686,11 @@ $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
touch ${IRRLICHT_DIR}/media/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
- if [ ${ROOT}/../../minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
+ if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
echo "conf changed"; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
- if [ ${ROOT}/../../README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \
+ if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \
touch ${ASSETS_TIMESTAMP}; \
fi; \
if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \
@@ -739,30 +705,34 @@ assets : $(ASSETS_TIMESTAMP)
if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then \
REFRESH=1; \
fi; \
- if [ ! -d ${ROOT}/assets ] ; then \
+ if [ ! -d ${APP_ROOT}/assets ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "assets changed, refreshing..."; \
$(MAKE) clean_assets; \
- mkdir -p ${ROOT}/assets/Minetest; \
- cp ${ROOT}/../../minetest.conf.example ${ROOT}/assets/Minetest; \
- cp ${ROOT}/../../README.txt ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../builtin ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../client ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \
- mkdir ${ROOT}/assets/Minetest/games; \
- for game in ${GAMES_TO_COPY}; \
- do \
- cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \
+ mkdir -p ${APP_ROOT}/assets/Minetest; \
+ cp ${PROJ_ROOT}/minetest.conf.example ${APP_ROOT}/assets/Minetest; \
+ cp ${PROJ_ROOT}/README.txt ${APP_ROOT}/assets/Minetest; \
+ cp -r ${PROJ_ROOT}/builtin ${APP_ROOT}/assets/Minetest; \
+ mkdir -p ${APP_ROOT}/assets/Minetest/client; \
+ cp -r ${PROJ_ROOT}/client/shaders ${APP_ROOT}/assets/Minetest/client; \
+ cp ${PROJ_ROOT}/doc/lgpl-2.1.txt ${APP_ROOT}/assets/Minetest/LICENSE.txt; \
+ mkdir -p ${APP_ROOT}/assets/Minetest/fonts; \
+ cp -r ${PROJ_ROOT}/fonts/*.ttf ${APP_ROOT}/assets/Minetest/fonts/; \
+ mkdir -p ${APP_ROOT}/assets/Minetest/games; \
+ for game in ${GAMES_TO_COPY}; do \
+ cp -r ${PROJ_ROOT}/games/$$game ${APP_ROOT}/assets/Minetest/games/; \
done; \
- cp -r ${ROOT}/../../mods ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \
- cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \
- mkdir -p ${ROOT}/assets/Minetest/media; \
- cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/Minetest/media; \
- cd ${ROOT}/assets || exit 1; \
+ mkdir -p ${APP_ROOT}/assets/Minetest/mods; \
+ for mod in ${MODS_TO_COPY}; do \
+ cp -r ${PROJ_ROOT}/mods/$$mod ${APP_ROOT}/assets/Minetest/mods/; \
+ done; \
+ cp -r ${PROJ_ROOT}/po ${APP_ROOT}/assets/Minetest; \
+ cp -r ${PROJ_ROOT}/textures ${APP_ROOT}/assets/Minetest; \
+ mkdir -p ${APP_ROOT}/assets/Minetest/media; \
+ 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 {} \; ; \
@@ -770,8 +740,8 @@ assets : $(ASSETS_TIMESTAMP)
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 Minetest >"filelist.txt"; \
- cp ${ROOT}/${ASSETS_TIMESTAMP} ${ROOT}/${ASSETS_TIMESTAMP}.old; \
+ find -L Minetest > filelist.txt; \
+ cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old; \
else \
echo "nothing to be done for assets"; \
fi
@@ -779,56 +749,50 @@ assets : $(ASSETS_TIMESTAMP)
clean_assets :
@$(RM) -r assets
-apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \
- $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \
- $(ROOT)/jni/src/android_version_githash.h sqlite3_download
- @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \
- export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
- export ANDROID_HOME=${SDKFOLDER}; \
- mkdir -p ${ROOT}/src; \
- ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB} \
- APP_PLATFORM=${APP_PLATFORM} \
- TARGET_LIBDIR=${TARGET_LIBDIR} \
- TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
- TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
- TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \
- ant $$BUILD_TYPE && \
- echo "++ Success!" && \
- echo "APK: bin/Minetest-$$BUILD_TYPE.apk" && \
- echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`"
+apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_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
+ @${ANDROID_NDK}/ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH} \
+ GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB} \
+ APP_PLATFORM=${APP_PLATFORM} \
+ TARGET_LIBDIR=${TARGET_LIBDIR} \
+ TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
+ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || 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&/') && \
+ gradle assemble$$BUILD_TYPE_C && \
+ echo "APK stored at: build/outputs/apk/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/Minetest-debug.apk
+
+install_release:
+ ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-release.apk
prep_srcdir :
- @if [ ! -e ${ROOT}/jni/src ]; then \
- ln -s ${ROOT}/../../src ${ROOT}/jni/src; \
+ @if [ ! -e ${ANDR_ROOT}/jni/src ]; then \
+ ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src; \
fi
-clean_apk : manifest
- @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
- export ANDROID_HOME=${SDKFOLDER}; \
- ant clean
-
-install_debug :
- @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
- adb install -r ${ROOT}/bin/Minetest-debug.apk
-
-install :
- @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
- adb install -r ${ROOT}/bin/Minetest-release.apk
-
-envpaths :
- @echo "export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}" > and_env;\
- echo "export ANDROID_HOME=${SDKFOLDER}" >> and_env;
+clean_apk :
+ gradle clean
clean_all :
@$(MAKE) clean_apk; \
- $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \
- clean_openal clean_ogg clean_gmp clean_manifest; \
+ $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl \
+ clean_openssl clean_openal clean_ogg clean_gmp; \
sleep 1; \
$(RM) -r gen libs obj deps bin Debug and_env
-$(ROOT)/jni/src/android_version_githash.h : prep_srcdir
- @export VERSION_FILE=${ROOT}/jni/src/android_version_githash.h; \
+$(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"; \
@@ -846,8 +810,8 @@ $(ROOT)/jni/src/android_version_githash.h : prep_srcdir
fi
-$(ROOT)/jni/src/android_version.h : prep_srcdir
- @export VERSION_FILE=${ROOT}/jni/src/android_version.h; \
+$(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"; \
@@ -855,8 +819,8 @@ $(ROOT)/jni/src/android_version.h : prep_srcdir
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 "#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 \
@@ -866,22 +830,5 @@ $(ROOT)/jni/src/android_version.h : prep_srcdir
rm "$${VERSION_FILE_NEW}"; \
fi
-manifest :
- @BASE_VERSION="${VERS_MAJOR}.${VERS_MINOR}.${VERS_PATCH}"; \
- if [ "${NDEBUG}x" != "x" ] ; then \
- DBG=''; \
- DBG_FLAG="android:debuggable=\"false\""; \
- else \
- DBG="<uses-permission android:name=\"android.permission.SET_DEBUG_APP\" />"; \
- DBG_FLAG="android:debuggable=\"true\""; \
- fi; \
- cat ${ROOT}/AndroidManifest.xml.template | \
- sed "s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g" | \
- sed "s/###BASE_VERSION###/$$BASE_VERSION/g" | \
- sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \
- sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml
-
-clean_manifest :
- rm -rf ${ROOT}/AndroidManifest.xml
-
clean : clean_apk clean_assets
+
diff --git a/build/android/build.gradle b/build/android/build.gradle
new file mode 100644
index 000000000..391e250ad
--- /dev/null
+++ b/build/android/build.gradle
@@ -0,0 +1,49 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath "com.android.tools.build:gradle:1.5.0"
+ }
+}
+
+apply plugin: "com.android.application"
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "23.0.3"
+
+ defaultConfig {
+ versionCode 14
+ versionName "${System.env.VERSION_STR}.${versionCode}"
+ minSdkVersion 9
+ targetSdkVersion 9
+ applicationId "net.minetest.minetest"
+ manifestPlaceholders = [ package: "net.minetest.minetest", project: project.name ]
+ }
+
+ 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
+ }
+ }
+ }
+}
+
diff --git a/build/android/build.xml b/build/android/build.xml
deleted file mode 100644
index 50a3e95ac..000000000
--- a/build/android/build.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="Minetest" default="help">
- <property file="local.properties" />
- <property file="ant.properties" />
- <property environment="env" />
- <condition property="sdk.dir" value="${env.ANDROID_HOME}">
- <isset property="env.ANDROID_HOME" />
- </condition>
- <loadproperties srcFile="project.properties" />
- <fail
- message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
- unless="sdk.dir"
- />
- <import file="custom_rules.xml" optional="true" />
- <import file="${sdk.dir}/tools/ant/build.xml" />
-</project>
diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk
index 61ba1d0f0..e8534eaac 100644
--- a/build/android/jni/Android.mk
+++ b/build/android/jni/Android.mk
@@ -69,18 +69,18 @@ GPROF_DEF=-DGPROF
endif
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ \
- -DHAVE_TOUCHSCREENGUI \
- -DUSE_CURL=1 \
- -DUSE_SOUND=1 \
- -DUSE_FREETYPE=1 \
- -DUSE_LEVELDB=$(HAVE_LEVELDB) \
- $(GPROF_DEF) \
- -pipe -fstrict-aliasing
+ -DHAVE_TOUCHSCREENGUI \
+ -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 += -fexpensive-optimizations -O3
+LOCAL_CFLAGS += -O3
endif
ifdef GPROF
@@ -95,8 +95,8 @@ ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS += -fno-stack-protector
endif
-LOCAL_C_INCLUDES := \
- jni/src jni/src/sqlite \
+LOCAL_C_INCLUDES := \
+ jni/src \
jni/src/script \
jni/src/lua/src \
jni/src/json \
@@ -111,8 +111,7 @@ LOCAL_C_INCLUDES := \
deps/leveldb/include \
deps/sqlite/
-LOCAL_SRC_FILES := \
- jni/src/areastore.cpp \
+LOCAL_SRC_FILES := \
jni/src/ban.cpp \
jni/src/camera.cpp \
jni/src/cavegen.cpp \
@@ -173,10 +172,13 @@ LOCAL_SRC_FILES := \
jni/src/mapblock.cpp \
jni/src/mapblock_mesh.cpp \
jni/src/mapgen.cpp \
+ jni/src/mapgen_flat.cpp \
+ jni/src/mapgen_fractal.cpp \
jni/src/mapgen_singlenode.cpp \
jni/src/mapgen_v5.cpp \
jni/src/mapgen_v6.cpp \
jni/src/mapgen_v7.cpp \
+ jni/src/mapgen_valleys.cpp \
jni/src/mapnode.cpp \
jni/src/mapsector.cpp \
jni/src/mesh.cpp \
@@ -218,6 +220,7 @@ LOCAL_SRC_FILES := \
jni/src/version.cpp \
jni/src/voxel.cpp \
jni/src/voxelalgorithms.cpp \
+ jni/src/util/areastore.cpp \
jni/src/util/auth.cpp \
jni/src/util/base64.cpp \
jni/src/util/directiontables.cpp \
@@ -258,7 +261,7 @@ LOCAL_SRC_FILES := \
# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c
# Network
-LOCAL_SRC_FILES += \
+LOCAL_SRC_FILES += \
jni/src/network/connection.cpp \
jni/src/network/networkpacket.cpp \
jni/src/network/clientopcodes.cpp \
@@ -267,7 +270,7 @@ LOCAL_SRC_FILES += \
jni/src/network/serverpackethandler.cpp \
# lua api
-LOCAL_SRC_FILES += \
+LOCAL_SRC_FILES += \
jni/src/script/common/c_content.cpp \
jni/src/script/common/c_converter.cpp \
jni/src/script/common/c_internal.cpp \
@@ -300,17 +303,17 @@ LOCAL_SRC_FILES += \
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_http.cpp \
jni/src/script/lua_api/l_util.cpp \
jni/src/script/lua_api/l_vmanip.cpp \
jni/src/script/scripting_game.cpp \
jni/src/script/scripting_mainmenu.cpp
#freetype2 support
-LOCAL_SRC_FILES += \
- jni/src/cguittfont/xCGUITTFont.cpp
+LOCAL_SRC_FILES += jni/src/cguittfont/xCGUITTFont.cpp
-# lua
-LOCAL_SRC_FILES += \
+# Lua
+LOCAL_SRC_FILES += \
jni/src/lua/src/lapi.c \
jni/src/lua/src/lauxlib.c \
jni/src/lua/src/lbaselib.c \
@@ -342,17 +345,17 @@ LOCAL_SRC_FILES += \
jni/src/lua/src/lzio.c \
jni/src/lua/src/print.c
-# sqlite
+# SQLite3
LOCAL_SRC_FILES += deps/sqlite/sqlite3.c
-# jthread
-LOCAL_SRC_FILES += \
- jni/src/jthread/pthread/jevent.cpp \
- jni/src/jthread/pthread/jmutex.cpp \
- jni/src/jthread/pthread/jsemaphore.cpp \
- jni/src/jthread/pthread/jthread.cpp
+# Threading
+LOCAL_SRC_FILES += \
+ jni/src/threading/event.cpp \
+ jni/src/threading/mutex.cpp \
+ jni/src/threading/semaphore.cpp \
+ jni/src/threading/thread.cpp
-# json
+# JSONCPP
LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp
LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp
@@ -370,3 +373,4 @@ 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
index b7ffc56a1..53467059a 100644
--- a/build/android/jni/Application.mk
+++ b/build/android/jni/Application.mk
@@ -1,4 +1,4 @@
-# NDK_TOOLCHAIN_VERSION := clang3.3
+# NDK_TOOLCHAIN_VERSION := clang3.8
APP_PLATFORM := android-9
APP_MODULES := minetest
@@ -6,3 +6,4 @@ APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions
APP_GNUSTL_FORCE_CPP_FEATURES := rtti
+
diff --git a/build/android/irrlicht-back_button.patch b/build/android/patches/irrlicht-back_button.patch
index 227749ba7..e17b81347 100644
--- a/build/android/irrlicht-back_button.patch
+++ b/build/android/patches/irrlicht-back_button.patch
@@ -1,14 +1,15 @@
---- irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 20:56:21.289559503 +0200
-+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp.orig 2014-06-03 20:57:39.281556749 +0200
-@@ -423,6 +423,7 @@
+--- 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 = 1;
+
+- device->postEventFromUser(event);
++ status = device->postEventFromUser(event);
}
break;
default:
-@@ -479,7 +480,7 @@
+@@ -543,7 +543,7 @@
KeyMap[1] = KEY_LBUTTON; // AKEYCODE_SOFT_LEFT
KeyMap[2] = KEY_RBUTTON; // AKEYCODE_SOFT_RIGHT
KeyMap[3] = KEY_HOME; // AKEYCODE_HOME
diff --git a/build/android/irrlicht-texturehack.patch b/build/android/patches/irrlicht-texturehack.patch
index a458ede72..a458ede72 100644
--- a/build/android/irrlicht-texturehack.patch
+++ b/build/android/patches/irrlicht-texturehack.patch
diff --git a/build/android/irrlicht-touchcount.patch b/build/android/patches/irrlicht-touchcount.patch
index d4e4b9c3e..d4e4b9c3e 100644
--- a/build/android/irrlicht-touchcount.patch
+++ b/build/android/patches/irrlicht-touchcount.patch
diff --git a/build/android/libiconv_android.patch b/build/android/patches/libiconv_android.patch
index 4eca0a4ef..4eca0a4ef 100644
--- a/build/android/libiconv_android.patch
+++ b/build/android/patches/libiconv_android.patch
diff --git a/build/android/libiconv_stdio.patch b/build/android/patches/libiconv_stdio.patch
index 9fa50f79a..9fa50f79a 100644
--- a/build/android/libiconv_stdio.patch
+++ b/build/android/patches/libiconv_stdio.patch
diff --git a/build/android/libvorbis-libogg-fpu.patch b/build/android/patches/libvorbis-libogg-fpu.patch
index 52ab397ac..52ab397ac 100644
--- a/build/android/libvorbis-libogg-fpu.patch
+++ b/build/android/patches/libvorbis-libogg-fpu.patch
diff --git a/build/android/openssl_arch.patch b/build/android/patches/openssl_arch.patch
index d9ebbd59c..d15e2b137 100644
--- a/build/android/openssl_arch.patch
+++ b/build/android/patches/openssl_arch.patch
@@ -1,11 +1,13 @@
---- openssl-1.0.1j/Configure.orig 2014-10-15 14:53:39.000000000 +0200
-+++ openssl-1.0.1j/Configure 2015-01-03 22:41:43.505749921 +0100
-@@ -407,6 +407,8 @@
+--- 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-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-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-mips32","gcc:-march=mips32 -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:${mips32_asm}:o32: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:-DTERMIOS -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)",
+ "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/project.properties b/build/android/project.properties
deleted file mode 100644
index cc2a7c5cf..000000000
--- a/build/android/project.properties
+++ /dev/null
@@ -1 +0,0 @@
-target=android-10
diff --git a/build/android/settings.gradle b/build/android/settings.gradle
new file mode 100644
index 000000000..a6e60c439
--- /dev/null
+++ b/build/android/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = "Minetest"
+
diff --git a/build/android/src/debug/AndroidManifest.xml b/build/android/src/debug/AndroidManifest.xml
new file mode 100644
index 000000000..a3815b9f8
--- /dev/null
+++ b/build/android/src/debug/AndroidManifest.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+ <uses-permission android:name="android.permission.SET_DEBUG_APP" />
+</manifest>
diff --git a/build/android/src/main/AndroidManifest.xml b/build/android/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..df218fb33
--- /dev/null
+++ b/build/android/src/main/AndroidManifest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ 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.READ_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <application android:icon="@drawable/irr_icon"
+ android:label="${project}"
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:allowBackup="true">
+ <activity android:name=".MtNativeActivity"
+ android:label="${project}"
+ android:launchMode="singleTask"
+ android:configChanges="orientation|keyboard|keyboardHidden|navigation"
+ android:screenOrientation="sensorLandscape"
+ android:clearTaskOnLaunch="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ <meta-data android:name="android.app.lib_name" android:value="minetest" />
+ </activity>
+ <activity android:name=".MinetestTextEntry"
+ android:theme="@style/Theme.Transparent"
+ android:excludeFromRecents="true">
+ </activity>
+ <activity android:name=".MinetestAssetCopy"
+ android:theme="@style/Theme.Transparent"
+ android:excludeFromRecents="true">
+ </activity>
+ </application>
+</manifest>
diff --git a/build/android/src/net/minetest/minetest/MinetestAssetCopy.java b/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
index 5776e77b5..eb92acb63 100644
--- a/build/android/src/net/minetest/minetest/MinetestAssetCopy.java
+++ b/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
@@ -254,54 +254,14 @@ public class MinetestAssetCopy extends Activity
boolean shortened = false;
String todisplay = m_tocopy.get(progress[0]);
m_ProgressBar.setProgress(progress[0]);
-
- // make sure our text doesn't exceed our layout width
- Rect bounds = new Rect();
- Paint textPaint = m_Filename.getPaint();
- textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
-
- while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
- if (todisplay.length() < 2) {
- break;
- }
- todisplay = todisplay.substring(1);
- textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
- shortened = true;
- }
-
- if (! shortened) {
- m_Filename.setText(todisplay);
- }
- else {
- m_Filename.setText(".." + todisplay);
- }
+ m_Filename.setText(todisplay);
}
else
{
boolean shortened = false;
String todisplay = m_Foldername;
String full_text = "scanning " + todisplay + " ...";
- // make sure our text doesn't exceed our layout width
- Rect bounds = new Rect();
- Paint textPaint = m_Filename.getPaint();
- textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
-
- while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
- if (todisplay.length() < 2) {
- break;
- }
- todisplay = todisplay.substring(1);
- full_text = "scanning " + todisplay + " ...";
- textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
- shortened = true;
- }
-
- if (! shortened) {
- m_Filename.setText(full_text);
- }
- else {
- m_Filename.setText("scanning .." + todisplay + " ...");
- }
+ m_Filename.setText(full_text);
}
}
diff --git a/build/android/src/net/minetest/minetest/MinetestTextEntry.java b/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
index 68dc73274..68dc73274 100644
--- a/build/android/src/net/minetest/minetest/MinetestTextEntry.java
+++ b/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
diff --git a/build/android/src/net/minetest/minetest/MtNativeActivity.java b/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
index 5c1f44d17..3173a71f4 100644
--- a/build/android/src/net/minetest/minetest/MtNativeActivity.java
+++ b/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
@@ -12,7 +12,7 @@ public class MtNativeActivity extends NativeActivity {
super.onCreate(savedInstanceState);
m_MessagReturnCode = -1;
m_MessageReturnValue = "";
-
+
}
@Override
@@ -20,15 +20,19 @@ public class MtNativeActivity extends NativeActivity {
super.onDestroy();
}
-
+ @Override
+ public void onBackPressed() {
+ }
+
+
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);
@@ -40,37 +44,37 @@ public class MtNativeActivity extends NativeActivity {
m_MessageReturnValue = "";
m_MessagReturnCode = -1;
}
-
+
public static native void putMessageBoxResult(String text);
-
+
/* 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");
+ String text = data.getStringExtra("text");
m_MessagReturnCode = 0;
m_MessageReturnValue = text;
}
@@ -79,7 +83,7 @@ public class MtNativeActivity extends NativeActivity {
}
}
}
-
+
static {
System.loadLibrary("openal");
System.loadLibrary("ogg");
@@ -87,13 +91,14 @@ public class MtNativeActivity extends NativeActivity {
System.loadLibrary("ssl");
System.loadLibrary("crypto");
System.loadLibrary("gmp");
+ System.loadLibrary("iconv");
// We don't have to load libminetest.so ourselves,
// but if we do, we get nicer logcat errors when
// loading fails.
System.loadLibrary("minetest");
}
-
+
private int m_MessagReturnCode;
private String m_MessageReturnValue;
}
diff --git a/build/android/res/drawable-hdpi/irr_icon.png b/build/android/src/main/res/drawable-hdpi/irr_icon.png
index 0b6861a0d..0b6861a0d 100644
--- a/build/android/res/drawable-hdpi/irr_icon.png
+++ b/build/android/src/main/res/drawable-hdpi/irr_icon.png
Binary files differ
diff --git a/build/android/res/drawable-ldpi/irr_icon.png b/build/android/src/main/res/drawable-ldpi/irr_icon.png
index b8c5d0177..b8c5d0177 100644
--- a/build/android/res/drawable-ldpi/irr_icon.png
+++ b/build/android/src/main/res/drawable-ldpi/irr_icon.png
Binary files differ
diff --git a/build/android/res/drawable-mdpi/irr_icon.png b/build/android/src/main/res/drawable-mdpi/irr_icon.png
index 951a7f8c1..951a7f8c1 100644
--- a/build/android/res/drawable-mdpi/irr_icon.png
+++ b/build/android/src/main/res/drawable-mdpi/irr_icon.png
Binary files differ
diff --git a/build/android/res/drawable-xhdpi/irr_icon.png b/build/android/src/main/res/drawable-xhdpi/irr_icon.png
index 2ec528ef7..2ec528ef7 100644
--- a/build/android/res/drawable-xhdpi/irr_icon.png
+++ b/build/android/src/main/res/drawable-xhdpi/irr_icon.png
Binary files differ
diff --git a/build/android/res/layout/assetcopy.xml b/build/android/src/main/res/layout/assetcopy.xml
index ade4b0c98..1fcfffd65 100644
--- a/build/android/res/layout/assetcopy.xml
+++ b/build/android/src/main/res/layout/assetcopy.xml
@@ -13,10 +13,12 @@
<TextView
android:id="@+id/textView1"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:ellipsize="middle"
+ android:singleLine="true"
android:layout_gravity="center_horizontal"
- android:text="preparing media ..."
+ android:text="@string/preparing_media"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
diff --git a/build/android/src/main/res/values/strings.xml b/build/android/src/main/res/values/strings.xml
new file mode 100644
index 000000000..b407a77c6
--- /dev/null
+++ b/build/android/src/main/res/values/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="preparing_media">Preparing media...</string>
+</resources>
+
diff --git a/build/android/res/values/styles.xml b/build/android/src/main/res/values/styles.xml
index 25b8df5a3..25b8df5a3 100644
--- a/build/android/res/values/styles.xml
+++ b/build/android/src/main/res/values/styles.xml
diff --git a/builtin/common/filterlist.lua b/builtin/common/filterlist.lua
index 210681133..2a62362e3 100644
--- a/builtin/common/filterlist.lua
+++ b/builtin/common/filterlist.lua
@@ -189,7 +189,7 @@ function filterlist.process(self)
for k,v in pairs(self.m_raw_list) do
if self.m_filtercriteria == nil or
self.m_filter_fct(v,self.m_filtercriteria) then
- table.insert(self.m_processed_list,v)
+ self.m_processed_list[#self.m_processed_list + 1] = v
end
end
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index bf672e6da..e4653d41d 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -2,7 +2,6 @@
--------------------------------------------------------------------------------
-- Localize functions to avoid table lookups (better performance).
-local table_insert = table.insert
local string_sub, string_find = string.sub, string.find
--------------------------------------------------------------------------------
@@ -94,13 +93,13 @@ function dump2(o, name, dumped)
-- the form _G["table: 0xFFFFFFF"]
keyStr = string.format("_G[%q]", tostring(k))
-- Dump key table
- table_insert(t, dump2(k, keyStr, dumped))
+ t[#t + 1] = dump2(k, keyStr, dumped)
end
else
keyStr = basic_dump(k)
end
local vname = string.format("%s[%s]", name, keyStr)
- table_insert(t, dump2(v, vname, dumped))
+ t[#t + 1] = dump2(v, vname, dumped)
end
return string.format("%s = {}\n%s", name, table.concat(t))
end
@@ -135,7 +134,7 @@ function dump(o, indent, nested, level)
local t = {}
local dumped_indexes = {}
for i, v in ipairs(o) do
- table_insert(t, dump(v, indent, nested, level + 1))
+ t[#t + 1] = dump(v, indent, nested, level + 1)
dumped_indexes[i] = true
end
for k, v in pairs(o) do
@@ -144,7 +143,7 @@ function dump(o, indent, nested, level)
k = "["..dump(k, indent, nested, level + 1).."]"
end
v = dump(v, indent, nested, level + 1)
- table_insert(t, k.." = "..v)
+ t[#t + 1] = k.." = "..v
end
end
nested[o] = nil
@@ -177,7 +176,7 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
local s = string_sub(str, pos, np - 1)
if include_empty or (s ~= "") then
max_splits = max_splits - 1
- table_insert(items, s)
+ items[#items + 1] = s
end
pos = npe + 1
until (max_splits == 0) or (pos > (len + 1))
@@ -186,8 +185,8 @@ end
--------------------------------------------------------------------------------
function table.indexof(list, val)
- for i = 1, #list do
- if list[i] == val then
+ for i, v in ipairs(list) do
+ if v == val then
return i
end
end
@@ -324,7 +323,7 @@ function core.splittext(text,charlimit)
local last_line = ""
while start ~= nil do
if string.len(last_line) + (stop-start) > charlimit then
- table_insert(retval, last_line)
+ retval[#retval + 1] = last_line
last_line = ""
end
@@ -335,7 +334,7 @@ function core.splittext(text,charlimit)
last_line = last_line .. string_sub(text, current_idx, stop - 1)
if gotnewline then
- table_insert(retval, last_line)
+ retval[#retval + 1] = last_line
last_line = ""
gotnewline = false
end
@@ -353,11 +352,11 @@ function core.splittext(text,charlimit)
--add last part of text
if string.len(last_line) + (string.len(text) - current_idx) > charlimit then
- table_insert(retval, last_line)
- table_insert(retval, string_sub(text, current_idx))
+ retval[#retval + 1] = last_line
+ retval[#retval + 1] = string_sub(text, current_idx)
else
last_line = last_line .. " " .. string_sub(text, current_idx)
- table_insert(retval, last_line)
+ retval[#retval + 1] = last_line
end
return retval
@@ -430,14 +429,14 @@ if INIT == "game" then
if iswall then
core.set_node(pos, {name = wield_name,
- param2 = dirs1[fdir+1]})
+ param2 = dirs1[fdir + 1]})
elseif isceiling then
if orient_flags.force_facedir then
core.set_node(pos, {name = wield_name,
param2 = 20})
else
core.set_node(pos, {name = wield_name,
- param2 = dirs2[fdir+1]})
+ param2 = dirs2[fdir + 1]})
end
else -- place right side up
if orient_flags.force_facedir then
@@ -555,6 +554,36 @@ assert(core.string_to_pos("( 10.0, 5, -2)").z == -2)
assert(core.string_to_pos("asd, 5, -2)") == nil)
--------------------------------------------------------------------------------
+function core.string_to_area(value)
+ local p1, p2 = unpack(value:split(") ("))
+ if p1 == nil or p2 == nil then
+ return nil
+ end
+
+ p1 = core.string_to_pos(p1 .. ")")
+ p2 = core.string_to_pos("(" .. p2)
+ if p1 == nil or p2 == nil then
+ return nil
+ end
+
+ return p1, p2
+end
+
+local function test_string_to_area()
+ local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)")
+ assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2)
+ assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53)
+
+ p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53")
+ assert(p1 == nil and p2 == nil)
+
+ p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53")
+ assert(p1 == nil and p2 == nil)
+end
+
+test_string_to_area()
+
+--------------------------------------------------------------------------------
function table.copy(t, seen)
local n = {}
seen = seen or {}
diff --git a/builtin/common/serialize.lua b/builtin/common/serialize.lua
index 90b8b2ad6..b2165648e 100644
--- a/builtin/common/serialize.lua
+++ b/builtin/common/serialize.lua
@@ -104,7 +104,7 @@ function core.serialize(x)
local i = local_index
local_index = local_index + 1
var = "_["..i.."]"
- table.insert(local_defs, var.." = "..val)
+ local_defs[#local_defs + 1] = var.." = "..val
dumped[x] = var
return var
end
@@ -135,16 +135,15 @@ function core.serialize(x)
local np = nest_points[x]
for i, v in ipairs(x) do
if not np or not np[i] then
- table.insert(vals, dump_or_ref_val(v))
+ vals[#vals + 1] = dump_or_ref_val(v)
end
idx_dumped[i] = true
end
for k, v in pairs(x) do
if (not np or not np[k]) and
not idx_dumped[k] then
- table.insert(vals,
- "["..dump_or_ref_val(k).."] = "
- ..dump_or_ref_val(v))
+ vals[#vals + 1] = "["..dump_or_ref_val(k).."] = "
+ ..dump_or_ref_val(v)
end
end
return "{"..table.concat(vals, ", ").."}"
@@ -156,9 +155,9 @@ function core.serialize(x)
local function dump_nest_points()
for parent, vals in pairs(nest_points) do
for k, v in pairs(vals) do
- table.insert(local_defs, dump_or_ref_val(parent)
+ local_defs[#local_defs + 1] = dump_or_ref_val(parent)
.."["..dump_or_ref_val(k).."] = "
- ..dump_or_ref_val(v))
+ ..dump_or_ref_val(v)
end
end
end
diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua
index c7b86461f..05ceadf7a 100644
--- a/builtin/common/strict.lua
+++ b/builtin/common/strict.lua
@@ -9,11 +9,6 @@ function core.global_exists(name)
end
-local function warn(message)
- print(os.date("%H:%M:%S: WARNING: ")..message)
-end
-
-
local meta = {}
local declared = {}
-- Key is source file, line, and variable name; seperated by NULs
@@ -27,7 +22,7 @@ function meta:__newindex(name, value)
info.currentline, name)
if not warned[warn_key] and info.what ~= "main" and
info.what ~= "C" then
- warn(("Assignment to undeclared "..
+ core.log("warning", ("Assignment to undeclared "..
"global %q inside a function at %s.")
:format(name, desc))
warned[warn_key] = true
@@ -35,9 +30,8 @@ function meta:__newindex(name, value)
declared[name] = true
end
-- Ignore mod namespaces
- if WARN_INIT and (not core.get_current_modname or
- name ~= core.get_current_modname()) then
- warn(("Global variable %q created at %s.")
+ if WARN_INIT and name ~= core.get_current_modname() then
+ core.log("warning", ("Global variable %q created at %s.")
:format(name, desc))
end
rawset(self, name, value)
@@ -48,7 +42,7 @@ function meta:__index(name)
local info = debug.getinfo(2, "Sl")
local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
if not declared[name] and not warned[warn_key] and info.what ~= "C" then
- warn(("Undeclared global variable %q accessed at %s:%s")
+ core.log("warning", ("Undeclared global variable %q accessed at %s:%s")
:format(name, info.short_src, info.currentline))
warned[warn_key] = true
end
diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua
index 9a9ec999b..465588324 100644
--- a/builtin/fstk/buttonbar.lua
+++ b/builtin/fstk/buttonbar.lua
@@ -1,18 +1,18 @@
--Minetest
--Copyright (C) 2014 sapier
--
---self program is free software; you can redistribute it and/or modify
+--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
---self program is distributed in the hope that it will be useful,
+--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
---with self program; if not, write to the Free Software Foundation, Inc.,
+--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@@ -24,11 +24,11 @@ local function buttonbar_formspec(self)
local formspec = string.format("box[%f,%f;%f,%f;%s]",
self.pos.x,self.pos.y ,self.size.x,self.size.y,self.bgcolor)
-
+
for i=self.startbutton,#self.buttons,1 do
local btn_name = self.buttons[i].name
local btn_pos = {}
-
+
if self.orientation == "horizontal" then
btn_pos.x = self.pos.x + --base pos
(i - self.startbutton) * self.btn_size + --button offset
@@ -36,7 +36,7 @@ local function buttonbar_formspec(self)
else
btn_pos.x = self.pos.x + (self.btn_size * 0.05)
end
-
+
if self.orientation == "vertical" then
btn_pos.y = self.pos.y + --base pos
(i - self.startbutton) * self.btn_size + --button offset
@@ -44,18 +44,18 @@ local function buttonbar_formspec(self)
else
btn_pos.y = self.pos.y + (self.btn_size * 0.05)
end
-
+
if (self.orientation == "vertical" and
(btn_pos.y + self.btn_size <= self.pos.y + self.size.y)) or
(self.orientation == "horizontal" and
(btn_pos.x + self.btn_size <= self.pos.x + self.size.x)) then
-
+
local borders="true"
-
+
if self.buttons[i].image ~= nil then
borders="false"
end
-
+
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;%s]tooltip[%s;%s]",
btn_pos.x, btn_pos.y, self.btn_size, self.btn_size,
@@ -75,7 +75,7 @@ local function buttonbar_formspec(self)
btn_dec_pos.y = self.pos.y + (self.btn_size * 0.05)
local btn_inc_pos = {}
local btn_size = {}
-
+
if self.orientation == "horizontal" then
btn_size.x = 0.5
btn_size.y = self.btn_size
@@ -87,25 +87,25 @@ local function buttonbar_formspec(self)
btn_inc_pos.x = self.pos.x + (self.btn_size * 0.05)
btn_inc_pos.y = self.pos.y + self.size.y - 0.5
end
-
+
local text_dec = "<"
local text_inc = ">"
if self.orientation == "vertical" then
text_dec = "^"
text_inc = "v"
end
-
+
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;;btnbar_dec_%s;%s;true;true]",
btn_dec_pos.x, btn_dec_pos.y, btn_size.x, btn_size.y,
self.name, text_dec)
-
+
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;;btnbar_inc_%s;%s;true;true]",
btn_inc_pos.x, btn_inc_pos.y, btn_size.x, btn_size.y,
self.name, text_inc)
end
-
+
return formspec
end
@@ -113,16 +113,16 @@ local function buttonbar_buttonhandler(self, fields)
if fields["btnbar_inc_" .. self.name] ~= nil and
self.startbutton < #self.buttons then
-
+
self.startbutton = self.startbutton + 1
return true
end
-
+
if fields["btnbar_dec_" .. self.name] ~= nil and self.startbutton > 1 then
self.startbutton = self.startbutton - 1
return true
end
-
+
for i=1,#self.buttons,1 do
if fields[self.buttons[i].name] ~= nil then
return self.userbuttonhandler(fields)
@@ -134,35 +134,40 @@ local buttonbar_metatable = {
handle_buttons = buttonbar_buttonhandler,
handle_events = function(self, event) end,
get_formspec = buttonbar_formspec,
-
+
hide = function(self) self.hidden = true end,
show = function(self) self.hidden = false end,
delete = function(self) ui.delete(self) end,
-
+
add_button = function(self, name, caption, image, tooltip)
if caption == nil then caption = "" end
if image == nil then image = "" end
if tooltip == nil then tooltip = "" end
-
- table.insert(self.buttons,{ name=name, caption=caption, image=image, tooltip=tooltip})
+
+ self.buttons[#self.buttons + 1] = {
+ name = name,
+ caption = caption,
+ image = image,
+ tooltip = tooltip
+ }
if self.orientation == "horizontal" then
if ( (self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2)
> self.size.x ) then
-
+
self.btn_initial_offset = self.btn_size * 0.05 + 0.5
self.have_move_buttons = true
end
else
if ((self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2)
> self.size.y ) then
-
+
self.btn_initial_offset = self.btn_size * 0.05 + 0.5
self.have_move_buttons = true
end
end
end,
-
+
set_bgparams = function(self, bgcolor)
if (type(bgcolor) == "string") then
self.bgcolor = bgcolor
@@ -189,20 +194,20 @@ function buttonbar_create(name, cbf_buttonhandler, pos, orientation, size)
self.startbutton = 1
self.have_move_buttons = false
self.hidden = false
-
+
if self.orientation == "horizontal" then
self.btn_size = self.size.y
else
self.btn_size = self.size.x
end
-
+
if (self.btn_initial_offset == nil) then
self.btn_initial_offset = self.btn_size * 0.05
end
self.userbuttonhandler = cbf_buttonhandler
self.buttons = {}
-
+
setmetatable(self,buttonbar_metatable)
ui.add(self)
diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua
index 214b0388f..df887f413 100644
--- a/builtin/fstk/dialog.lua
+++ b/builtin/fstk/dialog.lua
@@ -1,18 +1,18 @@
--Minetest
--Copyright (C) 2014 sapier
--
---self program is free software; you can redistribute it and/or modify
+--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
---self program is distributed in the hope that it will be useful,
+--this program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
---with self program; if not, write to the Free Software Foundation, Inc.,
+--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function dialog_event_handler(self,event)
@@ -61,7 +61,7 @@ function dialog_create(name,get_formspec,buttonhandler,eventhandler)
self.formspec = get_formspec
self.buttonhandler = buttonhandler
self.user_eventhandler = eventhandler
-
+
setmetatable(self,dialog_metatable)
ui.add(self)
diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua
index 47603fb1b..72551afd7 100644
--- a/builtin/fstk/tabview.lua
+++ b/builtin/fstk/tabview.lua
@@ -1,18 +1,18 @@
--Minetest
--Copyright (C) 2014 sapier
--
---self program is free software; you can redistribute it and/or modify
+--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
---self program is distributed in the hope that it will be useful,
+--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
---with self program; if not, write to the Free Software Foundation, Inc.,
+--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@@ -46,7 +46,7 @@ local function add_tab(self,tab)
tabdata = {},
}
- table.insert(self.tablist,newtab)
+ self.tablist[#self.tablist + 1] = newtab
if self.last_tab_index == #self.tablist then
self.current_tab = tab.name
@@ -61,7 +61,7 @@ local function get_formspec(self)
local formspec = ""
if not self.hidden and (self.parent == nil or not self.parent.hidden) then
-
+
if self.parent == nil then
local tsize = self.tablist[self.last_tab_index].tabsize or
{width=self.width, height=self.height}
@@ -87,11 +87,11 @@ local function handle_buttons(self,fields)
if self.hidden then
return false
end
-
+
if self:handle_tab_buttons(fields) then
return true
end
-
+
if self.glb_btn_handler ~= nil and
self.glb_btn_handler(self,fields) then
return true
@@ -112,16 +112,16 @@ end
--------------------------------------------------------------------------------
local function handle_events(self,event)
-
+
if self.hidden then
return false
end
-
+
if self.glb_evt_handler ~= nil and
self.glb_evt_handler(self,event) then
return true
end
-
+
if self.tablist[self.last_tab_index].evt_handler ~= nil then
return
self.tablist[self.last_tab_index].evt_handler(
@@ -131,7 +131,7 @@ local function handle_events(self,event)
self.tablist[self.last_tab_index].tabdata
)
end
-
+
return false
end
@@ -160,16 +160,16 @@ local function switch_to_tab(self, index)
self.tablist[self.last_tab_index].on_change("LEAVE",
self.current_tab, self.tablist[index].name)
end
-
+
--update tabview data
self.last_tab_index = index
local old_tab = self.current_tab
self.current_tab = self.tablist[index].name
-
+
if (self.autosave_tab) then
core.setting_set(self.name .. "_LAST",self.current_tab)
end
-
+
-- call for tab to enter
if self.tablist[index].on_change ~= nil then
self.tablist[index].on_change("ENTER",
@@ -197,14 +197,14 @@ local function set_tab_by_name(self, name)
return true
end
end
-
+
return false
end
--------------------------------------------------------------------------------
local function hide_tabview(self)
self.hidden=true
-
+
--call on_change as we're not gonna show self tab any longer
if self.tablist[self.last_tab_index].on_change ~= nil then
self.tablist[self.last_tab_index].on_change("LEAVE",
@@ -215,7 +215,7 @@ end
--------------------------------------------------------------------------------
local function show_tabview(self)
self.hidden=false
-
+
-- call for tab to enter
if self.tablist[self.last_tab_index].on_change ~= nil then
self.tablist[self.last_tab_index].on_change("ENTER",
@@ -265,7 +265,7 @@ function tabview_create(name, size, tabheaderpos)
self.current_tab = nil
self.last_tab_index = 1
self.tablist = {}
-
+
self.autosave_tab = false
ui.add(self)
diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua
index de8ae4d2c..3ac0386ca 100644
--- a/builtin/fstk/ui.lua
+++ b/builtin/fstk/ui.lua
@@ -1,18 +1,18 @@
--Minetest
--Copyright (C) 2014 sapier
--
---self program is free software; you can redistribute it and/or modify
+--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
---self program is distributed in the hope that it will be useful,
+--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
---with self program; if not, write to the Free Software Foundation, Inc.,
+--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ui = {}
@@ -127,11 +127,13 @@ function ui.update()
end
if (active_toplevel_ui_elements > 1) then
- print("WARNING: ui manager detected more then one active ui element, self most likely isn't intended")
+ core.log("warning", "more than one active ui "..
+ "element, self most likely isn't intended")
end
if (active_toplevel_ui_elements == 0) then
- print("WARNING: not a single toplevel ui element active switching to default")
+ core.log("warning", "no toplevel ui element "..
+ "active; switching to default")
ui.childlist[ui.default]:show()
formspec = ui.childlist[ui.default]:get_formspec()
end
diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua
index 423eb3134..deb811b14 100644
--- a/builtin/game/auth.lua
+++ b/builtin/game/auth.lua
@@ -20,7 +20,7 @@ function core.privs_to_string(privs, delim)
local list = {}
for priv, bool in pairs(privs) do
if bool then
- table.insert(list, priv)
+ list[#list + 1] = priv
end
end
return table.concat(list, delim)
diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua
index 5d317de4b..3350140ee 100644
--- a/builtin/game/chatcommands.lua
+++ b/builtin/game/chatcommands.lua
@@ -51,6 +51,27 @@ core.register_on_chat_message(function(name, message)
return true -- Handled chat message
end)
+-- Parses a "range" string in the format of "here (number)" or
+-- "(x1, y1, z1) (x2, y2, z2)", returning two position vectors
+local function parse_range_str(player_name, str)
+ local p1, p2
+ local args = str:split(" ")
+
+ if args[1] == "here" then
+ p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2]))
+ if p1 == nil then
+ return false, "Unable to get player " .. player_name .. " position"
+ end
+ else
+ p1, p2 = core.string_to_area(str)
+ if p1 == nil then
+ return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
+ end
+ end
+
+ return p1, p2
+end
+
--
-- Chat commands
--
@@ -63,6 +84,18 @@ core.register_chatcommand("me", {
end,
})
+core.register_chatcommand("admin", {
+ description = "Show the name of the server owner",
+ func = function(name)
+ local admin = minetest.setting_get("name")
+ if admin then
+ return true, "The administrator of this server is "..admin.."."
+ else
+ return false, "There's no administrator named in the config file."
+ end
+ end,
+})
+
core.register_chatcommand("help", {
privs = {},
params = "[all/privs/<cmd>]",
@@ -83,7 +116,7 @@ core.register_chatcommand("help", {
local cmds = {}
for cmd, def in pairs(core.chatcommands) do
if core.check_player_privs(name, def.privs) then
- table.insert(cmds, cmd)
+ cmds[#cmds + 1] = cmd
end
end
table.sort(cmds)
@@ -94,7 +127,7 @@ core.register_chatcommand("help", {
local cmds = {}
for cmd, def in pairs(core.chatcommands) do
if core.check_player_privs(name, def.privs) then
- table.insert(cmds, format_help_line(cmd, def))
+ cmds[#cmds + 1] = format_help_line(cmd, def)
end
end
table.sort(cmds)
@@ -102,7 +135,7 @@ core.register_chatcommand("help", {
elseif param == "privs" then
local privs = {}
for priv, def in pairs(core.registered_privileges) do
- table.insert(privs, priv .. ": " .. def.description)
+ privs[#privs + 1] = priv .. ": " .. def.description
end
table.sort(privs)
return true, "Available privileges:\n"..table.concat(privs, "\n")
@@ -148,8 +181,10 @@ core.register_chatcommand("grant", {
end
local privs = core.get_player_privs(grantname)
local privs_unknown = ""
+ local basic_privs =
+ core.string_to_privs(core.setting_get("basic_privs") or "interact,shout")
for priv, _ in pairs(grantprivs) do
- if priv ~= "interact" and priv ~= "shout" and
+ if not basic_privs[priv] and
not core.check_player_privs(name, {privs=true}) then
return false, "Your privileges are insufficient."
end
@@ -190,8 +225,10 @@ core.register_chatcommand("revoke", {
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.setting_get("basic_privs") or "interact,shout")
for priv, _ in pairs(revoke_privs) do
- if priv ~= "interact" and priv ~= "shout" and
+ if not basic_privs[priv] and
not core.check_player_privs(name, {privs=true}) then
return false, "Your privileges are insufficient."
end
@@ -315,10 +352,16 @@ core.register_chatcommand("teleport", {
p.x = tonumber(p.x)
p.y = tonumber(p.y)
p.z = tonumber(p.z)
- teleportee = core.get_player_by_name(name)
- if teleportee and p.x and p.y and p.z then
- teleportee:setpos(p)
- return true, "Teleporting to "..core.pos_to_string(p)
+ if p.x and p.y and p.z then
+ local lm = tonumber(minetest.setting_get("map_generation_limit") or 31000)
+ if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then
+ return false, "Cannot teleport out of map bounds!"
+ end
+ teleportee = core.get_player_by_name(name)
+ if teleportee then
+ teleportee:setpos(p)
+ return true, "Teleporting to "..core.pos_to_string(p)
+ end
end
local teleportee = nil
@@ -415,40 +458,65 @@ core.register_chatcommand("set", {
end,
})
-core.register_chatcommand("deleteblocks", {
+local function emergeblocks_callback(pos, action, num_calls_remaining, ctx)
+ if ctx.total_blocks == 0 then
+ ctx.total_blocks = num_calls_remaining + 1
+ ctx.current_blocks = 0
+ end
+ ctx.current_blocks = ctx.current_blocks + 1
+
+ if ctx.current_blocks == ctx.total_blocks then
+ core.chat_send_player(ctx.requestor_name,
+ string.format("Finished emerging %d blocks in %.2fms.",
+ ctx.total_blocks, (os.clock() - ctx.start_time) * 1000))
+ end
+end
+
+local function emergeblocks_progress_update(ctx)
+ if ctx.current_blocks ~= ctx.total_blocks then
+ core.chat_send_player(ctx.requestor_name,
+ string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)",
+ ctx.current_blocks, ctx.total_blocks,
+ (ctx.current_blocks / ctx.total_blocks) * 100))
+
+ core.after(2, emergeblocks_progress_update, ctx)
+ end
+end
+
+core.register_chatcommand("emergeblocks", {
params = "(here [radius]) | (<pos1> <pos2>)",
- description = "delete map blocks contained in area pos1 to pos2",
+ description = "starts loading (or generating, if inexistent) map blocks "
+ .. "contained in area pos1 to pos2",
privs = {server=true},
func = function(name, param)
- local p1 = {}
- local p2 = {}
- local args = param:split(" ")
- if args[1] == "here" then
- local player = core.get_player_by_name(name)
- if player == nil then
- core.log("error", "player is nil")
- return false, "Unable to get current position; player is nil"
- end
- p1 = player:getpos()
- p2 = p1
+ local p1, p2 = parse_range_str(name, param)
+ if p1 == false then
+ return false, p2
+ end
- if #args >= 2 then
- local radius = tonumber(args[2]) or 0
- p1 = vector.add(p1, radius)
- p2 = vector.subtract(p2, radius)
- end
- else
- local pos1, pos2 = unpack(param:split(") ("))
- if pos1 == nil or pos2 == nil then
- return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
- end
+ local context = {
+ current_blocks = 0,
+ total_blocks = 0,
+ start_time = os.clock(),
+ requestor_name = name
+ }
- p1 = core.string_to_pos(pos1 .. ")")
- p2 = core.string_to_pos("(" .. pos2)
+ core.emerge_area(p1, p2, emergeblocks_callback, context)
+ core.after(2, emergeblocks_progress_update, context)
- if p1 == nil or p2 == nil then
- return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
- end
+ return true, "Started emerge of area ranging from " ..
+ core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ end,
+})
+
+core.register_chatcommand("deleteblocks", {
+ params = "(here [radius]) | (<pos1> <pos2>)",
+ description = "delete map blocks contained in area pos1 to pos2",
+ privs = {server=true},
+ func = function(name, param)
+ local p1, p2 = parse_range_str(name, param)
+ if p1 == false then
+ return false, p2
end
if core.delete_area(p1, p2) then
@@ -698,7 +766,7 @@ core.register_chatcommand("time", {
local hour = (current_time - minutes) / 60
return true, ("Current time is %d:%02d"):format(hour, minutes)
end
- local player_privs = minetest.get_player_privs(name)
+ local player_privs = core.get_player_privs(name)
if not player_privs.settime then
return false, "You don't have permission to run this command " ..
"(missing privilege: settime)."
@@ -727,6 +795,13 @@ core.register_chatcommand("time", {
end,
})
+core.register_chatcommand("days", {
+ description = "Display day count",
+ func = function(name, param)
+ return true, "Current day is " .. core.get_day_count()
+ end
+})
+
core.register_chatcommand("shutdown", {
description = "shutdown server",
privs = {server=true},
@@ -790,14 +865,25 @@ core.register_chatcommand("kick", {
})
core.register_chatcommand("clearobjects", {
+ params = "[full|quick]",
description = "clear all objects in world",
privs = {server=true},
func = function(name, param)
- core.log("action", name .. " clears all objects.")
+ local options = {}
+ if param == "" or param == "full" then
+ options.mode = "full"
+ elseif param == "quick" then
+ options.mode = "quick"
+ else
+ return false, "Invalid usage, see /help clearobjects."
+ end
+
+ core.log("action", name .. " clears all objects ("
+ .. options.mode .. " mode).")
core.chat_send_all("Clearing all objects. This may take long."
.. " You may experience a timeout. (by "
.. name .. ")")
- core.clear_objects()
+ core.clear_objects(options)
core.log("action", "Object clearing done.")
core.chat_send_all("*** Cleared all objects.")
end,
diff --git a/builtin/game/constants.lua b/builtin/game/constants.lua
new file mode 100644
index 000000000..d0b7c753c
--- /dev/null
+++ b/builtin/game/constants.lua
@@ -0,0 +1,17 @@
+-- Minetest: builtin/constants.lua
+
+--
+-- Constants values for use with the Lua API
+--
+
+-- Built-in Content IDs (for use with VoxelManip API)
+core.CONTENT_UNKNOWN = 125
+core.CONTENT_AIR = 126
+core.CONTENT_IGNORE = 127
+
+-- Block emerge status constants (for use with core.emerge_area)
+core.EMERGE_CANCELLED = 0
+core.EMERGE_ERRORED = 1
+core.EMERGE_FROM_MEMORY = 2
+core.EMERGE_FROM_DISK = 3
+core.EMERGE_GENERATED = 4
diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua
index bbe68be3e..cd1cf5e2d 100644
--- a/builtin/game/deprecated.lua
+++ b/builtin/game/deprecated.lua
@@ -3,9 +3,8 @@
--
-- Default material types
--
-function digprop_err()
- core.log("info", debug.traceback())
- core.log("info", "WARNING: The core.digprop_* functions are obsolete and need to be replaced by item groups.")
+local function digprop_err()
+ core.log("deprecated", "The core.digprop_* functions are obsolete and need to be replaced by item groups.")
end
core.digprop_constanttime = digprop_err
@@ -16,12 +15,12 @@ core.digprop_woodlike = digprop_err
core.digprop_leaveslike = digprop_err
core.digprop_glasslike = digprop_err
-core.node_metadata_inventory_move_allow_all = function()
- core.log("info", "WARNING: core.node_metadata_inventory_move_allow_all is obsolete and does nothing.")
+function core.node_metadata_inventory_move_allow_all()
+ core.log("deprecated", "core.node_metadata_inventory_move_allow_all is obsolete and does nothing.")
end
-core.add_to_creative_inventory = function(itemstring)
- core.log('info', "WARNING: core.add_to_creative_inventory: This function is deprecated and does nothing.")
+function core.add_to_creative_inventory(itemstring)
+ core.log("deprecated", "core.add_to_creative_inventory: This function is deprecated and does nothing.")
end
--
@@ -32,7 +31,7 @@ local envref_deprecation_message_printed = false
setmetatable(core.env, {
__index = function(table, key)
if not envref_deprecation_message_printed then
- core.log("info", "WARNING: core.env:[...] is deprecated and should be replaced with core.[...]")
+ core.log("deprecated", "core.env:[...] is deprecated and should be replaced with core.[...]")
envref_deprecation_message_printed = true
end
local func = core[key]
@@ -50,4 +49,3 @@ setmetatable(core.env, {
function core.rollback_get_last_node_actor(pos, range, seconds)
return core.rollback_get_node_actions(pos, range, seconds, 1)[1]
end
-
diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua
index 58f68fc56..57bb98cfd 100644
--- a/builtin/game/falling.lua
+++ b/builtin/game/falling.lua
@@ -6,52 +6,49 @@
core.register_entity(":__builtin:falling_node", {
initial_properties = {
- physical = true,
- collide_with_objects = false,
- collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
visual = "wielditem",
+ visual_size = {x = 0.667, y = 0.667},
textures = {},
- visual_size = {x=0.667, y=0.667},
+ physical = true,
+ is_visible = false,
+ collide_with_objects = false,
+ collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
node = {},
set_node = function(self, node)
self.node = node
- local stack = ItemStack(node.name)
- local itemtable = stack:to_table()
- local itemname = nil
- if itemtable then
- itemname = stack:to_table().name
- end
- local item_texture = nil
- local item_type = ""
- if core.registered_items[itemname] then
- item_texture = core.registered_items[itemname].inventory_image
- item_type = core.registered_items[itemname].type
- end
- local prop = {
+ self.object:set_properties({
is_visible = true,
textures = {node.name},
- }
- self.object:set_properties(prop)
+ })
end,
get_staticdata = function(self)
- return self.node.name
+ return core.serialize(self.node)
end,
on_activate = function(self, staticdata)
- self.object:set_armor_groups({immortal=1})
- self:set_node({name=staticdata})
+ self.object:set_armor_groups({immortal = 1})
+
+ local node = core.deserialize(staticdata)
+ if node then
+ self:set_node(node)
+ elseif staticdata ~= "" then
+ self:set_node({name = staticdata})
+ end
end,
on_step = function(self, dtime)
- -- Set gravity
- self.object:setacceleration({x=0, y=-10, z=0})
+ -- Set gravity
+ local acceleration = self.object:getacceleration()
+ if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then
+ self.object:setacceleration({x = 0, y = -10, z = 0})
+ end
-- Turn to actual sand when collides to ground or just move
local pos = self.object:getpos()
- local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
+ local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z} -- Position of bottom center point
local bcn = core.get_node(bcp)
local bcd = core.registered_nodes[bcn.name]
-- Note: walkable is in the node definition, not in item groups
@@ -62,7 +59,7 @@ core.register_entity(":__builtin:falling_node", {
if bcd and bcd.leveled and
bcn.name == self.node.name then
local addlevel = self.node.level
- if addlevel == nil or addlevel <= 0 then
+ if not addlevel or addlevel <= 0 then
addlevel = bcd.leveled
end
if core.add_node_level(bcp, addlevel) == 0 then
@@ -75,7 +72,7 @@ core.register_entity(":__builtin:falling_node", {
core.remove_node(bcp)
return
end
- local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
+ local np = {x = bcp.x, y = bcp.y + 1, z = bcp.z}
-- Check what's here
local n2 = core.get_node(np)
-- If it's not air or liquid, remove node and replace it with
@@ -86,25 +83,25 @@ core.register_entity(":__builtin:falling_node", {
if core.registered_nodes[n2.name].buildable_to == false then
-- Add dropped items
local drops = core.get_node_drops(n2.name, "")
- local _, dropped_item
for _, dropped_item in ipairs(drops) do
core.add_item(np, dropped_item)
end
end
-- Run script hook
- local _, callback
for _, callback in ipairs(core.registered_on_dignodes) do
- callback(np, n2, nil)
+ callback(np, n2)
end
end
-- Create node and remove entity
- core.add_node(np, self.node)
+ if core.registered_nodes[self.node.name] then
+ core.add_node(np, self.node)
+ end
self.object:remove()
nodeupdate(np)
return
end
local vel = self.object:getvelocity()
- if vector.equals(vel, {x=0,y=0,z=0}) then
+ if vector.equals(vel, {x = 0, y = 0, z = 0}) then
local npos = self.object:getpos()
self.object:setpos(vector.round(npos))
end
@@ -119,7 +116,7 @@ end
function drop_attached_node(p)
local nn = core.get_node(p).name
core.remove_node(p)
- for _,item in ipairs(core.get_node_drops(nn, "")) do
+ for _, item in ipairs(core.get_node_drops(nn, "")) do
local pos = {
x = p.x + math.random()/2 - 0.25,
y = p.y + math.random()/2 - 0.25,
@@ -131,25 +128,13 @@ end
function check_attached_node(p, n)
local def = core.registered_nodes[n.name]
- local d = {x=0, y=0, z=0}
+ local d = {x = 0, y = 0, z = 0}
if def.paramtype2 == "wallmounted" then
- if n.param2 == 0 then
- d.y = 1
- elseif n.param2 == 1 then
- d.y = -1
- elseif n.param2 == 2 then
- d.x = 1
- elseif n.param2 == 3 then
- d.x = -1
- elseif n.param2 == 4 then
- d.z = 1
- elseif n.param2 == 5 then
- d.z = -1
- end
+ d = core.wallmounted_to_dir(n.param2)
else
d.y = -1
end
- local p2 = {x=p.x+d.x, y=p.y+d.y, z=p.z+d.z}
+ local p2 = vector.add(p, d)
local nn = core.get_node(p2).name
local def2 = core.registered_nodes[nn]
if def2 and not def2.walkable then
@@ -162,10 +147,10 @@ end
-- Some common functions
--
-function nodeupdate_single(p, delay)
+function nodeupdate_single(p)
local n = core.get_node(p)
if core.get_item_group(n.name, "falling_node") ~= 0 then
- local p_bottom = {x=p.x, y=p.y-1, z=p.z}
+ local p_bottom = {x = p.x, y = p.y - 1, z = p.z}
local n_bottom = core.get_node(p_bottom)
-- Note: walkable is in the node definition, not in item groups
if core.registered_nodes[n_bottom.name] and
@@ -175,37 +160,88 @@ function nodeupdate_single(p, delay)
core.get_node_level(p_bottom) < core.get_node_max_level(p_bottom))) and
(not core.registered_nodes[n_bottom.name].walkable or
core.registered_nodes[n_bottom.name].buildable_to) then
- if delay then
- core.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
- else
- n.level = core.get_node_level(p)
- core.remove_node(p)
- spawn_falling_node(p, n)
- nodeupdate(p)
- end
+ n.level = core.get_node_level(p)
+ core.remove_node(p)
+ spawn_falling_node(p, n)
+ return true
end
end
if core.get_item_group(n.name, "attached_node") ~= 0 then
if not check_attached_node(p, n) then
drop_attached_node(p)
- nodeupdate(p)
+ return true
end
end
+
+ return false
end
-function nodeupdate(p, delay)
- -- Round p to prevent falling entities to get stuck
- p.x = math.floor(p.x+0.5)
- p.y = math.floor(p.y+0.5)
- p.z = math.floor(p.z+0.5)
+-- This table is specifically ordered.
+-- We don't walk diagonals, only our direct neighbors, and self.
+-- Down first as likely case, but always before self. The same with sides.
+-- Up must come last, so that things above self will also fall all at once.
+local nodeupdate_neighbors = {
+ {x = -1, y = -1, z = 0},
+ {x = 1, y = -1, z = 0},
+ {x = 0, y = -1, z = -1},
+ {x = 0, y = -1, z = 1},
+ {x = 0, y = -1, z = 0},
+ {x = -1, y = 0, z = 0},
+ {x = 1, y = 0, z = 0},
+ {x = 0, y = 0, z = 1},
+ {x = 0, y = 0, z = -1},
+ {x = 0, y = 0, z = 0},
+ {x = 0, y = 1, z = 0},
+}
- for x = -1,1 do
- for y = -1,1 do
- for z = -1,1 do
- nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
- end
- end
+function nodeupdate(p)
+ -- Round p to prevent falling entities to get stuck.
+ p = vector.round(p)
+
+ -- We make a stack, and manually maintain size for performance.
+ -- Stored in the stack, we will maintain tables with pos, and
+ -- last neighbor visited. This way, when we get back to each
+ -- node, we know which directions we have already walked, and
+ -- which direction is the next to walk.
+ local s = {}
+ local n = 0
+ -- The neighbor order we will visit from our table.
+ local v = 1
+
+ while true do
+ -- Push current pos onto the stack.
+ n = n + 1
+ s[n] = {p = p, v = v}
+ -- Select next node from neighbor list.
+ p = vector.add(p, nodeupdate_neighbors[v])
+ -- Now we check out the node. If it is in need of an update,
+ -- it will let us know in the return value (true = updated).
+ if not nodeupdate_single(p) then
+ -- If we don't need to "recurse" (walk) to it then pop
+ -- our previous pos off the stack and continue from there,
+ -- with the v value we were at when we last were at that
+ -- node
+ repeat
+ local pop = s[n]
+ p = pop.p
+ v = pop.v
+ s[n] = nil
+ n = n - 1
+ -- If there's nothing left on the stack, and no
+ -- more sides to walk to, we're done and can exit
+ if n == 0 and v == 11 then
+ return
+ end
+ until v < 11
+ -- The next round walk the next neighbor in list.
+ v = v + 1
+ else
+ -- If we did need to walk the neighbor, then
+ -- start walking it from the walk order start (1),
+ -- and not the order we just pushed up the stack.
+ v = 1
+ end
end
end
diff --git a/builtin/game/features.lua b/builtin/game/features.lua
index f082b0db8..2aad458da 100644
--- a/builtin/game/features.lua
+++ b/builtin/game/features.lua
@@ -8,13 +8,14 @@ core.features = {
use_texture_alpha = true,
no_legacy_abms = true,
texture_names_parens = true,
+ area_store_custom_ids = true,
}
function core.has_feature(arg)
if type(arg) == "table" then
- missing_features = {}
- result = true
- for ft, _ in pairs(arg) do
+ local missing_features = {}
+ local result = true
+ for ftr in pairs(arg) do
if not core.features[ftr] then
missing_features[ftr] = true
result = false
diff --git a/builtin/game/init.lua b/builtin/game/init.lua
index 3f82f85c7..a6cfa3bf8 100644
--- a/builtin/game/init.lua
+++ b/builtin/game/init.lua
@@ -1,10 +1,11 @@
-local scriptpath = minetest.get_builtin_path()..DIR_DELIM
+local scriptpath = core.get_builtin_path()..DIR_DELIM
local commonpath = scriptpath.."common"..DIR_DELIM
local gamepath = scriptpath.."game"..DIR_DELIM
dofile(commonpath.."vector.lua")
+dofile(gamepath.."constants.lua")
dofile(gamepath.."item.lua")
dofile(gamepath.."register.lua")
@@ -25,4 +26,3 @@ dofile(gamepath.."features.lua")
dofile(gamepath.."voxelarea.lua")
dofile(gamepath.."forceloading.lua")
dofile(gamepath.."statbars.lua")
-
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index 6628a4081..36c2c1a68 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -27,19 +27,11 @@ function core.get_pointed_thing_position(pointed_thing, above)
if above then
-- The position where a node would be placed
return pointed_thing.above
- else
- -- The position where a node would be dug
- return pointed_thing.under
end
+ -- The position where a node would be dug
+ return pointed_thing.under
elseif pointed_thing.type == "object" then
- obj = pointed_thing.ref
- if obj ~= nil then
- return obj:getpos()
- else
- return nil
- end
- else
- return nil
+ return pointed_thing.ref and pointed_thing.ref:getpos()
end
end
@@ -96,25 +88,26 @@ function core.dir_to_facedir(dir, is6d)
end
end
+-- Table of possible dirs
+local facedir_to_dir = {
+ {x= 0, y=0, z= 1},
+ {x= 1, y=0, z= 0},
+ {x= 0, y=0, z=-1},
+ {x=-1, y=0, z= 0},
+ {x= 0, y=-1, z= 0},
+ {x= 0, y=1, z= 0},
+}
+-- Mapping from facedir value to index in facedir_to_dir.
+local facedir_to_dir_map = {
+ [0]=1, 2, 3, 4,
+ 5, 2, 6, 4,
+ 6, 2, 5, 4,
+ 1, 5, 3, 6,
+ 1, 6, 3, 5,
+ 1, 4, 3, 2,
+}
function core.facedir_to_dir(facedir)
- --a table of possible dirs
- return ({{x=0, y=0, z=1},
- {x=1, y=0, z=0},
- {x=0, y=0, z=-1},
- {x=-1, y=0, z=0},
- {x=0, y=-1, z=0},
- {x=0, y=1, z=0}})
-
- --indexed into by a table of correlating facedirs
- [({[0]=1, 2, 3, 4,
- 5, 2, 6, 4,
- 6, 2, 5, 4,
- 1, 5, 3, 6,
- 1, 6, 3, 5,
- 1, 4, 3, 2})
-
- --indexed into by the facedir in question
- [facedir]]
+ return facedir_to_dir[facedir_to_dir_map[facedir]]
end
function core.dir_to_wallmounted(dir)
@@ -139,6 +132,19 @@ function core.dir_to_wallmounted(dir)
end
end
+-- table of dirs in wallmounted order
+local wallmounted_to_dir = {
+ [0] = {x = 0, y = 1, z = 0},
+ {x = 0, y = -1, z = 0},
+ {x = 1, y = 0, z = 0},
+ {x = -1, y = 0, z = 0},
+ {x = 0, y = 0, z = 1},
+ {x = 0, y = 0, z = -1},
+}
+function core.wallmounted_to_dir(wallmounted)
+ return wallmounted_to_dir[wallmounted]
+end
+
function core.get_node_drops(nodename, toolname)
local drop = ItemStack({name=nodename}):get_definition().drop
if drop == nil then
@@ -227,7 +233,8 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
place_to = {x = under.x, y = under.y, z = under.z}
end
- if core.is_protected(place_to, placer:get_player_name()) then
+ if core.is_protected(place_to, placer:get_player_name()) and
+ not minetest.check_player_privs(placer, "protection_bypass") then
core.log("action", placer:get_player_name()
.. " tried to place " .. def.name
.. " at protected position "
@@ -334,8 +341,12 @@ function core.item_place(itemstack, placer, pointed_thing, param2)
return itemstack
end
+function core.item_secondary_use(itemstack, placer)
+ return itemstack
+end
+
function core.item_drop(itemstack, dropper, pos)
- if dropper.is_player then
+ if dropper and dropper:is_player() then
local v = dropper:get_look_dir()
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
local cs = itemstack:get_count()
@@ -349,12 +360,17 @@ function core.item_drop(itemstack, dropper, pos)
v.y = v.y*2 + 2
v.z = v.z*2
obj:setvelocity(v)
+ obj:get_luaentity().dropped_by = dropper:get_player_name()
+ return itemstack
end
else
- core.add_item(pos, itemstack)
+ if core.add_item(pos, itemstack) then
+ return itemstack
+ end
end
- return itemstack
+ -- If we reach this, adding the object to the
+ -- environment failed
end
function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
@@ -429,7 +445,8 @@ function core.node_dig(pos, node, digger)
return
end
- if core.is_protected(pos, digger:get_player_name()) then
+ if core.is_protected(pos, digger:get_player_name()) and
+ not minetest.check_player_privs(digger, "protection_bypass") then
core.log("action", digger:get_player_name()
.. " tried to dig " .. node.name
.. " at protected position "
@@ -560,6 +577,7 @@ core.nodedef_default = {
diggable = true,
climbable = false,
buildable_to = false,
+ floodable = false,
liquidtype = "none",
liquid_alternative_flowing = "",
liquid_alternative_source = "",
@@ -587,6 +605,7 @@ core.craftitemdef_default = {
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'), -- core.item_place
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
+ on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_use = nil,
}
@@ -604,6 +623,7 @@ core.tooldef_default = {
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'), -- core.item_place
+ on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
on_use = nil,
}
@@ -622,6 +642,7 @@ core.noneitemdef_default = { -- This is used for the hand and unknown items
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'),
+ on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_drop = nil,
on_use = nil,
}
diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua
index 6425a10aa..a66bf33d0 100644
--- a/builtin/game/item_entity.lua
+++ b/builtin/game/item_entity.lua
@@ -4,11 +4,14 @@ function core.spawn_item(pos, item)
-- Take item in any format
local stack = ItemStack(item)
local obj = core.add_entity(pos, "__builtin:item")
- obj:get_luaentity():set_item(stack:to_string())
+ -- Don't use obj if it couldn't be added to the map.
+ if obj then
+ obj:get_luaentity():set_item(stack:to_string())
+ end
return obj
end
--- If item_entity_ttl is not set, enity will have default life time
+-- If item_entity_ttl is not set, enity will have default life time
-- Setting it to -1 disables the feature
local time_to_live = tonumber(core.setting_get("item_entity_ttl"))
@@ -28,6 +31,7 @@ core.register_entity(":__builtin:item", {
spritediv = {x = 1, y = 1},
initial_sprite_basepos = {x = 0, y = 0},
is_visible = false,
+ infotext = "",
},
itemstring = '',
@@ -47,6 +51,7 @@ core.register_entity(":__builtin:item", {
local c = s
local itemtable = stack:to_table()
local itemname = nil
+ local description = ""
if itemtable then
itemname = stack:to_table().name
end
@@ -55,6 +60,7 @@ core.register_entity(":__builtin:item", {
if core.registered_items[itemname] then
item_texture = core.registered_items[itemname].inventory_image
item_type = core.registered_items[itemname].type
+ description = core.registered_items[itemname].description
end
local prop = {
is_visible = true,
@@ -63,6 +69,7 @@ core.register_entity(":__builtin:item", {
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c},
automatic_rotate = math.pi * 0.5,
+ infotext = description,
}
self.object:set_properties(prop)
end,
@@ -71,7 +78,8 @@ core.register_entity(":__builtin:item", {
return core.serialize({
itemstring = self.itemstring,
always_collect = self.always_collect,
- age = self.age
+ age = self.age,
+ dropped_by = self.dropped_by
})
end,
@@ -81,11 +89,12 @@ core.register_entity(":__builtin:item", {
if data and type(data) == "table" then
self.itemstring = data.itemstring
self.always_collect = data.always_collect
- if data.age then
+ if data.age then
self.age = data.age + dtime_s
else
self.age = dtime_s
end
+ self.dropped_by = data.dropped_by
end
else
self.itemstring = staticdata
@@ -197,9 +206,10 @@ core.register_entity(":__builtin:item", {
end,
on_punch = function(self, hitter)
- if self.itemstring ~= '' then
- local left = hitter:get_inventory():add_item("main", self.itemstring)
- if not left:is_empty() then
+ local inv = hitter:get_inventory()
+ if inv and self.itemstring ~= '' then
+ local left = inv:add_item("main", self.itemstring)
+ if left and not left:is_empty() then
self.itemstring = left:to_string()
return
end
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index e3b7d82bc..de41cfc91 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -4,88 +4,81 @@
-- Misc. API functions
--
-local timers = {}
-local mintime
-local function update_timers(delay)
- mintime = false
- local sub = 0
- for index = 1, #timers do
- index = index - sub
- local timer = timers[index]
- timer.time = timer.time - delay
- if timer.time <= 0 then
- core.set_last_run_mod(timer.mod_origin)
- timer.func(unpack(timer.args or {}))
- table.remove(timers, index)
- sub = sub + 1
- elseif mintime then
- mintime = math.min(mintime, timer.time)
- else
- mintime = timer.time
- end
- end
-end
+local jobs = {}
+local time = 0.0
+local last = core.get_us_time() / 1000000
-local timers_to_add
-local function add_timers()
- for _, timer in ipairs(timers_to_add) do
- table.insert(timers, timer)
+core.register_globalstep(function(dtime)
+ local new = core.get_us_time() / 1000000
+ if new > last then
+ time = time + (new - last)
+ else
+ -- Overflow, we may lose a little bit of time here but
+ -- only 1 tick max, potentially running timers slightly
+ -- too early.
+ time = time + new
end
- timers_to_add = false
-end
+ last = new
-local delay = 0
-core.register_globalstep(function(dtime)
- if not mintime then
- -- abort if no timers are running
+ if #jobs < 1 then
return
end
- if timers_to_add then
- add_timers()
- end
- delay = delay + dtime
- if delay < mintime then
- return
+
+ -- Iterate backwards so that we miss any new timers added by
+ -- a timer callback, and so that we don't skip the next timer
+ -- in the list if we remove one.
+ for i = #jobs, 1, -1 do
+ local job = jobs[i]
+ if time >= job.expire then
+ core.set_last_run_mod(job.mod_origin)
+ job.func(unpack(job.arg))
+ table.remove(jobs, i)
+ end
end
- update_timers(delay)
- delay = 0
end)
-function core.after(time, func, ...)
+function core.after(after, func, ...)
assert(tonumber(time) and type(func) == "function",
"Invalid core.after invocation")
- if not mintime then
- mintime = time
- timers_to_add = {{
- time = time+delay,
- func = func,
- args = {...},
- mod_origin = core.get_last_run_mod(),
- }}
- return
- end
- mintime = math.min(mintime, time)
- timers_to_add = timers_to_add or {}
- timers_to_add[#timers_to_add+1] = {
- time = time+delay,
- func = func,
- args = {...},
- mod_origin = core.get_last_run_mod(),
+ jobs[#jobs + 1] = {
+ func = func,
+ expire = time + after,
+ arg = {...},
+ mod_origin = core.get_last_run_mod()
}
end
-function core.check_player_privs(name, privs)
+function core.check_player_privs(player_or_name, ...)
+ local name = player_or_name
+ -- Check if we have been provided with a Player object.
+ if type(name) ~= "string" then
+ name = name:get_player_name()
+ end
+
+ local requested_privs = {...}
local player_privs = core.get_player_privs(name)
local missing_privileges = {}
- for priv, val in pairs(privs) do
- if val
- and not player_privs[priv] then
- table.insert(missing_privileges, priv)
+
+ if type(requested_privs[1]) == "table" then
+ -- We were provided with a table like { privA = true, privB = true }.
+ for priv, value in pairs(requested_privs[1]) do
+ if value and not player_privs[priv] then
+ missing_privileges[#missing_privileges + 1] = priv
+ end
+ end
+ else
+ -- Only a list, we can process it directly.
+ for key, priv in pairs(requested_privs) do
+ if not player_privs[priv] then
+ missing_privileges[#missing_privileges + 1] = priv
+ end
end
end
+
if #missing_privileges > 0 then
return false, missing_privileges
end
+
return true, ""
end
@@ -103,12 +96,31 @@ function core.get_connected_players()
local temp_table = {}
for index, value in pairs(player_list) do
if value:is_player_connected() then
- table.insert(temp_table, value)
+ temp_table[#temp_table + 1] = value
end
end
return temp_table
end
+-- Returns two position vectors representing a box of `radius` in each
+-- direction centered around the player corresponding to `player_name`
+function core.get_player_radius_area(player_name, radius)
+ local player = core.get_player_by_name(player_name)
+ if player == nil then
+ return nil
+ end
+
+ local p1 = player:getpos()
+ local p2 = p1
+
+ if radius then
+ p1 = vector.subtract(p1, radius)
+ p2 = vector.add(p2, radius)
+ end
+
+ return p1, p2
+end
+
function core.hash_node_position(pos)
return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768
end
@@ -166,3 +178,22 @@ function core.raillike_group(name)
end
return id
end
+
+-- HTTP callback interface
+function core.http_add_fetch(httpenv)
+ httpenv.fetch = function(req, callback)
+ local handle = httpenv.fetch_async(req)
+
+ local function update_http_status()
+ local res = httpenv.fetch_async_get(handle)
+ if res.completed then
+ callback(res)
+ else
+ core.after(0, update_http_status)
+ end
+ end
+ core.after(0, update_http_status)
+ end
+
+ return httpenv
+end
diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua
index 7e6387c72..bd5ead624 100644
--- a/builtin/game/privileges.lua
+++ b/builtin/game/privileges.lua
@@ -32,6 +32,7 @@ core.register_privilege("settime", "Can use /time")
core.register_privilege("privs", "Can modify privileges")
core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
core.register_privilege("server", "Can do server maintenance stuff")
+core.register_privilege("protection_bypass", "Can bypass node protection in the world")
core.register_privilege("shout", "Can speak in chat")
core.register_privilege("ban", "Can ban and unban players")
core.register_privilege("kick", "Can kick players")
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index d0e04bfc3..f330491a2 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -11,10 +11,11 @@ local register_alias_raw = core.register_alias_raw
core.register_alias_raw = nil
--
--- Item / entity / ABM registration functions
+-- Item / entity / ABM / LBM registration functions
--
core.registered_abms = {}
+core.registered_lbms = {}
core.registered_entities = {}
core.registered_items = {}
core.registered_nodes = {}
@@ -51,27 +52,38 @@ local forbidden_item_names = {
local function check_modname_prefix(name)
if name:sub(1,1) == ":" then
- -- Escape the modname prefix enforcement mechanism
+ -- If the name starts with a colon, we can skip the modname prefix
+ -- mechanism.
return name:sub(2)
else
- -- Modname prefix enforcement
+ -- Enforce that the name starts with the correct mod name.
local expected_prefix = core.get_current_modname() .. ":"
if name:sub(1, #expected_prefix) ~= expected_prefix then
error("Name " .. name .. " does not follow naming conventions: " ..
- "\"modname:\" or \":\" prefix required")
+ "\"" .. expected_prefix .. "\" or \":\" prefix required")
end
+
+ -- Enforce that the name only contains letters, numbers and underscores.
local subname = name:sub(#expected_prefix+1)
- if subname:find("[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]") then
+ if subname:find("[^%w_]") then
error("Name " .. name .. " does not follow naming conventions: " ..
"contains unallowed characters")
end
+
return name
end
end
function core.register_abm(spec)
-- Add to core.registered_abms
- core.registered_abms[#core.registered_abms+1] = spec
+ core.registered_abms[#core.registered_abms + 1] = spec
+ spec.mod_origin = core.get_current_modname() or "??"
+end
+
+function core.register_lbm(spec)
+ -- Add to core.registered_lbms
+ check_modname_prefix(spec.name)
+ core.registered_lbms[#core.registered_lbms + 1] = spec
spec.mod_origin = core.get_current_modname() or "??"
end
@@ -221,7 +233,7 @@ function core.register_alias(name, convert_to)
error("Unable to register alias: Name is forbidden: " .. name)
end
if core.registered_items[name] ~= nil then
- core.log("WARNING: Not registering alias, item with same name" ..
+ core.log("warning", "Not registering alias, item with same name" ..
" is already defined: " .. name .. " -> " .. convert_to)
else
--core.log("Registering alias: " .. name .. " -> " .. convert_to)
@@ -268,6 +280,7 @@ core.register_item(":unknown", {
description = "Unknown Item",
inventory_image = "unknown_item.png",
on_place = core.item_place,
+ on_secondary_use = core.item_secondary_use,
on_drop = core.item_drop,
groups = {not_in_creative_inventory=1},
diggable = true,
@@ -284,6 +297,7 @@ core.register_node(":air", {
pointable = false,
diggable = false,
buildable_to = true,
+ floodable = true,
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
@@ -385,7 +399,7 @@ end
local function make_registration()
local t = {}
local registerfunc = function(func)
- table.insert(t, func)
+ t[#t + 1] = func
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
name = debug.getinfo(1, "n").name or "??"
@@ -461,9 +475,9 @@ end
function core.register_on_player_hpchange(func, modifier)
if modifier then
- table.insert(core.registered_on_player_hpchanges.modifiers, func)
+ core.registered_on_player_hpchanges.modifiers[#core.registered_on_player_hpchanges.modifiers + 1] = func
else
- table.insert(core.registered_on_player_hpchanges.loggers, func)
+ core.registered_on_player_hpchanges.loggers[#core.registered_on_player_hpchanges.loggers + 1] = func
end
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
diff --git a/builtin/game/static_spawn.lua b/builtin/game/static_spawn.lua
index 492ab6ca6..100334226 100644
--- a/builtin/game/static_spawn.lua
+++ b/builtin/game/static_spawn.lua
@@ -3,31 +3,23 @@
local function warn_invalid_static_spawnpoint()
if core.setting_get("static_spawnpoint") and
not core.setting_get_pos("static_spawnpoint") then
- core.log('error', "The static_spawnpoint setting is invalid: \""..
+ core.log("error", "The static_spawnpoint setting is invalid: \""..
core.setting_get("static_spawnpoint").."\"")
end
end
warn_invalid_static_spawnpoint()
-local function put_player_in_spawn(obj)
- warn_invalid_static_spawnpoint()
+local function put_player_in_spawn(player_obj)
local static_spawnpoint = core.setting_get_pos("static_spawnpoint")
if not static_spawnpoint then
return false
end
- core.log('action', "Moving "..obj:get_player_name()..
- " to static spawnpoint at "..
- core.pos_to_string(static_spawnpoint))
- obj:setpos(static_spawnpoint)
+ core.log("action", "Moving " .. player_obj:get_player_name() ..
+ " to static spawnpoint at " .. core.pos_to_string(static_spawnpoint))
+ player_obj:setpos(static_spawnpoint)
return true
end
-core.register_on_newplayer(function(obj)
- put_player_in_spawn(obj)
-end)
-
-core.register_on_respawnplayer(function(obj)
- return put_player_in_spawn(obj)
-end)
-
+core.register_on_newplayer(put_player_in_spawn)
+core.register_on_respawnplayer(put_player_in_spawn)
diff --git a/builtin/init.lua b/builtin/init.lua
index 095771d19..4400a19d6 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -6,32 +6,45 @@
--
-- Initialize some very basic things
-print = core.debug
+function core.debug(...) core.log(table.concat({...}, "\t")) end
+if core.print then
+ local core_print = core.print
+ -- Override native print and use
+ -- terminal if that's turned on
+ function print(...)
+ local n, t = select("#", ...), {...}
+ for i = 1, n do
+ t[i] = tostring(t[i])
+ end
+ core_print(table.concat(t, "\t"))
+ end
+ core.print = nil -- don't pollute our namespace
+end
math.randomseed(os.time())
os.setlocale("C", "numeric")
minetest = core
-- Load other files
-local scriptdir = core.get_builtin_path()..DIR_DELIM
-local gamepath = scriptdir.."game"..DIR_DELIM
-local commonpath = scriptdir.."common"..DIR_DELIM
-local asyncpath = scriptdir.."async"..DIR_DELIM
+local scriptdir = core.get_builtin_path() .. DIR_DELIM
+local gamepath = scriptdir .. "game" .. DIR_DELIM
+local commonpath = scriptdir .. "common" .. DIR_DELIM
+local asyncpath = scriptdir .. "async" .. DIR_DELIM
-dofile(commonpath.."strict.lua")
-dofile(commonpath.."serialize.lua")
-dofile(commonpath.."misc_helpers.lua")
+dofile(commonpath .. "strict.lua")
+dofile(commonpath .. "serialize.lua")
+dofile(commonpath .. "misc_helpers.lua")
if INIT == "game" then
- dofile(gamepath.."init.lua")
+ dofile(gamepath .. "init.lua")
elseif INIT == "mainmenu" then
local mainmenuscript = core.setting_get("main_menu_script")
if mainmenuscript ~= nil and mainmenuscript ~= "" then
dofile(mainmenuscript)
else
- dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua")
+ dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
end
elseif INIT == "async" then
- dofile(asyncpath.."init.lua")
+ dofile(asyncpath .. "init.lua")
else
error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
end
diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua
index 6266d0220..1fd89ff77 100644
--- a/builtin/mainmenu/common.lua
+++ b/builtin/mainmenu/common.lua
@@ -22,40 +22,37 @@ menudata = {}
--------------------------------------------------------------------------------
-- Local cached values
--------------------------------------------------------------------------------
-local min_supp_proto = core.get_min_supp_proto()
-local max_supp_proto = core.get_max_supp_proto()
+local min_supp_proto, max_supp_proto
+function common_update_cached_supp_proto()
+ min_supp_proto = core.get_min_supp_proto()
+ max_supp_proto = core.get_max_supp_proto()
+end
+common_update_cached_supp_proto()
--------------------------------------------------------------------------------
-- Menu helper functions
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local function render_client_count(n)
- if n > 99 then
- return '99+'
- elseif n >= 0 then
- return tostring(n)
- else
- return '?'
- end
+ if n > 99 then return '99+'
+ elseif n >= 0 then return tostring(n)
+ else return '?' end
end
local function configure_selected_world_params(idx)
- local worldconfig = modmgr.get_worldconfig(
- menudata.worldlist:get_list()[idx].path)
-
- if worldconfig.creative_mode ~= nil then
+ local worldconfig = modmgr.get_worldconfig(menudata.worldlist:get_list()[idx].path)
+ if worldconfig.creative_mode then
core.setting_set("creative_mode", worldconfig.creative_mode)
end
- if worldconfig.enable_damage ~= nil then
+ if worldconfig.enable_damage then
core.setting_set("enable_damage", worldconfig.enable_damage)
end
end
--------------------------------------------------------------------------------
function image_column(tooltip, flagname)
- return "image," ..
- "tooltip=" .. core.formspec_escape(tooltip) .. "," ..
+ return "image,tooltip=" .. core.formspec_escape(tooltip) .. "," ..
"0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
"1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_" .. flagname .. ".png")
end
@@ -64,76 +61,60 @@ end
function order_favorite_list(list)
local res = {}
--orders the favorite list after support
- for i=1,#list,1 do
+ for i = 1, #list do
local fav = list[i]
if is_server_protocol_compat(fav.proto_min, fav.proto_max) then
- table.insert(res, fav)
+ res[#res + 1] = fav
end
end
- for i=1,#list,1 do
+ for i = 1, #list do
local fav = list[i]
if not is_server_protocol_compat(fav.proto_min, fav.proto_max) then
- table.insert(res, fav)
+ res[#res + 1] = fav
end
end
return res
end
--------------------------------------------------------------------------------
-function render_favorite(spec,render_details)
+function render_favorite(spec, is_favorite)
local text = ""
-
- if spec.name ~= nil then
+ if spec.name then
text = text .. core.formspec_escape(spec.name:trim())
-
--- if spec.description ~= nil and
--- core.formspec_escape(spec.description):trim() ~= "" then
--- text = text .. " (" .. core.formspec_escape(spec.description) .. ")"
--- end
- else
- if spec.address ~= nil then
- text = text .. spec.address:trim()
-
- if spec.port ~= nil then
- text = text .. ":" .. spec.port
- end
+ elseif spec.address then
+ text = text .. spec.address:trim()
+ if spec.port then
+ text = text .. ":" .. spec.port
end
end
- if not render_details then
- return text
- end
-
local details = ""
- local grey_out = not is_server_protocol_compat(spec.proto_max, spec.proto_min)
+ local grey_out = not is_server_protocol_compat(spec.proto_min, spec.proto_max)
- if spec.clients ~= nil and spec.clients_max ~= nil then
+ if is_favorite then
+ details = "1,"
+ else
+ details = "0,"
+ end
+
+ if spec.clients and spec.clients_max then
local clients_color = ''
local clients_percent = 100 * spec.clients / spec.clients_max
-- Choose a color depending on how many clients are connected
-- (relatively to clients_max)
- if spec.clients == 0 then
- clients_color = '' -- 0 players: default/white
- elseif spec.clients == spec.clients_max then
- clients_color = '#dd5b5b' -- full server: red (darker)
- elseif clients_percent <= 60 then
- clients_color = '#a1e587' -- 0-60%: green
- elseif clients_percent <= 90 then
- clients_color = '#ffdc97' -- 60-90%: yellow
- else
- clients_color = '#ffba97' -- 90-100%: orange
+ if grey_out then clients_color = '#aaaaaa'
+ elseif spec.clients == 0 then clients_color = '' -- 0 players: default/white
+ elseif clients_percent <= 60 then clients_color = '#a1e587' -- 0-60%: green
+ elseif clients_percent <= 90 then clients_color = '#ffdc97' -- 60-90%: yellow
+ elseif clients_percent == 100 then clients_color = '#dd5b5b' -- full server: red (darker)
+ else clients_color = '#ffba97' -- 90-100%: orange
end
- if grey_out then
- clients_color = '#aaaaaa'
- end
+ details = details .. clients_color .. ',' ..
+ render_client_count(spec.clients) .. ',/,' ..
+ render_client_count(spec.clients_max) .. ','
- details = details ..
- clients_color .. ',' ..
- render_client_count(spec.clients) .. ',' ..
- '/,' ..
- render_client_count(spec.clients_max) .. ','
elseif grey_out then
details = details .. '#aaaaaa,?,/,?,'
else
@@ -184,56 +165,36 @@ end
--------------------------------------------------------------------------------
function menu_render_worldlist()
local retval = ""
-
local current_worldlist = menudata.worldlist:get_list()
- for i,v in ipairs(current_worldlist) do
- if retval ~= "" then
- retval = retval ..","
- end
-
+ for i, v in ipairs(current_worldlist) do
+ if retval ~= "" then retval = retval .. "," end
retval = retval .. core.formspec_escape(v.name) ..
- " \\[" .. core.formspec_escape(v.gameid) .. "\\]"
+ " \\[" .. core.formspec_escape(v.gameid) .. "\\]"
end
return retval
end
--------------------------------------------------------------------------------
-function menu_handle_key_up_down(fields,textlist,settingname)
- if fields["key_up"] then
- local oldidx = core.get_textlist_index(textlist)
-
- if oldidx ~= nil and oldidx > 1 then
- local newidx = oldidx -1
- core.setting_set(settingname,
- menudata.worldlist:get_raw_index(newidx))
-
- configure_selected_world_params(newidx)
+function menu_handle_key_up_down(fields, textlist, settingname)
+ local oldidx, newidx = core.get_textlist_index(textlist), 1
+ if fields.key_up or fields.key_down then
+ if fields.key_up and oldidx and oldidx > 1 then
+ newidx = oldidx - 1
+ elseif fields.key_down and oldidx and
+ oldidx < menudata.worldlist:size() then
+ newidx = oldidx + 1
end
+ core.setting_set(settingname, menudata.worldlist:get_raw_index(newidx))
+ configure_selected_world_params(newidx)
return true
end
-
- if fields["key_down"] then
- local oldidx = core.get_textlist_index(textlist)
-
- if oldidx ~= nil and oldidx < menudata.worldlist:size() then
- local newidx = oldidx + 1
- core.setting_set(settingname,
- menudata.worldlist:get_raw_index(newidx))
-
- configure_selected_world_params(newidx)
- end
-
- return true
- end
-
return false
end
--------------------------------------------------------------------------------
function asyncOnlineFavourites()
-
if not menudata.public_known then
menudata.public_known = {{
name = fgettext("Loading..."),
@@ -241,60 +202,77 @@ function asyncOnlineFavourites()
}}
end
menudata.favorites = menudata.public_known
+ menudata.favorites_is_public = true
+
+ if not menudata.public_downloading then
+ menudata.public_downloading = true
+ else
+ return
+ end
+
core.handle_async(
function(param)
return core.get_favorites("online")
end,
nil,
function(result)
- if core.setting_getbool("public_serverlist") then
- local favs = order_favorite_list(result)
- if favs[1] then
- menudata.public_known = favs
- menudata.favorites = menudata.public_known
- end
- core.event_handler("Refresh")
+ menudata.public_downloading = nil
+ local favs = order_favorite_list(result)
+ if favs[1] then
+ menudata.public_known = favs
+ menudata.favorites = menudata.public_known
+ menudata.favorites_is_public = true
end
+ core.event_handler("Refresh")
end
)
end
--------------------------------------------------------------------------------
-function text2textlist(xpos,ypos,width,height,tl_name,textlen,text,transparency)
- local textlines = core.splittext(text,textlen)
-
- local retval = "textlist[" .. xpos .. "," .. ypos .. ";"
- .. width .. "," .. height .. ";"
- .. tl_name .. ";"
+function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transparency)
+ local textlines = core.splittext(text, textlen)
+ local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width ..
+ "," .. height .. ";" .. tl_name .. ";"
- for i=1, #textlines, 1 do
- textlines[i] = textlines[i]:gsub("\r","")
+ for i = 1, #textlines do
+ textlines[i] = textlines[i]:gsub("\r", "")
retval = retval .. core.formspec_escape(textlines[i]) .. ","
end
retval = retval .. ";0;"
-
- if transparency then
- retval = retval .. "true"
- end
-
+ if transparency then retval = retval .. "true" end
retval = retval .. "]"
return retval
end
--------------------------------------------------------------------------------
-function is_server_protocol_compat(proto_min, proto_max)
- return not ((min_supp_proto > (proto_max or 24)) or (max_supp_proto < (proto_min or 13)))
+function is_server_protocol_compat(server_proto_min, server_proto_max)
+ return min_supp_proto <= (server_proto_max or 24) and max_supp_proto >= (server_proto_min or 13)
end
--------------------------------------------------------------------------------
-function is_server_protocol_compat_or_error(proto_min, proto_max)
- if not is_server_protocol_compat(proto_min, proto_max) then
- gamedata.errormessage = fgettext_ne("Protocol version mismatch, server " ..
- ((proto_min ~= proto_max) and "supports protocols between $1 and $2" or "enforces protocol version $1") ..
- ", we " ..
- ((min_supp_proto ~= max_supp_proto) and "support protocols between version $3 and $4." or "only support protocol version $3"),
- proto_min or 13, proto_max or 24, min_supp_proto, max_supp_proto)
+function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
+ if not is_server_protocol_compat(server_proto_min, server_proto_max) then
+ local server_prot_ver_info, client_prot_ver_info
+ local s_p_min = server_proto_min or 13
+ local s_p_max = server_proto_max or 24
+
+ if s_p_min ~= s_p_max then
+ server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ",
+ s_p_min, s_p_max)
+ else
+ server_prot_ver_info = fgettext_ne("Server enforces protocol version $1. ",
+ s_p_min)
+ end
+ if min_supp_proto ~= max_supp_proto then
+ client_prot_ver_info= fgettext_ne("We support protocol versions between version $1 and $2.",
+ min_supp_proto, max_supp_proto)
+ else
+ client_prot_ver_info = fgettext_ne("We only support protocol version $1.", min_supp_proto)
+ end
+ gamedata.errormessage = fgettext_ne("Protocol version mismatch. ")
+ .. server_prot_ver_info
+ .. client_prot_ver_info
return false
end
@@ -307,7 +285,7 @@ function menu_worldmt(selected, setting, value)
local filename = world.path .. DIR_DELIM .. "world.mt"
local world_conf = Settings(filename)
- if value ~= nil then
+ if value then
if not world_conf:write() then
core.log("error", "Failed to write world config file")
end
@@ -325,7 +303,7 @@ function menu_worldmt_legacy(selected)
local modes_names = {"creative_mode", "enable_damage", "server_announce"}
for _, mode_name in pairs(modes_names) do
local mode_val = menu_worldmt(selected, mode_name)
- if mode_val ~= nil then
+ if mode_val then
core.setting_set(mode_name, mode_val)
else
menu_worldmt(selected, mode_name, core.setting_get(mode_name))
diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua
index 4d13faea8..eb0319ba0 100644
--- a/builtin/mainmenu/dlg_config_world.lua
+++ b/builtin/mainmenu/dlg_config_world.lua
@@ -25,20 +25,20 @@ local function get_formspec(data)
local mod = data.list:get_list()[data.selected_mod]
local retval =
- "size[11,6.5,true]" ..
- "label[0.5,-0.25;" .. fgettext("World:") .. "]" ..
- "label[1.75,-0.25;" .. data.worldspec.name .. "]"
+ "size[11.5,7.5,true]" ..
+ "label[0.5,0;" .. fgettext("World:") .. "]" ..
+ "label[1.75,0;" .. data.worldspec.name .. "]"
if data.hide_gamemods then
- retval = retval .. "checkbox[0,5.75;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";true]"
+ retval = retval .. "checkbox[1,6;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";true]"
else
- retval = retval .. "checkbox[0,5.75;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";false]"
+ retval = retval .. "checkbox[1,6;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";false]"
end
if data.hide_modpackcontents then
- retval = retval .. "checkbox[2,5.75;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";true]"
+ retval = retval .. "checkbox[6,6;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";true]"
else
- retval = retval .. "checkbox[2,5.75;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";false]"
+ retval = retval .. "checkbox[6,6;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";false]"
end
if mod == nil then
@@ -46,13 +46,13 @@ local function get_formspec(data)
end
retval = retval ..
- "label[0,0.45;" .. fgettext("Mod:") .. "]" ..
- "label[0.75,0.45;" .. mod.name .. "]" ..
- "label[0,1;" .. fgettext("Depends:") .. "]" ..
- "textlist[0,1.5;5,4.25;world_config_depends;" ..
+ "label[0,0.7;" .. fgettext("Mod:") .. "]" ..
+ "label[0.75,0.7;" .. mod.name .. "]" ..
+ "label[0,1.25;" .. fgettext("Depends:") .. "]" ..
+ "textlist[0,1.75;5,4.25;world_config_depends;" ..
modmgr.get_dependencies(mod.path) .. ";0]" ..
- "button[9.25,6.35;2,0.5;btn_config_world_save;" .. fgettext("Save") .. "]" ..
- "button[7.4,6.35;2,0.5;btn_config_world_cancel;" .. fgettext("Cancel") .. "]"
+ "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") .. "]"
if mod ~= nil and mod.name ~= "" and mod.typ ~= "game_mod" then
if mod.is_modpack then
@@ -68,22 +68,22 @@ local function get_formspec(data)
end
if all_enabled == false then
- retval = retval .. "button[5.5,-0.125;2,0.5;btn_mp_enable;" .. fgettext("Enable MP") .. "]"
+ retval = retval .. "button[5.5,0.125;2.5,0.5;btn_mp_enable;" .. fgettext("Enable MP") .. "]"
else
- retval = retval .. "button[5.5,-0.125;2,0.5;btn_mp_disable;" .. fgettext("Disable MP") .. "]"
+ retval = retval .. "button[5.5,0.125;2.5,0.5;btn_mp_disable;" .. fgettext("Disable MP") .. "]"
end
else
if mod.enabled then
- retval = retval .. "checkbox[5.5,-0.375;cb_mod_enable;" .. fgettext("enabled") .. ";true]"
+ retval = retval .. "checkbox[5.5,-0.125;cb_mod_enable;" .. fgettext("enabled") .. ";true]"
else
- retval = retval .. "checkbox[5.5,-0.375;cb_mod_enable;" .. fgettext("enabled") .. ";false]"
+ retval = retval .. "checkbox[5.5,-0.125;cb_mod_enable;" .. fgettext("enabled") .. ";false]"
end
end
end
retval = retval ..
- "button[8.5,-0.125;2.5,0.5;btn_all_mods;" .. fgettext("Enable all") .. "]" ..
- "textlist[5.5,0.5;5.5,5.75;world_config_modlist;"
+ "button[8.75,0.125;2.5,0.5;btn_all_mods;" .. fgettext("Enable all") .. "]" ..
+ "textlist[5.5,0.75;5.75,5.25;world_config_modlist;"
retval = retval .. modmgr.render_modlist(data.list)
retval = retval .. ";" .. data.selected_mod .."]"
diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua
index b42d119e0..477b8bcb9 100644
--- a/builtin/mainmenu/dlg_create_world.lua
+++ b/builtin/mainmenu/dlg_create_world.lua
@@ -46,7 +46,7 @@ local function create_world_formspec(dialogdata)
current_seed = core.formspec_escape(current_seed)
local retval =
- "size[12,6,true]" ..
+ "size[11.5,6.5,true]" ..
"label[2,0;" .. fgettext("World name") .. "]"..
"field[4.5,0.4;6,0.5;te_world_name;;]" ..
@@ -60,8 +60,8 @@ local function create_world_formspec(dialogdata)
"textlist[4.2,3;5.8,2.3;games;" .. gamemgr.gamelist() ..
";" .. gameidx .. ";true]" ..
- "button[5,5.5;2.6,0.5;world_create_confirm;" .. fgettext("Create") .. "]" ..
- "button[7.5,5.5;2.8,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
+ "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") .. "]"
if #gamemgr.games == 0 then
retval = retval .. "box[2,4;8,1;#ff8800]label[2.25,4;" ..
diff --git a/builtin/mainmenu/dlg_delete_mod.lua b/builtin/mainmenu/dlg_delete_mod.lua
index 6e00b8045..2efd70414 100644
--- a/builtin/mainmenu/dlg_delete_mod.lua
+++ b/builtin/mainmenu/dlg_delete_mod.lua
@@ -22,10 +22,11 @@ local function delete_mod_formspec(dialogdata)
dialogdata.mod = modmgr.global_mods:get_list()[dialogdata.selected]
local retval =
- "size[12.4,5,true]" ..
- "field[1.75,1;10,3;;" .. fgettext("Are you sure you want to delete \"$1\"?", dialogdata.mod.name) .. ";]"..
- "button[4,4.2;1,0.5;dlg_delete_mod_confirm;" .. fgettext("Yes") .. "]" ..
- "button[6.5,4.2;3,0.5;dlg_delete_mod_cancel;" .. fgettext("No of course not!") .. "]"
+ "size[11.5,4.5,true]" ..
+ "label[2,2;" ..
+ fgettext("Are you sure you want to delete \"$1\"?", dialogdata.mod.name) .. "]"..
+ "button[3.25,3.5;2.5,0.5;dlg_delete_mod_confirm;" .. fgettext("Delete") .. "]" ..
+ "button[5.75,3.5;2.5,0.5;dlg_delete_mod_cancel;" .. fgettext("Cancel") .. "]"
return retval
end
diff --git a/builtin/mainmenu/dlg_delete_world.lua b/builtin/mainmenu/dlg_delete_world.lua
index aa710ef3b..1e5af1feb 100644
--- a/builtin/mainmenu/dlg_delete_world.lua
+++ b/builtin/mainmenu/dlg_delete_world.lua
@@ -19,11 +19,11 @@
local function delete_world_formspec(dialogdata)
local retval =
- "size[12,6,true]" ..
+ "size[11.5,4.5,true]" ..
"label[2,2;" ..
- fgettext("Delete World \"$1\"?", dialogdata.delete_name) .. "]"..
- "button[3.5,4.2;2.6,0.5;world_delete_confirm;" .. fgettext("Yes").. "]" ..
- "button[6,4.2;2.8,0.5;world_delete_cancel;" .. fgettext("No") .. "]"
+ fgettext("Delete World \"$1\"?", dialogdata.delete_name) .. "]" ..
+ "button[3.25,3.5;2.5,0.5;world_delete_confirm;" .. fgettext("Delete") .. "]" ..
+ "button[5.75,3.5;2.5,0.5;world_delete_cancel;" .. fgettext("Cancel") .. "]"
return retval
end
diff --git a/builtin/mainmenu/dlg_rename_modpack.lua b/builtin/mainmenu/dlg_rename_modpack.lua
index 9e252408a..959c65d9b 100644
--- a/builtin/mainmenu/dlg_rename_modpack.lua
+++ b/builtin/mainmenu/dlg_rename_modpack.lua
@@ -22,14 +22,12 @@ local function rename_modpack_formspec(dialogdata)
dialogdata.mod = modmgr.global_mods:get_list()[dialogdata.selected]
local retval =
- "size[12.4,5,true]" ..
- "label[1.75,1;".. fgettext("Rename Modpack:") .. "]"..
- "field[4.5,1.4;6,0.5;te_modpack_name;;" ..
- dialogdata.mod.name ..
- "]" ..
- "button[5,4.2;2.6,0.5;dlg_rename_modpack_confirm;"..
+ "size[11.5,4.5,true]" ..
+ "field[2.5,2;7,0.5;te_modpack_name;".. fgettext("Rename Modpack:") .. ";" ..
+ dialogdata.mod.name .. "]" ..
+ "button[3.25,3.5;2.5,0.5;dlg_rename_modpack_confirm;"..
fgettext("Accept") .. "]" ..
- "button[7.5,4.2;2.8,0.5;dlg_rename_modpack_cancel;"..
+ "button[5.75,3.5;2.5,0.5;dlg_rename_modpack_cancel;"..
fgettext("Cancel") .. "]"
return retval
diff --git a/builtin/mainmenu/dlg_settings_advanced.lua b/builtin/mainmenu/dlg_settings_advanced.lua
new file mode 100644
index 000000000..f5e80c252
--- /dev/null
+++ b/builtin/mainmenu/dlg_settings_advanced.lua
@@ -0,0 +1,760 @@
+--Minetest
+--Copyright (C) 2015 PilzAdam
+--
+--This program is free software; you can redistribute it and/or modify
+--it under the terms of the GNU Lesser General Public License as published by
+--the Free Software Foundation; either version 2.1 of the License, or
+--(at your option) any later version.
+--
+--This program is distributed in the hope that it will be useful,
+--but WITHOUT ANY WARRANTY; without even the implied warranty of
+--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+--GNU Lesser General Public License for more details.
+--
+--You should have received a copy of the GNU Lesser General Public License along
+--with this program; if not, write to the Free Software Foundation, Inc.,
+--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+local FILENAME = "settingtypes.txt"
+
+local CHAR_CLASSES = {
+ SPACE = "[%s]",
+ VARIABLE = "[%w_%-%.]",
+ INTEGER = "[+-]?[%d]",
+ FLOAT = "[+-]?[%d%.]",
+ FLAGS = "[%w_%-%.,]",
+}
+
+-- returns error message, or nil
+local function parse_setting_line(settings, line, read_all, base_level, allow_secure)
+ -- comment
+ local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$")
+ if comment then
+ if settings.current_comment == "" then
+ settings.current_comment = comment
+ else
+ settings.current_comment = settings.current_comment .. "\n" .. comment
+ end
+ return
+ end
+
+ -- clear current_comment so only comments directly above a setting are bound to it
+ -- but keep a local reference to it for variables in the current line
+ local current_comment = settings.current_comment
+ settings.current_comment = ""
+
+ -- empty lines
+ if line:match("^" .. CHAR_CLASSES.SPACE .. "*$") then
+ return
+ end
+
+ -- category
+ local stars, category = line:match("^%[([%*]*)([^%]]+)%]$")
+ if category then
+ table.insert(settings, {
+ name = category,
+ level = stars:len() + base_level,
+ type = "category",
+ })
+ return
+ end
+
+ -- settings
+ local first_part, name, readable_name, setting_type = line:match("^"
+ -- this first capture group matches the whole first part,
+ -- so we can later strip it from the rest of the line
+ .. "("
+ .. "([" .. CHAR_CLASSES.VARIABLE .. "+)" -- variable name
+ .. CHAR_CLASSES.SPACE .. "*"
+ .. "%(([^%)]*)%)" -- readable name
+ .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.VARIABLE .. "+)" -- type
+ .. CHAR_CLASSES.SPACE .. "*"
+ .. ")")
+
+ if not first_part then
+ return "Invalid line"
+ end
+
+ if name:match("secure%.[.]*") and not allow_secure then
+ return "Tried to add \"secure.\" setting"
+ end
+
+ if readable_name == "" then
+ readable_name = nil
+ end
+ local remaining_line = line:sub(first_part:len() + 1)
+
+ if setting_type == "int" then
+ local default, min, max = remaining_line:match("^"
+ -- first int is required, the last 2 are optional
+ .. "(" .. CHAR_CLASSES.INTEGER .. "+)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.INTEGER .. "*)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.INTEGER .. "*)"
+ .. "$")
+
+ if not default or not tonumber(default) then
+ return "Invalid integer setting"
+ end
+
+ min = tonumber(min)
+ max = tonumber(max)
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "int",
+ default = default,
+ min = min,
+ max = max,
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "string" or setting_type == "noise_params"
+ or setting_type == "key" or setting_type == "v3f" then
+ local default = remaining_line:match("^(.*)$")
+
+ if not default then
+ return "Invalid string setting"
+ end
+ if setting_type == "key" and not read_all then
+ -- ignore key type if read_all is false
+ return
+ end
+
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = setting_type,
+ default = default,
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "bool" then
+ if remaining_line ~= "false" and remaining_line ~= "true" then
+ return "Invalid boolean setting"
+ end
+
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "bool",
+ default = remaining_line,
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "float" then
+ local default, min, max = remaining_line:match("^"
+ -- first float is required, the last 2 are optional
+ .. "(" .. CHAR_CLASSES.FLOAT .. "+)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.FLOAT .. "*)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.FLOAT .. "*)"
+ .."$")
+
+ if not default or not tonumber(default) then
+ return "Invalid float setting"
+ end
+
+ min = tonumber(min)
+ max = tonumber(max)
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "float",
+ default = default,
+ min = min,
+ max = max,
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "enum" then
+ local default, values = remaining_line:match("^"
+ -- first value (default) may be empty (i.e. is optional)
+ .. "(" .. CHAR_CLASSES.VARIABLE .. "*)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.FLAGS .. "+)"
+ .. "$")
+
+ if not default or values == "" then
+ return "Invalid enum setting"
+ end
+
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "enum",
+ default = default,
+ values = values:split(",", true),
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "path" then
+ local default = remaining_line:match("^(.*)$")
+
+ if not default then
+ return "Invalid path setting"
+ end
+
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "path",
+ default = default,
+ comment = current_comment,
+ })
+ return
+ end
+
+ if setting_type == "flags" then
+ local default, possible = remaining_line:match("^"
+ -- first value (default) may be empty (i.e. is optional)
+ -- this is implemented by making the last value optional, and
+ -- swapping them around if it turns out empty.
+ .. "(" .. CHAR_CLASSES.FLAGS .. "+)" .. CHAR_CLASSES.SPACE .. "*"
+ .. "(" .. CHAR_CLASSES.FLAGS .. "*)"
+ .. "$")
+
+ if not default or not possible then
+ return "Invalid flags setting"
+ end
+
+ if possible == "" then
+ possible = default
+ default = ""
+ end
+
+ table.insert(settings, {
+ name = name,
+ readable_name = readable_name,
+ type = "flags",
+ default = default,
+ possible = possible,
+ comment = current_comment,
+ })
+ return
+ end
+
+ return "Invalid setting type \"" .. setting_type .. "\""
+end
+
+local function parse_single_file(file, filepath, read_all, result, base_level, allow_secure)
+ -- store this helper variable in the table so it's easier to pass to parse_setting_line()
+ result.current_comment = ""
+
+ local line = file:read("*line")
+ while line do
+ local error_msg = parse_setting_line(result, line, read_all, base_level, allow_secure)
+ if error_msg then
+ core.log("error", error_msg .. " in " .. filepath .. " \"" .. line .. "\"")
+ end
+ line = file:read("*line")
+ end
+
+ result.current_comment = nil
+end
+
+-- read_all: whether to ignore certain setting types for GUI or not
+-- parse_mods: whether to parse settingtypes.txt in mods and games
+local function parse_config_file(read_all, parse_mods)
+ local builtin_path = core.get_builtin_path() .. DIR_DELIM .. FILENAME
+ local file = io.open(builtin_path, "r")
+ local settings = {}
+ if not file then
+ core.log("error", "Can't load " .. FILENAME)
+ return settings
+ end
+
+ parse_single_file(file, builtin_path, read_all, settings, 0, true)
+
+ file:close()
+
+ if parse_mods then
+ -- Parse games
+ local games_category_initialized = false
+ local index = 1
+ local game = gamemgr.get_game(index)
+ while game do
+ local path = game.path .. DIR_DELIM .. FILENAME
+ local file = io.open(path, "r")
+ if file then
+ if not games_category_initialized then
+ local translation = fgettext_ne("Games"), -- not used, but needed for xgettext
+ table.insert(settings, {
+ name = "Games",
+ level = 0,
+ type = "category",
+ })
+ games_category_initialized = true
+ end
+
+ table.insert(settings, {
+ name = game.name,
+ level = 1,
+ type = "category",
+ })
+
+ parse_single_file(file, path, read_all, settings, 2, false)
+
+ file:close()
+ end
+
+ index = index + 1
+ game = gamemgr.get_game(index)
+ end
+
+ -- Parse mods
+ local mods_category_initialized = false
+ local mods = {}
+ get_mods(core.get_modpath(), mods)
+ for _, mod in ipairs(mods) do
+ local path = mod.path .. DIR_DELIM .. FILENAME
+ local file = io.open(path, "r")
+ if file then
+ if not mods_category_initialized then
+ local translation = fgettext_ne("Mods"), -- not used, but needed for xgettext
+ table.insert(settings, {
+ name = "Mods",
+ level = 0,
+ type = "category",
+ })
+ mods_category_initialized = true
+ end
+
+ table.insert(settings, {
+ name = mod.name,
+ level = 1,
+ type = "category",
+ })
+
+ parse_single_file(file, path, read_all, settings, 2, false)
+
+ file:close()
+ end
+ end
+ end
+
+ return settings
+end
+
+local settings = parse_config_file(false, true)
+local selected_setting = 1
+
+local function get_current_value(setting)
+ local value = core.setting_get(setting.name)
+ if value == nil then
+ value = setting.default
+ end
+ return value
+end
+
+local function create_change_setting_formspec(dialogdata)
+ local setting = settings[selected_setting]
+ local formspec = "size[10,5.2,true]" ..
+ "button[5,4.5;2,1;btn_done;" .. fgettext("Save") .. "]" ..
+ "button[3,4.5;2,1;btn_cancel;" .. fgettext("Cancel") .. "]" ..
+ "tablecolumns[color;text]" ..
+ "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
+ "table[0,0;10,3;info;"
+
+ if setting.readable_name then
+ formspec = formspec .. "#FFFF00," .. fgettext(setting.readable_name)
+ .. " (" .. core.formspec_escape(setting.name) .. "),"
+ else
+ formspec = formspec .. "#FFFF00," .. core.formspec_escape(setting.name) .. ","
+ end
+
+ formspec = formspec .. ",,"
+
+ local comment_text = ""
+
+ if setting.comment == "" then
+ comment_text = fgettext_ne("(No description of setting given)")
+ else
+ comment_text = fgettext_ne(setting.comment)
+ end
+ for _, comment_line in ipairs(comment_text:split("\n", true)) do
+ formspec = formspec .. "," .. core.formspec_escape(comment_line) .. ","
+ end
+
+ if setting.type == "flags" then
+ formspec = formspec .. ",,"
+ .. "," .. fgettext("Please enter a comma seperated list of flags.") .. ","
+ .. "," .. fgettext("Possible values are: ")
+ .. core.formspec_escape(setting.possible:gsub(",", ", ")) .. ","
+ elseif setting.type == "noise_params" then
+ formspec = formspec .. ",,"
+ .. "," .. fgettext("Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistence>") .. ","
+ .. "," .. fgettext("Optionally the lacunarity can be appended with a leading comma.") .. ","
+ elseif setting.type == "v3f" then
+ formspec = formspec .. ",,"
+ .. "," .. fgettext_ne("Format is 3 numbers separated by commas and inside brackets.") .. ","
+ end
+
+ formspec = formspec:sub(1, -2) -- remove trailing comma
+
+ formspec = formspec .. ";1]"
+
+ if setting.type == "bool" then
+ local selected_index
+ if core.is_yes(get_current_value(setting)) then
+ selected_index = 2
+ else
+ selected_index = 1
+ end
+ formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;"
+ .. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";"
+ .. selected_index .. "]"
+
+ elseif setting.type == "enum" then
+ local selected_index = 0
+ formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;"
+ for index, value in ipairs(setting.values) do
+ -- translating value is not possible, since it's the value
+ -- that we set the setting to
+ formspec = formspec .. core.formspec_escape(value) .. ","
+ if get_current_value(setting) == value then
+ selected_index = index
+ end
+ end
+ if #setting.values > 0 then
+ formspec = formspec:sub(1, -2) -- remove trailing comma
+ end
+ formspec = formspec .. ";" .. selected_index .. "]"
+
+ elseif setting.type == "path" then
+ local current_value = dialogdata.selected_path
+ if not current_value then
+ current_value = get_current_value(setting)
+ end
+ formspec = formspec .. "field[0.5,4;7.5,1;te_setting_value;;"
+ .. core.formspec_escape(current_value) .. "]"
+ .. "button[8,3.75;2,1;btn_browser_path;" .. fgettext("Browse") .. "]"
+
+ else
+ -- TODO: fancy input for float, int, flags, noise_params, v3f
+ local width = 10
+ local text = get_current_value(setting)
+ if dialogdata.error_message then
+ formspec = formspec .. "tablecolumns[color;text]" ..
+ "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
+ "table[5,3.9;5,0.6;error_message;#FF0000,"
+ .. core.formspec_escape(dialogdata.error_message) .. ";0]"
+ width = 5
+ if dialogdata.entered_text then
+ text = dialogdata.entered_text
+ end
+ end
+ formspec = formspec .. "field[0.5,4;" .. width .. ",1;te_setting_value;;"
+ .. core.formspec_escape(text) .. "]"
+ end
+ return formspec
+end
+
+local function handle_change_setting_buttons(this, fields)
+ if fields["btn_done"] or fields["key_enter"] then
+ local setting = settings[selected_setting]
+ if setting.type == "bool" then
+ local new_value = fields["dd_setting_value"]
+ -- Note: new_value is the actual (translated) value shown in the dropdown
+ core.setting_setbool(setting.name, new_value == fgettext("Enabled"))
+
+ elseif setting.type == "enum" then
+ local new_value = fields["dd_setting_value"]
+ core.setting_set(setting.name, new_value)
+
+ elseif setting.type == "int" then
+ local new_value = tonumber(fields["te_setting_value"])
+ if not new_value or math.floor(new_value) ~= new_value then
+ this.data.error_message = fgettext_ne("Please enter a valid integer.")
+ this.data.entered_text = fields["te_setting_value"]
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+ if setting.min and new_value < setting.min then
+ this.data.error_message = fgettext_ne("The value must be greater than $1.", setting.min)
+ this.data.entered_text = fields["te_setting_value"]
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+ if setting.max and new_value > setting.max then
+ this.data.error_message = fgettext_ne("The value must be lower than $1.", setting.max)
+ this.data.entered_text = fields["te_setting_value"]
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+ core.setting_set(setting.name, new_value)
+
+ elseif setting.type == "float" then
+ local new_value = tonumber(fields["te_setting_value"])
+ if not new_value then
+ this.data.error_message = fgettext_ne("Please enter a valid number.")
+ this.data.entered_text = fields["te_setting_value"]
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+ core.setting_set(setting.name, new_value)
+
+ elseif setting.type == "flags" then
+ local new_value = fields["te_setting_value"]
+ for _,value in ipairs(new_value:split(",", true)) do
+ value = value:trim()
+ local possible = "," .. setting.possible .. ","
+ if not possible:find("," .. value .. ",", 0, true) then
+ this.data.error_message = fgettext_ne("\"$1\" is not a valid flag.", value)
+ this.data.entered_text = fields["te_setting_value"]
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+ end
+ core.setting_set(setting.name, new_value)
+
+ else
+ local new_value = fields["te_setting_value"]
+ core.setting_set(setting.name, new_value)
+ end
+ core.setting_save()
+ this:delete()
+ return true
+ end
+
+ if fields["btn_cancel"] then
+ this:delete()
+ return true
+ end
+
+ if fields["btn_browser_path"] then
+ core.show_file_open_dialog("dlg_browse_path", fgettext_ne("Select path"))
+ end
+
+ if fields["dlg_browse_path_accepted"] then
+ this.data.selected_path = fields["dlg_browse_path_accepted"]
+ core.update_formspec(this:get_formspec())
+ end
+
+ return false
+end
+
+local function create_settings_formspec(tabview, name, tabdata)
+ local formspec = "size[12,6.5;true]" ..
+ "tablecolumns[color;tree;text;text]" ..
+ "tableoptions[background=#00000000;border=false]" ..
+ "table[0,0;12,5.5;list_settings;"
+
+ local current_level = 0
+ for _, entry in ipairs(settings) do
+ local name
+ if not core.setting_getbool("main_menu_technical_settings") and entry.readable_name then
+ name = fgettext_ne(entry.readable_name)
+ else
+ name = entry.name
+ end
+
+ if entry.type == "category" then
+ current_level = entry.level
+ formspec = formspec .. "#FFFF00," .. current_level .. "," .. fgettext(name) .. ",,"
+
+ elseif entry.type == "bool" then
+ local value = get_current_value(entry)
+ if core.is_yes(value) then
+ value = fgettext("Enabled")
+ else
+ value = fgettext("Disabled")
+ end
+ formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. ","
+ .. value .. ","
+
+ elseif entry.type == "key" then
+ -- ignore key settings, since we have a special dialog for them
+
+ else
+ formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. ","
+ .. core.formspec_escape(get_current_value(entry)) .. ","
+ end
+ end
+
+ if #settings > 0 then
+ formspec = formspec:sub(1, -2) -- remove trailing comma
+ end
+ formspec = formspec .. ";" .. selected_setting .. "]" ..
+ "button[0,6;4,1;btn_back;".. fgettext("< Back to Settings page") .. "]" ..
+ "button[10,6;2,1;btn_edit;" .. fgettext("Edit") .. "]" ..
+ "button[7,6;3,1;btn_restore;" .. fgettext("Restore Default") .. "]" ..
+ "checkbox[0,5.3;cb_tech_settings;" .. fgettext("Show technical names") .. ";"
+ .. dump(core.setting_getbool("main_menu_technical_settings")) .. "]"
+
+ return formspec
+end
+
+local function handle_settings_buttons(this, fields, tabname, tabdata)
+ local list_enter = false
+ if fields["list_settings"] then
+ selected_setting = core.get_table_index("list_settings")
+ if core.explode_table_event(fields["list_settings"]).type == "DCL" then
+ -- Directly toggle booleans
+ local setting = settings[selected_setting]
+ if setting.type == "bool" then
+ local current_value = get_current_value(setting)
+ core.setting_setbool(setting.name, not core.is_yes(current_value))
+ core.setting_save()
+ return true
+ else
+ list_enter = true
+ end
+ else
+ return true
+ end
+ end
+
+ if fields["btn_edit"] or list_enter then
+ local setting = settings[selected_setting]
+ if setting.type ~= "category" then
+ local edit_dialog = dialog_create("change_setting", create_change_setting_formspec,
+ handle_change_setting_buttons)
+ edit_dialog:set_parent(this)
+ this:hide()
+ edit_dialog:show()
+ end
+ return true
+ end
+
+ if fields["btn_restore"] then
+ local setting = settings[selected_setting]
+ if setting.type ~= "category" then
+ core.setting_set(setting.name, setting.default)
+ core.setting_save()
+ core.update_formspec(this:get_formspec())
+ end
+ return true
+ end
+
+ if fields["btn_back"] then
+ this:delete()
+ return true
+ end
+
+ if fields["cb_tech_settings"] then
+ core.setting_set("main_menu_technical_settings", fields["cb_tech_settings"])
+ core.setting_save()
+ core.update_formspec(this:get_formspec())
+ return true
+ end
+
+ return false
+end
+
+function create_adv_settings_dlg()
+ local dlg = dialog_create("settings_advanced",
+ create_settings_formspec,
+ handle_settings_buttons,
+ nil)
+
+ return dlg
+end
+
+local function create_minetest_conf_example()
+ local result = "# This file contains a list of all available settings and their default value for minetest.conf\n" ..
+ "\n" ..
+ "# By default, all the settings are commented and not functional.\n" ..
+ "# Uncomment settings by removing the preceding #.\n" ..
+ "\n" ..
+ "# minetest.conf is read by default from:\n" ..
+ "# ../minetest.conf\n" ..
+ "# ../../minetest.conf\n" ..
+ "# Any other path can be chosen by passing the path as a parameter\n" ..
+ "# to the program, eg. \"minetest.exe --config ../minetest.conf.example\".\n" ..
+ "\n" ..
+ "# Further documentation:\n" ..
+ "# http://wiki.minetest.net/\n" ..
+ "\n"
+
+ local settings = parse_config_file(true, false)
+ for _, entry in ipairs(settings) do
+ if entry.type == "category" then
+ if entry.level == 0 then
+ result = result .. "#\n# " .. entry.name .. "\n#\n\n"
+ else
+ for i = 1, entry.level do
+ result = result .. "#"
+ end
+ result = result .. "# " .. entry.name .. "\n\n"
+ end
+ else
+ if entry.comment ~= "" then
+ for _, comment_line in ipairs(entry.comment:split("\n", true)) do
+ result = result .."# " .. comment_line .. "\n"
+ end
+ end
+ result = result .. "# type: " .. entry.type
+ if entry.min then
+ result = result .. " min: " .. entry.min
+ end
+ if entry.max then
+ result = result .. " max: " .. entry.max
+ end
+ if entry.values then
+ result = result .. " values: " .. table.concat(entry.values, ", ")
+ end
+ if entry.possible then
+ result = result .. " possible values: " .. entry.possible:gsub(",", ", ")
+ end
+ result = result .. "\n"
+ local append = ""
+ if entry.default ~= "" then
+ append = " " .. entry.default
+ end
+ result = result .. "# " .. entry.name .. " =" .. append .. "\n\n"
+ end
+ end
+ return result
+end
+
+local function create_translation_file()
+ local result = "// This file is automatically generated\n" ..
+ "// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files\n" ..
+ "// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua\n\n" ..
+ "fake_function() {\n"
+
+ local settings = parse_config_file(true, false)
+ for _, entry in ipairs(settings) do
+ if entry.type == "category" then
+ local name_escaped = entry.name:gsub("\"", "\\\"")
+ result = result .. "\tgettext(\"" .. name_escaped .. "\");\n"
+ else
+ if entry.readable_name then
+ local readable_name_escaped = entry.readable_name:gsub("\"", "\\\"")
+ result = result .. "\tgettext(\"" .. readable_name_escaped .. "\");\n"
+ end
+ if entry.comment ~= "" then
+ local comment_escaped = entry.comment:gsub("\n", "\\n")
+ comment_escaped = comment_escaped:gsub("\"", "\\\"")
+ result = result .. "\tgettext(\"" .. comment_escaped .. "\");\n"
+ end
+ end
+ end
+ result = result .. "}\n"
+ return result
+end
+
+if false then
+ local file = io.open("minetest.conf.example", "w")
+ if file then
+ file:write(create_minetest_conf_example())
+ file:close()
+ end
+end
+
+if false then
+ local file = io.open("src/settings_translation_file.cpp", "w")
+ if file then
+ file:write(create_translation_file())
+ file:close()
+ end
+end
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua
index 176796bef..7f0c1e386 100644
--- a/builtin/mainmenu/init.lua
+++ b/builtin/mainmenu/init.lua
@@ -37,22 +37,29 @@ dofile(menupath .. DIR_DELIM .. "common.lua")
dofile(menupath .. DIR_DELIM .. "gamemgr.lua")
dofile(menupath .. DIR_DELIM .. "modmgr.lua")
dofile(menupath .. DIR_DELIM .. "store.lua")
+dofile(menupath .. DIR_DELIM .. "textures.lua")
+
dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
-dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
-dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
-dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
+dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua")
if PLATFORM ~= "Android" then
dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
- dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
- dofile(menupath .. DIR_DELIM .. "tab_server.lua")
- dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
- dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
- dofile(menupath .. DIR_DELIM .. "textures.lua")
+end
+
+local tabs = {}
+
+tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
+tabs.mods = dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
+tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
+if PLATFORM == "Android" then
+ tabs.simple_main = dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
else
- dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
+ tabs.singleplayer = dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
+ tabs.multiplayer = dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
+ tabs.server = dofile(menupath .. DIR_DELIM .. "tab_server.lua")
+ tabs.texturepacks = dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
end
--------------------------------------------------------------------------------
@@ -68,8 +75,34 @@ local function init_globals()
-- Init gamedata
gamedata.worldindex = 0
+ if PLATFORM == "Android" then
+ local world_list = core.get_worlds()
+ local world_index
- if PLATFORM ~= "Android" then
+ local found_singleplayerworld = false
+ for i, world in ipairs(world_list) do
+ if world.name == "singleplayerworld" then
+ found_singleplayerworld = true
+ world_index = i
+ break
+ end
+ end
+
+ if not found_singleplayerworld then
+ core.create_world("singleplayerworld", 1)
+
+ world_list = core.get_worlds()
+
+ for i, world in ipairs(world_list) do
+ if world.name == "singleplayerworld" then
+ world_index = i
+ break
+ end
+ end
+ end
+
+ gamedata.worldindex = world_index
+ else
menudata.worldlist = filterlist.create(
core.get_worlds,
compare_worlds,
@@ -88,61 +121,34 @@ local function init_globals()
if not core.setting_get("menu_last_game") then
local default_game = core.setting_get("default_game") or "minetest"
- core.setting_set("menu_last_game", default_game )
+ core.setting_set("menu_last_game", default_game)
end
mm_texture.init()
- else
- local world_list = core.get_worlds()
-
- local found_singleplayerworld = false
-
- for i,world in pairs(world_list) do
- if world.name == "singleplayerworld" then
- found_singleplayerworld = true
- gamedata.worldindex = i
- break
- end
- end
-
- if not found_singleplayerworld then
- core.create_world("singleplayerworld", 1)
-
- local world_list = core.get_worlds()
-
- for i,world in pairs(world_list) do
- if world.name == "singleplayerworld" then
- gamedata.worldindex = i
- break
- end
- end
- end
end
-- Create main tabview
- local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0})
- if PLATFORM ~= "Android" then
- tv_main:set_autosave_tab(true)
- end
- if PLATFORM ~= "Android" then
- tv_main:add(tab_singleplayer)
- tv_main:add(tab_multiplayer)
- tv_main:add(tab_server)
+ local tv_main = tabview_create("maintab", {x = 12, y = 5.2}, {x = 0, y = 0})
+
+ if PLATFORM == "Android" then
+ tv_main:add(tabs.simple_main)
+ tv_main:add(tabs.settings)
else
- tv_main:add(tab_simple_main)
- end
- tv_main:add(tab_settings)
- if PLATFORM ~= "Android" then
- tv_main:add(tab_texturepacks)
+ tv_main:set_autosave_tab(true)
+ tv_main:add(tabs.singleplayer)
+ tv_main:add(tabs.multiplayer)
+ tv_main:add(tabs.server)
+ tv_main:add(tabs.settings)
+ tv_main:add(tabs.texturepacks)
end
- tv_main:add(tab_mods)
- tv_main:add(tab_credits)
- tv_main:set_global_event_handler(main_event_handler)
+ tv_main:add(tabs.mods)
+ tv_main:add(tabs.credits)
+ tv_main:set_global_event_handler(main_event_handler)
tv_main:set_fixed_size(false)
- if not (PLATFORM == "Android") then
+ if PLATFORM ~= "Android" then
tv_main:set_tab(core.setting_get("maintab_LAST"))
end
ui.set_default("maintab")
@@ -150,9 +156,9 @@ local function init_globals()
-- Create modstore ui
if PLATFORM == "Android" then
- modstore.init({x=12, y=6}, 3, 2)
+ modstore.init({x = 12, y = 6}, 3, 2)
else
- modstore.init({x=12, y=8}, 4, 3)
+ modstore.init({x = 12, y = 8}, 4, 3)
end
ui.update()
diff --git a/builtin/mainmenu/init_simple.lua b/builtin/mainmenu/init_simple.lua
index c3891d21c..298bd834e 100644
--- a/builtin/mainmenu/init_simple.lua
+++ b/builtin/mainmenu/init_simple.lua
@@ -1,4 +1,4 @@
-- helper file to be able to debug the simple menu on PC
-- without messing around with actual menu code!
-PLATFORM="Android"
+PLATFORM = "Android"
dofile("builtin/mainmenu/init.lua")
diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua
index 89292ed52..f996df7ba 100644
--- a/builtin/mainmenu/modmgr.lua
+++ b/builtin/mainmenu/modmgr.lua
@@ -19,29 +19,29 @@
function get_mods(path,retval,modpack)
local mods = core.get_dir_list(path, true)
- for i=1, #mods, 1 do
- if mods[i]:sub(1,1) ~= "." then
+ for _, name in ipairs(mods) do
+ if name:sub(1, 1) ~= "." then
+ local prefix = path .. DIR_DELIM .. name .. DIR_DELIM
local toadd = {}
- local modpackfile = nil
+ retval[#retval + 1] = toadd
- toadd.name = mods[i]
- toadd.path = path .. DIR_DELIM .. mods[i] .. DIR_DELIM
- if modpack ~= nil and
- modpack ~= "" then
- toadd.modpack = modpack
- else
- local filename = path .. DIR_DELIM .. mods[i] .. DIR_DELIM .. "modpack.txt"
- local error = nil
- modpackfile,error = io.open(filename,"r")
+ local mod_conf = Settings(prefix .. "mod.conf"):to_table()
+ if mod_conf.name then
+ name = mod_conf.name
end
- if modpackfile ~= nil then
- modpackfile:close()
- toadd.is_modpack = true
- table.insert(retval,toadd)
- get_mods(path .. DIR_DELIM .. mods[i],retval,mods[i])
+ toadd.name = name
+ toadd.path = prefix
+
+ if modpack ~= nil and modpack ~= "" then
+ toadd.modpack = modpack
else
- table.insert(retval,toadd)
+ local modpackfile = io.open(prefix .. "modpack.txt")
+ if modpackfile then
+ modpackfile:close()
+ toadd.is_modpack = true
+ get_mods(prefix, retval, name)
+ end
end
end
end
@@ -412,7 +412,7 @@ function modmgr.preparemodlist(data)
for i=1,#global_mods,1 do
global_mods[i].typ = "global_mod"
- table.insert(retval,global_mods[i])
+ retval[#retval + 1] = global_mods[i]
end
--read game mods
@@ -421,7 +421,7 @@ function modmgr.preparemodlist(data)
for i=1,#game_mods,1 do
game_mods[i].typ = "game_mod"
- table.insert(retval,game_mods[i])
+ retval[#retval + 1] = game_mods[i]
end
if data.worldpath == nil then
diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua
index 33c84f58f..4d2ffd7f4 100644
--- a/builtin/mainmenu/tab_credits.lua
+++ b/builtin/mainmenu/tab_credits.lua
@@ -17,64 +17,84 @@
--------------------------------------------------------------------------------
-tab_credits = {
+local core_developers = {
+ "Perttu Ahola (celeron55) <celeron55@gmail.com>",
+ "Ryan Kwolek (kwolekr) <kwolekr@minetest.net>",
+ "PilzAdam <pilzadam@minetest.net>",
+ "sfan5 <sfan5@live.de>",
+ "kahrl <kahrl@gmx.net>",
+ "sapier",
+ "ShadowNinja <shadowninja@minetest.net>",
+ "Nathanaël Courant (Nore/Ekdohibs) <nore@mesecons.net>",
+ "Loic Blot (nerzhul/nrz) <loic.blot@unix-experience.fr>",
+ "Matt Gregory (paramat)",
+ "est31 <MTest31@outlook.com>",
+ "Craig Robbins (Zeno)",
+}
+
+local active_contributors = {
+ "Auke Kok (sofar) <sofar@foo-projects.org>",
+ "Duane Robertson <duane@duanerobertson.com>",
+ "SmallJoker <mk939@ymail.com>",
+ "Andrew Ward (rubenwardy) <rubenwardy@gmail.com>",
+ "Jeija <jeija@mesecons.net>",
+ "Gregory Currie (gregorycu)",
+ "Sokomine <wegwerf@anarres.dyndns.org>",
+ "TeTpaAka",
+ "Jean-Patrick G (kilbith) <jeanpatrick.guerrero@gmail.com>",
+ "Diego Martínez (kaeza) <kaeza@users.sf.net>",
+}
+
+local previous_core_developers = {
+ "BlockMen",
+ "Maciej Kasatkin (RealBadAngel) <maciej.kasatkin@o2.pl>",
+ "Lisa Milne (darkrose) <lisa@ltmnet.com>",
+ "proller",
+ "Ilya Zhuravlev (xyz) <xyz@minetest.net>",
+}
+
+local previous_contributors = {
+ "Vanessa Ezekowitz (VanessaE) <vanessaezekowitz@gmail.com>",
+ "Jurgen Doser (doserj) <jurgen.doser@gmail.com>",
+ "MirceaKitsune <mirceakitsune@gmail.com>",
+ "dannydark <the_skeleton_of_a_child@yahoo.co.uk>",
+ "0gb.us <0gb.us@0gb.us>",
+ "Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com>",
+ "Jonathan Neuschafer <j.neuschaefer@gmx.net>",
+ "Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net>",
+ "Břetislav Štec (t0suj4/TBC_x)",
+ "Aaron Suen <warr1024@gmail.com>",
+ "Constantin Wenger (SpeedProg) <constantin.wenger@googlemail.com>",
+ "matttpt <matttpt@gmail.com>",
+ "JacobF <queatz@gmail.com>",
+ "TriBlade9 <triblade9@mail.com>",
+ "Zefram <zefram@fysh.org>",
+}
+
+return {
name = "credits",
caption = fgettext("Credits"),
- cbf_formspec = function (tabview, name, tabdata)
- local logofile = defaulttexturedir .. "logo.png"
- return "label[0.5,3.2;Minetest " .. core.get_version() .. "]" ..
- "label[0.5,3.5;http://minetest.net]" ..
- "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
- "tablecolumns[color;text]" ..
- "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
- "table[3.5,-0.25;8.5,5.8;list_credits;" ..
- "#FFFF00," .. fgettext("Core Developers") .."," ..
- ",Perttu Ahola (celeron55) <celeron55@gmail.com>,"..
- ",Ryan Kwolek (kwolekr) <kwolekr@minetest.net>,"..
- ",PilzAdam <pilzadam@minetest.net>," ..
- ",sfan5 <sfan5@live.de>,"..
- ",kahrl <kahrl@gmx.net>,"..
- ",sapier,"..
- ",ShadowNinja <shadowninja@minetest.net>,"..
- ",Nathanael Courant (Nore/Ekdohibs) <nore@mesecons.net>,"..
- ",BlockMen,"..
- ",Craig Robbins (Zeno),"..
- ",Loic Blot (nerzhul/nrz) <loic.blot@unix-experience.fr>,"..
- ",Mat Gregory (paramat),"..
- ",est31 <MTest31@outlook.com>," ..
- ",,"..
- "#FFFF00," .. fgettext("Active Contributors") .. "," ..
- ",SmallJoker <mk939@ymail.com>," ..
- ",Andrew Ward (rubenwardy) <rubenwardy@gmail.com>," ..
- ",Aaron Suen <warr1024@gmail.com>," ..
- ",Sokomine <wegwerf@anarres.dyndns.org>," ..
- ",Břetislav Štec (TeTpaAka)," ..
- ",Jean-Patrick G (kilbith) <jeanpatrick.guerrero@gmail.com>," ..
- ",Rui <mrrst0914@gmail.com>," ..
- ",Diego Martinez (kaeza) <kaeza@users.sf.net>," ..
- ",," ..
- "#FFFF00," .. fgettext("Previous Core Developers") .."," ..
- ",Maciej Kasatkin (RealBadAngel) <maciej.kasatkin@o2.pl>,"..
- ",Lisa Milne (darkrose) <lisa@ltmnet.com>," ..
- ",proller," ..
- ",Ilya Zhuravlev (xyz) <xyz@minetest.net>," ..
- ",," ..
- "#FFFF00," .. fgettext("Previous Contributors") .. "," ..
- ",Vanessa Ezekowitz (VanessaE) <vanessaezekowitz@gmail.com>,"..
- ",Jurgen Doser (doserj) <jurgen.doser@gmail.com>,"..
- ",Gregory Currie (gregorycu)," ..
- ",Jeija <jeija@mesecons.net>,"..
- ",MirceaKitsune <mirceakitsune@gmail.com>,"..
- ",dannydark <the_skeleton_of_a_child@yahoo.co.uk>,"..
- ",0gb.us <0gb.us@0gb.us>,"..
- ",Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com>,"..
- ",Jonathan Neuschafer <j.neuschaefer@gmx.net>,"..
- ",Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net>,"..
- ",Constantin Wenger (SpeedProg) <constantin.wenger@googlemail.com>,"..
- ",matttpt <matttpt@gmail.com>,"..
- ",JacobF <queatz@gmail.com>,"..
- ",TriBlade9 <triblade9@mail.com>,"..
- ",Zefram <zefram@fysh.org>,"..
- ";1]"
- end
- }
+ cbf_formspec = function(tabview, name, tabdata)
+ local logofile = defaulttexturedir .. "logo.png"
+ return "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
+ "label[0.5,3.2;Minetest " .. core.get_version() .. "]" ..
+ "label[0.5,3.5;http://minetest.net]" ..
+ "tablecolumns[color;text]" ..
+ "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
+ "table[3.5,-0.25;8.5,5.8;list_credits;" ..
+ "#FFFF00," .. "Dedication of the current release" .. ",," ..
+ "The 0.4.14 release is dedicated to the memory of" .. ",," ..
+ "Minetest developer Maciej Kasatkin (RealBadAngel)" .. ",," ..
+ "who died on March 24 2016." .. ",," ..
+ "Our thoughts are with his family and friends." .. ",,," ..
+ "#FFFF00," .. fgettext("Core Developers") .. ",," ..
+ table.concat(core_developers, ",,") .. ",,," ..
+ "#FFFF00," .. fgettext("Active Contributors") .. ",," ..
+ table.concat(active_contributors, ",,") .. ",,," ..
+ "#FFFF00," .. fgettext("Previous Core Developers") ..",," ..
+ table.concat(previous_core_developers, ",,") .. ",,," ..
+ "#FFFF00," .. fgettext("Previous Contributors") .. ",," ..
+ table.concat(previous_contributors, ",,") .. "," ..
+ ";1]"
+ end
+}
diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua
index 2ddc9b07c..5b59aa110 100644
--- a/builtin/mainmenu/tab_mods.lua
+++ b/builtin/mainmenu/tab_mods.lua
@@ -28,7 +28,7 @@ local function get_formspec(tabview, name, tabdata)
local retval =
"label[0.05,-0.25;".. fgettext("Installed Mods:") .. "]" ..
- "textlist[0,0.25;5.1,4.35;modlist;" ..
+ "textlist[0,0.25;5.1,5;modlist;" ..
modmgr.render_modlist(modmgr.global_mods) ..
";" .. tabdata.selected_mod .. "]"
@@ -78,7 +78,7 @@ local function get_formspec(tabview, name, tabdata)
descriptionfile:close()
else
descriptionlines = {}
- table.insert(descriptionlines,fgettext("No mod description available"))
+ descriptionlines[#descriptionlines + 1] = fgettext("No mod description available")
end
retval = retval ..
@@ -163,7 +163,7 @@ local function handle_buttons(tabview, fields, tabname, tabdata)
end
--------------------------------------------------------------------------------
-tab_mods = {
+return {
name = "mods",
caption = fgettext("Mods"),
cbf_formspec = get_formspec,
diff --git a/builtin/mainmenu/tab_multiplayer.lua b/builtin/mainmenu/tab_multiplayer.lua
index 570259718..00150f26d 100644
--- a/builtin/mainmenu/tab_multiplayer.lua
+++ b/builtin/mainmenu/tab_multiplayer.lua
@@ -17,68 +17,71 @@
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
- local render_details = core.is_yes(core.setting_getbool("public_serverlist"))
-
- local retval =
- "label[7.75,-0.15;" .. fgettext("Address / Port :") .. "]" ..
- "label[7.75,1.05;" .. fgettext("Name / Password :") .. "]" ..
- "field[8,0.75;3.4,0.5;te_address;;" ..
- core.formspec_escape(core.setting_get("address")) .. "]" ..
- "field[11.25,0.75;1.3,0.5;te_port;;" ..
- core.formspec_escape(core.setting_get("remote_port")) .. "]" ..
- "checkbox[0,4.85;cb_public_serverlist;" .. fgettext("Public Serverlist") .. ";" ..
- dump(core.setting_getbool("public_serverlist")) .. "]"
-
- if not core.setting_getbool("public_serverlist") then
- retval = retval ..
- "button[8,4.9;2,0.5;btn_delete_favorite;" .. fgettext("Delete") .. "]"
- end
+ -- Update the cached supported proto info,
+ -- it may have changed after a change by the settings menu.
+ common_update_cached_supp_proto()
+ local fav_selected = menudata.favorites[tabdata.fav_selected]
- retval = retval ..
- "button[10,4.9;2,0.5;btn_mp_connect;" .. fgettext("Connect") .. "]" ..
+ local retval =
+ "label[7.75,-0.15;" .. fgettext("Address / Port") .. "]" ..
+ "label[7.75,1.05;" .. fgettext("Name / Password") .. "]" ..
+ "field[8,0.75;3.3,0.5;te_address;;" ..
+ core.formspec_escape(core.setting_get("address")) .. "]" ..
+ "field[11.15,0.75;1.4,0.5;te_port;;" ..
+ core.formspec_escape(core.setting_get("remote_port")) .. "]" ..
+ "button[10.1,4.9;2,0.5;btn_mp_connect;" .. fgettext("Connect") .. "]" ..
"field[8,1.95;2.95,0.5;te_name;;" ..
- core.formspec_escape(core.setting_get("name")) .. "]" ..
+ core.formspec_escape(core.setting_get("name")) .. "]" ..
"pwdfield[10.78,1.95;1.77,0.5;te_pwd;]" ..
- "box[7.73,2.35;4.3,2.28;#999999]" ..
- "textarea[8.1,2.4;4.26,2.6;;"
-
- if tabdata.fav_selected ~= nil and
- menudata.favorites[tabdata.fav_selected] ~= nil and
- menudata.favorites[tabdata.fav_selected].description ~= nil then
- retval = retval ..
- core.formspec_escape(menudata.favorites[tabdata.fav_selected].description,true)
- end
+ "box[7.73,2.35;4.3,2.28;#999999]"
- retval = retval ..
- ";]"
+ if tabdata.fav_selected and fav_selected then
+ if gamedata.fav then
+ retval = retval .. "button[7.85,4.9;2.3,0.5;btn_delete_favorite;" ..
+ fgettext("Del. Favorite") .. "]"
+ end
+ if fav_selected.description then
+ retval = retval .. "textarea[8.1,2.4;4.26,2.6;;" ..
+ core.formspec_escape((gamedata.serverdescription or ""), true) .. ";]"
+ end
+ end
--favourites
- if render_details then
- retval = retval .. "tablecolumns[" ..
- "color,span=3;" ..
- "text,align=right;" .. -- clients
- "text,align=center,padding=0.25;" .. -- "/"
- "text,align=right,padding=0.25;" .. -- clients_max
- image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
- image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
- image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
- "color,span=1;" ..
- "text,padding=1]" -- name
- else
- retval = retval .. "tablecolumns[text]"
- end
- retval = retval ..
- "table[-0.15,-0.1;7.75,5;favourites;"
+ retval = retval .. "tablecolumns[" ..
+ image_column(fgettext("Favorite"), "favorite") .. ";" ..
+ "color,span=3;" ..
+ "text,align=right;" .. -- clients
+ "text,align=center,padding=0.25;" .. -- "/"
+ "text,align=right,padding=0.25;" .. -- clients_max
+ image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
+ image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
+ image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
+ "color,span=1;" ..
+ "text,padding=1]" ..
+ "table[-0.15,-0.1;7.75,5.5;favourites;"
if #menudata.favorites > 0 then
- retval = retval .. render_favorite(menudata.favorites[1],render_details)
-
- for i=2,#menudata.favorites,1 do
- retval = retval .. "," .. render_favorite(menudata.favorites[i],render_details)
+ local favs = core.get_favorites("local")
+ if #favs > 0 then
+ for i = 1, #favs do
+ for j = 1, #menudata.favorites do
+ if menudata.favorites[j].address == favs[i].address and
+ menudata.favorites[j].port == favs[i].port then
+ table.insert(menudata.favorites, i, table.remove(menudata.favorites, j))
+ end
+ end
+ if favs[i].address ~= menudata.favorites[i].address then
+ table.insert(menudata.favorites, i, favs[i])
+ end
+ end
+ end
+ retval = retval .. render_favorite(menudata.favorites[1], (#favs > 0))
+ for i = 2, #menudata.favorites do
+ retval = retval .. "," .. render_favorite(menudata.favorites[i], (i <= #favs))
end
end
- if tabdata.fav_selected ~= nil then
+ if tabdata.fav_selected then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
@@ -89,36 +92,38 @@ end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
- if fields["te_name"] ~= nil then
- gamedata.playername = fields["te_name"]
- core.setting_set("name", fields["te_name"])
+ if fields.te_name then
+ gamedata.playername = fields.te_name
+ core.setting_set("name", fields.te_name)
end
- if fields["favourites"] ~= nil then
- local event = core.explode_table_event(fields["favourites"])
+ if fields.favourites then
+ local event = core.explode_table_event(fields.favourites)
+ local fav = menudata.favorites[event.row]
+
if event.type == "DCL" then
if event.row <= #menudata.favorites then
- if not is_server_protocol_compat_or_error(menudata.favorites[event.row].proto_min,
- menudata.favorites[event.row].proto_max) then
+ if menudata.favorites_is_public and
+ not is_server_protocol_compat_or_error(
+ fav.proto_min, fav.proto_max) then
return true
end
- gamedata.address = menudata.favorites[event.row].address
- gamedata.port = menudata.favorites[event.row].port
- gamedata.playername = fields["te_name"]
- if fields["te_pwd"] ~= nil then
- gamedata.password = fields["te_pwd"]
- end
+
+ gamedata.address = fav.address
+ gamedata.port = fav.port
+ gamedata.playername = fields.te_name
gamedata.selected_world = 0
- if menudata.favorites ~= nil then
- gamedata.servername = menudata.favorites[event.row].name
- gamedata.serverdescription = menudata.favorites[event.row].description
+ if fields.te_pwd then
+ gamedata.password = fields.te_pwd
end
- if gamedata.address ~= nil and
- gamedata.port ~= nil then
- core.setting_set("address",gamedata.address)
- core.setting_set("remote_port",gamedata.port)
+ gamedata.servername = fav.name
+ gamedata.serverdescription = fav.description
+
+ if gamedata.address and gamedata.port then
+ core.setting_set("address", gamedata.address)
+ core.setting_set("remote_port", gamedata.port)
core.start()
end
end
@@ -127,101 +132,92 @@ local function main_button_handler(tabview, fields, name, tabdata)
if event.type == "CHG" then
if event.row <= #menudata.favorites then
- local address = menudata.favorites[event.row].address
- local port = menudata.favorites[event.row].port
-
- if address ~= nil and
- port ~= nil then
- core.setting_set("address",address)
- core.setting_set("remote_port",port)
+ gamedata.fav = false
+ local favs = core.get_favorites("local")
+ local address = fav.address
+ local port = fav.port
+ gamedata.serverdescription = fav.description
+
+ for i = 1, #favs do
+ if fav.address == favs[i].address and
+ fav.port == favs[i].port then
+ gamedata.fav = true
+ end
end
+ if address and port then
+ core.setting_set("address", address)
+ core.setting_set("remote_port", port)
+ end
tabdata.fav_selected = event.row
end
-
return true
end
end
- if fields["key_up"] ~= nil or
- fields["key_down"] ~= nil then
-
+ if fields.key_up or fields.key_down then
local fav_idx = core.get_table_index("favourites")
+ local fav = menudata.favorites[fav_idx]
- if fav_idx ~= nil then
- if fields["key_up"] ~= nil and fav_idx > 1 then
- fav_idx = fav_idx -1
- else if fields["key_down"] and fav_idx < #menudata.favorites then
- fav_idx = fav_idx +1
- end end
+ if fav_idx then
+ if fields.key_up and fav_idx > 1 then
+ fav_idx = fav_idx - 1
+ elseif fields.key_down and fav_idx < #menudata.favorites then
+ fav_idx = fav_idx + 1
+ end
else
fav_idx = 1
end
-
- if menudata.favorites == nil or
- menudata.favorites[fav_idx] == nil then
+
+ if not menudata.favorites or not fav then
tabdata.fav_selected = 0
return true
end
-
- local address = menudata.favorites[fav_idx].address
- local port = menudata.favorites[fav_idx].port
-
- if address ~= nil and
- port ~= nil then
- core.setting_set("address",address)
- core.setting_set("remote_port",port)
- end
-
- tabdata.fav_selected = fav_idx
- return true
- end
- if fields["cb_public_serverlist"] ~= nil then
- core.setting_set("public_serverlist", fields["cb_public_serverlist"])
+ local address = fav.address
+ local port = fav.port
- if core.setting_getbool("public_serverlist") then
- asyncOnlineFavourites()
- else
- menudata.favorites = core.get_favorites("local")
+ if address and port then
+ core.setting_set("address", address)
+ core.setting_set("remote_port", port)
end
- tabdata.fav_selected = nil
+
+ tabdata.fav_selected = fav_idx
return true
end
- if fields["btn_delete_favorite"] ~= nil then
+ if fields.btn_delete_favorite then
local current_favourite = core.get_table_index("favourites")
- if current_favourite == nil then return end
+ if not current_favourite then return end
+
core.delete_favorite(current_favourite)
- menudata.favorites = order_favorite_list(core.get_favorites())
+ asyncOnlineFavourites()
tabdata.fav_selected = nil
- core.setting_set("address","")
- core.setting_set("remote_port","30000")
-
+ core.setting_set("address", "")
+ core.setting_set("remote_port", "30000")
return true
end
- if (fields["btn_mp_connect"] ~= nil or
- fields["key_enter"] ~= nil) and fields["te_address"] ~= nil and
- fields["te_port"] ~= nil then
-
- gamedata.playername = fields["te_name"]
- gamedata.password = fields["te_pwd"]
- gamedata.address = fields["te_address"]
- gamedata.port = fields["te_port"]
-
+ if (fields.btn_mp_connect or fields.key_enter) and fields.te_address and fields.te_port then
+ gamedata.playername = fields.te_name
+ gamedata.password = fields.te_pwd
+ gamedata.address = fields.te_address
+ gamedata.port = fields.te_port
+ gamedata.selected_world = 0
local fav_idx = core.get_table_index("favourites")
+ local fav = menudata.favorites[fav_idx]
- if fav_idx ~= nil and fav_idx <= #menudata.favorites and
- menudata.favorites[fav_idx].address == fields["te_address"] and
- menudata.favorites[fav_idx].port == fields["te_port"] then
+ if fav_idx and fav_idx <= #menudata.favorites and
+ fav.address == fields.te_address and
+ fav.port == fields.te_port then
- gamedata.servername = menudata.favorites[fav_idx].name
- gamedata.serverdescription = menudata.favorites[fav_idx].description
+ gamedata.servername = fav.name
+ gamedata.serverdescription = fav.description
- if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min,
- menudata.favorites[fav_idx].proto_max)then
+ if menudata.favorites_is_public and
+ not is_server_protocol_compat_or_error(
+ fav.proto_min, fav.proto_max) then
return true
end
else
@@ -229,10 +225,8 @@ local function main_button_handler(tabview, fields, name, tabdata)
gamedata.serverdescription = ""
end
- gamedata.selected_world = 0
-
- core.setting_set("address", fields["te_address"])
- core.setting_set("remote_port",fields["te_port"])
+ core.setting_set("address", fields.te_address)
+ core.setting_set("remote_port", fields.te_port)
core.start()
return true
@@ -240,22 +234,16 @@ local function main_button_handler(tabview, fields, name, tabdata)
return false
end
-local function on_change(type,old_tab,new_tab)
- if type == "LEAVE" then
- return
- end
- if core.setting_getbool("public_serverlist") then
- asyncOnlineFavourites()
- else
- menudata.favorites = core.get_favorites("local")
- end
+local function on_change(type, old_tab, new_tab)
+ if type == "LEAVE" then return end
+ asyncOnlineFavourites()
end
--------------------------------------------------------------------------------
-tab_multiplayer = {
+return {
name = "multiplayer",
caption = fgettext("Client"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
- }
+}
diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua
index d08eecc21..6b96825a0 100644
--- a/builtin/mainmenu/tab_server.lua
+++ b/builtin/mainmenu/tab_server.lua
@@ -186,10 +186,10 @@ local function main_button_handler(this, fields, name, tabdata)
end
--------------------------------------------------------------------------------
-tab_server = {
+return {
name = "server",
caption = fgettext("Server"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = nil
- }
+}
diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua
index c17a39432..af8df0ccb 100644
--- a/builtin/mainmenu/tab_settings.lua
+++ b/builtin/mainmenu/tab_settings.lua
@@ -17,110 +17,115 @@
--------------------------------------------------------------------------------
-local leaves_style_labels = {
- fgettext("Opaque Leaves"),
- fgettext("Simple Leaves"),
- fgettext("Fancy Leaves")
+local labels = {
+ leaves = {
+ fgettext("Opaque Leaves"),
+ fgettext("Simple Leaves"),
+ fgettext("Fancy Leaves")
+ },
+ node_highlighting = {
+ fgettext("Node Outlining"),
+ fgettext("Node Highlighting")
+ },
+ filters = {
+ fgettext("No Filter"),
+ fgettext("Bilinear Filter"),
+ fgettext("Trilinear Filter")
+ },
+ mipmap = {
+ fgettext("No Mipmap"),
+ fgettext("Mipmap"),
+ fgettext("Mipmap + Aniso. Filter")
+ },
+ antialiasing = {
+ fgettext("None"),
+ fgettext("2x"),
+ fgettext("4x"),
+ fgettext("8x")
+ }
}
-local leaves_style = {
- {leaves_style_labels[1]..","..leaves_style_labels[2]..","..leaves_style_labels[3]},
- {"opaque", "simple", "fancy"},
+local dd_options = {
+ leaves = {
+ table.concat(labels.leaves, ","),
+ {"opaque", "simple", "fancy"}
+ },
+ node_highlighting = {
+ table.concat(labels.node_highlighting, ","),
+ {"box", "halo"}
+ },
+ filters = {
+ table.concat(labels.filters, ","),
+ {"", "bilinear_filter", "trilinear_filter"}
+ },
+ mipmap = {
+ table.concat(labels.mipmap, ","),
+ {"", "mip_map", "anisotropic_filter"}
+ },
+ antialiasing = {
+ table.concat(labels.antialiasing, ","),
+ {"0", "2", "4", "8"}
+ }
}
-local dd_filter_labels = {
- fgettext("No Filter"),
- fgettext("Bilinear Filter"),
- fgettext("Trilinear Filter")
-}
-
-local filters = {
- {dd_filter_labels[1]..","..dd_filter_labels[2]..","..dd_filter_labels[3]},
- {"", "bilinear_filter", "trilinear_filter"},
-}
-
-local dd_mipmap_labels = {
- fgettext("No Mipmap"),
- fgettext("Mipmap"),
- fgettext("Mipmap + Aniso. Filter")
-}
-
-local mipmap = {
- {dd_mipmap_labels[1]..","..dd_mipmap_labels[2]..","..dd_mipmap_labels[3]},
- {"", "mip_map", "anisotropic_filter"},
-}
-
-local function getLeavesStyleSettingIndex()
- local style = core.setting_get("leaves_style")
- if (style == leaves_style[2][3]) then
- return 3
- elseif (style == leaves_style[2][2]) then
- return 2
- end
- return 1
-end
-
-local dd_antialiasing_labels = {
- fgettext("None"),
- fgettext("2x"),
- fgettext("4x"),
- fgettext("8x"),
-}
-
-local antialiasing = {
- {dd_antialiasing_labels[1]..","..dd_antialiasing_labels[2]..","..
- dd_antialiasing_labels[3]..","..dd_antialiasing_labels[4]},
- {"0", "2", "4", "8"}
-}
-
-local function getFilterSettingIndex()
- if (core.setting_get(filters[2][3]) == "true") then
- return 3
- end
- if (core.setting_get(filters[2][3]) == "false" and core.setting_get(filters[2][2]) == "true") then
- return 2
- end
- return 1
-end
-
-local function getMipmapSettingIndex()
- if (core.setting_get(mipmap[2][3]) == "true") then
- return 3
- end
- if (core.setting_get(mipmap[2][3]) == "false" and core.setting_get(mipmap[2][2]) == "true") then
- return 2
- end
- return 1
-end
-
-local function getAntialiasingSettingIndex()
- local antialiasing_setting = core.setting_get("fsaa")
- for i = 1, #(antialiasing[2]) do
- if antialiasing_setting == antialiasing[2][i] then
- return i
+local getSettingIndex = {
+ Leaves = function()
+ local style = core.setting_get("leaves_style")
+ for idx, name in pairs(dd_options.leaves[2]) do
+ if style == name then return idx end
+ end
+ return 1
+ end,
+ NodeHighlighting = function()
+ local style = core.setting_get("node_highlighting")
+ for idx, name in pairs(dd_options.node_highlighting[2]) do
+ if style == name then return idx end
end
+ return 1
+ end,
+ Filter = function()
+ if core.setting_get(dd_options.filters[2][3]) == "true" then
+ return 3
+ elseif core.setting_get(dd_options.filters[2][3]) == "false" and
+ core.setting_get(dd_options.filters[2][2]) == "true" then
+ return 2
+ end
+ return 1
+ end,
+ Mipmap = function()
+ if core.setting_get(dd_options.mipmap[2][3]) == "true" then
+ return 3
+ elseif core.setting_get(dd_options.mipmap[2][3]) == "false" and
+ core.setting_get(dd_options.mipmap[2][2]) == "true" then
+ return 2
+ end
+ return 1
+ end,
+ Antialiasing = function()
+ local antialiasing_setting = core.setting_get("fsaa")
+ for i = 1, #dd_options.antialiasing[2] do
+ if antialiasing_setting == dd_options.antialiasing[2][i] then
+ return i
+ end
+ end
+ return 1
end
- return 1
-end
+}
local function antialiasing_fname_to_name(fname)
- for i = 1, #(dd_antialiasing_labels) do
- if fname == dd_antialiasing_labels[i] then
- return antialiasing[2][i]
+ for i = 1, #labels.antialiasing do
+ if fname == labels.antialiasing[i] then
+ return dd_options.antialiasing[2][i]
end
end
return 0
end
local function dlg_confirm_reset_formspec(data)
- local retval =
- "size[8,3]" ..
- "label[1,1;".. fgettext("Are you sure to reset your singleplayer world?") .. "]"..
- "button[1,2;2.6,0.5;dlg_reset_singleplayer_confirm;"..
- fgettext("Yes") .. "]" ..
- "button[4,2;2.8,0.5;dlg_reset_singleplayer_cancel;"..
- fgettext("No!!!") .. "]"
- return retval
+ return "size[8,3]" ..
+ "label[1,1;" .. fgettext("Are you sure to reset your singleplayer world?") .. "]" ..
+ "button[1,2;2.6,0.5;dlg_reset_singleplayer_confirm;" .. fgettext("Yes") .. "]" ..
+ "button[4,2;2.8,0.5;dlg_reset_singleplayer_cancel;" .. fgettext("No") .. "]"
end
local function dlg_confirm_reset_btnhandler(this, fields, dialogdata)
@@ -129,7 +134,7 @@ local function dlg_confirm_reset_btnhandler(this, fields, dialogdata)
local worldlist = core.get_worlds()
local found_singleplayerworld = false
- for i=1,#worldlist,1 do
+ for i = 1, #worldlist do
if worldlist[i].name == "singleplayerworld" then
found_singleplayerworld = true
gamedata.worldindex = i
@@ -141,12 +146,10 @@ local function dlg_confirm_reset_btnhandler(this, fields, dialogdata)
end
core.create_world("singleplayerworld", 1)
-
worldlist = core.get_worlds()
-
found_singleplayerworld = false
- for i=1,#worldlist,1 do
+ for i = 1, #worldlist do
if worldlist[i].name == "singleplayerworld" then
found_singleplayerworld = true
gamedata.worldindex = i
@@ -170,131 +173,111 @@ local function showconfirm_reset(tabview)
new_dlg:show()
end
-local function gui_scale_to_scrollbar()
- local current_value = tonumber(core.setting_get("gui_scaling"))
-
- if (current_value == nil) or current_value < 0.25 then
- return 0
- end
- if current_value <= 1.25 then
- return ((current_value - 0.25)/ 1.0) * 700
- end
- if current_value <= 6 then
- return ((current_value -1.25) * 100) + 700
- end
-
- return 1000
-end
-
-local function scrollbar_to_gui_scale(value)
- value = tonumber(value)
-
- if (value <= 700) then
- return ((value / 700) * 1.0) + 0.25
- end
- if (value <=1000) then
- return ((value - 700) / 100) + 1.25
- end
-
- return 1
-end
-
local function formspec(tabview, name, tabdata)
local tab_string =
- "box[0,0;3.5,4.0;#999999]" ..
- "checkbox[0.25,0;cb_smooth_lighting;".. fgettext("Smooth Lighting")
- .. ";".. dump(core.setting_getbool("smooth_lighting")) .. "]"..
- "checkbox[0.25,0.5;cb_particles;".. fgettext("Enable Particles") .. ";"
- .. dump(core.setting_getbool("enable_particles")) .. "]"..
- "checkbox[0.25,1;cb_3d_clouds;".. fgettext("3D Clouds") .. ";"
- .. dump(core.setting_getbool("enable_3d_clouds")) .. "]"..
- "checkbox[0.25,1.5;cb_opaque_water;".. fgettext("Opaque Water") .. ";"
- .. dump(core.setting_getbool("opaque_water")) .. "]"..
- "checkbox[0.25,2.0;cb_connected_glass;".. fgettext("Connected Glass") .. ";"
- .. dump(core.setting_getbool("connected_glass")) .. "]"..
- "checkbox[0.25,2.5;cb_node_highlighting;".. fgettext("Node Highlighting") .. ";"
- .. dump(core.setting_getbool("enable_node_highlighting")) .. "]"..
- "dropdown[0.25,3.2;3.3;dd_leaves_style;" .. leaves_style[1][1] .. ";"
- .. getLeavesStyleSettingIndex() .. "]" ..
+ "box[0,0;3.5,4.5;#999999]" ..
+ "checkbox[0.25,0;cb_smooth_lighting;" .. fgettext("Smooth Lighting") .. ";"
+ .. dump(core.setting_getbool("smooth_lighting")) .. "]" ..
+ "checkbox[0.25,0.5;cb_particles;" .. fgettext("Particles") .. ";"
+ .. dump(core.setting_getbool("enable_particles")) .. "]" ..
+ "checkbox[0.25,1;cb_3d_clouds;" .. fgettext("3D Clouds") .. ";"
+ .. dump(core.setting_getbool("enable_3d_clouds")) .. "]" ..
+ "checkbox[0.25,1.5;cb_opaque_water;" .. fgettext("Opaque Water") .. ";"
+ .. dump(core.setting_getbool("opaque_water")) .. "]" ..
+ "checkbox[0.25,2.0;cb_connected_glass;" .. fgettext("Connected Glass") .. ";"
+ .. dump(core.setting_getbool("connected_glass")) .. "]" ..
+ "dropdown[0.25,2.8;3.3;dd_node_highlighting;" .. dd_options.node_highlighting[1] .. ";"
+ .. getSettingIndex.NodeHighlighting() .. "]" ..
+ "dropdown[0.25,3.6;3.3;dd_leaves_style;" .. dd_options.leaves[1] .. ";"
+ .. getSettingIndex.Leaves() .. "]" ..
"box[3.75,0;3.75,3.45;#999999]" ..
- "label[3.85,0.1;".. fgettext("Texturing:") .. "]"..
- "dropdown[3.85,0.55;3.85;dd_filters;" .. filters[1][1] .. ";"
- .. getFilterSettingIndex() .. "]" ..
- "dropdown[3.85,1.35;3.85;dd_mipmap;" .. mipmap[1][1] .. ";"
- .. getMipmapSettingIndex() .. "]" ..
- "label[3.85,2.15;".. fgettext("Antialiasing:") .. "]"..
- "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. antialiasing[1][1] .. ";"
- .. getAntialiasingSettingIndex() .. "]" ..
- "box[7.75,0;4,4;#999999]" ..
- "checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";"
+ "label[3.85,0.1;" .. fgettext("Texturing:") .. "]" ..
+ "dropdown[3.85,0.55;3.85;dd_filters;" .. dd_options.filters[1] .. ";"
+ .. getSettingIndex.Filter() .. "]" ..
+ "dropdown[3.85,1.35;3.85;dd_mipmap;" .. dd_options.mipmap[1] .. ";"
+ .. getSettingIndex.Mipmap() .. "]" ..
+ "label[3.85,2.15;" .. fgettext("Antialiasing:") .. "]" ..
+ "dropdown[3.85,2.6;3.85;dd_antialiasing;" .. dd_options.antialiasing[1] .. ";"
+ .. getSettingIndex.Antialiasing() .. "]" ..
+ "box[7.75,0;4,4.4;#999999]" ..
+ "checkbox[8,0;cb_shaders;" .. fgettext("Shaders") .. ";"
.. dump(core.setting_getbool("enable_shaders")) .. "]"
- if PLATFORM ~= "Android" then
+ if PLATFORM == "Android" then
tab_string = tab_string ..
- "button[8,4.75;3.75,0.5;btn_change_keys;".. fgettext("Change keys") .. "]"
+ "button[8,4.75;3.75,0.5;btn_reset_singleplayer;"
+ .. fgettext("Reset singleplayer world") .. "]"
else
tab_string = tab_string ..
- "button[8,4.75;3.75,0.5;btn_reset_singleplayer;".. fgettext("Reset singleplayer world") .. "]"
+ "button[8,4.75;3.75,0.5;btn_change_keys;"
+ .. fgettext("Change keys") .. "]"
end
+
tab_string = tab_string ..
- "box[0,4.25;3.5,1.1;#999999]" ..
- "label[0.25,4.25;" .. fgettext("GUI scale factor") .. "]" ..
- "scrollbar[0.25,4.75;3,0.4;sb_gui_scaling;horizontal;" ..
- gui_scale_to_scrollbar() .. "]" ..
- "tooltip[sb_gui_scaling;" ..
- fgettext("Scaling factor applied to menu elements: ") ..
- dump(core.setting_get("gui_scaling")) .. "]"
+ "button[0,4.75;3.75,0.5;btn_advanced_settings;"
+ .. fgettext("Advanced Settings") .. "]"
- if PLATFORM == "Android" then
- tab_string = tab_string ..
- "box[3.75,3.55;3.75,1.8;#999999]" ..
- "checkbox[3.9,3.45;cb_touchscreen_target;".. fgettext("Touch free target") .. ";"
- .. dump(core.setting_getbool("touchtarget")) .. "]"
- end
if core.setting_get("touchscreen_threshold") ~= nil then
tab_string = tab_string ..
- "label[4.3,4.1;" .. fgettext("Touchthreshold (px)") .. "]" ..
- "dropdown[3.85,4.55;3.85;dd_touchthreshold;0,10,20,30,40,50;" ..
- ((tonumber(core.setting_get("touchscreen_threshold"))/10)+1) .. "]"
+ "label[4.3,4.1;" .. fgettext("Touchthreshold (px)") .. "]" ..
+ "dropdown[3.85,4.55;3.85;dd_touchthreshold;0,10,20,30,40,50;" ..
+ ((tonumber(core.setting_get("touchscreen_threshold")) / 10) + 1) .. "]"
end
if core.setting_getbool("enable_shaders") then
tab_string = tab_string ..
- "checkbox[8,0.5;cb_bumpmapping;".. fgettext("Bumpmapping") .. ";"
- .. dump(core.setting_getbool("enable_bumpmapping")) .. "]"..
- "checkbox[8,1.0;cb_generate_normalmaps;".. fgettext("Generate Normalmaps") .. ";"
- .. dump(core.setting_getbool("generate_normalmaps")) .. "]"..
- "checkbox[8,1.5;cb_parallax;".. fgettext("Parallax Occlusion") .. ";"
- .. dump(core.setting_getbool("enable_parallax_occlusion")) .. "]"..
- "checkbox[8,2.0;cb_waving_water;".. fgettext("Waving Water") .. ";"
- .. dump(core.setting_getbool("enable_waving_water")) .. "]"..
- "checkbox[8,2.5;cb_waving_leaves;".. fgettext("Waving Leaves") .. ";"
- .. dump(core.setting_getbool("enable_waving_leaves")) .. "]"..
- "checkbox[8,3.0;cb_waving_plants;".. fgettext("Waving Plants") .. ";"
- .. dump(core.setting_getbool("enable_waving_plants")) .. "]"
+ "checkbox[8,0.5;cb_bumpmapping;" .. fgettext("Bump Mapping") .. ";"
+ .. dump(core.setting_getbool("enable_bumpmapping")) .. "]" ..
+ "checkbox[8,1;cb_tonemapping;" .. fgettext("Tone Mapping") .. ";"
+ .. dump(core.setting_getbool("tone_mapping")) .. "]" ..
+ "checkbox[8,1.5;cb_generate_normalmaps;" .. fgettext("Normal Mapping") .. ";"
+ .. dump(core.setting_getbool("generate_normalmaps")) .. "]" ..
+ "checkbox[8,2;cb_parallax;" .. fgettext("Parallax Occlusion") .. ";"
+ .. dump(core.setting_getbool("enable_parallax_occlusion")) .. "]" ..
+ "checkbox[8,2.5;cb_waving_water;" .. fgettext("Waving Water") .. ";"
+ .. dump(core.setting_getbool("enable_waving_water")) .. "]" ..
+ "checkbox[8,3;cb_waving_leaves;" .. fgettext("Waving Leaves") .. ";"
+ .. dump(core.setting_getbool("enable_waving_leaves")) .. "]" ..
+ "checkbox[8,3.5;cb_waving_plants;" .. fgettext("Waving Plants") .. ";"
+ .. dump(core.setting_getbool("enable_waving_plants")) .. "]"
else
tab_string = tab_string ..
- "textlist[8.33,0.7;4,1;;#888888" .. fgettext("Bumpmapping") .. ";0;true]" ..
- "textlist[8.33,1.2;4,1;;#888888" .. fgettext("Generate Normalmaps") .. ";0;true]" ..
- "textlist[8.33,1.7;4,1;;#888888" .. fgettext("Parallax Occlusion") .. ";0;true]" ..
- "textlist[8.33,2.2;4,1;;#888888" .. fgettext("Waving Water") .. ";0;true]" ..
- "textlist[8.33,2.7;4,1;;#888888" .. fgettext("Waving Leaves") .. ";0;true]" ..
- "textlist[8.33,3.2;4,1;;#888888" .. fgettext("Waving Plants") .. ";0;true]"
- end
+ "tablecolumns[color;text]" ..
+ "tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
+ "table[8.33,0.7;3.5,4;shaders;" ..
+ "#888888," .. fgettext("Bump Mapping") .. "," ..
+ "#888888," .. fgettext("Tone Mapping") .. "," ..
+ "#888888," .. fgettext("Normal Mapping") .. "," ..
+ "#888888," .. fgettext("Parallax Occlusion") .. "," ..
+ "#888888," .. fgettext("Waving Water") .. "," ..
+ "#888888," .. fgettext("Waving Leaves") .. "," ..
+ "#888888," .. fgettext("Waving Plants") .. "," ..
+ ";1]"
+ end
+
return tab_string
end
--------------------------------------------------------------------------------
local function handle_settings_buttons(this, fields, tabname, tabdata)
- if fields["cb_fancy_trees"] then
- core.setting_set("new_style_leaves", fields["cb_fancy_trees"])
+
+ if fields["btn_advanced_settings"] ~= nil then
+ local adv_settings_dlg = create_adv_settings_dlg()
+ adv_settings_dlg:set_parent(this)
+ this:hide()
+ adv_settings_dlg:show()
+ --mm_texture.update("singleplayer", current_game())
return true
end
if fields["cb_smooth_lighting"] then
core.setting_set("smooth_lighting", fields["cb_smooth_lighting"])
return true
end
+ if fields["cb_particles"] then
+ core.setting_set("enable_particles", fields["cb_particles"])
+ return true
+ end
if fields["cb_3d_clouds"] then
core.setting_set("enable_3d_clouds", fields["cb_3d_clouds"])
return true
@@ -303,8 +286,13 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
core.setting_set("opaque_water", fields["cb_opaque_water"])
return true
end
+ if fields["cb_connected_glass"] then
+ core.setting_set("connected_glass", fields["cb_connected_glass"])
+ return true
+ end
if fields["cb_shaders"] then
- if (core.setting_get("video_driver") == "direct3d8" or core.setting_get("video_driver") == "direct3d9") then
+ if (core.setting_get("video_driver") == "direct3d8" or
+ core.setting_get("video_driver") == "direct3d9") then
core.setting_set("enable_shaders", "false")
gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.")
else
@@ -312,23 +300,17 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
end
return true
end
- if fields["cb_connected_glass"] then
- core.setting_set("connected_glass", fields["cb_connected_glass"])
- return true
- end
- if fields["cb_node_highlighting"] then
- core.setting_set("enable_node_highlighting", fields["cb_node_highlighting"])
+ if fields["cb_bumpmapping"] then
+ core.setting_set("enable_bumpmapping", fields["cb_bumpmapping"])
return true
end
- if fields["cb_particles"] then
- core.setting_set("enable_particles", fields["cb_particles"])
+ if fields["cb_tonemapping"] then
+ core.setting_set("tone_mapping", fields["cb_tonemapping"])
return true
end
- if fields["cb_bumpmapping"] then
- core.setting_set("enable_bumpmapping", fields["cb_bumpmapping"])
- end
if fields["cb_generate_normalmaps"] then
core.setting_set("generate_normalmaps", fields["cb_generate_normalmaps"])
+ return true
end
if fields["cb_parallax"] then
core.setting_set("enable_parallax_occlusion", fields["cb_parallax"])
@@ -345,20 +327,10 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
core.setting_set("enable_waving_plants", fields["cb_waving_plants"])
return true
end
- if fields["btn_change_keys"] ~= nil then
+ if fields["btn_change_keys"] then
core.show_keys_menu()
return true
end
-
- if fields["sb_gui_scaling"] then
- local event = core.explode_scrollbar_event(fields["sb_gui_scaling"])
-
- if event.type == "CHG" then
- local tosave = string.format("%.2f",scrollbar_to_gui_scale(event.value))
- core.setting_set("gui_scaling",tosave)
- return true
- end
- end
if fields["cb_touchscreen_target"] then
core.setting_set("touchtarget", fields["cb_touchscreen_target"])
return true
@@ -371,48 +343,40 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
--Note dropdowns have to be handled LAST!
local ddhandled = false
- if fields["dd_touchthreshold"] then
- core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"])
- ddhandled = true
- end
- if fields["dd_leaves_style"] == leaves_style_labels[3] then
- core.setting_set("leaves_style", leaves_style[2][3])
- ddhandled = true
- end
- if fields["dd_leaves_style"] == leaves_style_labels[2] then
- core.setting_set("leaves_style", leaves_style[2][2])
- ddhandled = true
+ for i = 1, #labels.leaves do
+ if fields["dd_leaves_style"] == labels.leaves[i] then
+ core.setting_set("leaves_style", dd_options.leaves[2][i])
+ ddhandled = true
+ end
end
- if fields["dd_leaves_style"] == leaves_style_labels[1] then
- core.setting_set("leaves_style", leaves_style[2][1])
- ddhandled = true
+ for i = 1, #labels.node_highlighting do
+ if fields["dd_node_highlighting"] == labels.node_highlighting[i] then
+ core.setting_set("node_highlighting", dd_options.node_highlighting[2][i])
+ ddhandled = true
+ end
end
- if fields["dd_filters"] == dd_filter_labels[1] then
+ if fields["dd_filters"] == labels.filters[1] then
core.setting_set("bilinear_filter", "false")
core.setting_set("trilinear_filter", "false")
ddhandled = true
- end
- if fields["dd_filters"] == dd_filter_labels[2] then
+ elseif fields["dd_filters"] == labels.filters[2] then
core.setting_set("bilinear_filter", "true")
core.setting_set("trilinear_filter", "false")
ddhandled = true
- end
- if fields["dd_filters"] == dd_filter_labels[3] then
+ elseif fields["dd_filters"] == labels.filters[3] then
core.setting_set("bilinear_filter", "false")
core.setting_set("trilinear_filter", "true")
ddhandled = true
end
- if fields["dd_mipmap"] == dd_mipmap_labels[1] then
+ if fields["dd_mipmap"] == labels.mipmap[1] then
core.setting_set("mip_map", "false")
core.setting_set("anisotropic_filter", "false")
ddhandled = true
- end
- if fields["dd_mipmap"] == dd_mipmap_labels[2] then
+ elseif fields["dd_mipmap"] == labels.mipmap[2] then
core.setting_set("mip_map", "true")
core.setting_set("anisotropic_filter", "false")
ddhandled = true
- end
- if fields["dd_mipmap"] == dd_mipmap_labels[3] then
+ elseif fields["dd_mipmap"] == labels.mipmap[3] then
core.setting_set("mip_map", "true")
core.setting_set("anisotropic_filter", "true")
ddhandled = true
@@ -422,11 +386,15 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
antialiasing_fname_to_name(fields["dd_antialiasing"]))
ddhandled = true
end
+ if fields["dd_touchthreshold"] then
+ core.setting_set("touchscreen_threshold", fields["dd_touchthreshold"])
+ ddhandled = true
+ end
return ddhandled
end
-tab_settings = {
+return {
name = "settings",
caption = fgettext("Settings"),
cbf_formspec = formspec,
diff --git a/builtin/mainmenu/tab_simple_main.lua b/builtin/mainmenu/tab_simple_main.lua
index 434113b5f..3818f321f 100644
--- a/builtin/mainmenu/tab_simple_main.lua
+++ b/builtin/mainmenu/tab_simple_main.lua
@@ -17,66 +17,80 @@
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
- local retval = ""
-
- local render_details = dump(core.setting_getbool("public_serverlist"))
-
- retval = retval ..
- "label[8,0.5;".. fgettext("Name/Password") .. "]" ..
- "field[0.25,3.25;5.5,0.5;te_address;;" ..
- core.formspec_escape(core.setting_get("address")) .."]" ..
- "field[5.75,3.25;2.25,0.5;te_port;;" ..
- core.formspec_escape(core.setting_get("remote_port")) .."]" ..
- "checkbox[8,-0.25;cb_public_serverlist;".. fgettext("Public Serverlist") .. ";" ..
- render_details .. "]"
-
- retval = retval ..
- "button[8,2.5;4,1.5;btn_mp_connect;".. fgettext("Connect") .. "]" ..
- "field[8.75,1.5;3.5,0.5;te_name;;" ..
- core.formspec_escape(core.setting_get("name")) .."]" ..
- "pwdfield[8.75,2.3;3.5,0.5;te_pwd;]"
-
- if render_details then
- retval = retval .. "tablecolumns[" ..
- "color,span=3;" ..
- "text,align=right;" .. -- clients
- "text,align=center,padding=0.25;" .. -- "/"
- "text,align=right,padding=0.25;" .. -- clients_max
- image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
- image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
- image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
- "color,span=1;" ..
- "text,padding=1]" -- name
- else
- retval = retval .. "tablecolumns[text]"
+ -- Update the cached supported proto info,
+ -- it may have changed after a change by the settings menu.
+ common_update_cached_supp_proto()
+ local fav_selected = menudata.favorites[tabdata.fav_selected]
+
+ local retval =
+ "label[9.5,0;".. fgettext("Name / Password") .. "]" ..
+ "field[0.25,3.35;5.5,0.5;te_address;;" ..
+ core.formspec_escape(core.setting_get("address")) .."]" ..
+ "field[5.75,3.35;2.25,0.5;te_port;;" ..
+ core.formspec_escape(core.setting_get("remote_port")) .."]" ..
+ "button[10,2.6;2,1.5;btn_mp_connect;".. fgettext("Connect") .. "]" ..
+ "field[9.8,1;2.6,0.5;te_name;;" ..
+ core.formspec_escape(core.setting_get("name")) .."]" ..
+ "pwdfield[9.8,2;2.6,0.5;te_pwd;]"
+
+
+ if tabdata.fav_selected and fav_selected then
+ if gamedata.fav then
+ retval = retval .. "button[7.7,2.6;2.3,1.5;btn_delete_favorite;" ..
+ fgettext("Del. Favorite") .. "]"
+ end
end
- retval = retval ..
- "table[-0.05,0;7.55,2.75;favourites;"
- if #menudata.favorites > 0 then
- retval = retval .. render_favorite(menudata.favorites[1],render_details)
+ retval = retval .. "tablecolumns[" ..
+ image_column(fgettext("Favorite"), "favorite") .. ";" ..
+ "color,span=3;" ..
+ "text,align=right;" .. -- clients
+ "text,align=center,padding=0.25;" .. -- "/"
+ "text,align=right,padding=0.25;" .. -- clients_max
+ image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
+ image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
+ image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
+ "color,span=1;" ..
+ "text,padding=1]" .. -- name
+ "table[-0.05,0;9.2,2.75;favourites;"
- for i=2,#menudata.favorites,1 do
- retval = retval .. "," .. render_favorite(menudata.favorites[i],render_details)
+ if #menudata.favorites > 0 then
+ local favs = core.get_favorites("local")
+ if #favs > 0 then
+ for i = 1, #favs do
+ for j = 1, #menudata.favorites do
+ if menudata.favorites[j].address == favs[i].address and
+ menudata.favorites[j].port == favs[i].port then
+ table.insert(menudata.favorites, i,
+ table.remove(menudata.favorites, j))
+ end
+ end
+ if favs[i].address ~= menudata.favorites[i].address then
+ table.insert(menudata.favorites, i, favs[i])
+ end
+ end
+ end
+ retval = retval .. render_favorite(menudata.favorites[1], (#favs > 0))
+ for i = 2, #menudata.favorites do
+ retval = retval .. "," .. render_favorite(menudata.favorites[i], (i <= #favs))
end
end
- if tabdata.fav_selected ~= nil then
+ if tabdata.fav_selected then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
end
-- separator
- retval = retval ..
- "box[-0.28,3.75;12.4,0.1;#FFFFFF]"
+ retval = retval .. "box[-0.28,3.75;12.4,0.1;#FFFFFF]"
-- checkboxes
retval = retval ..
"checkbox[8.0,3.9;cb_creative;".. fgettext("Creative Mode") .. ";" ..
- dump(core.setting_getbool("creative_mode")) .. "]"..
+ dump(core.setting_getbool("creative_mode")) .. "]"..
"checkbox[8.0,4.4;cb_damage;".. fgettext("Enable Damage") .. ";" ..
- dump(core.setting_getbool("enable_damage")) .. "]"
+ dump(core.setting_getbool("enable_damage")) .. "]"
-- buttons
retval = retval ..
"button[0,3.7;8,1.5;btn_start_singleplayer;" .. fgettext("Start Singleplayer") .. "]" ..
@@ -87,94 +101,100 @@ end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
-
- if fields["btn_start_singleplayer"] then
+ if fields.btn_start_singleplayer then
gamedata.selected_world = gamedata.worldindex
gamedata.singleplayer = true
core.start()
return true
end
- if fields["favourites"] ~= nil then
- local event = core.explode_table_event(fields["favourites"])
-
+ if fields.favourites then
+ local event = core.explode_table_event(fields.favourites)
if event.type == "CHG" then
if event.row <= #menudata.favorites then
- local address = menudata.favorites[event.row].address
- local port = menudata.favorites[event.row].port
-
- if address ~= nil and
- port ~= nil then
- core.setting_set("address",address)
- core.setting_set("remote_port",port)
+ gamedata.fav = false
+ local favs = core.get_favorites("local")
+ local fav = menudata.favorites[event.row]
+ local address = fav.address
+ local port = fav.port
+ gamedata.serverdescription = fav.description
+
+ for i = 1, #favs do
+ if fav.address == favs[i].address and
+ fav.port == favs[i].port then
+ gamedata.fav = true
+ end
end
+ if address and port then
+ core.setting_set("address", address)
+ core.setting_set("remote_port", port)
+ end
tabdata.fav_selected = event.row
end
+ return true
end
- return true
end
- if fields["cb_public_serverlist"] ~= nil then
- core.setting_set("public_serverlist", fields["cb_public_serverlist"])
+ if fields.btn_delete_favorite then
+ local current_favourite = core.get_table_index("favourites")
+ if not current_favourite then return end
- if core.setting_getbool("public_serverlist") then
- asyncOnlineFavourites()
- else
- menudata.favorites = core.get_favorites("local")
- end
+ core.delete_favorite(current_favourite)
+ asyncOnlineFavourites()
+ tabdata.fav_selected = nil
+
+ core.setting_set("address", "")
+ core.setting_set("remote_port", "30000")
return true
end
- if fields["cb_creative"] then
- core.setting_set("creative_mode", fields["cb_creative"])
+ if fields.cb_creative then
+ core.setting_set("creative_mode", fields.cb_creative)
return true
end
- if fields["cb_damage"] then
- core.setting_set("enable_damage", fields["cb_damage"])
+ if fields.cb_damage then
+ core.setting_set("enable_damage", fields.cb_damage)
return true
end
- if fields["btn_mp_connect"] ~= nil or
- fields["key_enter"] ~= nil then
-
- gamedata.playername = fields["te_name"]
- gamedata.password = fields["te_pwd"]
- gamedata.address = fields["te_address"]
- gamedata.port = fields["te_port"]
-
+ if fields.btn_mp_connect or fields.key_enter then
+ gamedata.playername = fields.te_name
+ gamedata.password = fields.te_pwd
+ gamedata.address = fields.te_address
+ gamedata.port = fields.te_port
local fav_idx = core.get_textlist_index("favourites")
- if fav_idx ~= nil and fav_idx <= #menudata.favorites and
- menudata.favorites[fav_idx].address == fields["te_address"] and
- menudata.favorites[fav_idx].port == fields["te_port"] then
+ if fav_idx and fav_idx <= #menudata.favorites and
+ menudata.favorites[fav_idx].address == fields.te_address and
+ menudata.favorites[fav_idx].port == fields.te_port then
+ local fav = menudata.favorites[fav_idx]
+ gamedata.servername = fav.name
+ gamedata.serverdescription = fav.description
- gamedata.servername = menudata.favorites[fav_idx].name
- gamedata.serverdescription = menudata.favorites[fav_idx].description
-
- if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min,
- menudata.favorites[fav_idx].proto_max) then
+ if menudata.favorites_is_public and
+ not is_server_protocol_compat_or_error(
+ fav.proto_min, fav.proto_max) then
return true
end
else
- gamedata.servername = ""
- gamedata.serverdescription = ""
+ gamedata.servername = ""
+ gamedata.serverdescription = ""
end
gamedata.selected_world = 0
- core.setting_set("address",fields["te_address"])
- core.setting_set("remote_port",fields["te_port"])
+ core.setting_set("address", fields.te_address)
+ core.setting_set("remote_port", fields.te_port)
core.start()
return true
end
- if fields["btn_config_sp_world"] ~= nil then
+ if fields.btn_config_sp_world then
local configdialog = create_configure_world_dlg(1)
-
- if (configdialog ~= nil) then
+ if configdialog then
configdialog:set_parent(tabview)
tabview:hide()
configdialog:show()
@@ -185,21 +205,15 @@ end
--------------------------------------------------------------------------------
local function on_activate(type,old_tab,new_tab)
- if type == "LEAVE" then
- return
- end
- if core.setting_getbool("public_serverlist") then
- asyncOnlineFavourites()
- else
- menudata.favorites = core.get_favorites("local")
- end
+ if type == "LEAVE" then return end
+ asyncOnlineFavourites()
end
--------------------------------------------------------------------------------
-tab_simple_main = {
+return {
name = "main",
caption = fgettext("Main"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_activate
- }
+}
diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua
index a40918af9..05060cbc6 100644
--- a/builtin/mainmenu/tab_singleplayer.lua
+++ b/builtin/mainmenu/tab_singleplayer.lua
@@ -241,10 +241,10 @@ local function on_change(type, old_tab, new_tab)
end
--------------------------------------------------------------------------------
-tab_singleplayer = {
+return {
name = "singleplayer",
caption = fgettext("Singleplayer"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
- }
+}
diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua
index 3fb7b8598..a102fd61d 100644
--- a/builtin/mainmenu/tab_texturepacks.lua
+++ b/builtin/mainmenu/tab_texturepacks.lua
@@ -17,12 +17,17 @@
--------------------------------------------------------------------------------
local function filter_texture_pack_list(list)
- local retval = {"None"}
+ local retval = {}
+
for _, item in ipairs(list) do
if item ~= "base" then
- table.insert(retval, item)
+ retval[#retval + 1] = item
end
end
+
+ table.sort(retval)
+ table.insert(retval, 1, fgettext("None"))
+
return retval
end
@@ -31,9 +36,9 @@ local function render_texture_pack_list(list)
local retval = ""
for i, v in ipairs(list) do
- if v:sub(1,1) ~= "." then
+ if v:sub(1, 1) ~= "." then
if retval ~= "" then
- retval = retval ..","
+ retval = retval .. ","
end
retval = retval .. core.formspec_escape(v)
@@ -46,14 +51,14 @@ end
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
- local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]"..
+ local retval = "label[4,-0.25;" .. fgettext("Select texture pack:") .. "]" ..
"textlist[4,0.25;7.5,5.0;TPs;"
local current_texture_path = core.setting_get("texture_path")
local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true))
local index = tonumber(core.setting_get("mainmenu_last_selected_TP"))
- if index == nil then index = 1 end
+ if not index then index = 1 end
if current_texture_path == "" then
retval = retval ..
@@ -62,15 +67,16 @@ local function get_formspec(tabview, name, tabdata)
return retval
end
- local infofile = current_texture_path ..DIR_DELIM.."description.txt"
+ local infofile = current_texture_path .. DIR_DELIM .. "description.txt"
-- This adds backwards compatibility for old texture pack description files named
-- "info.txt", and should be removed once all such texture packs have been updated
if not file_exists(infofile) then
- infofile = current_texture_path ..DIR_DELIM.."info.txt"
+ infofile = current_texture_path .. DIR_DELIM .. "info.txt"
if file_exists(infofile) then
- minetest.log("info.txt is depreciated. description.txt should be used instead.");
+ core.log("info.txt is depreciated. description.txt should be used instead.")
end
end
+
local infotext = ""
local f = io.open(infofile, "r")
if not f then
@@ -80,8 +86,8 @@ local function get_formspec(tabview, name, tabdata)
f:close()
end
- local screenfile = current_texture_path..DIR_DELIM.."screenshot.png"
- local no_screenshot = nil
+ local screenfile = current_texture_path .. DIR_DELIM .. "screenshot.png"
+ local no_screenshot
if not file_exists(screenfile) then
screenfile = nil
no_screenshot = defaulttexturedir .. "no_screenshot.png"
@@ -90,24 +96,24 @@ local function get_formspec(tabview, name, tabdata)
return retval ..
render_texture_pack_list(list) ..
";" .. index .. "]" ..
- "image[0.25,0.25;4.0,3.7;"..core.formspec_escape(screenfile or no_screenshot).."]"..
- "textarea[0.6,3.25;3.7,1.5;;"..core.formspec_escape(infotext or "")..";]"
+ "image[0.25,0.25;4.0,3.7;" .. core.formspec_escape(screenfile or no_screenshot) .. "]" ..
+ "textarea[0.6,3.5;3.7,1.5;;" .. core.formspec_escape(infotext or "") .. ";]"
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
- if fields["TPs"] ~= nil then
+ if fields["TPs"] then
local event = core.explode_textlist_event(fields["TPs"])
if event.type == "CHG" or event.type == "DCL" then
local index = core.get_textlist_index("TPs")
- core.setting_set("mainmenu_last_selected_TP",
- index)
+ core.setting_set("mainmenu_last_selected_TP", index)
local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true))
local current_index = core.get_textlist_index("TPs")
- if current_index ~= nil and #list >= current_index then
- local new_path = core.get_texturepath()..DIR_DELIM..list[current_index]
- if list[current_index] == "None" then new_path = "" end
-
+ if current_index and #list >= current_index then
+ local new_path = core.get_texturepath() .. DIR_DELIM .. list[current_index]
+ if list[current_index] == fgettext("None") then
+ new_path = ""
+ end
core.setting_set("texture_path", new_path)
end
end
@@ -117,10 +123,10 @@ local function main_button_handler(tabview, fields, name, tabdata)
end
--------------------------------------------------------------------------------
-tab_texturepacks = {
+return {
name = "texturepacks",
caption = fgettext("Texturepacks"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = nil
- }
+}
diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua
index 075f38ee0..dadbb093e 100644
--- a/builtin/mainmenu/textures.lua
+++ b/builtin/mainmenu/textures.lua
@@ -179,7 +179,7 @@ function mm_texture.set_dirt_bg()
end
end
- --use base pack
- local minimalpath = defaulttexturedir .. "dirt_bg.png"
+ -- Use universal fallback texture in textures/base/pack
+ local minimalpath = defaulttexturedir .. "menu_bg.png"
core.set_background("background", minimalpath, true, 128)
end
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
new file mode 100644
index 000000000..ad269d8b0
--- /dev/null
+++ b/builtin/settingtypes.txt
@@ -0,0 +1,1214 @@
+# This file contains all settings displayed in the settings menu.
+#
+# General format:
+# name (Readable name) type type_args
+#
+# Note that the parts are seperated by exactly one space
+#
+# `type` can be:
+# - int
+# - string
+# - bool
+# - float
+# - enum
+# - path
+# - key (will be ignored in GUI, since a special key change dialog exists)
+# - flags
+# - noise_params
+#
+# `type_args` can be:
+# * int:
+# - default
+# - default min max
+# * string:
+# - default (if default is not specified then "" is set)
+# * bool:
+# - default
+# * float:
+# - default
+# - default min max
+# * enum:
+# - default value1,value2,...
+# * path:
+# - default (if default is not specified then "" is set)
+# * key:
+# - default
+# * flags:
+# Flags are always separated by comma without spaces.
+# - default possible_flags
+# * noise_params:
+# TODO: these are currently treated like strings
+#
+# Comments directly above a setting are bound to this setting.
+# All other comments are ignored.
+#
+# Comments and (Readable name) are handled by gettext.
+# Comments should be complete sentences that describe the setting and possibly
+# give the user additional useful insight.
+# Sections are marked by a single line in the format: [Section Name]
+# Sub-section are marked by adding * in front of the section name: [*Sub-section]
+# Sub-sub-sections have two * etc.
+# There shouldn't be too much settings per category; settings that shouldn't be
+# modified by the "average user" should be in (sub-)categories called "Advanced".
+
+[Client]
+
+[*Controls]
+# If enabled, you can place blocks at the position (feet + eye level) where you stand.
+# This is helpful when working with nodeboxes in small areas.
+enable_build_where_you_stand (Build inside player) bool false
+
+# Player is able to fly without being affected by gravity.
+# This requires the "fly" privilege on the server.
+free_move (Flying) bool false
+
+# Fast movement (via use key).
+# This requires the "fast" privilege on the server.
+fast_move (Fast movement) bool false
+
+# If enabled together with fly mode, player is able to fly through solid nodes.
+# This requires the "noclip" privilege on the server.
+noclip (Noclip) bool false
+
+# Smooths camera when moving and looking around.
+# Useful for recording videos.
+cinematic (Cinematic mode) bool false
+
+# Smooths rotation of camera. 0 to disable.
+camera_smoothing (Camera smoothing) float 0.0 0.0 0.99
+
+# Smooths rotation of camera in cinematic mode. 0 to disable.
+cinematic_camera_smoothing (Camera smoothing in cinematic mode) float 0.7 0.0 0.99
+
+# Invert vertical mouse movement.
+invert_mouse (Invert mouse) bool false
+
+# Mouse sensitivity multiplier.
+mouse_sensitivity (Mouse sensitivity) float 0.2
+
+# If enabled, "use" key instead of "sneak" key is used for climbing down and descending.
+aux1_descends (Key use for climbing/descending) bool false
+
+# Double-tapping the jump key toggles fly mode.
+doubletap_jump (Double tap jump for fly) bool false
+
+# If disabled "use" key is used to fly fast if both fly and fast mode are enabled.
+always_fly_fast (Always fly and fast) bool true
+
+# The time in seconds it takes between repeated right clicks when holding the right mouse button.
+repeat_rightclick_time (Rightclick repetition interval) float 0.25
+
+# Enable random user input (only used for testing).
+random_input (Random input) bool false
+
+# Continuous forward movement (only used for testing).
+continuous_forward (Continuous forward) bool false
+
+# Key for moving the player forward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_forward (Forward key) key KEY_KEY_W
+
+# Key for moving the player backward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_backward (Backward key) key KEY_KEY_S
+
+# Key for moving the player left.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_left (Left key) key KEY_KEY_A
+
+# Key for moving the player right.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_right (Right key) key KEY_KEY_D
+
+# Key for jumping.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_jump (Jump key) key KEY_SPACE
+
+# Key for sneaking.
+# Also used for climbing down and descending in water if aux1_descends is disabled.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_sneak (Sneak key) key KEY_LSHIFT
+
+# Key for opening the inventory.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_inventory (Inventory key) key KEY_KEY_I
+
+# Key for moving fast in fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_special1 (Use key) key KEY_KEY_E
+
+# Key for opening the chat window.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_chat (Chat key) key KEY_KEY_T
+
+# Key for opening the chat window to type commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cmd (Command key) key /
+
+# Key for opening the chat console.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keyman_console (Console key) key KEY_F10
+
+# Key for toggling unlimited view range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_rangeselect (Range select key) key KEY_KEY_R
+
+# Key for toggling flying.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_freemove (Fly key) key KEY_KEY_K
+
+# Key for toggling fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_fastmove (Fast key) key KEY_KEY_J
+
+# Key for toggling noclip mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_noclip (Noclip key) key KEY_KEY_H
+
+# Key for toggling cinematic mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cinematic (Cinematic mode key) key KEY_F8
+
+# Key for toggling display of minimap.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_minimap (Minimap key) key KEY_F9
+
+# Key for taking screenshots.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_screenshot (Screenshot) key KEY_F12
+
+# Key for dropping the currently selected item.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_drop (Drop item key) key KEY_KEY_Q
+
+# Key for toggling the display of the HUD.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_hud (HUD toggle key) key KEY_F1
+
+# Key for toggling the display of the chat.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_chat (Chat toggle key) key KEY_F2
+
+# Key for toggling the display of the fog.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_force_fog_off (Fog toggle key) key KEY_F3
+
+# Key for toggling the camrea update. Only used for development
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_update_camera (Camera update toggle key) key
+
+# Key for toggling the display of debug info.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_debug (Debug info toggle key) key KEY_F5
+
+# Key for toggling the display of the profiler. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_toggle_profiler (Profiler toggle key) key KEY_F6
+
+# Key for switching between first- and third-person camera.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_camera_mode (Toggle camera mode key) key KEY_F7
+
+# Key for increasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_increase_viewing_range_min (View range increase key) key +
+
+# Key for decreasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_decrease_viewing_range_min (View range decrease key) key -
+
+# Key for printing debug stacks. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_print_debug_stacks (Print stacks) key KEY_KEY_P
+
+[*Network]
+
+# Address to connect to.
+# Leave this blank to start a local server.
+# Note that the address field in the main menu overrides this setting.
+address (Server address) string
+
+# Port to connect to (UDP).
+# Note that the port field in the main menu overrides this setting.
+remote_port (Remote port) int 30000 1 65535
+
+# Whether to support older servers before protocol version 25.
+# Enable if you want to connect to 0.4.12 servers and before.
+# Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.
+# Disabling this option will protect your password better.
+send_pre_v25_init (Support older servers) bool true
+
+# Save the map received by the client on disk.
+enable_local_map_saving (Saving map received from server) bool false
+
+# Show entity selection boxes
+show_entity_selectionbox (Show entity selection boxes) bool true
+
+# Enable usage of remote media server (if provided by server).
+# Remote servers offer a significantly faster way to download media (e.g. textures)
+# when connecting to the server.
+enable_remote_media_server (Connect to external media server) bool true
+
+# URL to the server list displayed in the Multiplayer Tab.
+serverlist_url (Serverlist URL) string servers.minetest.net
+
+# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.
+serverlist_file (Serverlist file) string favoriteservers.txt
+
+[*Graphics]
+
+[**In-Game]
+
+[***Basic]
+
+# Enable VBO
+enable_vbo (VBO) bool true
+
+# Whether to fog out the end of the visible area.
+enable_fog (Fog) bool true
+
+# Leaves style:
+# - Fancy: all faces visible
+# - Simple: only outer faces, if defined special_tiles are used
+# - Opaque: disable transparency
+leaves_style (Leaves style) enum fancy fancy,simple,opaque
+
+# Connects glass if supported by node.
+connected_glass (Connect glass) bool false
+
+# Enable smooth lighting with simple ambient occlusion.
+# Disable for speed or for different looks.
+smooth_lighting (Smooth lighting) bool true
+
+# Clouds are a client side effect.
+enable_clouds (Clouds) bool true
+
+# Use 3D cloud look instead of flat.
+enable_3d_clouds (3D clouds) bool true
+
+# Method used to highlight selected object.
+node_highlighting (Node highlighting) enum box box,halo
+
+[***Filtering]
+
+# Use mip mapping to scale textures. May slightly increase performance.
+mip_map (Mipmapping) bool false
+
+# Use anisotropic filtering when viewing at textures from an angle.
+anisotropic_filter (Anisotropic filtering) bool false
+
+# Use bilinear filtering when scaling textures.
+bilinear_filter (Bilinear filtering) bool false
+
+# Use trilinear filtering when scaling textures.
+trilinear_filter (Trilinear filtering) bool false
+
+# Filtered textures can blend RGB values with fully-transparent neighbors,
+# which PNG optimizers usually discard, sometimes resulting in a dark or
+# light edge to transparent textures. Apply this filter to clean that up
+# at texture load time.
+texture_clean_transparent (Clean transparent textures) bool false
+
+# When using bilinear/trilinear/anisotropic filters, low-resolution textures
+# can be blurred, so automatically upscale them with nearest-neighbor
+# interpolation to preserve crisp pixels. This sets the minimum texture size
+# for the upscaled textures; higher values look sharper, but require more
+# memory. Powers of 2 are recommended. Setting this higher than 1 may not
+# have a visible effect unless bilinear/trilinear/anisotropic filtering is
+# enabled.
+texture_min_size (Minimum texture size for filters) int 64
+
+# Experimental option, might cause visible spaces between blocks
+# when set to higher number than 0.
+fsaa (FSAA) enum 0 0,1,2,4,8,16
+
+[***Shaders]
+
+# Shaders allow advanced visul effects and may increase performance on some video cards.
+# Thy only work with the OpenGL video backend.
+enable_shaders (Shaders) bool true
+
+[****Tone Mapping]
+
+# Enables filmic tone mapping
+tone_mapping (Filmic tone mapping) bool false
+
+[****Bumpmapping]
+
+# Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack
+# or need to be auto-generated.
+# Requires shaders to be enabled.
+enable_bumpmapping (Bumpmapping) bool false
+
+# Enables on the fly normalmap generation (Emboss effect).
+# Requires bumpmapping to be enabled.
+generate_normalmaps (Generate normalmaps) bool false
+
+# Strength of generated normalmaps.
+normalmaps_strength (Normalmaps strength) float 0.6
+
+# Defines sampling step of texture.
+# A higher value results in smoother normal maps.
+normalmaps_smooth (Normalmaps sampling) int 0 0 2
+
+[****Parallax Occlusion]
+
+# Enables parallax occlusion mapping.
+# Requires shaders to be enabled.
+enable_parallax_occlusion (Parallax occlusion) bool false
+
+# 0 = parallax occlusion with slope information (faster).
+# 1 = relief mapping (slower, more accurate).
+parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1
+
+# Strength of parallax.
+3d_parallax_strength (Parallax occlusion strength) float 0.025
+
+# Number of parallax occlusion iterations.
+parallax_occlusion_iterations (Parallax occlusion iterations) int 4
+
+# Overall scale of parallax occlusion effect.
+parallax_occlusion_scale (Parallax occlusion Scale) float 0.08
+
+# Overall bias of parallax occlusion effect, usually scale/2.
+parallax_occlusion_bias (Parallax occlusion bias) float 0.04
+
+[****Waving Nodes]
+
+# Set to true enables waving water.
+# Requires shaders to be enabled.
+enable_waving_water (Waving water) bool false
+
+water_wave_height (Waving water height) float 1.0
+
+water_wave_length (Waving water length) float 20.0
+
+water_wave_speed (Waving water speed) float 5.0
+
+# Set to true enables waving leaves.
+# Requires shaders to be enabled.
+enable_waving_leaves (Waving leaves) bool false
+
+# Set to true enables waving plants.
+# Requires shaders to be enabled.
+enable_waving_plants (Waving plants) bool false
+
+[***Advanced]
+
+# If FPS would go higher than this, limit it by sleeping
+# to not waste CPU power for no benefit.
+fps_max (Maximum FPS) int 60
+
+# Maximum FPS when game is paused.
+pause_fps_max (FPS in pause menu) int 20
+
+# View distance in nodes.
+# Min = 20
+viewing_range (Viewing range) int 100
+
+# Width component of the initial window size.
+screenW (Screen width) int 800
+
+# Height component of the initial window size.
+screenH (Screen height) int 600
+
+# Fullscreen mode.
+fullscreen (Full screen) bool false
+
+# Bits per pixel (aka color depth) in fullscreen mode.
+fullscreen_bpp (Full screen BPP) int 24
+
+# Vertical screen synchronization.
+vsync (V-Sync) bool false
+
+# Field of view in degrees.
+fov (Field of view) int 72 30 160
+
+# Adjust the gamma encoding for the light tables. Lower numbers are brighter.
+# This setting is for the client only and is ignored by the server.
+display_gamma (Gamma) float 1.8 1.0 3.0
+
+# Path to texture directory. All textures are first searched from here.
+texture_path (Texture path) path
+
+# The rendering back-end for Irrlicht.
+video_driver (Video driver) enum opengl null,software,burningsvideo,direct3d8,direct3d9,opengl
+
+# Height on which clouds are appearing.
+cloud_height (Cloud height) int 120
+
+# Radius of cloud area stated in number of 64 node cloud squares.
+# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
+cloud_radius (Cloud radius) int 12
+
+# Multiplier for view bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+view_bobbing_amount (View bobbing) float 1.0
+
+# Multiplier for fall bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+fall_bobbing_amount (Fall bobbing) float 0.0
+
+# 3D support.
+# Currently supported:
+# - none: no 3d output.
+# - anaglyph: cyan/magenta color 3d.
+# - interlaced: odd/even line based polarisation screen support.
+# - topbottom: split screen top/bottom.
+# - sidebyside: split screen side by side.
+# - pageflip: quadbuffer based 3d.
+3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,pageflip
+
+# In-game chat console background color (R,G,B).
+console_color (Console color) string (0,0,0)
+
+# In-game chat console background alpha (opaqueness, between 0 and 255).
+console_alpha (Console alpha) int 200 0 255
+
+# Selection box border color (R,G,B).
+selectionbox_color (Selection box color) string (0,0,0)
+
+# Width of the selectionbox's lines around nodes.
+selectionbox_width (Selection box width) int 2 1 5
+
+# Crosshair color (R,G,B).
+crosshair_color (Crosshair color) string (255,255,255)
+
+# Crosshair alpha (opaqueness, between 0 and 255).
+crosshair_alpha (Crosshair alpha) int 255 0 255
+
+# Whether node texture animations should be desynchronized per mapblock.
+desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true
+
+# Maximum proportion of current window to be used for hotbar.
+# Useful if there's something to be displayed right or left of hotbar.
+hud_hotbar_max_width (Maximum hotbar width) float 1.0
+
+# Enables caching of facedir rotated meshes.
+enable_mesh_cache (Mesh cache) bool false
+
+# Enables minimap.
+enable_minimap (Minimap) bool true
+
+# Shape of the minimap. Enabled = round, disabled = square.
+minimap_shape_round (Round minimap) bool true
+
+# True = 256
+# False = 128
+# Useable to make minimap smoother on slower machines.
+minimap_double_scan_height (Minimap scan height) bool true
+
+# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
+directional_colored_fog (Colored fog) bool true
+
+# The strength (darkness) of node ambient-occlusion shading.
+# Lower is darker, Higher is lighter. The valid range of values for this
+# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
+# set to the nearest valid value.
+ambient_occlusion_gamma (Ambient occlusion gamma) float 2.2 0.25 4.0
+
+# Enables animation of inventory items.
+inventory_items_animations (Inventory items animations) bool false
+
+[**Menus]
+
+# Use a cloud animation for the main menu background.
+menu_clouds (Clouds in menu) bool true
+
+# Scale gui by a user specified value.
+# Use a nearest-neighbor-anti-alias filter to scale the GUI.
+# This will smooth over some of the rough edges, and blend
+# pixels when scaling down, at the cost of blurring some
+# edge pixels when images are scaled by non-integer sizes.
+gui_scaling (GUI scaling) float 1.0
+
+# When gui_scaling_filter is true, all GUI images need to be
+# filtered in software, but some images are generated directly
+# to hardware (e.g. render-to-texture for nodes in inventory).
+gui_scaling_filter (GUI scaling filter) bool false
+
+# When gui_scaling_filter_txr2img is true, copy those images
+# from hardware to software for scaling. When false, fall back
+# to the old scaling method, for video drivers that don't
+# propery support downloading textures back from hardware.
+gui_scaling_filter_txr2img (GUI scaling filter txr2img) bool true
+
+# Delay showing tooltips, stated in milliseconds.
+tooltip_show_delay (Tooltip delay) int 400
+
+# Whether freetype fonts are used, requires freetype support to be compiled in.
+freetype (Freetype fonts) bool true
+
+# Path to TrueTypeFont or bitmap.
+font_path (Font path) path fonts/liberationsans.ttf
+
+font_size (Font size) int 15
+
+# Font shadow offset, if 0 then shadow will not be drawn.
+font_shadow (Font shadow) int 1
+
+# Font shadow alpha (opaqueness, between 0 and 255).
+font_shadow_alpha (Font shadow alpha) int 128 0 255
+
+mono_font_path (Monospace font path) path fonts/liberationmono.ttf
+
+mono_font_size (Monospace font size) int 15
+
+# This font will be used for certain languages.
+fallback_font_path (Fallback font) path fonts/DroidSansFallbackFull.ttf
+fallback_font_size (Fallback font size) int 15
+fallback_font_shadow (Fallback font shadow) int 1
+fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
+
+# Path to save screenshots at.
+screenshot_path (Screenshot folder) path
+
+# Format of screenshots.
+screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
+
+# Screenshot quality. Only used for JPEG format.
+# 1 means worst quality; 100 means best quality.
+# Use 0 for default quality.
+screenshot_quality (Screenshot quality) int 0 0 100
+
+[**Advanced]
+
+# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
+screen_dpi (DPI) int 72
+
+[*Sound]
+
+enable_sound (Sound) bool true
+
+sound_volume (Volume) float 0.7 0.0 1.0
+
+[*Advanced]
+
+# Timeout for client to remove unused map data from memory.
+client_unload_unused_data_timeout (Mapblock unload timeout) int 600
+
+# Maximum number of mapblocks for client to be kept in memory.
+# Set to -1 for unlimited amount.
+client_mapblock_limit (Mapblock limit) int 5000
+
+# Whether to show the client debug info (has the same effect as hitting F5).
+show_debug (Show debug info) bool false
+
+[Server / Singleplayer]
+
+# Name of the server, to be displayed when players join and in the serverlist.
+server_name (Server name) string Minetest server
+
+# Description of server, to be displayed when players join and in the serverlist.
+server_description (Server description) string mine here
+
+# Domain name of server, to be displayed in the serverlist.
+server_address (Server address) string game.minetest.net
+
+# Homepage of server, to be displayed in the serverlist.
+server_url (Server URL) string http://minetest.net
+
+# Automaticaly report to the serverlist.
+server_announce (Announce server) bool false
+
+# Announce to this serverlist.
+# If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net.
+serverlist_url (Serverlist URL) string servers.minetest.net
+
+[*Network]
+
+# Network port to listen (UDP).
+# This value will be overridden when starting from the main menu.
+port (Server port) int 30000
+
+# The network interface that the server listens on.
+bind_address (Bind address) string
+
+# Enable to disallow old clients from connecting.
+# Older clients are compatible in the sense that they will not crash when connecting
+# to new servers, but they may not support all new features that you are expecting.
+strict_protocol_version_checking (Strict protocol checking) bool false
+
+# Specifies URL from which client fetches media instead of using UDP.
+# $filename should be accessible from $remote_media$filename via cURL
+# (obviously, remote_media should end with a slash).
+# Files that are not present will be fetched the usual way.
+remote_media (Remote media) string
+
+# Enable/disable running an IPv6 server. An IPv6 server may be restricted
+# to IPv6 clients, depending on system configuration.
+# Ignored if bind_address is set.
+ipv6_server (IPv6 server) bool false
+
+[**Advanced]
+
+# How many blocks are flying in the wire simultaneously per client.
+max_simultaneous_block_sends_per_client (Maximum simultaneously blocks send per client) int 10
+
+# How many blocks are flying in the wire simultaneously for the whole server.
+max_simultaneous_block_sends_server_total (Maximum simultaneously bocks send total) int 40
+
+# To reduce lag, block transfers are slowed down when a player is building something.
+# This determines how long they are slowed down after placing or removing a node.
+full_block_send_enable_min_time_from_building () float 2.0
+
+# Maximum number of packets sent per send step, if you have a slow connection
+# try reducing it, but don't reduce it to a number below double of targeted
+# client number.
+max_packets_per_iteration (Max. packets per iteration) int 1024
+
+[*Game]
+
+# Default game when creating a new world.
+# This will be overridden when creating a world from the main menu.
+default_game (Default game) string minetest
+
+# Message of the day displayed to players connecting.
+motd (Message of the day) string
+
+# Maximum number of players that can connect simultaneously.
+max_users (Maximum users) int 15
+
+# World directory (everything in the world is stored here).
+# Not needed if starting from the main menu.
+map-dir (Map directory) path
+
+# Time in seconds for item entity (dropped items) to live.
+# Setting it to -1 disables the feature.
+item_entity_ttl (Item entity TTL) int 900
+
+# Enable players getting damage and dying.
+enable_damage (Damage) bool false
+
+# A chosen map seed for a new map, leave empty for random.
+# Will be overridden when creating a new world in the main menu.
+fixed_map_seed (Fixed map seed) string
+
+# New users need to input this password.
+default_password (Default password) string
+
+# The privileges that new users automatically get.
+# See /privs in game for a full list on your server and mod configuration.
+default_privs (Default privileges) string interact, shout
+
+# Privileges that players with basic_privs can grant
+basic_privs (Basic Privileges) string interact, shout
+
+# Whether players are shown to clients without any range limit.
+# Deprecated, use the setting player_transfer_distance instead.
+unlimited_player_transfer_distance (Unlimited player transfer distance) bool true
+
+# Defines the maximal player transfer distance in blocks (0 = unlimited).
+player_transfer_distance (Player transfer distance) int 0
+
+# Whether to allow players to damage and kill each other.
+enable_pvp (Player versus Player) bool true
+
+# If this is set, players will always (re)spawn at the given position.
+static_spawnpoint (Static spawnpoint) string
+
+# If enabled, new players cannot join with an empty password.
+disallow_empty_password (Disallow empty passwords) bool false
+
+# If enabled, disable cheat prevention in multiplayer.
+disable_anticheat (Disable anticheat) bool false
+
+# If enabled, actions are recorded for rollback.
+# This option is only read when server starts.
+enable_rollback_recording (Rollback recording) bool false
+
+# A message to be displayed to all clients when the server shuts down.
+kick_msg_shutdown (Shutdown message) string Server shutting down.
+
+# A message to be displayed to all clients when the server crashes.
+kick_msg_crash (Crash message) string This server has experienced an internal error. You will now be disconnected.
+
+# Whether to ask clients to reconnect after a (Lua) crash.
+# Set this to true if your server is set up to restart automatically.
+ask_reconnect_on_crash (Ask to reconnect after crash) bool false
+
+# From how far clients know about objects, stated in mapblocks (16 nodes).
+active_object_send_range_blocks (Active object send range) int 3
+
+# How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes).
+# In active blocks objects are loaded and ABMs run.
+active_block_range (Active block range) int 2
+
+# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
+max_block_send_distance (Max block send distance) int 10
+
+# Maximum number of forceloaded mapblocks.
+max_forceloaded_blocks (Maximum forceloaded blocks) int 16
+
+# Interval of sending time of day to clients.
+time_send_interval (Time send interval) int 5
+
+# Controls length of day/night cycle.
+# Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
+time_speed (Time speed) int 72
+
+# Interval of saving important changes in the world, stated in seconds.
+server_map_save_interval (Map save interval) float 5.3
+
+[**Physics]
+
+movement_acceleration_default (Default acceleration) float 3
+movement_acceleration_air (Acceleration in air) float 2
+movement_acceleration_fast (Fast mode acceleration) float 10
+movement_speed_walk (Walking speed) float 4
+movement_speed_crouch (Crouch speed) float 1.35
+movement_speed_fast (Fast mode speed) float 20
+movement_speed_climb (Climbing speed) float 2
+movement_speed_jump (Jumping speed) float 6.5
+movement_speed_descend (Descending speed) float 6
+movement_liquid_fluidity (Liquid fluidity) float 1
+movement_liquid_fluidity_smooth (Liquid fluidity smoothing) float 0.5
+movement_liquid_sink (Liquid sink) float 10
+movement_gravity (Gravity) float 9.81
+
+[**Advanced]
+
+# Handling for deprecated lua api calls:
+# - legacy: (try to) mimic old behaviour (default for release).
+# - log: mimic and log backtrace of deprecated call (default for debug).
+# - error: abort on usage of deprecated call (suggested for mod developers).
+deprecated_lua_api_handling (Deprecated Lua API handling) enum legacy legacy,log,error
+
+# Useful for mod developers.
+mod_profiling (Mod profiling) bool false
+
+# Detailed mod profile data. Useful for mod developers.
+detailed_profiling (Detailed mod profiling) bool false
+
+# Profiler data print interval. 0 = disable. Useful for developers.
+profiler_print_interval (Profiling print interval) int 0
+
+# Number of extra blocks that can be loaded by /clearobjects at once.
+# This is a trade-off between sqlite transaction overhead and
+# memory consumption (4096=100MB, as a rule of thumb).
+max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096
+
+# How much the server will wait before unloading unused mapblocks.
+# Higher value is smoother, but will use more RAM.
+server_unload_unused_data_timeout (Unload unused server data) int 29
+
+# Maximum number of statically stored objects in a block.
+max_objects_per_block (Maxmimum objects per block) int 49
+
+# See http://www.sqlite.org/pragma.html#pragma_synchronous
+sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2
+
+# Length of a server tick and the interval at which objects are generally updated over network.
+dedicated_server_step (Dedicated server step) float 0.1
+
+# Time in between active block management cycles
+active_block_mgmt_interval (Active Block Management interval) float 2.0
+
+# Length of time between ABM execution cycles
+abm_interval (Active Block Modifier interval) float 1.0
+
+# Length of time between NodeTimer execution cycles
+nodetimer_interval (NodeTimer interval) float 1.0
+
+# If enabled, invalid world data won't cause the server to shut down.
+# Only enable this if you know what you are doing.
+ignore_world_load_errors (Ignore world errors) bool false
+
+# Max liquids processed per step.
+liquid_loop_max (Liquid loop max) int 100000
+
+# The time (in seconds) that the liquids queue may grow beyond processing
+# capacity until an attempt is made to decrease its size by dumping old queue
+# items. A value of 0 disables the functionality.
+liquid_queue_purge_time (Liquid queue purge time) int 0
+
+# Liquid update interval in seconds.
+liquid_update (Liquid update tick) float 1.0
+
+[*Mapgen]
+
+# Name of map generator to be used when creating a new world.
+# Creating a world in the main menu will override this.
+mg_name (Mapgen name) enum v6 v5,v6,v7,flat,valleys,fractal,singlenode
+
+# Water surface level of the world.
+water_level (Water level) int 1
+
+# From how far blocks are generated for clients, stated in mapblocks (16 nodes).
+max_block_generate_distance (Max block generate distance) int 6
+
+# Where the map generator stops.
+# Please note:
+# - Limited to 31000 (setting above has no effect)
+# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).
+# - Those groups have an offset of -32, -32 nodes from the origin.
+# - Only groups which are within the map_generation_limit are generated
+map_generation_limit (Map generation limit) int 31000 0 31000
+
+# Global map generation attributes.
+# In Mapgen v6 the 'decorations' flag controls all decorations except trees
+# and junglegrass, in all other mapgens this flag controls all decorations.
+# The default flags set in the engine are: caves, light, decorations
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+mg_flags (Mapgen flags) flags caves,dungeons,light,decorations caves,dungeons,light,decorations,nocaves,nodungeons,nolight,nodecorations
+
+[**Advanced]
+
+# Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes).
+chunksize (Chunk size) int 5
+
+# Dump the mapgen debug infos.
+enable_mapgen_debug_info (Mapgen debug) bool false
+
+# Maximum number of blocks that can be queued for loading.
+emergequeue_limit_total (Absolute limit of emerge queues) int 256
+
+# Maximum number of blocks to be queued that are to be loaded from file.
+# Set to blank for an appropriate amount to be chosen automatically.
+emergequeue_limit_diskonly (Limit of emerge queues on disk) int 32
+
+# Maximum number of blocks to be queued that are to be generated.
+# Set to blank for an appropriate amount to be chosen automatically.
+emergequeue_limit_generate (Limit of emerge queues to generate) int 32
+
+# Number of emerge threads to use. Make this field blank, or increase this number
+# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly
+# at the cost of slightly buggy caves.
+num_emerge_threads (Number of emerge threads) int 1
+
+# Noise parameters for biome API temperature, humidity and biome blend.
+mg_biome_np_heat (Mapgen biome heat noise parameters) noise_params 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0
+mg_biome_np_heat_blend (Mapgen heat blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0
+mg_biome_np_humidity (Mapgen biome humidity noise parameters) noise_params 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0
+mg_biome_np_humidity_blend (Mapgen biome humidity blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0
+
+[***Mapgen v5]
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+mgv5_cave_width (Mapgen v5 cave width) float 0.125
+
+mgv5_np_filler_depth (Mapgen v5 filler depth noise parameters) noise_params 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0
+mgv5_np_factor (Mapgen v5 factor noise parameters) noise_params 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0
+mgv5_np_height (Mapgen v5 height noise parameters) noise_params 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0
+mgv5_np_cave1 (Mapgen v5 cave1 noise parameters) noise_params 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0
+mgv5_np_cave2 (Mapgen v5 cave2 noise parameters) noise_params 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0
+# TODO
+#mgv5_np_ground = {
+# offset = 0
+# scale = 40
+# spread = (80, 80, 80)
+# seed = 983240
+# octaves = 4
+# persistence = 0.55
+# lacunarity = 2.0
+# flags = "eased"
+#}
+
+[***Mapgen v6]
+
+# Map generation attributes specific to Mapgen v6.
+# When snowbiomes are enabled jungles are automatically enabled, the 'jungles' flag is ignored.
+# The default flags set in the engine are: biomeblend, mudflow
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+mgv6_spflags (Mapgen v6 flags) flags jungles,biomeblend,mudflow,snowbiomes,trees jungles,biomeblend,mudflow,snowbiomes,flat,trees,nojungles,nobiomeblend,nomudflow,nosnowbiomes,noflat,notrees
+
+# Controls size of deserts and beaches in Mapgen v6.
+# When snowbiomes are enabled 'mgv6_freq_desert' is ignored.
+mgv6_freq_desert (Mapgen v6 desert frequency) float 0.45
+mgv6_freq_beach (Mapgen v6 beach frequency) float 0.15
+
+mgv6_np_terrain_base (Mapgen v6 terrain base noise parameters) noise_params -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
+mgv6_np_terrain_higher (Mapgen v6 terrain altitude noise parameters) noise_params 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0
+mgv6_np_steepness (Mapgen v6 steepness noise parameters) noise_params 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0
+mgv6_np_height_select (Mapgen v6 height select noise parameters) noise_params 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0
+mgv6_np_mud (Mapgen v6 mud noise parameters) noise_params 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0
+mgv6_np_beach (Mapgen v6 beach noise parameters) noise_params 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0
+mgv6_np_biome (Mapgen v6 biome noise parameters) noise_params 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0
+mgv6_np_cave (Mapgen v6 cave noise parameters) noise_params 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0
+mgv6_np_humidity (Mapgen v6 humidity noise parameters) noise_params 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0
+mgv6_np_trees (Mapgen v6 trees noise parameters) noise_params 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0
+mgv6_np_apple_trees (Mapgen v6 apple trees noise parameters) noise_params 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0
+
+[***Mapgen v7]
+
+# Map generation attributes specific to Mapgen v7.
+# The 'ridges' flag controls the rivers.
+# The default flags set in the engine are: mountains, ridges
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+mgv7_spflags (Mapgen v7 flags) flags mountains,ridges mountains,ridges,nomountains,noridges
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+mgv7_cave_width (Mapgen v7 cave width) float 0.3
+
+mgv7_np_terrain_base (Mapgen v7 terrain base noise parameters) noise_params 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0
+mgv7_np_terrain_alt (Mapgen v7 terrain altitude noise parameters) noise_params 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0
+mgv7_np_terrain_persist (Mapgen v7 terrain persistation noise parameters) noise_params 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0
+mgv7_np_height_select (Mapgen v7 height select noise parameters) noise_params -8, 16, (500, 500, 500), 4213, 6, 0.7, 2.0
+mgv7_np_filler_depth (Mapgen v7 filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+mgv7_np_mount_height (Mapgen v7 mount height noise parameters) noise_params 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0
+mgv7_np_ridge_uwater (Mapgen v7 ridge water noise parameters) noise_params 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0
+mgv7_np_mountain (Mapgen v7 mountain noise parameters) noise_params -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0
+mgv7_np_ridge (Mapgen v7 ridge noise parameters) noise_params 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0
+mgv7_np_cave1 (Mapgen v7 cave1 noise parameters) noise_params 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
+mgv7_np_cave2 (Mapgen v7 cave2 noise parameters) noise_params 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+
+[***Mapgen flat]
+
+# Map generation attributes specific to Mapgen flat.
+# Occasional lakes and hills can be added to the flat world.
+# The default flags set in the engine are: none
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+mgflat_spflags (Mapgen flat flags) flags lakes,hills,,nolakes,nohills
+
+# Y of flat ground.
+mgflat_ground_level (Mapgen flat ground level) int 8
+
+# Y of upper limit of large pseudorandom caves.
+mgflat_large_cave_depth (Mapgen flat large cave depth) int -33
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+mgflat_cave_width (Mapgen flat cave width) float 0.3
+
+# Terrain noise threshold for lakes.
+# Controls proportion of world area covered by lakes.
+# Adjust towards 0.0 for a larger proportion.
+mgflat_lake_threshold (Mapgen flat lake threshold) float -0.45
+
+# Controls steepness/depth of lake depressions.
+mgflat_lake_steepness (Mapgen flat lake steepness) float 48.0
+
+# Terrain noise threshold for hills.
+# Controls proportion of world area covered by hills.
+# Adjust towards 0.0 for a larger proportion.
+mgflat_hill_threshold (Mapgen flat hill threshold) float 0.45
+
+# Controls steepness/height of hills.
+mgflat_hill_steepness (Mapgen flat hill steepness) float 64.0
+
+# Determines terrain shape.
+# The 3 numbers in brackets control the scale of the
+# terrain, the 3 numbers should be identical.
+mgflat_np_terrain (Mapgen flat terrain noise parameters) noise_params 0, 1, (600, 600, 600), 7244, 5, 0.6, 2.0
+
+mgflat_np_filler_depth (Mapgen flat filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+mgflat_np_cave1 (Mapgen flat cave1 noise parameters) noise_params 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0
+mgflat_np_cave2 (Mapgen flat cave2 noise parameters) noise_params 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0
+
+[***Mapgen fractal]
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+mgfractal_cave_width (Mapgen fractal cave width) float 0.3
+
+# Choice of 18 fractals from 9 formulas.
+# 1 = 4D "Roundy" mandelbrot set.
+# 2 = 4D "Roundy" julia set.
+# 3 = 4D "Squarry" mandelbrot set.
+# 4 = 4D "Squarry" julia set.
+# 5 = 4D "Mandy Cousin" mandelbrot set.
+# 6 = 4D "Mandy Cousin" julia set.
+# 7 = 4D "Variation" mandelbrot set.
+# 8 = 4D "Variation" julia set.
+# 9 = 3D "Mandelbrot/Mandelbar" mandelbrot set.
+# 10 = 3D "Mandelbrot/Mandelbar" julia set.
+# 11 = 3D "Christmas Tree" mandelbrot set.
+# 12 = 3D "Christmas Tree" julia set.
+# 13 = 3D "Mandelbulb" mandelbrot set.
+# 14 = 3D "Mandelbulb" julia set.
+# 15 = 3D "Cosine Mandelbulb" mandelbrot set.
+# 16 = 3D "Cosine Mandelbulb" julia set.
+# 17 = 4D "Mandelbulb" mandelbrot set.
+# 18 = 4D "Mandelbulb" julia set.
+mgfractal_fractal (Mapgen fractal fractal) int 1 1 18
+
+# Iterations of the recursive function.
+# Controls the amount of fine detail.
+mgfractal_iterations (Mapgen fractal iterations) int 11
+
+# Approximate (X,Y,Z) scale of fractal in nodes.
+mgfractal_scale (Mapgen fractal scale) v3f (4096.0, 1024.0, 4096.0)
+
+# (X,Y,Z) offset of fractal from world centre in units of 'scale'.
+# Used to move a suitable spawn area of low land close to (0, 0).
+# The default is suitable for mandelbrot sets, it needs to be edited for julia sets.
+# Range roughly -2 to 2. Multiply by 'scale' for offset in nodes.
+mgfractal_offset (Mapgen fractal offset) v3f (1.79, 0.0, 0.0)
+
+# W co-ordinate of the generated 3D slice of a 4D fractal.
+# Determines which 3D slice of the 4D shape is generated.
+# Has no effect on 3D fractals.
+# Range roughly -2 to 2.
+mgfractal_slice_w (Mapgen fractal slice w) float 0.0
+
+# Julia set only: X component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+mgfractal_julia_x (Mapgen fractal julia x) float 0.33
+
+# Julia set only: Y component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+mgfractal_julia_y (Mapgen fractal julia y) float 0.33
+
+# Julia set only: Z component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+mgfractal_julia_z (Mapgen fractal julia z) float 0.33
+
+# Julia set only: W component of hypercomplex constant determining julia shape.
+# Has no effect on 3D fractals.
+# Range roughly -2 to 2.
+mgfractal_julia_w (Mapgen fractal julia w) float 0.33
+
+mgfractal_np_seabed (Mapgen fractal seabed noise parameters) noise_params -14, 9, (600, 600, 600), 41900, 5, 0.6, 2.0
+mgfractal_np_filler_depth (Mapgen fractal filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+mgfractal_np_cave1 (Mapgen fractal cave1 noise parameters) noise_params 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0
+mgfractal_np_cave2 (Mapgen fractal cave2 noise parameters) noise_params 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0
+
+# Mapgen Valleys parameters
+[***Mapgen Valleys]
+
+# General parameters
+[****General]
+
+# Map generation attributes specific to Mapgen Valleys.
+# 'altitude_chill' makes higher elevations colder, which may cause biome issues.
+# 'humid_rivers' modifies the humidity around rivers and in areas where water would tend to pool,
+# it may interfere with delicately adjusted biomes.
+# The default flags set in the engine are: altitude_chill, humid_rivers
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+mg_valleys_spflags (Valleys C Flags) flags altitude_chill,humid_rivers altitude_chill,noaltitude_chill,humid_rivers,nohumid_rivers
+
+# The altitude at which temperature drops by 20C
+mgvalleys_altitude_chill (Altitude Chill) int 90
+
+# Depth below which you'll find large caves.
+mgvalleys_large_cave_depth (Large cave depth) int -33
+
+# Creates unpredictable lava features in caves.
+# These can make mining difficult. Zero disables them. (0-10)
+mgvalleys_lava_features (Lava Features) int 0
+
+# Depth below which you'll find massive caves.
+mgvalleys_massive_cave_depth (Massive cave depth) int -256
+
+# How deep to make rivers
+mgvalleys_river_depth (River Depth) int 4
+
+# How wide to make rivers
+mgvalleys_river_size (River Size) int 5
+
+# Creates unpredictable water features in caves.
+# These can make mining difficult. Zero disables them. (0-10)
+mgvalleys_water_features (Water Features) int 0
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+mgvalleys_cave_width (Cave width) float 0.3
+
+# Noise parameters
+[****Noises]
+
+# Caves and tunnels form at the intersection of the two noises
+mgvalleys_np_cave1 (Cave noise #1) noise_params 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
+
+# Caves and tunnels form at the intersection of the two noises
+mgvalleys_np_cave2 (Cave noise #2) noise_params 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+
+# The depth of dirt or other filler
+mgvalleys_np_filler_depth (Filler Depth) noise_params 0, 1.2, (256, 256, 256), 1605, 3, 0.5, 2.0
+
+# Massive caves form here.
+mgvalleys_np_massive_caves (Massive cave noise) noise_params 0, 1, (768, 256, 768), 59033, 6, 0.63, 2.0
+
+# River noise -- rivers occur close to zero
+mgvalleys_np_rivers (River Noise) noise_params 0, 1, (256, 256, 256), -6050, 5, 0.6, 2.0
+
+# Base terrain height
+mgvalleys_np_terrain_height (Terrain Height) noise_params -10, 50, (1024, 1024, 1024), 5202, 6, 0.4, 2.0
+
+# Raises terrain to make valleys around the rivers
+mgvalleys_np_valley_depth (Valley Depth) noise_params 5, 4, (512, 512, 512), -1914, 1, 1.0, 2.0
+
+# Slope and fill work together to modify the heights
+mgvalleys_np_inter_valley_fill (Valley Fill) noise_params 0, 1, (256, 512, 256), 1993, 6, 0.8, 2.0
+
+# Amplifies the valleys
+mgvalleys_np_valley_profile (Valley Profile) noise_params 0.6, 0.5, (512, 512, 512), 777, 1, 1.0, 2.0
+
+# Slope and fill work together to modify the heights
+mgvalleys_np_inter_valley_slope (Valley Slope) noise_params 0.5, 0.5, (128, 128, 128), 746, 1, 1.0, 2.0
+
+[*Security]
+
+# Prevent mods from doing insecure things like running shell commands.
+secure.enable_security (Enable mod security) bool false
+
+# Comma-separated list of trusted mods that are allowed to access insecure
+# functions even when mod security is on (via request_insecure_environment()).
+secure.trusted_mods (Trusted mods) string
+
+# Comma-seperated list of mods that are allowed to access HTTP APIs, which
+# allow them to upload and download data to/from the internet.
+secure.http_mods (HTTP Mods) string
+
+[Client and Server]
+
+# Name of the player.
+# When running a server, clients connecting with this name are admins.
+# When starting from the main menu, this is overridden.
+name (Player name) string
+
+# Set the language. Leave empty to use the system language.
+# A restart is required after changing this.
+language (Language) enum ,be,cs,da,de,eo,es,et,fr,hu,id,it,ja,jbo,ko,ky,lt,nb,nl,pl,pt,pt_BR,ro,ru,tr,uk,zh_CN,zh_TW
+
+# Level of logging to be written to debug.txt:
+# - <nothing> (no logging)
+# - none (messages with no level)
+# - error
+# - warning
+# - action
+# - info
+# - verbose
+debug_log_level (Debug log level) enum action ,warning,action,info,verbose
+
+# IPv6 support.
+enable_ipv6 (IPv6) bool true
+
+[*Advanced]
+
+# Default timeout for cURL, stated in milliseconds.
+# Only has an effect if compiled with cURL.
+curl_timeout (cURL timeout) int 5000
+
+# Limits number of parallel HTTP requests. Affects:
+# - Media fetch if server uses remote_media setting.
+# - Serverlist download and server announcement.
+# - Downloads performed by main menu (e.g. mod manager).
+# Only has an effect if compiled with cURL.
+curl_parallel_limit (cURL parallel limit) int 8
+
+# Maximum time in ms a file download (e.g. a mod download) may take.
+curl_file_download_timeout (cURL file download timeout) int 300000
+
+# Makes DirectX work with LuaJIT. Disable if it causes troubles.
+high_precision_fpu (High-precision FPU) bool true
+
+# Replaces the default main menu with a custom one.
+main_menu_script (Main menu script) string
+
+main_menu_game_mgr (Main menu game manager) int 0
+
+main_menu_mod_mgr (Main menu mod manager) int 1
+
+modstore_download_url (Modstore download URL) string https://forum.minetest.net/media/
+
+modstore_listmods_url (Modstore mods list URL) string https://forum.minetest.net/mmdb/mods/
+
+modstore_details_url (Modstore details URL) string https://forum.minetest.net/mmdb/mod/*/
diff --git a/client/shaders/default_shader/opengl_fragment.glsl b/client/shaders/default_shader/opengl_fragment.glsl
new file mode 100644
index 000000000..925ab6e1d
--- /dev/null
+++ b/client/shaders/default_shader/opengl_fragment.glsl
@@ -0,0 +1,4 @@
+void main(void)
+{
+ gl_FragColor = gl_Color;
+}
diff --git a/client/shaders/default_shader/opengl_vertex.glsl b/client/shaders/default_shader/opengl_vertex.glsl
new file mode 100644
index 000000000..d0b16c8b0
--- /dev/null
+++ b/client/shaders/default_shader/opengl_vertex.glsl
@@ -0,0 +1,9 @@
+uniform mat4 mWorldViewProj;
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = mWorldViewProj * gl_Vertex;
+
+ gl_FrontColor = gl_BackColor = gl_Color;
+}
diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl
index 424d32177..6862842a7 100644
--- a/client/shaders/nodes_shader/opengl_fragment.glsl
+++ b/client/shaders/nodes_shader/opengl_fragment.glsl
@@ -20,6 +20,38 @@ bool normalTexturePresent = false;
const float e = 2.718281828459;
const float BS = 10.0;
+#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.03334;
+}
+
+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));
@@ -47,15 +79,29 @@ vec4 get_normal_map(vec2 uv)
float find_intersection(vec2 dp, vec2 ds)
{
- const float depth_step = 1.0 / 24.0;
float depth = 1.0;
- for (int i = 0 ; i < 24 ; i++) {
+ float best_depth = 0.0;
+ float size = 0.0625;
+ for (int i = 0; i < 15; i++) {
+ depth -= size;
float h = texture2D(normalTexture, dp + ds * depth).a;
- if (h >= depth)
+ if (depth <= h) {
+ best_depth = depth;
break;
- depth -= depth_step;
+ }
}
- return depth;
+ depth = best_depth;
+ for (int i = 0; i < 4; i++) {
+ size *= 0.5;
+ float h = texture2D(normalTexture,dp + ds * depth).a;
+ if (depth <= h) {
+ best_depth = depth;
+ depth += size;
+ } else {
+ depth -= size;
+ }
+ }
+ return best_depth;
}
float find_intersectionRGB(vec2 dp, vec2 ds)
@@ -146,22 +192,26 @@ void main(void)
color = base.rgb;
#endif
-#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
+ vec4 col = vec4(color.rgb * gl_Color.rgb, 1.0);
+
+#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT
float alpha = gl_Color.a;
- vec4 col = vec4(color.rgb, alpha);
- col *= gl_Color;
if (fogDistance != 0.0) {
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
- gl_FragColor = vec4(col.rgb, alpha);
+ col = vec4(col.rgb, alpha);
#else
- vec4 col = vec4(color.rgb, base.a);
- col *= gl_Color;
if (fogDistance != 0.0) {
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
- gl_FragColor = vec4(col.rgb, base.a);
+ col = vec4(col.rgb, base.a);
+#endif
+
+#ifdef ENABLE_TONE_MAPPING
+ gl_FragColor = applyToneMapping(col);
+#else
+ gl_FragColor = col;
#endif
}
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index 53d5c92d0..28c5f197e 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -1,45 +1,51 @@
-uniform mat4 mWorldViewProj;
-uniform mat4 mInvWorld;
-uniform mat4 mTransWorld;
-uniform mat4 mWorld;
-
-uniform float dayNightRatio;
-uniform vec3 eyePosition;
-uniform float animationTimer;
-
-varying vec3 vPosition;
-varying vec3 worldPosition;
-
-varying vec3 eyeVec;
-varying vec3 lightVec;
-varying vec3 tsEyeVec;
-varying vec3 tsLightVec;
+uniform mat4 mWorldViewProj;
+uniform mat4 mInvWorld;
+uniform mat4 mTransWorld;
+uniform mat4 mWorld;
+
+uniform float dayNightRatio;
+uniform vec3 eyePosition;
+uniform float animationTimer;
+
+varying vec3 vPosition;
+varying vec3 worldPosition;
+
+varying vec3 eyeVec;
+varying vec3 lightVec;
+varying vec3 tsEyeVec;
+varying vec3 tsLightVec;
varying float area_enable_parallax;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-
+
+const float e = 2.718281828459;
+const float BS = 10.0;
+
+
float smoothCurve(float x)
{
return x * x * (3.0 - 2.0 * x);
-}
+}
+
+
float triangleWave(float x)
{
return abs(fract(x + 0.5) * 2.0 - 1.0);
-}
+}
+
+
float smoothTriangleWave(float x)
{
return smoothCurve(triangleWave(x)) * 2.0 - 1.0;
-}
-
-void main(void)
-{
- gl_TexCoord[0] = gl_MultiTexCoord0;
- //TODO: make offset depending on view angle and parallax uv displacement
- //thats for textures that doesnt align vertically, like dirt with grass
+}
+
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ //TODO: make offset depending on view angle and parallax uv displacement
+ //thats for textures that doesnt align vertically, like dirt with grass
//gl_TexCoord[0].y += 0.008;
-
- //Allow parallax/relief mapping only for certain kind of nodes
+
+ //Allow parallax/relief mapping only for certain kind of nodes
//Variable is also used to control area of the effect
#if (DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID)
area_enable_parallax = 1.0;
@@ -47,67 +53,63 @@ void main(void)
area_enable_parallax = 0.0;
#endif
-#if ((MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER)
- vec4 pos = gl_Vertex;
- pos.y -= 2.0;
-
- float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
-
- pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;
- gl_Position = mWorldViewProj * pos;
-#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
- vec4 pos = gl_Vertex;
- vec4 pos2 = mWorld * gl_Vertex;
-
- /*
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
- * And bufferize calcul to a float
- */
- float pos2XpZ = pos2.x + pos2.z;
-
- pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4;
- pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2;
- pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4;
- gl_Position = mWorldViewProj * pos;
-#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
- vec4 pos = gl_Vertex;
- vec4 pos2 = mWorld * gl_Vertex;
- if (gl_TexCoord[0].y < 0.05) {
- /*
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
- * And bufferize calcul to a float
- */
- float pos2XpZ = pos2.x + pos2.z;
-
- pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8;
- pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4;
- }
- gl_Position = mWorldViewProj * pos;
-#else
- gl_Position = mWorldViewProj * gl_Vertex;
-#endif
-
- vPosition = gl_Position.xyz;
- worldPosition = (mWorld * gl_Vertex).xyz;
+
+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)
+ vec4 pos2 = mWorld * gl_Vertex;
+ float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002;
+ disp_x = (smoothTriangleWave(animationTimer * 23.0 + tOffset) +
+ smoothTriangleWave(animationTimer * 11.0 + tOffset)) * 0.4;
+ disp_z = (smoothTriangleWave(animationTimer * 31.0 + tOffset) +
+ smoothTriangleWave(animationTimer * 29.0 + tOffset) +
+ smoothTriangleWave(animationTimer * 13.0 + tOffset)) * 0.5;
+#endif
+
+
+#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
+ vec4 pos = gl_Vertex;
+ pos.y -= 2.0;
+ float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
+ pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;
+ gl_Position = mWorldViewProj * pos;
+#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
+ vec4 pos = gl_Vertex;
+ pos.x += disp_x;
+ pos.y += disp_z * 0.1;
+ pos.z += disp_z;
+ gl_Position = mWorldViewProj * pos;
+#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
+ vec4 pos = gl_Vertex;
+ if (gl_TexCoord[0].y < 0.05) {
+ pos.x += disp_x;
+ pos.z += disp_z;
+ }
+ gl_Position = mWorldViewProj * pos;
+#else
+ gl_Position = mWorldViewProj * gl_Vertex;
+#endif
+
+
+ vPosition = gl_Position.xyz;
+ worldPosition = (mWorld * gl_Vertex).xyz;
// Don't generate heightmaps when too far from the eye
- float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition);
+ float dist = distance (vec3(0.0, 0.0, 0.0), vPosition);
if (dist > 150.0) {
area_enable_parallax = 0.0;
}
- vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
-
- vec3 normal, tangent, binormal;
- normal = normalize(gl_NormalMatrix * gl_Normal);
+ vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
+
+ vec3 normal, tangent, binormal;
+ normal = normalize(gl_NormalMatrix * gl_Normal);
tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz);
binormal = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz);
vec3 v;
-
- lightVec = sunPosition - worldPosition;
+
+ lightVec = sunPosition - worldPosition;
v.x = dot(lightVec, tangent);
v.y = dot(lightVec, binormal);
v.z = dot(lightVec, normal);
@@ -118,32 +120,32 @@ void main(void)
v.y = dot(eyeVec, binormal);
v.z = dot(eyeVec, normal);
tsEyeVec = normalize (v);
-
- vec4 color;
- float day = gl_Color.r;
- float night = gl_Color.g;
- float light_source = gl_Color.b;
-
- float rg = mix(night, day, dayNightRatio);
- rg += light_source * 2.5; // Make light sources brighter
- float b = rg;
-
- // Moonlight is blue
- b += (day - night) / 13.0;
- rg -= (day - night) / 23.0;
-
- // Emphase blue a bit in darker places
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
-
- // Artificial light is yellow-ish
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
-
- color.r = rg;
- color.g = rg;
- color.b = b;
-
- color.a = gl_Color.a;
- gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
-}
+
+ vec4 color;
+ float day = gl_Color.r;
+ float night = gl_Color.g;
+ float light_source = gl_Color.b;
+
+ float rg = mix(night, day, dayNightRatio);
+ rg += light_source * 2.5; // Make light sources brighter
+ float b = rg;
+
+ // Moonlight is blue
+ b += (day - night) / 13.0;
+ rg -= (day - night) / 23.0;
+
+ // Emphase blue a bit in darker places
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
+ b += max(0.0, (1.0 - abs(b - 0.13) / 0.17) * 0.025);
+
+ // Artificial light is yellow-ish
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
+ rg += max(0.0, (1.0 - abs(rg - 0.85) / 0.15) * 0.065);
+
+ color.r = rg;
+ color.g = rg;
+ color.b = b;
+
+ color.a = gl_Color.a;
+ gl_FrontColor = gl_BackColor = clamp(color, 0.0, 1.0);
+}
diff --git a/client/shaders/selection_shader/opengl_fragment.glsl b/client/shaders/selection_shader/opengl_fragment.glsl
new file mode 100644
index 000000000..c679d0e12
--- /dev/null
+++ b/client/shaders/selection_shader/opengl_fragment.glsl
@@ -0,0 +1,9 @@
+uniform sampler2D baseTexture;
+
+void main(void)
+{
+ vec2 uv = gl_TexCoord[0].st;
+ vec4 color = texture2D(baseTexture, uv);
+ color.rgb *= gl_Color.rgb;
+ gl_FragColor = color;
+}
diff --git a/client/shaders/selection_shader/opengl_vertex.glsl b/client/shaders/selection_shader/opengl_vertex.glsl
new file mode 100644
index 000000000..d0b16c8b0
--- /dev/null
+++ b/client/shaders/selection_shader/opengl_vertex.glsl
@@ -0,0 +1,9 @@
+uniform mat4 mWorldViewProj;
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = mWorldViewProj * gl_Vertex;
+
+ gl_FrontColor = gl_BackColor = gl_Color;
+}
diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl
index 75751e243..1fa669541 100644
--- a/client/shaders/water_surface_shader/opengl_fragment.glsl
+++ b/client/shaders/water_surface_shader/opengl_fragment.glsl
@@ -22,6 +22,38 @@ bool texSeamless = false;
const float e = 2.718281828459;
const float BS = 10.0;
+#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.03334;
+}
+
+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));
@@ -116,22 +148,26 @@ vec4 base = texture2D(baseTexture, uv).rgba;
color = base.rgb;
#endif
+ vec4 col = vec4(color.rgb * gl_Color.rgb, 1.0);
+
#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
float alpha = gl_Color.a;
- vec4 col = vec4(color.rgb, alpha);
- col *= gl_Color;
- if(fogDistance != 0.0){
+ if (fogDistance != 0.0) {
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
- gl_FragColor = vec4(col.rgb, alpha);
+ col = vec4(col.rgb, alpha);
#else
- vec4 col = vec4(color.rgb, base.a);
- col *= gl_Color;
- if(fogDistance != 0.0){
+ if (fogDistance != 0.0) {
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
- gl_FragColor = vec4(col.rgb, base.a);
+ col = vec4(col.rgb, base.a);
+#endif
+
+#ifdef ENABLE_TONE_MAPPING
+ gl_FragColor = applyToneMapping(col);
+#else
+ gl_FragColor = col;
#endif
}
diff --git a/client/shaders/water_surface_shader/opengl_vertex.glsl b/client/shaders/water_surface_shader/opengl_vertex.glsl
index 7ae517d8a..9b461f4c1 100644
--- a/client/shaders/water_surface_shader/opengl_vertex.glsl
+++ b/client/shaders/water_surface_shader/opengl_vertex.glsl
@@ -1,144 +1,144 @@
-uniform mat4 mWorldViewProj;
-uniform mat4 mInvWorld;
-uniform mat4 mTransWorld;
-uniform mat4 mWorld;
-
-uniform float dayNightRatio;
-uniform vec3 eyePosition;
-uniform float animationTimer;
-
-varying vec3 vPosition;
-varying vec3 worldPosition;
-
-varying vec3 eyeVec;
-varying vec3 lightVec;
-varying vec3 tsEyeVec;
-varying vec3 tsLightVec;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-
+uniform mat4 mWorldViewProj;
+uniform mat4 mInvWorld;
+uniform mat4 mTransWorld;
+uniform mat4 mWorld;
+
+uniform float dayNightRatio;
+uniform vec3 eyePosition;
+uniform float animationTimer;
+
+varying vec3 vPosition;
+varying vec3 worldPosition;
+
+varying vec3 eyeVec;
+varying vec3 lightVec;
+varying vec3 tsEyeVec;
+varying vec3 tsLightVec;
+
+const float e = 2.718281828459;
+const float BS = 10.0;
+
float smoothCurve(float x)
{
return x * x * (3.0 - 2.0 * x);
-}
+}
float triangleWave(float x)
{
return abs(fract( x + 0.5 ) * 2.0 - 1.0);
-}
+}
float smoothTriangleWave(float x)
{
return smoothCurve(triangleWave( x )) * 2.0 - 1.0;
-}
-
-void main(void)
-{
- gl_TexCoord[0] = gl_MultiTexCoord0;
-
-#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
- vec4 pos = gl_Vertex;
- pos.y -= 2.0;
-
- float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
-
- pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;
- gl_Position = mWorldViewProj * pos;
-#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
- vec4 pos = gl_Vertex;
- vec4 pos2 = mWorld * gl_Vertex;
- /*
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
- * And bufferize calcul to a float
- */
- float pos2XpZ = pos2.x + pos2.z;
- pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4;
- pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2;
- pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4;
- gl_Position = mWorldViewProj * pos;
-#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
- vec4 pos = gl_Vertex;
- vec4 pos2 = mWorld * gl_Vertex;
- if (gl_TexCoord[0].y < 0.05) {
- /*
- * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
- * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
- * And bufferize calcul to a float
- */
- float pos2XpZ = pos2.x + pos2.z;
- pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8;
- pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4;
- }
- gl_Position = mWorldViewProj * pos;
-#else
- gl_Position = mWorldViewProj * gl_Vertex;
-#endif
-
- vPosition = gl_Position.xyz;
- worldPosition = (mWorld * gl_Vertex).xyz;
- vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
-
- vec3 normal, tangent, binormal;
- normal = normalize(gl_NormalMatrix * gl_Normal);
- if (gl_Normal.x > 0.5) {
- // 1.0, 0.0, 0.0
- tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
- } else if (gl_Normal.x < -0.5) {
- // -1.0, 0.0, 0.0
- tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
- } else if (gl_Normal.y > 0.5) {
- // 0.0, 1.0, 0.0
- tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
- } else if (gl_Normal.y < -0.5) {
- // 0.0, -1.0, 0.0
- tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
- } else if (gl_Normal.z > 0.5) {
- // 0.0, 0.0, 1.0
- tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
- } else if (gl_Normal.z < -0.5) {
- // 0.0, 0.0, -1.0
- tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
- binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
- }
- mat3 tbnMatrix = mat3(tangent.x, binormal.x, normal.x,
- tangent.y, binormal.y, normal.y,
- tangent.z, binormal.z, normal.z);
-
- lightVec = sunPosition - worldPosition;
- tsLightVec = lightVec * tbnMatrix;
- eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
- tsEyeVec = eyeVec * tbnMatrix;
-
- vec4 color;
- float day = gl_Color.r;
- float night = gl_Color.g;
- float light_source = gl_Color.b;
-
- float rg = mix(night, day, dayNightRatio);
- rg += light_source * 2.5; // Make light sources brighter
- float b = rg;
-
- // Moonlight is blue
- b += (day - night) / 13.0;
- rg -= (day - night) / 23.0;
-
- // Emphase blue a bit in darker places
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
-
- // Artificial light is yellow-ish
- // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
- rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
-
- color.r = rg;
- color.g = rg;
- color.b = b;
-
- color.a = gl_Color.a;
- gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
-}
+}
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
+ vec4 pos = gl_Vertex;
+ pos.y -= 2.0;
+
+ float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);
+
+ pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT;
+ gl_Position = mWorldViewProj * pos;
+#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
+ vec4 pos = gl_Vertex;
+ vec4 pos2 = mWorld * gl_Vertex;
+ /*
+ * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
+ * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
+ * And bufferize calcul to a float
+ */
+ float pos2XpZ = pos2.x + pos2.z;
+ pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4;
+ pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2;
+ pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4;
+ gl_Position = mWorldViewProj * pos;
+#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
+ vec4 pos = gl_Vertex;
+ vec4 pos2 = mWorld * gl_Vertex;
+ if (gl_TexCoord[0].y < 0.05) {
+ /*
+ * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition)
+ * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication)
+ * And bufferize calcul to a float
+ */
+ float pos2XpZ = pos2.x + pos2.z;
+ pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8;
+ pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4;
+ }
+ gl_Position = mWorldViewProj * pos;
+#else
+ gl_Position = mWorldViewProj * gl_Vertex;
+#endif
+
+ vPosition = gl_Position.xyz;
+ worldPosition = (mWorld * gl_Vertex).xyz;
+ vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
+
+ vec3 normal, tangent, binormal;
+ normal = normalize(gl_NormalMatrix * gl_Normal);
+ if (gl_Normal.x > 0.5) {
+ // 1.0, 0.0, 0.0
+ tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
+ } else if (gl_Normal.x < -0.5) {
+ // -1.0, 0.0, 0.0
+ tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
+ } else if (gl_Normal.y > 0.5) {
+ // 0.0, 1.0, 0.0
+ tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
+ } else if (gl_Normal.y < -0.5) {
+ // 0.0, -1.0, 0.0
+ tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
+ } else if (gl_Normal.z > 0.5) {
+ // 0.0, 0.0, 1.0
+ tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
+ } else if (gl_Normal.z < -0.5) {
+ // 0.0, 0.0, -1.0
+ tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
+ binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
+ }
+ mat3 tbnMatrix = mat3(tangent.x, binormal.x, normal.x,
+ tangent.y, binormal.y, normal.y,
+ tangent.z, binormal.z, normal.z);
+
+ lightVec = sunPosition - worldPosition;
+ tsLightVec = lightVec * tbnMatrix;
+ eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
+ tsEyeVec = eyeVec * tbnMatrix;
+
+ vec4 color;
+ float day = gl_Color.r;
+ float night = gl_Color.g;
+ float light_source = gl_Color.b;
+
+ float rg = mix(night, day, dayNightRatio);
+ rg += light_source * 2.5; // Make light sources brighter
+ float b = rg;
+
+ // Moonlight is blue
+ b += (day - night) / 13.0;
+ rg -= (day - night) / 23.0;
+
+ // Emphase blue a bit in darker places
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
+ b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
+
+ // Artificial light is yellow-ish
+ // See C++ implementation in mapblock_mesh.cpp finalColorBlend()
+ rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
+
+ color.r = rg;
+ color.g = rg;
+ color.b = b;
+
+ color.a = gl_Color.a;
+ gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
+}
diff --git a/client/shaders/wielded_shader/opengl_vertex.glsl b/client/shaders/wielded_shader/opengl_vertex.glsl
index a2ab9fa5f..c33b0a7d3 100644
--- a/client/shaders/wielded_shader/opengl_vertex.glsl
+++ b/client/shaders/wielded_shader/opengl_vertex.glsl
@@ -1,35 +1,35 @@
-uniform mat4 mWorldViewProj;
-uniform mat4 mInvWorld;
-uniform mat4 mTransWorld;
-uniform mat4 mWorld;
-
-uniform float dayNightRatio;
-uniform vec3 eyePosition;
-uniform float animationTimer;
-
-varying vec3 vPosition;
-varying vec3 worldPosition;
-
-varying vec3 eyeVec;
-varying vec3 lightVec;
-varying vec3 tsEyeVec;
-varying vec3 tsLightVec;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-
-void main(void)
-{
- gl_TexCoord[0] = gl_MultiTexCoord0;
- gl_Position = mWorldViewProj * gl_Vertex;
-
- vPosition = gl_Position.xyz;
- worldPosition = (mWorld * gl_Vertex).xyz;
-
- vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
-
- lightVec = sunPosition - worldPosition;
+uniform mat4 mWorldViewProj;
+uniform mat4 mInvWorld;
+uniform mat4 mTransWorld;
+uniform mat4 mWorld;
+
+uniform float dayNightRatio;
+uniform vec3 eyePosition;
+uniform float animationTimer;
+
+varying vec3 vPosition;
+varying vec3 worldPosition;
+
+varying vec3 eyeVec;
+varying vec3 lightVec;
+varying vec3 tsEyeVec;
+varying vec3 tsLightVec;
+
+const float e = 2.718281828459;
+const float BS = 10.0;
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = mWorldViewProj * gl_Vertex;
+
+ vPosition = gl_Position.xyz;
+ worldPosition = (mWorld * gl_Vertex).xyz;
+
+ vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
+
+ lightVec = sunPosition - worldPosition;
eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
-
- gl_FrontColor = gl_BackColor = gl_Color;
-}
+
+ gl_FrontColor = gl_BackColor = gl_Color;
+}
diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake
index 8e355b93f..1558b0fcf 100644
--- a/cmake/Modules/FindJson.cmake
+++ b/cmake/Modules/FindJson.cmake
@@ -8,7 +8,7 @@ option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause seg
if(ENABLE_SYSTEM_JSONCPP)
find_library(JSON_LIBRARY NAMES jsoncpp)
- find_path(JSON_INCLUDE_DIR json/features.h)
+ find_path(JSON_INCLUDE_DIR json/features.h PATH_SUFFIXES jsoncpp)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
diff --git a/cmake/Modules/FindLua.cmake b/cmake/Modules/FindLua.cmake
deleted file mode 100644
index 479dfcf41..000000000
--- a/cmake/Modules/FindLua.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-
-option(ENABLE_LUAJIT "Enable LuaJIT support" TRUE)
-mark_as_advanced(LUA_LIBRARY LUA_INCLUDE_DIR)
-set(USE_LUAJIT FALSE)
-
-if(ENABLE_LUAJIT)
- find_library(LUA_LIBRARY luajit
- NAMES luajit-5.1)
- find_path(LUA_INCLUDE_DIR luajit.h
- NAMES luajit.h
- PATH_SUFFIXES luajit-2.0)
- if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
- set(USE_LUAJIT TRUE)
- endif()
-else()
- message (STATUS "LuaJIT detection disabled! (ENABLE_LUAJIT=0)")
-endif()
-
-if(NOT USE_LUAJIT)
- message(STATUS "LuaJIT not found, using bundled Lua.")
- set(LUA_LIBRARY "lua")
- set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
- add_subdirectory(lua)
-endif()
-
diff --git a/cmake/Modules/FindLuaJIT.cmake b/cmake/Modules/FindLuaJIT.cmake
new file mode 100644
index 000000000..e4335d834
--- /dev/null
+++ b/cmake/Modules/FindLuaJIT.cmake
@@ -0,0 +1,50 @@
+# Locate LuaJIT library
+# This module defines
+# LUAJIT_FOUND, if false, do not try to link to Lua
+# LUA_INCLUDE_DIR, where to find lua.h
+# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
+#
+# This module is similar to FindLua51.cmake except that it finds LuaJit instead.
+
+FIND_PATH(LUA_INCLUDE_DIR luajit.h
+ HINTS
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES include/luajit-2.0 include/luajit-5_1-2.0 include
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw # Fink
+ /opt/local # DarwinPorts
+ /opt/csw # Blastwave
+ /opt
+)
+
+FIND_LIBRARY(LUA_LIBRARY
+ NAMES luajit-5.1
+ HINTS
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES lib64 lib
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw
+ /opt/local
+ /opt/csw
+ /opt
+)
+
+IF(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/luajit.h")
+ FILE(STRINGS "${LUA_INCLUDE_DIR}/luajit.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"LuaJIT .+\"")
+
+ STRING(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"LuaJIT ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
+ UNSET(lua_version_str)
+ENDIF()
+
+INCLUDE(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE if
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJit
+ REQUIRED_VARS LUA_LIBRARY LUA_INCLUDE_DIR
+ VERSION_VAR LUA_VERSION_STRING)
+
+MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARY LUA_MATH_LIBRARY)
diff --git a/cmake/Modules/FindNcursesw.cmake b/cmake/Modules/FindNcursesw.cmake
new file mode 100644
index 000000000..b8c7f78f2
--- /dev/null
+++ b/cmake/Modules/FindNcursesw.cmake
@@ -0,0 +1,204 @@
+#.rst:
+# FindNcursesw
+# ------------
+#
+# Find the ncursesw (wide ncurses) include file and library.
+#
+# Based on FindCurses.cmake which comes with CMake.
+#
+# Checks for ncursesw first. If not found, it then executes the
+# regular old FindCurses.cmake to look for for ncurses (or curses).
+#
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines the following variables:
+#
+# ``CURSES_FOUND``
+# True if curses is found.
+# ``NCURSESW_FOUND``
+# True if ncursesw is found.
+# ``CURSES_INCLUDE_DIRS``
+# The include directories needed to use Curses.
+# ``CURSES_LIBRARIES``
+# The libraries needed to use Curses.
+# ``CURSES_HAVE_CURSES_H``
+# True if curses.h is available.
+# ``CURSES_HAVE_NCURSES_H``
+# True if ncurses.h is available.
+# ``CURSES_HAVE_NCURSES_NCURSES_H``
+# True if ``ncurses/ncurses.h`` is available.
+# ``CURSES_HAVE_NCURSES_CURSES_H``
+# True if ``ncurses/curses.h`` is available.
+# ``CURSES_HAVE_NCURSESW_NCURSES_H``
+# True if ``ncursesw/ncurses.h`` is available.
+# ``CURSES_HAVE_NCURSESW_CURSES_H``
+# True if ``ncursesw/curses.h`` is available.
+#
+# Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the
+# ``find_package(Ncursesw)`` call if NCurses functionality is required.
+#
+#=============================================================================
+# Copyright 2001-2014 Kitware, Inc.
+# modifications: Copyright 2015 kahrl <kahrl@gmx.net>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+# nor the names of their contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# ------------------------------------------------------------------------------
+#
+# The above copyright and license notice applies to distributions of
+# CMake in source and binary form. Some source files contain additional
+# notices of original copyright by their contributors; see each source
+# for details. Third-party software packages supplied with CMake under
+# compatible licenses provide their own copyright notices documented in
+# corresponding subdirectories.
+#
+# ------------------------------------------------------------------------------
+#
+# CMake was initially developed by Kitware with the following sponsorship:
+#
+# * National Library of Medicine at the National Institutes of Health
+# as part of the Insight Segmentation and Registration Toolkit (ITK).
+#
+# * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
+# Visualization Initiative.
+#
+# * National Alliance for Medical Image Computing (NAMIC) is funded by the
+# National Institutes of Health through the NIH Roadmap for Medical Research,
+# Grant U54 EB005149.
+#
+# * Kitware, Inc.
+#=============================================================================
+
+include(CheckLibraryExists)
+
+find_library(CURSES_NCURSESW_LIBRARY NAMES ncursesw
+ DOC "Path to libncursesw.so or .lib or .a")
+
+set(CURSES_USE_NCURSES FALSE)
+set(CURSES_USE_NCURSESW FALSE)
+
+if(CURSES_NCURSESW_LIBRARY)
+ set(CURSES_USE_NCURSES TRUE)
+ set(CURSES_USE_NCURSESW TRUE)
+endif()
+
+if(CURSES_USE_NCURSESW)
+ get_filename_component(_cursesLibDir "${CURSES_NCURSESW_LIBRARY}" PATH)
+ get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH)
+
+ find_path(CURSES_INCLUDE_PATH
+ NAMES ncursesw/ncurses.h ncursesw/curses.h
+ HINTS "${_cursesParentDir}/include"
+ )
+
+ # Previous versions of FindCurses provided these values.
+ if(NOT DEFINED CURSES_LIBRARY)
+ set(CURSES_LIBRARY "${CURSES_NCURSESW_LIBRARY}")
+ endif()
+
+ CHECK_LIBRARY_EXISTS("${CURSES_NCURSESW_LIBRARY}"
+ cbreak "" CURSES_NCURSESW_HAS_CBREAK)
+ if(NOT CURSES_NCURSESW_HAS_CBREAK)
+ find_library(CURSES_EXTRA_LIBRARY tinfo HINTS "${_cursesLibDir}"
+ DOC "Path to libtinfo.so or .lib or .a")
+ find_library(CURSES_EXTRA_LIBRARY tinfo )
+ endif()
+
+ # Report whether each possible header name exists in the include directory.
+ if(NOT DEFINED CURSES_HAVE_NCURSESW_NCURSES_H)
+ if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
+ set(CURSES_HAVE_NCURSESW_NCURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
+ else()
+ set(CURSES_HAVE_NCURSESW_NCURSES_H "CURSES_HAVE_NCURSESW_NCURSES_H-NOTFOUND")
+ endif()
+ endif()
+ if(NOT DEFINED CURSES_HAVE_NCURSESW_CURSES_H)
+ if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
+ set(CURSES_HAVE_NCURSESW_CURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
+ else()
+ set(CURSES_HAVE_NCURSESW_CURSES_H "CURSES_HAVE_NCURSESW_CURSES_H-NOTFOUND")
+ endif()
+ endif()
+ if(NOT DEFINED CURSES_HAVE_NCURSES_H)
+ if(EXISTS "${CURSES_INCLUDE_PATH}/ncurses.h")
+ set(CURSES_HAVE_NCURSES_H "${CURSES_INCLUDE_PATH}/ncurses.h")
+ else()
+ set(CURSES_HAVE_NCURSES_H "CURSES_HAVE_NCURSES_H-NOTFOUND")
+ endif()
+ endif()
+ if(NOT DEFINED CURSES_HAVE_CURSES_H)
+ if(EXISTS "${CURSES_INCLUDE_PATH}/curses.h")
+ set(CURSES_HAVE_CURSES_H "${CURSES_INCLUDE_PATH}/curses.h")
+ else()
+ set(CURSES_HAVE_CURSES_H "CURSES_HAVE_CURSES_H-NOTFOUND")
+ endif()
+ endif()
+
+
+ find_library(CURSES_FORM_LIBRARY form HINTS "${_cursesLibDir}"
+ DOC "Path to libform.so or .lib or .a")
+ find_library(CURSES_FORM_LIBRARY form )
+
+ # Need to provide the *_LIBRARIES
+ set(CURSES_LIBRARIES ${CURSES_LIBRARY})
+
+ if(CURSES_EXTRA_LIBRARY)
+ set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY})
+ endif()
+
+ if(CURSES_FORM_LIBRARY)
+ set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY})
+ endif()
+
+ # Provide the *_INCLUDE_DIRS result.
+ set(CURSES_INCLUDE_DIRS ${CURSES_INCLUDE_PATH})
+ set(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) # compatibility
+
+ # handle the QUIETLY and REQUIRED arguments and set CURSES_FOUND to TRUE if
+ # all listed variables are TRUE
+ include(FindPackageHandleStandardArgs)
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ncursesw DEFAULT_MSG
+ CURSES_LIBRARY CURSES_INCLUDE_PATH)
+ set(CURSES_FOUND ${NCURSESW_FOUND})
+
+else()
+ find_package(Curses)
+ set(NCURSESW_FOUND FALSE)
+endif()
+
+mark_as_advanced(
+ CURSES_INCLUDE_PATH
+ CURSES_CURSES_LIBRARY
+ CURSES_NCURSES_LIBRARY
+ CURSES_NCURSESW_LIBRARY
+ CURSES_EXTRA_LIBRARY
+ CURSES_FORM_LIBRARY
+ )
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 062fc67a5..3618b852d 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -1,32 +1,53 @@
-DOXYFILE_ENCODING = UTF-8
-
-PROJECT_NAME = "Minetest"
+# Project properties
+PROJECT_NAME = @PROJECT_NAME_CAPITALIZED@
PROJECT_NUMBER = @VERSION_STRING@
+PROJECT_LOGO = @CMAKE_CURRENT_SOURCE_DIR@/misc/minetest.svg
-STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src
+# Parsing
JAVADOC_AUTOBRIEF = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
SORT_MEMBERS_CTORS_1ST = YES
WARN_IF_UNDOCUMENTED = NO
+BUILTIN_STL_SUPPORT = YES
+PREDEFINED = "USE_SPATIAL=1" \
+ "USE_LEVELDB=1" \
+ "USE_REDIS=1" \
+ "USE_SOUND=1" \
+ "USE_CURL=1" \
+ "USE_FREETYPE=1" \
+ "USE_GETTEXT=1"
-INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/ \
+# Input
+RECURSIVE = NO
+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
-RECURSIVE = NO
-
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-GENERATE_LATEX = NO
-PAPER_TYPE = a4wide
+ @CMAKE_CURRENT_SOURCE_DIR@/src/script/lua_api \
+ @CMAKE_CURRENT_SOURCE_DIR@/src/threading
+# Dot graphs
HAVE_DOT = @DOXYGEN_DOT_FOUND@
CALL_GRAPH = YES
CALLER_GRAPH = YES
MAX_DOT_GRAPH_DEPTH = 3
DOT_MULTI_TARGETS = YES
+DOT_IMAGE_FORMAT = svg
+
+# Output
+GENERATE_LATEX = NO
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+SEARCHENGINE = YES
+DISABLE_INDEX = YES
+GENERATE_TREEVIEW = YES
+HTML_DYNAMIC_SECTIONS = YES
+HTML_TIMESTAMP = YES
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 5372cb834..593e0c438 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Modding API Reference 0.4.13
+Minetest Lua Modding API Reference 0.4.14
=========================================
* More information at <http://www.minetest.net/>
* Developer Wiki: <http://dev.minetest.net/>
@@ -64,6 +64,8 @@ e.g.
The game directory can contain the file minetest.conf, which will be used
to set default settings when running the particular game.
+It can also contain a settingtypes.txt in the same format as the one in builtin.
+This settingtypes.txt will be parsed by the menu and the settings will be displayed in the "Games" category in the settings tab.
### Menu images
@@ -125,6 +127,7 @@ Mod directory structure
| |-- depends.txt
| |-- screenshot.png
| |-- description.txt
+ | |-- settingtypes.txt
| |-- init.lua
| |-- models
| |-- textures
@@ -155,6 +158,10 @@ A screenshot shown in modmanager within mainmenu.
### `description.txt`
A File containing description to be shown within mainmenu.
+### `settingtypes.txt`
+A file in the same format as the one in builtin. It will be parsed by the
+settings menu and the settings will be displayed in the "Mods" category.
+
### `init.lua`
The main Lua script. Running this script should register everything it
wants to register. Subsequent execution depends on minetest calling the
@@ -236,6 +243,7 @@ Example:
default_dirt.png^default_grass_side.png
`default_grass_side.png` is overlayed over `default_dirt.png`.
+The texture with the lower resolution will be automatically upscaled to the higher resolution texture.
### Texture grouping
Textures can be grouped together by enclosing them in `(` and `)`.
@@ -257,20 +265,27 @@ Example:
default_cobble.png^[crack:10:1
-#### `[combine:<w>x<h>:<x1>,<y1>=<file1>:<x2>,<y2>=<file2>`
+#### `[combine:<w>x<h>:<x1>,<y1>=<file1>:<x2>,<y2>=<file2>:...`
* `<w>` = width
* `<h>` = height
-* `<x1>`/`<x2>` = x positions
-* `<y1>`/`<y1>` = y positions
-* `<file1>`/`<file2>` = textures to combine
+* `<x>` = x position
+* `<y>` = y position
+* `<file>` = texture to combine
-Create a texture of size `<w>` times `<h>` and blit `<file1>` to (`<x1>`,`<y1>`)
-and blit `<file2>` to (`<x2>`,`<y2>`).
+Creates a texture of size `<w>` times `<h>` and blits the listed files to their
+specified coordinates.
Example:
[combine:16x32:0,0=default_cobble.png:0,16=default_wood.png
+#### `[resize:<w>x<h>`
+Resizes the texture to the given dimensions.
+
+Example:
+
+ default_sandstone.png^[resize:16x16
+
#### `[brighten`
Brightens the texture.
@@ -350,8 +365,13 @@ The mask is applied using binary AND.
#### `[colorize:<color>:<ratio>`
Colorize the textures with the given color.
`<color>` is specified as a `ColorString`.
-`<ratio>` is an int ranging from 0 to 255, and specifies how much of the
-color to apply. If ommitted, the alpha will be used.
+`<ratio>` is an int ranging from 0 to 255 or the word "`alpha`". If
+it is an int, then it specifies how far to interpolate between the
+colors where 0 is only the texture color and 255 is only `<color>`. If
+omitted, the alpha of `<color>` will be used as the ratio. If it is
+the word "`alpha`", then each texture pixel will contain the RGB of
+`<color>` and the alpha of `<color>` multiplied by the alpha of the
+texture pixel.
Sounds
------
@@ -393,13 +413,13 @@ Examples of sound parameter tables:
{
pos = {x=1,y=2,z=3},
gain = 1.0, -- default
- max_hear_distance = 32, -- default
+ max_hear_distance = 32, -- default, uses an euclidean metric
}
-- Play connected to an object, looped
{
object = <an ObjectRef>,
gain = 1.0, -- default
- max_hear_distance = 32, -- default
+ max_hear_distance = 32, -- default, uses an euclidean metric
loop = true, -- only sounds connected to objects can be looped
}
@@ -534,10 +554,14 @@ node definition:
^ The rotation of the node is stored in param2. Furnaces and chests are
rotated this way. Can be made by using minetest.dir_to_facedir().
Values range 0 - 23
- facedir modulo 4 = axisdir
+ facedir / 4 = axis direction:
0 = y+ 1 = z+ 2 = z- 3 = x+ 4 = x- 5 = y-
- facedir's two less significant bits are rotation around the axis
+ facedir modulo 4 = rotation around that axis
paramtype2 == "leveled"
+ paramtype2 == "degrotate"
+ ^ The rotation of this node is stored in param2. Plants are rotated this way.
+ Values range 0 - 179. The value stored in param2 is multiplied by two to
+ get the actual rotation of the node.
collision_box = {
type = "fixed",
fixed = {
@@ -606,6 +630,18 @@ A nodebox is defined as any of:
wall_bottom = box,
wall_side = box
}
+ {
+ -- A node that has optional boxes depending on neighbouring nodes'
+ -- presence and type. See also `connects_to`.
+ type = "connected",
+ fixed = box OR {box1, box2, ...}
+ connect_top = box OR {box1, box2, ...}
+ connect_bottom = box OR {box1, box2, ...}
+ connect_front = box OR {box1, box2, ...}
+ connect_left = box OR {box1, box2, ...}
+ connect_back = box OR {box1, box2, ...}
+ connect_right = box OR {box1, box2, ...}
+ }
A `box` is defined as:
@@ -714,29 +750,45 @@ a non-equal distribution of ore.
### `sheet`
Creates a sheet of ore in a blob shape according to the 2D perlin noise
-described by `noise_params`. The relative height of the sheet can be
-controlled by the same perlin noise as well, by specifying a non-zero
-`scale` parameter in `noise_params`.
+described by `noise_params` and `noise_threshold`. This is essentially an
+improved version of the so-called "stratus" ore seen in some unofficial mods.
+
+This sheet consists of vertical columns of uniform randomly distributed height,
+varying between the inclusive range `column_height_min` and `column_height_max`.
+If `column_height_min` is not specified, this parameter defaults to 1.
+If `column_height_max` is not specified, this parameter defaults to `clust_size`
+for reverse compatibility. New code should prefer `column_height_max`.
-**IMPORTANT**: The noise is not transformed by `offset` or `scale` when comparing
-against the noise threshold, but scale is used to determine relative height.
-The height of the blob is randomly scattered, with a maximum height of `clust_size`.
+The `column_midpoint_factor` parameter controls the position of the column at which
+ore eminates from. If 1, columns grow upward. If 0, columns grow downward. If 0.5,
+columns grow equally starting from each direction. `column_midpoint_factor` is a
+decimal number ranging in value from 0 to 1. If this parameter is not specified,
+the default is 0.5.
-`clust_scarcity` and `clust_num_ores` are ignored.
+The ore parameters `clust_scarcity` and `clust_num_ores` are ignored for this ore type.
+
+### `puff`
+Creates a sheet of ore in a cloud-like puff shape.
+
+As with the `sheet` ore type, the size and shape of puffs are described by
+`noise_params` and `noise_threshold` and are placed at random vertical positions
+within the currently generated chunk.
+
+The vertical top and bottom displacement of each puff are determined by the noise
+parameters `np_puff_top` and `np_puff_bottom`, respectively.
-This is essentially an improved version of the so-called "stratus" ore seen in
-some unofficial mods.
### `blob`
Creates a deformed sphere of ore according to 3d perlin noise described by
`noise_params`. The maximum size of the blob is `clust_size`, and
`clust_scarcity` has the same meaning as with the `scatter` type.
-### `vein
+
+### `vein`
Creates veins of ore varying in density by according to the intersection of two
instances of 3d perlin noise with diffferent seeds, both described by
`noise_params`. `random_factor` varies the influence random chance has on
placement of an ore inside the vein, which is `1` by default. Note that
-modifying this parameter may require adjusting `noise_threshhold`.
+modifying this parameter may require adjusting `noise_threshold`.
The parameters `clust_scarcity`, `clust_num_ores`, and `clust_size` are ignored
by this ore type. This ore type is difficult to control since it is sensitive
to small changes. The following is a decent set of parameters to work from:
@@ -750,7 +802,7 @@ to small changes. The following is a decent set of parameters to work from:
persist = 0.5,
flags = "eased",
},
- noise_threshhold = 1.6
+ noise_threshold = 1.6
WARNING: Use this ore type *very* sparingly since it is ~200x more
computationally expensive than any other ore.
@@ -766,19 +818,28 @@ Also produce this same ore between the height range of `-y_max` and `-y_min`.
Useful for having ore in sky realms without having to duplicate ore entries.
+### `puff_cliffs`
+If set, puff ore generation will not taper down large differences in displacement
+when approaching the edge of a puff. This flag has no effect for ore types other
+than `puff`.
+
+### `puff_additive_composition`
+By default, when noise described by `np_puff_top` or `np_puff_bottom` results in a
+negative displacement, the sub-column at that point is not generated. With this
+attribute set, puff ore generation will instead generate the absolute difference in
+noise displacement values. This flag has no effect for ore types other than `puff`.
+
Decoration types
----------------
The varying types of decorations that can be placed.
-The default value is `simple`, and is currently the only type supported.
-
### `simple`
Creates a 1 times `H` times 1 column of a specified node (or a random node from
a list, if a decoration list is specified). Can specify a certain node it must
spawn next to, such as water or lava, for example. Can also generate a
decoration of random height between a specified lower and upper bound.
This type of decoration is intended for placement of grass, flowers, cacti,
-papyri, and so on.
+papyri, waterlilies and so on.
### `schematic`
Copies a box of `MapNodes` from a specified schematic file (or raw description).
@@ -817,8 +878,8 @@ Schematic attributes
--------------------
See section "Flag Specifier Format".
-Currently supported flags: `place_center_x`, `place_center_y`,
- `place_center_z`, `force_placement`.
+Currently supported flags: `place_center_x`, `place_center_y`, `place_center_z`,
+ `force_placement`.
* `place_center_x`: Placement of this decoration is centered along the X axis.
* `place_center_y`: Placement of this decoration is centered along the Y axis.
@@ -892,6 +953,7 @@ Displays a horizontal bar made up of half-images.
* `number`: Number of items in the inventory to be displayed.
* `item`: Position of item that is selected.
* `direction`
+* `offset`: offset in pixels from position.
### `waypoint`
Displays distance to selected world position.
@@ -1269,10 +1331,12 @@ mentioned in "Nodes". However, it is possible to insert extra data into a
node. It is called "node metadata"; See "`NodeMetaRef`".
Metadata contains two things:
+
* A key-value store
* An inventory
Some of the values in the key-value store are handled specially:
+
* `formspec`: Defines a right-click inventory menu. See "Formspec".
* `infotext`: Text shown on the screen when the node is pointed at
@@ -1578,7 +1642,7 @@ examples.
* types: `text`, `image`, `color`, `indent`, `tree`
* `text`: show cell contents as text
* `image`: cell contents are an image index, use column options to define images
- * `colo`: cell contents are a ColorString and define color of following cell
+ * `color`: cell contents are a ColorString and define color of following cell
* `indent`: cell contents are a number and define indentation of following cell
* `tree`: same as indent, but user can open and close subtrees (treeview-like)
* column options:
@@ -1637,17 +1701,16 @@ numerical form, the raw integer value of an ARGB8 quad:
or string form, a ColorString (defined above):
`colorspec = "green"`
-Vector helpers
---------------
-
-* `vector.new([x[, y, z]])`: returns a vector.
- * `x` is a table or the `x` position.
-
+Spatial Vectors
+---------------
+* `vector.new(a[, b, c])`: returns a vector:
+ * A copy of `a` if `a` is a vector.
+ * `{x = a, y = b, z = c}`, if all `a, b, c` are defined
* `vector.direction(p1, p2)`: returns a vector
* `vector.distance(p1, p2)`: returns a number
* `vector.length(v)`: returns a number
* `vector.normalize(v)`: returns a vector
-* `vector.round(v)`: returns a vector
+* `vector.round(v)`: returns a vector, each dimension rounded to floor
* `vector.apply(v, func)`: returns a vector
* `vector.equals(v1, v2)`: returns a boolean
@@ -1655,11 +1718,11 @@ For the following functions `x` can be either a vector or a number:
* `vector.add(v, x)`: returns a vector
* `vector.subtract(v, x)`: returns a vector
-* `vector.multiply(v, x)`: returns a vector
-* `vector.divide(v, x)`: returns a vector
+* `vector.multiply(v, x)`: returns a scaled vector or Schur product
+* `vector.divide(v, x)`: returns a scaled vector or Schur quotient
Helper functions
------------------
+----------------
* `dump2(obj, name="_", dumped={})`
* Return object serialized as a string, handles reference loops
* `dump(obj, dumped={})`
@@ -1677,16 +1740,19 @@ Helper functions
* e.g. `string:split("a,b", ",") == {"a","b"}`
* `string:trim()`
* e.g. `string.trim("\n \t\tfoo bar\t ") == "foo bar"`
-* `minetest.pos_to_string({x=X,y=Y,z=Z})`: returns `"(X,Y,Z)"`
+* `minetest.pos_to_string({x=X,y=Y,z=Z}, decimal_places))`: returns `"(X,Y,Z)"`
* Convert position to a printable string
+ Optional: 'decimal_places' will round the x, y and z of the pos to the given decimal place.
* `minetest.string_to_pos(string)`: returns a position
* Same but in reverse. Returns `nil` if the string can't be parsed to a position.
+* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions
+ * Converts a string representing an area box into two positions
* `minetest.formspec_escape(string)`: returns a string
* escapes the characters "[", "]", "\", "," and ";", which can not be used in formspecs
* `minetest.is_yes(arg)`
* returns whether `arg` can be interpreted as yes
* `minetest.get_us_time()`
- * returns time with microsecond precision
+ * returns time with microsecond precision. May not return wall time.
* `table.copy(table)`: returns a table
* returns a deep copy of `table`
@@ -1741,17 +1807,18 @@ Helper functions
* false: return only file names.
### Logging
-* `minetest.debug(line)`
- * Always printed to `stderr` and logfile (`print()` is redirected here)
-* `minetest.log(line)`
-* `minetest.log(loglevel, line)`
- * `loglevel` is one of `"error"`, `"action"`, `"info"`, `"verbose"`
+* `minetest.debug(...)`
+ * Equivalent to `minetest.log(table.concat({...}, "\t"))`
+* `minetest.log([level,] text)`
+ * `level` is one of `"none"`, `"error"`, `"warning"`, `"action"`,
+ `"info"`, or `"verbose"`. Default is `"none"`.
### Registration functions
Call these functions only at load time!
* `minetest.register_entity(name, prototype table)`
* `minetest.register_abm(abm definition)`
+* `minetest.register_lbm(lbm definition)`
* `minetest.register_node(name, node definition)`
* `minetest.register_tool(name, item definition)`
* `minetest.register_craftitem(name, item definition)`
@@ -1812,6 +1879,7 @@ Call these functions only at load time!
* `modifier`: when true, the function should return the actual hp_change.
Note: modifiers only get a temporary hp_change that can be modified by later modifiers.
modifiers can return true as a second argument to stop the execution of further functions.
+ Non-modifiers receive the final hp change calculated by the modifiers.
* `minetest.register_on_respawnplayer(func(ObjectRef))`
* Called when player is to be respawned
* Called _before_ repositioning of player occurs
@@ -1863,6 +1931,7 @@ Call these functions only at load time!
* `minetest.register_privilege(name, definition)`
* `definition`: `"description text"`
* `definition`: `{ description = "description text", give_to_singleplayer = boolean, -- default: true }`
+ * To allow players with basic_privs to grant, see basic_privs minetest.conf setting.
* `minetest.register_authentication_handler(handler)`
* See `minetest.builtin_auth_handler` in `builtin.lua` for reference
@@ -1883,7 +1952,11 @@ Call these functions only at load time!
* Should be called by the authentication handler if privileges changes.
* To report everybody, set `name=nil`.
* `minetest.get_password_hash(name, raw_password)`
- * Convert a name-password pair to a password hash that Minetest can use
+ * Convert a name-password pair to a password hash that Minetest can use.
+ * The returned value alone is not a good basis for password checks based
+ * on comparing the password hash in the database with the password hash
+ * from the function, with an externally provided password, as the hash
+ * in the db might use the new SRP verifier format.
* `minetest.string_to_privs(str)`: returns `{priv1=true,...}`
* `minetest.privs_to_string(privs)`: returns `"priv1,priv2,..."`
* Convert between two privilege representations
@@ -1891,8 +1964,11 @@ Call these functions only at load time!
* `minetest.set_player_privs(name, {priv1=true,...})`
* `minetest.get_player_privs(name) -> {priv1=true,...}`
* `minetest.auth_reload()`
-* `minetest.check_player_privs(name, {priv1=true,...})`: returns `bool, missing_privs`
- * A quickhand for checking privileges
+* `minetest.check_player_privs(player_or_name, ...)`: returns `bool, missing_privs`
+ * A quickhand for checking privileges.
+ * `player_or_name`: Either a Player object or the name of a player.
+ * `...` is either a list of strings, e.g. `"priva", "privb"` or
+ a table, e.g. `{ priva = true, privb = true }`.
* `minetest.get_player_ip(name)`: returns an IP address string
`minetest.set_player_password`, `minetest_set_player_privs`, `minetest_get_player_privs`
@@ -1911,12 +1987,18 @@ and `minetest.auth_reload` call the authetification handler.
* `minetest.remove_node(pos)`
* Equivalent to `set_node(pos, "air")`
* `minetest.get_node(pos)`
- * Returns `{name="ignore", ...}` for unloaded area
+ * Returns the node at the given position as table in the format
+ `{name="node_name", param1=0, param2=0}`, returns `{name="ignore", param1=0, param2=0}`
+ for unloaded areas.
* `minetest.get_node_or_nil(pos)`
- * Returns `nil` for unloaded area
-* `minetest.get_node_light(pos, timeofday)` returns a number between `0` and `15` or `nil`
+ * Same as `get_node` but returns `nil` for unloaded areas.
+* `minetest.get_node_light(pos, timeofday)`
+ * Gets the light value at the given position. Note that the light value
+ "inside" the node at the given position is returned, so you usually want
+ to get the light value of a neighbor.
+ * `pos`: The position where to measure the light.
* `timeofday`: `nil` for current time, `0` for night, `0.5` for day
-
+ * Returns a number between `0` and `15` or `nil`
* `minetest.place_node(pos, node)`
* Place node with the same effects that a player would cause
* `minetest.dig_node(pos)`
@@ -1938,11 +2020,15 @@ and `minetest.auth_reload` call the authetification handler.
* Returns `ObjectRef`, or `nil` if failed
* `minetest.get_player_by_name(name)`: Get an `ObjectRef` to a player
* `minetest.get_objects_inside_radius(pos, radius)`
+ * `radius`: using an euclidean metric
* `minetest.set_timeofday(val)`
* `val` is between `0` and `1`; `0` for midnight, `0.5` for midday
* `minetest.get_timeofday()`
* `minetest.get_gametime()`: returns the time, in seconds, since the world was created
+* `minetest.get_day_count()`: returns number days elapsed since world was created,
+ * accounting for time changes.
* `minetest.find_node_near(pos, radius, nodenames)`: returns pos or `nil`
+ * `radius`: using a maximum metric
* `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"`
* `minetest.find_nodes_in_area(minp, maxp, nodenames)`: returns a list of positions
* returns as second value a table with the count of the individual nodes found
@@ -1964,6 +2050,9 @@ and `minetest.auth_reload` call the authetification handler.
* `get_gen_notify()`: returns a flagstring and a table with the deco_ids
* `minetest.get_mapgen_object(objectname)`
* Return requested mapgen object if available (see "Mapgen objects")
+* `minetest.get_biome_id(biome_name)`
+ * Returns the biome id, as used in the biomemap Mapgen object, for a
+ given biome_name string.
* `minetest.get_mapgen_params()` Returns mapgen parameters, a table containing
`mgname`, `seed`, `chunksize`, `water_level`, and `flags`.
* `minetest.set_mapgen_params(MapgenParams)`
@@ -1987,8 +2076,25 @@ and `minetest.auth_reload` call the authetification handler.
* `minetest.generate_decorations(vm, pos1, pos2)`
* Generate all registered decorations within the VoxelManip `vm` and in the area from `pos1` to `pos2`.
* `pos1` and `pos2` are optional and default to mapchunk minp and maxp.
-* `minetest.clear_objects()`
- * clear all objects in the environments
+* `minetest.clear_objects([options])`
+ * Clear all objects in the environment
+ * Takes an optional table as an argument with the field `mode`.
+ * mode = `"full"`: Load and go through every mapblock, clearing objects (default).
+ * mode = `"quick"`: Clear objects immediately in loaded mapblocks;
+ clear objects in unloaded mapblocks only when the mapblocks are next activated.
+* `minetest.emerge_area(pos1, pos2, [callback], [param])`
+ * Queue all blocks in the area from `pos1` to `pos2`, inclusive, to be asynchronously
+ * fetched from memory, loaded from disk, or if inexistent, generates them.
+ * If `callback` is a valid Lua function, this will be called for each block emerged.
+ * The function signature of callback is:
+ * `function EmergeAreaCallback(blockpos, action, calls_remaining, param)`
+ * - `blockpos` is the *block* coordinates of the block that had been emerged
+ * - `action` could be one of the following constant values:
+ * `core.EMERGE_CANCELLED`, `core.EMERGE_ERRORED`, `core.EMERGE_FROM_MEMORY`,
+ * `core.EMERGE_FROM_DISK`, `core.EMERGE_GENERATED`
+ * - `calls_remaining` is the number of callbacks to be expected after this one
+ * - `param` is the user-defined parameter passed to emerge_area (or nil if the
+ * parameter was absent)
* `minetest.delete_area(pos1, pos2)`
* delete all mapblocks in the area from pos1 to pos2, inclusive
* `minetest.line_of_sight(pos1, pos2, stepsize)`: returns `boolean, pos`
@@ -2003,12 +2109,14 @@ and `minetest.auth_reload` call the authetification handler.
* returns a table of 3D points representing a path from `pos1` to `pos2` or `nil`
* `pos1`: start position
* `pos2`: end position
- * `searchdistance`: number of blocks to search in each direction
+ * `searchdistance`: number of blocks to search in each direction using a maximum metric
* `max_jump`: maximum height difference to consider walkable
* `max_drop`: maximum height difference to consider droppable
* `algorithm`: One of `"A*_noprefetch"` (default), `"A*"`, `"Dijkstra"`
* `minetest.spawn_tree (pos, {treedef})`
- * spawns L-System tree at given `pos` with definition in `treedef` table
+ * spawns L-system tree at given `pos` with definition in `treedef` table
+ * Warning: L-system generation currently creates lighting bugs in the form of mapblock-sized shadows.
+ Often these bugs appear as subtle shadows in water.
* `minetest.transforming_liquid_add(pos)`
* add node to liquid update queue
* `minetest.get_node_max_level(pos)`
@@ -2077,6 +2185,8 @@ and `minetest.auth_reload` call the authetification handler.
* Convert a facedir back into a vector aimed directly out the "back" of a node
* `minetest.dir_to_wallmounted(dir)`
* Convert a vector to a wallmounted value, used for `paramtype2="wallmounted"`
+* `minetest.wallmounted_to_dir(wallmounted)`
+ * Convert a wallmounted value back into a vector aimed directly out the "back" of a node
* `minetest.get_node_drops(nodename, toolname)`
* Returns list of item names.
* **Note**: This will be removed or modified in a future version.
@@ -2170,7 +2280,7 @@ These functions return the leftover itemstack.
### Timing
* `minetest.after(time, func, ...)`
- * Call the function `func` after `time` seconds
+ * Call the function `func` after `time` seconds, may be fractional
* Optional: Variable number of arguments that are passed to `func`
### Server
@@ -2231,6 +2341,15 @@ These functions return the leftover itemstack.
* `replacements` = `{["old_name"] = "convert_to", ...}`
* `force_placement` is a boolean indicating whether nodes other than `air` and
`ignore` are replaced by the schematic
+ * Returns nil if the schematic could not be loaded.
+
+* `minetest.place_schematic_on_vmanip(vmanip, pos, schematic, rotation, replacement, force_placement)`:
+ * This function is analagous to minetest.place_schematic, but places a schematic onto the
+ specified VoxelManip object `vmanip` instead of the whole map.
+ * Returns false if any part of the schematic was cut-off due to the VoxelManip not
+ containing the full area required, and true if the whole schematic was able to fit.
+ * Returns nil if the schematic could not be loaded.
+ * After execution, any external copies of the VoxelManip contents are invalidated.
* `minetest.serialize_schematic(schematic, format, options)`
* Return the serialized schematic specified by schematic (see: Schematic specifier)
@@ -2243,6 +2362,26 @@ These functions return the leftover itemstack.
* If `lua_num_indent_spaces` is a nonzero number and `format` is "lua", the Lua code generated
* will use that number of spaces as indentation instead of a tab character.
+### HTTP Requests:
+* `minetest.request_http_api()`:
+ * returns `HTTPApiTable` containing http functions if the calling mod has been granted
+ access by being listed in the `secure.http_mods` or `secure.trusted_mods` setting,
+ otherwise returns `nil`.
+ * The returned table contains the functions `fetch`, `fetch_async` and `fetch_async_get`
+ described below.
+ * Only works at init time and must be called from the mod's main scope (not from a function).
+ * Function only exists if minetest server was built with cURL support.
+ * **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED TABLE, STORE IT IN
+ A LOCAL VARIABLE!**
+* `HTTPApiTable.fetch(HTTPRequest req, callback)`
+ * Performs given request asynchronously and calls callback upon completion
+ * callback: `function(HTTPRequestResult res)`
+ * Use this HTTP function if you are unsure, the others are for advanced use.
+* `HTTPApiTable.fetch_async(HTTPRequest req)`: returns handle
+ * Performs given request asynchronously and returns handle for `minetest.http_fetch_async_get`
+* `HTTPApiTable.fetch_async_get(handle)`: returns HTTPRequestResult
+ * Return response data for given asynchronous HTTP request
+
### Misc.
* `minetest.get_connected_players()`: returns list of `ObjectRefs`
* `minetest.hash_node_position({x=,y=,z=})`: returns an 48-bit integer
@@ -2350,7 +2489,7 @@ These functions return the leftover itemstack.
* `minetest.request_insecure_environment()`: returns an environment containing
insecure functions if the calling mod has been listed as trusted in the
`secure.trusted_mods` setting or security is disabled, otherwise returns `nil`.
- * Only works at init time.
+ * Only works at init time and must be called from the mod's main scope (not from a function).
* **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED ENVIRONMENT, STORE IT IN
A LOCAL VARIABLE!**
@@ -2381,6 +2520,8 @@ These functions return the leftover itemstack.
* Map of Lua entities, indexed by active object id
* `minetest.registered_ores`
* List of registered ore definitions.
+* `minetest.registered_biomes`
+ * List of registered biome definitions.
* `minetest.registered_decorations`
* List of registered decoration definitions.
@@ -2403,7 +2544,7 @@ Can be gotten via `minetest.get_meta(pos)`.
* `from_table(nil or {})`
* See "Node Metadata"
-### `NoteTimerRef`
+### `NodeTimerRef`
Node Timers: a high resolution persistent per-node timer.
Can be gotten via `minetest.get_node_timer(pos)`.
@@ -2466,6 +2607,19 @@ This is basically a reference to a C++ `ServerActiveObject`
* `set_properties(object property table)`
* `get_properties()`: returns object property table
* `is_player()`: returns true for players, false otherwise
+* `get_nametag_attributes()`
+ * returns a table with the attributes of the nametag of an object
+ * {
+ color = {a=0..255, r=0..255, g=0..255, b=0..255},
+ text = "",
+ }
+* `set_nametag_attributes(attributes)`
+ * sets the attributes of the nametag of an object
+ * `attributes`:
+ {
+ color = ColorSpec,
+ text = "My Nametag",
+ }
##### LuaEntitySAO-only (no-op for other objects)
* `setvelocity({x=num, y=num, z=num})`
@@ -2545,8 +2699,6 @@ This is basically a reference to a C++ `ServerActiveObject`
* `"regular"`: Uses 0 textures, `bgcolor` ignored
* `"skybox"`: Uses 6 textures, `bgcolor` used
* `"plain"`: Uses 0 textures, `bgcolor` used
- * **Note**: currently does not work directly in `on_joinplayer`; use
- `minetest.after(0)` in there.
* `get_sky()`: returns bgcolor, type and a table with the textures
* `override_day_night_ratio(ratio or nil)`
* `0`...`1`: Overrides day-night ratio, controlling sunlight to a specific amount
@@ -2566,17 +2718,6 @@ This is basically a reference to a C++ `ServerActiveObject`
* in first person view
* in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`)
* `get_eye_offset()`: returns offset_first and offset_third
-* `get_nametag_attributes()`
- * returns a table with the attributes of the nametag of the player
- * {
- color = {a=0..255, r=0..255, g=0..255, b=0..255},
- }
-* `set_nametag_attributes(attributes)`
- * sets the attributes of the nametag of the player
- * `attributes`:
- {
- color = ColorSpec,
- }
### `InvRef`
An `InvRef` is a reference to an inventory.
@@ -2617,8 +2758,7 @@ If you chose the parameter-less constructor, a fast implementation will be autom
* `get_area(id, include_borders, include_data)`: returns the area with the id `id`. (optional) Boolean values `include_borders` and `include_data` control what's copied.
* `get_areas_for_pos(pos, include_borders, include_data)`: returns all areas that contain the position `pos`. (optional) Boolean values `include_borders` and `include_data` control what's copied.
* `get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data)`: returns all areas that contain all nodes inside the area specified by `edge1` and `edge2` (inclusive). If `accept_overlap` is true, also areas are returned that have nodes in common with the specified area. (optional) Boolean values `include_borders` and `include_data` control what's copied.
-* `insert_area(edge1, edge2, data)`: inserts an area into the store. Returns the id if successful, nil otherwise. The (inclusive) positions `edge1` and `edge2` describe the area, `data`
-is a string stored with the area.
+* `insert_area(edge1, edge2, data, [id])`: inserts an area into the store. Returns the new area's ID, or nil if the insertion failed. The (inclusive) positions `edge1` and `edge2` describe the area. `data` is a string stored with the area. If passed, `id` will be used as the internal area ID, it must be a unique number between 0 and 2^32-2. If you use the `id` parameter you must always use it, or insertions are likely to fail due to conflicts.
* `reserve(count)`: reserves resources for at most `count` many contained areas. Only needed for efficiency, and only some implementations profit.
* `remove_area(id)`: removes the area with the given id from the store, returns success.
* `set_cache_params(params)`: sets params for the included prefiltering cache. Calling invalidates the cache, so that its elements have to be newly generated.
@@ -2628,6 +2768,10 @@ is a string stored with the area.
block_radius = number, -- the radius (in nodes) of the areas the cache generates prefiltered lists for, minimum 16, default 64
limit = number, -- the cache's size, minimum 20, default 1000
}
+* `to_string()`: Experimental. Returns area store serialized as a (binary) string.
+* `to_file(filename)`: Experimental. Like `to_string()`, but writes the data to a file.
+* `from_string(str)`: Experimental. Deserializes string and loads it into the AreaStore. Returns success and, optionally, an error message.
+* `from_file(filename)`: Experimental. Like `from_string()`, but reads the data from a file.
### `ItemStack`
An `ItemStack` is a stack of items.
@@ -2693,6 +2837,15 @@ It can be created via `PcgRandom(seed)` or `PcgRandom(seed, sequence)`.
* This is only a rough approximation of a normal distribution with mean=(max-min)/2 and variance=1
* Increasing num_trials improves accuracy of the approximation
+### `SecureRandom`
+Interface for the operating system's crypto-secure PRNG.
+
+It can be created via `SecureRandom()`. The constructor returns nil if a secure random device cannot be
+be found on the system.
+
+#### Methods
+* `next_bytes([count])`: return next `count` (default 1, capped at 2048) many random bytes, as a string.
+
### `PerlinNoise`
A perlin noise generator.
It can be created via `PerlinNoise(seed, octaves, persistence, scale)`
@@ -2740,29 +2893,179 @@ nil, this table will be used to store the result instead of creating a new table
`noisevals = noise:getMapSlice({x=24, z=1}, {x=1, z=1})`
### `VoxelManip`
-An interface to the `MapVoxelManipulator` for Lua.
-It can be created via `VoxelManip()` or `minetest.get_voxel_manip()`.
-The map will be pre-loaded if two positions are passed to either.
+#### About VoxelManip
+VoxelManip is a scripting interface to the internal 'Map Voxel Manipulator' facility. The purpose of
+this object is for fast, low-level, bulk access to reading and writing Map content. As such, setting
+map nodes through VoxelManip will lack many of the higher level features and concepts you may be used
+to with other methods of setting nodes. For example, nodes will not have their construction and
+destruction callbacks run, and no rollback information is logged.
+
+It is important to note that VoxelManip is designed for speed, and *not* ease of use or flexibility.
+If your mod requires a map manipulation facility that will handle 100% of all edge cases, or the use
+of high level node placement features, perhaps minetest.set_node() is better suited for the job.
+
+In addition, VoxelManip might not be faster, or could even be slower, for your specific use case.
+VoxelManip is most effective when setting very large areas of map at once - for example, if only
+setting a 5x5x5 node area, a minetest.set_node() loop may be more optimal. Always profile code
+using both methods of map manipulation to determine which is most appropriate for your usage.
+
+#### Using VoxelManip
+A VoxelManip object can be created any time using either:
+`VoxelManip([p1, p2])`, or `minetest.get_voxel_manip([p1, p2])`.
+
+If the optional position parameters are present for either of these routines, the specified region
+will be pre-loaded into the VoxelManip object on creation. Otherwise, the area of map you wish to
+manipulate must first be loaded into the VoxelManip object using `VoxelManip:read_from_map()`.
+
+Note that `VoxelManip:read_from_map()` returns two position vectors. The region formed by these
+positions indicate the minimum and maximum (respectively) positions of the area actually loaded in
+the VoxelManip, which may be larger than the area requested. For convenience, the loaded area
+coordinates can also be queried any time after loading map data with `VoxelManip:get_emerged_area()`.
+
+Now that the VoxelManip object is populated with map data, your mod can fetch a copy of this data
+using either of two methods. `VoxelManip:get_node_at()`, which retrieves an individual node in a
+MapNode formatted table at the position requested is the simplest method to use, but also the slowest.
+
+Nodes in a VoxelManip object may also be read in bulk to a flat array table using:
+`VoxelManip:get_data()` for node content (in Content ID form, see section 'Content IDs'),
+`VoxelManip:get_light_data()` for node light levels, and
+`VoxelManip:get_param2_data()` for the node type-dependent "param2" values.
+
+See section 'Flat array format' for more details.
+
+It is very important to understand that the tables returned by any of the above three functions
+represent a snapshot of the VoxelManip's internal state at the time of the call. This copy of the
+data will *not* magically update itself if another function modifies the internal VoxelManip state.
+Any functions that modify a VoxelManip's contents work on the VoxelManip's internal state unless
+otherwise explicitly stated.
+
+Once the bulk data has been edited to your liking, the internal VoxelManip state can be set using:
+`VoxelManip:set_data()` for node content (in Content ID form, see section 'Content IDs'),
+`VoxelManip:set_light_data()` for node light levels, and
+`VoxelManip:set_param2_data()` for the node type-dependent "param2" values.
+
+The parameter to each of the above three functions can use any table at all in the same flat array
+format as produced by get_data() et al. and is *not required* to be a table retrieved from get_data().
+
+Once the internal VoxelManip state has been modified to your liking, the changes can be committed back
+to the map by calling `VoxelManip:write_to_map()`.
+
+Finally, a call to `VoxelManip:update_map()` is required to re-calculate lighting and set the blocks
+as being modified so that connected clients are sent the updated parts of map.
+
+
+##### Flat array format
+Let
+ `Nx = p2.X - p1.X + 1`,
+ `Ny = p2.Y - p1.Y + 1`, and
+ `Nz = p2.Z - p1.Z + 1`.
+
+Then, for a loaded region of p1..p2, this array ranges from `1` up to and including the value of
+the expression `Nx * Ny * Nz`.
+
+Positions offset from p1 are present in the array with the format of:
+```
+[
+ (0, 0, 0), (1, 0, 0), (2, 0, 0), ... (Nx, 0, 0),
+ (0, 1, 0), (1, 1, 0), (2, 1, 0), ... (Nx, 1, 0),
+ ...
+ (0, Ny, 0), (1, Ny, 0), (2, Ny, 0), ... (Nx, Ny, 0),
+ (0, 0, 1), (1, 0, 1), (2, 0, 1), ... (Nx, 0, 1),
+ ...
+ (0, Ny, 2), (1, Ny, 2), (2, Ny, 2), ... (Nx, Ny, 2),
+ ...
+ (0, Ny, Nz), (1, Ny, Nz), (2, Ny, Nz), ... (Nx, Ny, Nz)
+]
+```
+
+and the array index for a position p contained completely in p1..p2 is:
+
+`(p.Z - p1.Z) * Ny * Nx + (p.Y - p1.Y) * Nx + (p.X - p1.X) + 1`
+
+Note that this is the same "flat 3D array" format as `PerlinNoiseMap:get3dMap_flat()`.
+VoxelArea objects (see section 'VoxelArea') can be used to simplify calculation of the index
+for a single point in a flat VoxelManip array.
+
+##### Content IDs
+A Content ID is a unique integer identifier for a specific node type. These IDs are used by VoxelManip
+in place of the node name string for `VoxelManip:get_data()` and `VoxelManip:set_data()`. You can use
+`minetest.get_content_id()` to look up the Content ID for the specified node name, and
+`minetest.get_name_from_content_id()` to look up the node name string for a given Content ID.
+After registration of a node, its Content ID will remain the same throughout execution of the mod.
+Note that the node being queried needs to have already been been registered.
+
+The following builtin node types have their Content IDs defined as constants:
+```
+core.CONTENT_UNKNOWN (ID for "unknown" nodes)
+core.CONTENT_AIR (ID for "air" nodes)
+core.CONTENT_IGNORE (ID for "ignore" nodes)
+```
+
+##### Mapgen VoxelManip objects
+Inside of `on_generated()` callbacks, it is possible to retrieve the same VoxelManip object used by the
+core's Map Generator (commonly abbreviated Mapgen). Most of the rules previously described still apply
+but with a few differences:
+
+* The Mapgen VoxelManip object is retrieved using: `minetest.get_mapgen_object("voxelmanip")`
+* This VoxelManip object already has the region of map just generated loaded into it; it's not necessary
+ to call `VoxelManip:read_from_map()` before using a Mapgen VoxelManip.
+* The `on_generated()` callbacks of some mods may place individual nodes in the generated area using
+ non-VoxelManip map modification methods. Because the same Mapgen VoxelManip object is passed through
+ each `on_generated()` callback, it becomes necessary for the Mapgen VoxelManip object to maintain
+ consistency with the current map state. For this reason, calling any of the following functions:
+ `minetest.add_node()`, `minetest.set_node()`, or `minetest.swap_node()`
+ will also update the Mapgen VoxelManip object's internal state active on the current thread.
+* After modifying the Mapgen VoxelManip object's internal buffer, it may be necessary to update lighting
+ information using either: `VoxelManip:calc_lighting()` or `VoxelManip:set_lighting()`.
+* `VoxelManip:update_map()` does not need to be called after `write_to_map()`. The map update is performed
+ automatically after all on_generated callbacks have been run for that generated block.
+
+##### Other API functions operating on a VoxelManip
+If any VoxelManip contents were set to a liquid node, `VoxelManip:update_liquids()` must be called
+for these liquid nodes to begin flowing. It is recommended to call this function only after having
+written all buffered data back to the VoxelManip object, save for special situations where the modder
+desires to only have certain liquid nodes begin flowing.
+
+The functions `minetest.generate_ores()` and `minetest.generate_decorations()` will generate all
+registered decorations and ores throughout the full area inside of the specified VoxelManip object.
+
+`minetest.place_schematic_on_vmanip()` is otherwise identical to `minetest.place_schematic()`,
+except instead of placing the specified schematic directly on the map at the specified position, it
+will place the schematic inside of the VoxelManip.
+
+##### Notes
+* Attempting to read data from a VoxelManip object before map is read will result in a zero-length
+ array table for `VoxelManip:get_data()`, and an "ignore" node at any position for
+ `VoxelManip:get_node_at()`.
+* If either a region of map has not yet been generated or is out-of-bounds of the map, that region is
+ filled with "ignore" nodes.
+* Other mods, or the core itself, could possibly modify the area of map currently loaded into a VoxelManip
+ object. With the exception of Mapgen VoxelManips (see above section), the internal buffers are not
+ updated. For this reason, it is strongly encouraged to complete the usage of a particular VoxelManip
+ object in the same callback it had been created.
+* If a VoxelManip object will be used often, such as in an `on_generated()` callback, consider passing
+ a file-scoped table as the optional parameter to `VoxelManip:get_data()`, which serves as a static
+ buffer the function can use to write map data to instead of returning a new table each call. This
+ greatly enhances performance by avoiding unnecessary memory allocations.
#### Methods
-* `read_from_map(p1, p2)`: Reads a chunk of map from the map containing the
- region formed by `p1` and `p2`.
+* `read_from_map(p1, p2)`: Loads a chunk of map into the VoxelManip object containing
+ the region formed by `p1` and `p2`.
* returns actual emerged `pmin`, actual emerged `pmax`
* `write_to_map()`: Writes the data loaded from the `VoxelManip` back to the map.
- * **important**: data must be set using `VoxelManip:set_data` before calling this
+ * **important**: data must be set using `VoxelManip:set_data()` before calling this
* `get_node_at(pos)`: Returns a `MapNode` table of the node currently loaded in
the `VoxelManip` at that position
-* `set_node_at(pos, node)`: Sets a specific `MapNode` in the `VoxelManip` at
- that position
-* `get_data(buffer)`: Gets the data read into the `VoxelManip` object
+* `set_node_at(pos, node)`: Sets a specific `MapNode` in the `VoxelManip` at that position
+* `get_data([buffer])`: Retrieves the node content data loaded into the `VoxelManip` object
* returns raw node data in the form of an array of node content IDs
* if the param `buffer` is present, this table will be used to store the result instead
* `set_data(data)`: Sets the data contents of the `VoxelManip` object
* `update_map()`: Update map after writing chunk back to map.
* To be used only by `VoxelManip` objects created by the mod itself;
not a `VoxelManip` that was retrieved from `minetest.get_mapgen_object`
-* `set_lighting(light, p1, p2)`: Set the lighting within the `VoxelManip` to a uniform value
+* `set_lighting(light, [p1, p2])`: Set the lighting within the `VoxelManip` to a uniform value
* `light` is a table, `{day=<0...15>, night=<0...15>}`
* To be used only by a `VoxelManip` object from `minetest.get_mapgen_object`
* (`p1`, `p2`) is the area in which lighting is set;
@@ -2776,10 +3079,12 @@ The map will be pre-loaded if two positions are passed to either.
* expects lighting data in the same format that `get_light_data()` returns
* `get_param2_data()`: Gets the raw `param2` data read into the `VoxelManip` object
* `set_param2_data(param2_data)`: Sets the `param2` contents of each node in the `VoxelManip`
-* `calc_lighting(p1, p2)`: Calculate lighting within the `VoxelManip`
+* `calc_lighting([p1, p2], [propagate_shadow])`: Calculate lighting within the `VoxelManip`
* To be used only by a `VoxelManip` object from `minetest.get_mapgen_object`
* (`p1`, `p2`) is the area in which lighting is set; defaults to the whole area
- if left out
+ if left out or nil
+ * `propagate_shadow` is an optional boolean deciding whether shadows in a generated
+ mapchunk above are propagated down into the mapchunk; defaults to `true` if left out
* `update_liquids()`: Update liquid flow
* `was_modified()`: Returns `true` or `false` if the data in the voxel manipulator
had been modified since the last read from map, due to a call to
@@ -2900,6 +3205,9 @@ Registered entities
L-system trees
--------------
+**Warning**
+L-system generation currently creates lighting bugs in the form of mapblock-sized shadows.
+Often these bugs appear as subtle shadows in water.
### Tree definition
@@ -2992,6 +3300,12 @@ Definition tables
stepheight = 0,
automatic_face_movement_dir = 0.0,
-- ^ automatically set yaw to movement direction; offset in degrees; false to disable
+ automatic_face_movement_max_rotation_per_sec = -1,
+ -- ^ limit automatic rotation to this value in degrees per second. values < 0 no limit
+ backface_culling = true, -- false to disable backface_culling for model
+ nametag = "", -- by default empty, for players their name is shown if empty
+ nametag_color = <color>, -- sets color of nametag as ColorSpec
+ infotext = "", -- by default empty, text to be shown when pointed at object
}
### Entity definition (`register_entity`)
@@ -3018,13 +3332,32 @@ Definition tables
{
-- In the following two fields, also group:groupname will work.
nodenames = {"default:lava_source"},
- neighbors = {"default:water_source", "default:water_flowing"}, -- (any of these)
- -- ^ If left out or empty, any neighbor will do
- interval = 1.0, -- (operation interval)
- chance = 1, -- (chance of trigger is 1.0/this)
+ neighbors = {"default:water_source", "default:water_flowing"}, -- Any of these --[[
+ ^ If left out or empty, any neighbor will do ]]
+ interval = 1.0, -- Operation interval in seconds
+ chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this
+ catch_up = true, -- If true, catch-up behaviour is enabled --[[
+ ^ The chance value is temporarily reduced when returning to
+ an area to simulate time lost by the area being unattended.
+ ^ Note chance value can often be reduced to 1 ]]
action = func(pos, node, active_object_count, active_object_count_wider),
}
+### LBM (LoadingBlockModifier) definition (`register_lbm`)
+
+ {
+ name = "modname:replace_legacy_door",
+ nodenames = {"default:lava_source"},
+ -- ^ List of node names to trigger the LBM on.
+ -- Also non-registered nodes will work.
+ -- Groups (as of group:groupname) will work as well.
+ run_at_every_load = false,
+ -- ^ Whether to run the LBM's action every time a block gets loaded,
+ -- and not just for blocks that were saved last time before LBMs were
+ -- introduced to the world.
+ action = func(pos, node),
+ }
+
### Item definition (`register_node`, `register_craftitem`, `register_tool`)
{
@@ -3068,6 +3401,11 @@ Definition tables
--[[
^ Shall place item and return the leftover itemstack
^ default: minetest.item_place ]]
+ on_secondary_use = func(itemstack, user, pointed_thing),
+ --[[
+ ^ Same as on_place but called when pointing at nothing.
+ ^ pointed_thing : always { type = "nothing" }
+ ]]
on_drop = func(itemstack, dropper, pos),
--[[
^ Shall drop item and return the leftover itemstack
@@ -3099,7 +3437,7 @@ Definition tables
* `{name="image.png", animation={Tile Animation definition}}`
* `{name="image.png", backface_culling=bool, tileable_vertical=bool,
tileable_horizontal=bool}`
- * backface culling only supported in special tiles.
+ * backface culling enabled by default for most nodes
* tileable flags are info for shaders, how they should treat texture
when displacement mapping is used
Directions are from the point of view of the tile texture,
@@ -3141,6 +3479,7 @@ Definition tables
diggable = true, -- If false, can never be dug
climbable = false, -- If true, can be climbed on (ladder)
buildable_to = false, -- If true, placed nodes can replace this node
+ floodable = false, -- If true, liquids flow into and replace this node
liquidtype = "none", -- "none"/"source"/"flowing"
liquid_alternative_flowing = "", -- Flowing version of source liquid
liquid_alternative_source = "", -- Source version of flowing liquid
@@ -3154,6 +3493,12 @@ Definition tables
light_source = 0, -- Amount of light emitted by node
damage_per_second = 0, -- If player is inside node, this damage is caused
node_box = {type="regular"}, -- See "Node boxes"
+ connects_to = nodenames, --[[
+ * Used for nodebox nodes with the type == "connected"
+ * Specifies to what neighboring nodes connections will be drawn
+ * e.g. `{"group:fence", "default:wood"}` or `"default:stone"` ]]
+ connect_sides = { "top", "bottom", "front", "left", "back", "right" }, --[[
+ ^ Tells connected nodebox nodes to connect only to these sides of this node. ]]
mesh = "model",
selection_box = {type="regular"}, -- See "Node boxes" --[[
^ If drawtype "nodebox" is used and selection_box is nil, then node_box is used. ]]
@@ -3164,6 +3509,7 @@ Definition tables
dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default)
dug = <SimpleSoundSpec>,
place = <SimpleSoundSpec>,
+ place_failed = <SimpleSoundSpec>,
},
drop = "", -- Name of dropped node when dug. Default is the node itself.
-- Alternatively:
@@ -3178,14 +3524,17 @@ Definition tables
},
on_construct = func(pos), --[[
- ^ Node constructor; always called after adding node
+ ^ Node constructor; called after adding node
^ Can set up metadata and stuff like that
+ ^ Not called for bulk node placement (i.e. schematics and VoxelManip)
^ default: nil ]]
on_destruct = func(pos), --[[
- ^ Node destructor; always called before removing node
+ ^ Node destructor; called before removing node
+ ^ Not called for bulk node placement (i.e. schematics and VoxelManip)
^ default: nil ]]
after_destruct = func(pos, oldnode), --[[
- ^ Node destructor; always called after removing node
+ ^ Node destructor; called after removing node
+ ^ Not called for bulk node placement (i.e. schematics and VoxelManip)
^ default: nil ]]
after_place_node = func(pos, placer, itemstack, pointed_thing) --[[
@@ -3324,7 +3673,7 @@ Definition tables
y_max = 64,
flags = "",
-- ^ Attributes for this ore generation
- noise_threshhold = 0.5,
+ noise_threshold = 0.5,
-- ^ If noise is above this threshold, ore is placed. Not needed for a uniform distribution
noise_params = {offset=0, scale=1, spread={x=100, y=100, z=100}, seed=23, octaves=3, persist=0.70}
-- ^ NoiseParams structure describing the perlin noise used for ore distribution.
@@ -3339,6 +3688,51 @@ Definition tables
-- ^ Can be a list of (or a single) biome names, IDs, or definitions.
}
+### Biome definition (`register_biome`)
+
+ {
+ name = "tundra",
+ node_dust = "default:snow",
+ -- ^ Node dropped onto upper surface after all else is generated.
+ node_top = "default:dirt_with_snow",
+ depth_top = 1,
+ -- ^ Node forming surface layer of biome and thickness of this layer.
+ node_filler = "default:permafrost",
+ depth_filler = 3,
+ -- ^ Node forming lower layer of biome and thickness of this layer.
+ node_stone = "default:bluestone",
+ -- ^ Node that replaces all stone nodes between roughly y_min and y_max.
+ node_water_top = "default:ice",
+ depth_water_top = 10,
+ -- ^ Node forming a surface layer in seawater with the defined thickness.
+ node_water = "",
+ -- ^ Node that replaces all seawater nodes not in the defined surface layer.
+ node_river_water = "default:ice",
+ -- ^ Node that replaces river water in mapgens that use default:river_water.
+ y_min = 1,
+ y_max = 31000,
+ -- ^ Lower and upper limits for biome.
+ -- ^ Because biome is not recalculated for every node in a node column
+ -- ^ some biome materials can exceed their limits, especially stone.
+ -- ^ For each node column in a mapchunk, biome is only recalculated at column
+ -- ^ top and at each of these surfaces:
+ -- ^ Ground below air, water below air, ground below water.
+ -- ^ The selected biome then stays in effect for all nodes below until
+ -- ^ column base or the next biome recalculation.
+ heat_point = 0,
+ humidity_point = 50,
+ -- ^ Characteristic average temperature and humidity for the biome.
+ -- ^ These values create 'biome points' on a voronoi diagram that has heat
+ -- ^ and humidity as axes. The resulting voronoi cells determine which
+ -- ^ heat/humidity points belong to which biome, and therefore determine
+ -- ^ the area and location of each biome in the world.
+ -- ^ The biome points need to be carefully and evenly spaced on the voronoi
+ -- ^ diagram to result in roughly equal size biomes.
+ -- ^ Heat and humidity have average values of 50, vary mostly between
+ -- ^ 0 and 100 but also often exceed these values.
+ -- ^ Heat is not in degrees celcius, both values are abstract.
+ }
+
### Decoration definition (`register_decoration`)
{
@@ -3363,6 +3757,12 @@ Definition tables
-- ^ Minimum and maximum `y` positions these decorations can be generated at.
-- ^ This parameter refers to the `y` position of the decoration base, so
-- the actual maximum height would be `height_max + size.Y`.
+ flags = "liquid_surface, force_placement",
+ -- ^ Flags for all decoration types.
+ -- ^ "liquid_surface": Instead of placement on the highest solid surface
+ -- ^ in a mapchunk column, placement is on the highest liquid surface.
+ -- ^ Placement is disabled if solid nodes are found above the liquid surface.
+ -- ^ "force_placement": Nodes other than "air" and "ignore" are replaced by the decoration.
----- Simple-type parameters
decoration = "default:grass",
@@ -3406,7 +3806,7 @@ Definition tables
},
-- ^ See 'Schematic specifier' for details.
replacements = {["oldname"] = "convert_to", ...},
- flags = "place_center_x, place_center_y, place_center_z, force_placement",
+ flags = "place_center_x, place_center_y, place_center_z",
-- ^ Flags for schematic decorations. See 'Schematic attributes'.
rotation = "90" -- rotate schematic 90 degrees on placement
-- ^ Rotation can be "0", "90", "180", "270", or "random".
@@ -3517,3 +3917,37 @@ Definition tables
playername = "singleplayer"
-- ^ Playername is optional, if specified spawns particle only on the player's client
}
+
+### `HTTPRequest` definition (`http_fetch`, `http_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 ist 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 (`http_fetch` callback, `http_fetch_async_get`)
+
+ {
+ completed = true,
+ -- ^ If true, the request has finished (either succeeded, failed or timed out)
+ succeeded = true,
+ -- ^ If true, the request was succesful
+ timeout = false,
+ -- ^ If true, the request timed out
+ code = 200,
+ -- ^ HTTP status code
+ data = "response"
+ }
diff --git a/doc/main_page.dox b/doc/main_page.dox
new file mode 100644
index 000000000..8211d9cae
--- /dev/null
+++ b/doc/main_page.dox
@@ -0,0 +1,8 @@
+/** @mainpage The Minetest engine internal documentation
+
+Welcome to the Minetest engine Doxygen documentation site!\n
+This page documents the internal structure of the Minetest engine's C++ code.\n
+Use the tree view at the left to navigate.
+
+*/
+
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index 7d46c6526..ac8713a32 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Mainmenu API Reference 0.4.13
+Minetest Lua Mainmenu API Reference 0.4.14
========================================
Introduction
@@ -141,8 +141,8 @@ core.get_game(index)
addon_mods_paths = {[1] = <path>,},
}
core.get_games() -> table of all games in upper format (possible in async calls)
-core.get_mapgen_names() -> table of all map generator algorithms registered in
- the core (possible in async calls)
+core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms
+ registered in the core (possible in async calls)
Favorites:
core.get_favorites(location) -> list of favorites (possible in async calls)
@@ -191,6 +191,8 @@ core.create_world(worldname, gameid)
core.delete_world(index)
Helpers:
+core.get_us_time()
+^ returns time with microsecond precision
core.gettext(string) -> string
^ look up the translation of a string in the gettext message catalog
fgettext_ne(string, ...)
diff --git a/doc/minetest.6 b/doc/minetest.6
index 036cea6c9..a135e541c 100644
--- a/doc/minetest.6
+++ b/doc/minetest.6
@@ -89,6 +89,9 @@ Run speed tests
.B \-\-migrate <value>
Migrate from current map backend to another. Possible values are sqlite3,
leveldb, redis, and dummy.
+.TP
+.B \-\-terminal
+Display an interactive terminal over ncurses during execution.
.SH ENVIRONMENT
.TP
diff --git a/doc/mapformat.txt b/doc/world_format.txt
index 2b049adcd..a4fb3d8f2 100644
--- a/doc/mapformat.txt
+++ b/doc/world_format.txt
@@ -41,13 +41,23 @@ auth.txt
---------
Contains authentication data, player per line.
<name>:<password hash>:<privilege1,...>
-Format of password hash is <name><password> SHA1'd, in the base64 encoding.
+
+Legacy format (until 0.4.12) of password hash is <name><password> SHA1'd,
+in the base64 encoding.
+
+Format (since 0.4.13) of password hash is #1#<salt>#<verifier>, with the
+parts inside <> encoded in the base64 encoding.
+<verifier> is an RFC 2945 compatible SRP verifier,
+of the given salt, password, and the player's name lowercased,
+using the 2048-bit group specified in RFC 5054 and the SHA-256 hash function.
Example lines:
- Player "celeron55", no password, privileges "interact" and "shout":
celeron55::interact,shout
-- Player "Foo", password "bar", privilege "shout":
+- Player "Foo", password "bar", privilege "shout", with a legacy password hash:
foo:iEPX+SQWIR3p67lj/0zigSWTKHg:shout
+- Player "Foo", password "bar", privilege "shout", with a 0.4.13 pw hash:
+ foo:#1#hPpy4O3IAn1hsNK00A6wNw#Kpu6rj7McsrPCt4euTb5RA5ltF7wdcWGoYMcRngwDi11cZhPuuR9i5Bo7o6A877TgcEwoc//HNrj9EjR/CGjdyTFmNhiermZOADvd8eu32FYK1kf7RMC0rXWxCenYuOQCG4WF9mMGiyTPxC63VAjAMuc1nCZzmy6D9zt0SIKxOmteI75pAEAIee2hx4OkSXRIiU4Zrxo1Xf7QFxkMY4x77vgaPcvfmuzom0y/fU1EdSnZeopGPvzMpFx80ODFx1P34R52nmVl0W8h4GNo0k8ZiWtRCdrJxs8xIg7z5P1h3Th/BJ0lwexpdK8sQZWng8xaO5ElthNuhO8UQx1l6FgEA:shout
- Player "bar", no password, no privileges:
bar::
@@ -204,14 +214,14 @@ algorithm, defined here in Python:
def getBlockAsInteger(p):
return int64(p[2]*16777216 + p[1]*4096 + p[0])
-
+
def int64(u):
while u >= 2**63:
u -= 2**64
while u <= -2**63:
u += 2**64
return u
-
+
It can be converted the other way by using this code:
def getIntegerAsBlock(i):
@@ -221,7 +231,7 @@ It can be converted the other way by using this code:
i = int((i - y) / 4096)
z = unsignedToSigned(i % 4096, 2048)
return x,y,z
-
+
def unsignedToSigned(i, max_positive):
if i < max_positive:
return i
@@ -241,7 +251,7 @@ NOTE: Zlib data is in such a format that Python's zlib at least can
directly decompress.
u8 version
-- map format version number, this one is version 22
+- map format version number, see serialisation.h for the latest number
u8 flags
- Flag bitmasks:
@@ -287,13 +297,26 @@ if content_width == 2:
zlib-compressed node metadata list
- content:
+if map format version <= 22:
u16 version (=1)
u16 count of metadata
foreach count:
u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X)
u16 type_id
u16 content_size
- u8[content_size] (content of metadata)
+ u8[content_size] content of metadata. Format depends on type_id, see below.
+if map format version >= 23:
+ u8 version (=1) -- Note the type is u8, while for map format version <= 22 it's u16
+ u16 count of metadata
+ foreach count:
+ u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X)
+ u32 num_vars
+ foreach num_vars:
+ u16 key_len
+ u8[key_len] key
+ u32 val_len
+ u8[val_len] value
+ serialized inventory
- Node timers
if map format version == 23:
@@ -308,6 +331,8 @@ if map format version == 24: (NOTE: Not released as stable)
u16 timer position (z*16*16 + y*16 + x)
s32 timeout*1000
s32 elapsed*1000
+if map format version >= 25:
+ -- Nothing right here, node timers are serialized later
u8 static object version:
- Always 0
@@ -367,8 +392,9 @@ The name-id-mapping
--------------------
The mapping maps node content ids to node names.
-Node metadata format
----------------------
+Node metadata format for map format versions <= 22
+---------------------------------------------------
+The node metadata are serialized depending on the type_id field.
1: Generic metadata
serialized inventory
diff --git a/fonts/lucida_sans_100.png b/fonts/lucida_sans_100.png
index 1c9ca6590..9f3dc25c8 100755
--- a/fonts/lucida_sans_100.png
+++ b/fonts/lucida_sans_100.png
Binary files differ
diff --git a/fonts/lucida_sans_110.png b/fonts/lucida_sans_110.png
index 77625492c..1c98efcca 100755
--- a/fonts/lucida_sans_110.png
+++ b/fonts/lucida_sans_110.png
Binary files differ
diff --git a/fonts/lucida_sans_120.png b/fonts/lucida_sans_120.png
index e05ee0fda..c106feb27 100755
--- a/fonts/lucida_sans_120.png
+++ b/fonts/lucida_sans_120.png
Binary files differ
diff --git a/fonts/lucida_sans_140.png b/fonts/lucida_sans_140.png
index 5ef95e088..d314dc5b3 100755
--- a/fonts/lucida_sans_140.png
+++ b/fonts/lucida_sans_140.png
Binary files differ
diff --git a/fonts/lucida_sans_160.png b/fonts/lucida_sans_160.png
index cb07e3f48..233ee9d42 100755
--- a/fonts/lucida_sans_160.png
+++ b/fonts/lucida_sans_160.png
Binary files differ
diff --git a/fonts/lucida_sans_180.png b/fonts/lucida_sans_180.png
index c739c80fc..68cbe3bc8 100755
--- a/fonts/lucida_sans_180.png
+++ b/fonts/lucida_sans_180.png
Binary files differ
diff --git a/fonts/lucida_sans_200.png b/fonts/lucida_sans_200.png
index c3f883fc5..7b57632b8 100755
--- a/fonts/lucida_sans_200.png
+++ b/fonts/lucida_sans_200.png
Binary files differ
diff --git a/fonts/lucida_sans_220.png b/fonts/lucida_sans_220.png
index fb0edfe0d..4f385f4d4 100755
--- a/fonts/lucida_sans_220.png
+++ b/fonts/lucida_sans_220.png
Binary files differ
diff --git a/fonts/lucida_sans_240.png b/fonts/lucida_sans_240.png
index 5826e80d8..8fc4e9d6b 100755
--- a/fonts/lucida_sans_240.png
+++ b/fonts/lucida_sans_240.png
Binary files differ
diff --git a/fonts/lucida_sans_260.png b/fonts/lucida_sans_260.png
index 13a9c89c9..9bae8de5b 100755
--- a/fonts/lucida_sans_260.png
+++ b/fonts/lucida_sans_260.png
Binary files differ
diff --git a/fonts/lucida_sans_280.png b/fonts/lucida_sans_280.png
index 9ffdc01e7..527fa3734 100755
--- a/fonts/lucida_sans_280.png
+++ b/fonts/lucida_sans_280.png
Binary files differ
diff --git a/fonts/lucida_sans_360.png b/fonts/lucida_sans_360.png
index 53b957c65..eecf35e33 100755
--- a/fonts/lucida_sans_360.png
+++ b/fonts/lucida_sans_360.png
Binary files differ
diff --git a/fonts/lucida_sans_40.png b/fonts/lucida_sans_40.png
index 954ac0d35..5c10c1ed3 100755
--- a/fonts/lucida_sans_40.png
+++ b/fonts/lucida_sans_40.png
Binary files differ
diff --git a/fonts/lucida_sans_480.png b/fonts/lucida_sans_480.png
index afc87a5cd..928a0d723 100755
--- a/fonts/lucida_sans_480.png
+++ b/fonts/lucida_sans_480.png
Binary files differ
diff --git a/fonts/lucida_sans_560.png b/fonts/lucida_sans_560.png
index 04185d85d..7afb09912 100755
--- a/fonts/lucida_sans_560.png
+++ b/fonts/lucida_sans_560.png
Binary files differ
diff --git a/fonts/lucida_sans_60.png b/fonts/lucida_sans_60.png
index d67af5feb..0efcd9e32 100755
--- a/fonts/lucida_sans_60.png
+++ b/fonts/lucida_sans_60.png
Binary files differ
diff --git a/fonts/lucida_sans_80.png b/fonts/lucida_sans_80.png
index 726423ee2..287c65663 100755
--- a/fonts/lucida_sans_80.png
+++ b/fonts/lucida_sans_80.png
Binary files differ
diff --git a/fonts/lucida_sans_90.png b/fonts/lucida_sans_90.png
index c13e5d0bd..822a465f2 100755
--- a/fonts/lucida_sans_90.png
+++ b/fonts/lucida_sans_90.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_100.png b/fonts/mono_dejavu_sans_100.png
index 28d9e7c47..45a312542 100755
--- a/fonts/mono_dejavu_sans_100.png
+++ b/fonts/mono_dejavu_sans_100.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_110.png b/fonts/mono_dejavu_sans_110.png
index 4536b514c..c90c0e242 100755
--- a/fonts/mono_dejavu_sans_110.png
+++ b/fonts/mono_dejavu_sans_110.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_120.png b/fonts/mono_dejavu_sans_120.png
index 147d9a160..0cebd70e8 100755
--- a/fonts/mono_dejavu_sans_120.png
+++ b/fonts/mono_dejavu_sans_120.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_140.png b/fonts/mono_dejavu_sans_140.png
index f9f0d29ca..a413759ea 100755
--- a/fonts/mono_dejavu_sans_140.png
+++ b/fonts/mono_dejavu_sans_140.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_160.png b/fonts/mono_dejavu_sans_160.png
index 0b6af705d..bd8a2f40a 100755
--- a/fonts/mono_dejavu_sans_160.png
+++ b/fonts/mono_dejavu_sans_160.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_180.png b/fonts/mono_dejavu_sans_180.png
index 17391f3f6..a299afcbe 100755
--- a/fonts/mono_dejavu_sans_180.png
+++ b/fonts/mono_dejavu_sans_180.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_200.png b/fonts/mono_dejavu_sans_200.png
index 58a61d5ea..68ee62681 100755
--- a/fonts/mono_dejavu_sans_200.png
+++ b/fonts/mono_dejavu_sans_200.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_220.png b/fonts/mono_dejavu_sans_220.png
index df6d0d1af..042d7e094 100755
--- a/fonts/mono_dejavu_sans_220.png
+++ b/fonts/mono_dejavu_sans_220.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_240.png b/fonts/mono_dejavu_sans_240.png
index 0eeb06a78..d2d68c5bb 100755
--- a/fonts/mono_dejavu_sans_240.png
+++ b/fonts/mono_dejavu_sans_240.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_260.png b/fonts/mono_dejavu_sans_260.png
index 86ce54e1a..3a8cb6c57 100755
--- a/fonts/mono_dejavu_sans_260.png
+++ b/fonts/mono_dejavu_sans_260.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_280.png b/fonts/mono_dejavu_sans_280.png
index da99da824..ccf62ba48 100755
--- a/fonts/mono_dejavu_sans_280.png
+++ b/fonts/mono_dejavu_sans_280.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_40.png b/fonts/mono_dejavu_sans_40.png
index 413817a7e..24ed693f7 100755
--- a/fonts/mono_dejavu_sans_40.png
+++ b/fonts/mono_dejavu_sans_40.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_60.png b/fonts/mono_dejavu_sans_60.png
index 7126f4d7b..326af996f 100755
--- a/fonts/mono_dejavu_sans_60.png
+++ b/fonts/mono_dejavu_sans_60.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_80.png b/fonts/mono_dejavu_sans_80.png
index 8ff7924dc..04326dbb2 100755
--- a/fonts/mono_dejavu_sans_80.png
+++ b/fonts/mono_dejavu_sans_80.png
Binary files differ
diff --git a/fonts/mono_dejavu_sans_90.png b/fonts/mono_dejavu_sans_90.png
index 78872ddc8..65ac51858 100755
--- a/fonts/mono_dejavu_sans_90.png
+++ b/fonts/mono_dejavu_sans_90.png
Binary files differ
diff --git a/games/minimal/mods/default/mapgen.lua b/games/minimal/mods/default/mapgen.lua
index 2082d5983..65b67dae5 100644
--- a/games/minimal/mods/default/mapgen.lua
+++ b/games/minimal/mods/default/mapgen.lua
@@ -36,7 +36,7 @@ minetest.register_ore({
clust_size = 7,
y_min = -15,
y_max = 0,
- noise_threshhold = 0,
+ noise_threshold = 0,
noise_params = {
offset=0.35,
scale=0.2,
diff --git a/minetest.conf.example b/minetest.conf.example
index 50893c578..5090a620b 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -1,225 +1,343 @@
-# This file is read by default from:
+# This file contains a list of all available settings and their default value for minetest.conf
+
+# By default, all the settings are commented and not functional.
+# Uncomment settings by removing the preceding #.
+
+# minetest.conf is read by default from:
# ../minetest.conf
# ../../minetest.conf
# Any other path can be chosen by passing the path as a parameter
# to the program, eg. "minetest.exe --config ../minetest.conf.example".
-# By default, all the settings are commented and not functional.
-# Uncomment settings by removing the preceding #.
-
# Further documentation:
# http://wiki.minetest.net/
-# NOTE: This file might not be up-to-date, refer to the
-# defaultsettings.cpp file for an up-to-date list:
-# https://github.com/minetest/minetest/blob/master/src/defaultsettings.cpp
-
-# A vim command to convert most of defaultsettings.cpp to conf file format:
-# :'<,'>s/\tsettings->setDefault("\([^"]*\)", "\([^"]*\)");.*/#\1 = \2/g
-# Note: Some of the settings are implemented in Lua.
-
#
-# Client and server
+# Client
#
-# Name of player, on a server this is the main admin
-#name =
+## Controls
-#
-# Client stuff
-#
+# If enabled, you can place blocks at the position (feet + eye level) where you stand.
+# This is helpful when working with nodeboxes in small areas.
+# type: bool
+# enable_build_where_you_stand = false
+
+# Player is able to fly without being affected by gravity.
+# This requires the "fly" privilege on the server.
+# type: bool
+# free_move = false
+
+# Fast movement (via use key).
+# This requires the "fast" privilege on the server.
+# type: bool
+# fast_move = false
+
+# If enabled together with fly mode, player is able to fly through solid nodes.
+# This requires the "noclip" privilege on the server.
+# type: bool
+# noclip = false
+
+# Smooths camera when moving and looking around.
+# Useful for recording videos.
+# type: bool
+# cinematic = false
+
+# Smooths rotation of camera. 0 to disable.
+# type: float min: 0 max: 0.99
+# camera_smoothing = 0.0
-# Port to connect to (UDP)
-#remote_port =
-# Key mappings.
+# Smooths rotation of camera in cinematic mode. 0 to disable.
+# type: float min: 0 max: 0.99
+# cinematic_camera_smoothing = 0.7
+
+# Invert vertical mouse movement.
+# type: bool
+# invert_mouse = false
+
+# Mouse sensitivity multiplier.
+# type: float
+# mouse_sensitivity = 0.2
+
+# If enabled, "use" key instead of "sneak" key is used for climbing down and descending.
+# type: bool
+# aux1_descends = false
+
+# Double-tapping the jump key toggles fly mode.
+# type: bool
+# doubletap_jump = false
+
+# If disabled "use" key is used to fly fast if both fly and fast mode are enabled.
+# type: bool
+# always_fly_fast = true
+
+# The time in seconds it takes between repeated right clicks when holding the right mouse button.
+# type: float
+# repeat_rightclick_time = 0.25
+
+# Enable random user input (only used for testing).
+# type: bool
+# random_input = false
+
+# Continuous forward movement (only used for testing).
+# type: bool
+# continuous_forward = false
+
+# Key for moving the player forward.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-#keymap_forward = KEY_KEY_W
-#keymap_backward = KEY_KEY_S
-#keymap_left = KEY_KEY_A
-#keymap_right = KEY_KEY_D
-#keymap_jump = KEY_SPACE
-#keymap_sneak = KEY_LSHIFT
-#keymap_inventory = KEY_KEY_I
-# Go down ladder / go down in fly mode / go fast in fast mode
-#keymap_special1 = KEY_KEY_E
-#keymap_chat = KEY_KEY_T
-#keymap_cmd = /
-#keyman_console = KEY_F10
-#keymap_rangeselect = KEY_KEY_R
-#keymap_freemove = KEY_KEY_K
-#keymap_fastmove = KEY_KEY_J
-#keymap_cinematic = KEY_F8
-#keymap_screenshot = KEY_F12
-# If true, keymap_special1 instead of keymap_sneak is used for climbing down and descending
-#aux1_descends = false
-# Double-tapping the jump key toggles fly mode
-#doubletap_jump = false
-# If false aux1 is used to fly fast
-#always_fly_fast = true
-# Some (temporary) keys for debugging
-#keymap_print_debug_stacks = KEY_KEY_P
-#keymap_quicktune_prev = KEY_HOME
-#keymap_quicktune_next = KEY_END
-#keymap_quicktune_dec = KEY_NEXT
-#keymap_quicktune_inc = KEY_PRIOR
-
-# If set to true, you can place blocks at the position (feet + eye level) where you stand.
-# This is helpful when working with nodeboxes.
-#enable_build_where_you_stand = false
-# Minimum FPS.
-# The amount of rendered stuff is dynamically set according to this.
-#wanted_fps = 30
-# If FPS would go higher than this, limit it by sleeping
-# to not waste CPU power for no benefit.
-#fps_max = 60
-# Maximum FPS when game is paused
-#pause_fps_max = 20
-# The allowed adjustment range for the automatic rendering range adjustment
-#viewing_range_nodes_max = 160
-#viewing_range_nodes_min = 35
-# Initial window size
-#screenW = 800
-#screenH = 600
-#fullscreen = false
-#fullscreen_bpp = 24
-# Experimental option, might cause visible spaces between blocks
-# when set to higher number than 0.
-#fsaa = 0
-#vsync = false
-# Field of view in degrees
-#fov = 72
-# Address to connect to (#blank = start local server)
-#address =
-# Enable random user input, for testing
-#random_input = false
-# Timeout for client to remove unused map data from memory
-#client_unload_unused_data_timeout = 600
-# Maximum number of mapblocks for client to be kept in memory
-# Set to -1 for unlimited amount
-#client_mapblock_limit = 5000
-# Whether to fog out the end of the visible area
-#enable_fog = true
-# Whether to show the client debug info (has the same effect as hitting F5)
-#show_debug = false
-# Enable a bit lower water surface; disable for speed (not quite optimized)
-#new_style_water = false
-# Max liquids processed per step
-#liquid_loop_max = 100000
-# The time (in seconds) that the liquids queue may grow beyond processing
-# capacity until an attempt is made to decrease its size by dumping old queue
-# items. A value of 0 disables the functionality.
-#liquid_queue_purge_time = 0
-# Liquid update interval in seconds
-#liquid_update = 1.0
+# type: key
+# keymap_forward = KEY_KEY_W
+
+# Key for moving the player backward.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_backward = KEY_KEY_S
+
+# Key for moving the player left.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_left = KEY_KEY_A
+
+# Key for moving the player right.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_right = KEY_KEY_D
+
+# Key for jumping.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_jump = KEY_SPACE
+
+# Key for sneaking.
+# Also used for climbing down and descending in water if aux1_descends is disabled.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_sneak = KEY_LSHIFT
+
+# Key for opening the inventory.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_inventory = KEY_KEY_I
+
+# Key for moving fast in fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_special1 = KEY_KEY_E
+
+# Key for opening the chat window.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_chat = KEY_KEY_T
+
+# Key for opening the chat window to type commands.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_cmd = /
+
+# Key for opening the chat console.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keyman_console = KEY_F10
+
+# Key for toggling unlimited view range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_rangeselect = KEY_KEY_R
+
+# Key for toggling flying.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_freemove = KEY_KEY_K
+
+# Key for toggling fast mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_fastmove = KEY_KEY_J
+
+# Key for toggling noclip mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_noclip = KEY_KEY_H
+
+# Key for toggling cinematic mode.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_cinematic = KEY_F8
+
+# Key for toggling display of minimap.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_minimap = KEY_F9
+
+# Key for taking screenshots.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_screenshot = KEY_F12
+
+# Key for dropping the currently selected item.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_drop = KEY_KEY_Q
+
+# Key for toggling the display of the HUD.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_hud = KEY_F1
+
+# Key for toggling the display of the chat.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_chat = KEY_F2
+
+# Key for toggling the display of the fog.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_force_fog_off = KEY_F3
+
+# Key for toggling the camrea update. Only used for development
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_update_camera =
+
+# Key for toggling the display of debug info.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_debug = KEY_F5
+
+# Key for toggling the display of the profiler. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_toggle_profiler = KEY_F6
+
+# Key for switching between first- and third-person camera.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_camera_mode = KEY_F7
+
+# Key for increasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_increase_viewing_range_min = +
+
+# Key for decreasing the viewing range.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_decrease_viewing_range_min = -
+
+# Key for printing debug stacks. Used for development.
+# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+# type: key
+# keymap_print_debug_stacks = KEY_KEY_P
+
+## Network
+
+# Address to connect to.
+# Leave this blank to start a local server.
+# Note that the address field in the main menu overrides this setting.
+# type: string
+# address =
+
+# Port to connect to (UDP).
+# Note that the port field in the main menu overrides this setting.
+# type: int min: 1 max: 65535
+# remote_port = 30000
+
+# Whether to support older servers before protocol version 25.
+# Enable if you want to connect to 0.4.12 servers and before.
+# Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.
+# Disabling this option will protect your password better.
+# type: bool
+# send_pre_v25_init = true
+
+# Save the map received by the client on disk.
+# type: bool
+# enable_local_map_saving = false
+
+# Show entity selection boxes
+# type: bool
+# show_entity_selectionbox = true
+
+# Enable usage of remote media server (if provided by server).
+# Remote servers offer a significantly faster way to download media (e.g. textures)
+# when connecting to the server.
+# type: bool
+# enable_remote_media_server = true
+
+# URL to the server list displayed in the Multiplayer Tab.
+# type: string
+# serverlist_url = servers.minetest.net
+
+# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.
+# type: string
+# serverlist_file = favoriteservers.txt
+
+## Graphics
+
+### In-Game
+
+#### Basic
+
+# Enable VBO
+# type: bool
+# enable_vbo = true
+
+# Whether to fog out the end of the visible area.
+# type: bool
+# enable_fog = true
+
# Leaves style:
-# fancy - all faces visible
-# simple - only outer faces, if defined special_tiles are used
-# opaque - disable transparency
-#leaves_style = fancy
-# Connects glass if supported by node
-#connected_glass = false
+# - Fancy: all faces visible
+# - Simple: only outer faces, if defined special_tiles are used
+# - Opaque: disable transparency
+# type: enum values: fancy, simple, opaque
+# leaves_style = fancy
+
+# Connects glass if supported by node.
+# type: bool
+# connected_glass = false
+
# Enable smooth lighting with simple ambient occlusion.
# Disable for speed or for different looks.
-#smooth_lighting = true
-# Adjust the gamma encoding for the light tables. Valid values are in the range
-# 1.0 to 3.0 (inclusive); lower numbers are brighter. This setting is for the
-# client only and is ignored by the server
-#display_gamma = 1.8
-# Path to texture directory. All textures are first searched from here.
-#texture_path =
-# Video back-end.
-# Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl.
-#video_driver = opengl
-# Unobstructed movement without physics, downwards key is keymap_special1
-#free_move = false
-# Continuous forward movement (for testing)
-#continuous_forward = false
-# Enable cinematic mode
-#cinematic = false
-# Camera smoothing - smooths rotation of camera. 0 is no smoothing.
-# Must be equal to or greater than 0, and less than 1.
-#camera_smoothing = 0.0
-# Camera smoothing when in cinematic mode
-#cinematic_camera_smoothing = 0.7
-# Fast movement (keymap_special1)
-#fast_move = false
-# Invert mouse
-#invert_mouse = false
-# Enable/disable clouds
-#enable_clouds = true
-#cloud_height = 120
-# Radius of cloud area stated in number of 64 node cloud squares.
-# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
-#cloud_radius = 12
-#enable_3d_clouds = true
-# Use a cloud animation for the main menu background
-#menu_clouds = true
-# Path for screenshots
-#screenshot_path =
-# Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double)
-#view_bobbing_amount = 1.0
-# Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double)
-#fall_bobbing_amount = 0.0
-# 3d support.
-# Currently:
-# "none" = no 3d output.
-# "anaglyph" = cyan/magenta color 3d.
-# "interlaced" = odd/even line based polarisation screen support.
-# "topbottom" = split screen top/bottom.
-# "sidebyside" = split screen side by side.
-#3d_mode = none
-#3d_parallax_strength = 0.025
-# In-game chat console background color (R,G,B)
-#console_color = (0,0,0)
-# In-game chat console background alpha (opaqueness, between 0 and 255)
-#console_alpha = 200
-# Selection box border color (R,G,B)
-#selectionbox_color = (0,0,0)
-# Crosshair color (R,G,B)
-#crosshair_color = (255,255,255)
-# Cross alpha (opaqueness, between 0 and 255)
-#crosshair_alpha = 255
-# Scale gui by a user specified value
-#gui_scaling = 1.0
-# Use a nearest-neighbor-anti-alias filter to scale the GUI.
-# This will smooth over some of the rough edges, and blend
-# pixels when scaling down, at the cost of blurring some
-# edge pixels when images are scaled by non-integer sizes.
-#gui_scaling_filter = false
-# When gui_scaling_filter is true, all GUI images need to be
-# filtered in software, but some images are generated directly
-# to hardware (e.g. render-to-texture for nodes in inventory).
-# When gui_scaling_filter_txr2img is true, copy those images
-# from hardware to software for scaling. When false, fall back
-# to the old scaling method, for video drivers that don't
-# propery support downloading textures back from hardware.
-#gui_scaling_filter_txr2img = true
-# Sensitivity multiplier
-#mouse_sensitivity = 0.2
-# Sound settings
-#enable_sound = true
-#sound_volume = 0.7
-# Whether node texture animations should be desynchronized per mapblock
-#desynchronize_mapblock_texture_animation = true
-# Width of the selectionbox's lines (Between 1 and 5)
-#selectionbox_width = 2
-# Maximum proportion of current window to be used for hotbar.
-# Useful if there's something to be displayed right or left of hotbar.
-#hud_hotbar_max_width = 1.0
-# Save the map received by the client on disk
-#enable_local_map_saving = false
-# Enable selection highlighting for nodes (disables selectionbox)
-#enable_node_highlighting = false
-# Texture filtering settings
-#mip_map = false
-#anisotropic_filter = false
-#bilinear_filter = false
-#trilinear_filter = false
+# type: bool
+# smooth_lighting = true
+
+# Clouds are a client side effect.
+# type: bool
+# enable_clouds = true
+
+# Use 3D cloud look instead of flat.
+# type: bool
+# enable_3d_clouds = true
+
+# Method used to highlight selected object.
+# type: enum values: box, halo
+# node_highlighting = box
+
+#### Filtering
+
+# Use mip mapping to scale textures. May slightly increase performance.
+# type: bool
+# mip_map = false
+
+# Use anisotropic filtering when viewing at textures from an angle.
+# type: bool
+# anisotropic_filter = false
+
+# Use bilinear filtering when scaling textures.
+# type: bool
+# bilinear_filter = false
+
+# Use trilinear filtering when scaling textures.
+# type: bool
+# trilinear_filter = false
+
# Filtered textures can blend RGB values with fully-transparent neighbors,
# which PNG optimizers usually discard, sometimes resulting in a dark or
# light edge to transparent textures. Apply this filter to clean that up
# at texture load time.
-#texture_clean_transparent = false
+# type: bool
+# texture_clean_transparent = false
+
# When using bilinear/trilinear/anisotropic filters, low-resolution textures
# can be blurred, so automatically upscale them with nearest-neighbor
# interpolation to preserve crisp pixels. This sets the minimum texture size
@@ -227,389 +345,1196 @@
# memory. Powers of 2 are recommended. Setting this higher than 1 may not
# have a visible effect unless bilinear/trilinear/anisotropic filtering is
# enabled.
-#texture_min_size = 64
-# Set to true to pre-generate all item visuals
-#preload_item_visuals = false
-# Set to true to enable shaders. Disable them if video_driver = direct3d9/8.
-
-#enable_shaders = true
-#enable_bumpmapping = false
-# Set to true to enable textures bumpmapping. Requires shaders enabled.
-#generate_normalmaps = false
-# Set to true enables on the fly normalmap generation (Emboss effect).
-# Requires bumpmapping enabled.
-#normalmaps_strength = 0.6
-# Strength of generated normalmaps
-#normalmaps_smooth = 0
-# Defines sampling step of texture (0 - 2).
+# type: int
+# texture_min_size = 64
+
+# Experimental option, might cause visible spaces between blocks
+# when set to higher number than 0.
+# type: enum values: 0, 1, 2, 4, 8, 16
+# fsaa = 0
+
+#### Shaders
+
+# Shaders allow advanced visul effects and may increase performance on some video cards.
+# Thy only work with the OpenGL video backend.
+# type: bool
+# enable_shaders = true
+
+##### Tone Mapping
+
+# Enables filmic tone mapping
+# type: bool
+# tone_mapping = false
+
+##### Bumpmapping
+
+# Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack
+# or need to be auto-generated.
+# Requires shaders to be enabled.
+# type: bool
+# enable_bumpmapping = false
+
+# Enables on the fly normalmap generation (Emboss effect).
+# Requires bumpmapping to be enabled.
+# type: bool
+# generate_normalmaps = false
+
+# Strength of generated normalmaps.
+# type: float
+# normalmaps_strength = 0.6
+
+# Defines sampling step of texture.
# A higher value results in smoother normal maps.
-#parallax_occlusion_mode = 1
-# 0 = parallax occlusion with slope information (faster)
-# 1 = relief mapping (slower, more accurate)
-#enable_parallax_occlusion = false
-# Set to true enables parallax occlusion mapping. Requires shaders enabled.
-#parallax_occlusion_iterations = 4
-# Number of parallax occlusion iterations
-#parallax_occlusion_scale = 0.08
-# Overall scale of parallax occlusion effect
-#parallax_occlusion_bias = 0.04
-# Overall bias of parallax occlusion effect, usually scale/2
-#enable_waving_water = false
-# Set to true enables waving water. Requires shaders enabled.
-# Parameters for waving water:
-#water_wave_height = 1.0
-#water_wave_length = 20.0
-#water_wave_speed = 5.0
-#enable_waving_leaves = false
-# Set to true enables waving leaves. Requires shaders enabled.
-#enable_waving_plants = false
-# Set to true enables waving plants. Requires shaders enabled.
-#ambient_occlusion_gamma = 2.2
+# type: int min: 0 max: 2
+# normalmaps_smooth = 0
+
+##### Parallax Occlusion
+
+# Enables parallax occlusion mapping.
+# Requires shaders to be enabled.
+# type: bool
+# enable_parallax_occlusion = false
+
+# 0 = parallax occlusion with slope information (faster).
+# 1 = relief mapping (slower, more accurate).
+# type: int min: 0 max: 1
+# parallax_occlusion_mode = 1
+
+# Strength of parallax.
+# type: float
+# 3d_parallax_strength = 0.025
+
+# Number of parallax occlusion iterations.
+# type: int
+# parallax_occlusion_iterations = 4
+
+# Overall scale of parallax occlusion effect.
+# type: float
+# parallax_occlusion_scale = 0.08
+
+# Overall bias of parallax occlusion effect, usually scale/2.
+# type: float
+# parallax_occlusion_bias = 0.04
+
+##### Waving Nodes
+
+# Set to true enables waving water.
+# Requires shaders to be enabled.
+# type: bool
+# enable_waving_water = false
+
+# type: float
+# water_wave_height = 1.0
+
+# type: float
+# water_wave_length = 20.0
+
+# type: float
+# water_wave_speed = 5.0
+
+# Set to true enables waving leaves.
+# Requires shaders to be enabled.
+# type: bool
+# enable_waving_leaves = false
+
+# Set to true enables waving plants.
+# Requires shaders to be enabled.
+# type: bool
+# enable_waving_plants = false
+
+#### Advanced
+
+# If FPS would go higher than this, limit it by sleeping
+# to not waste CPU power for no benefit.
+# type: int
+# fps_max = 60
+
+# Maximum FPS when game is paused.
+# type: int
+# pause_fps_max = 20
+
+# View distance in nodes.
+# Min = 20
+# type: int
+# viewing_range = 100
+
+# Width component of the initial window size.
+# type: int
+# screenW = 800
+
+# Height component of the initial window size.
+# type: int
+# screenH = 600
+
+# Fullscreen mode.
+# type: bool
+# fullscreen = false
+
+# Bits per pixel (aka color depth) in fullscreen mode.
+# type: int
+# fullscreen_bpp = 24
+
+# Vertical screen synchronization.
+# type: bool
+# vsync = false
+
+# Field of view in degrees.
+# type: int min: 30 max: 160
+# fov = 72
+
+# Adjust the gamma encoding for the light tables. Lower numbers are brighter.
+# This setting is for the client only and is ignored by the server.
+# type: float min: 1 max: 3
+# display_gamma = 1.8
+
+# Path to texture directory. All textures are first searched from here.
+# type: path
+# texture_path =
+
+# The rendering back-end for Irrlicht.
+# type: enum values: null, software, burningsvideo, direct3d8, direct3d9, opengl
+# video_driver = opengl
+
+# Height on which clouds are appearing.
+# type: int
+# cloud_height = 120
+
+# Radius of cloud area stated in number of 64 node cloud squares.
+# Values larger than 26 will start to produce sharp cutoffs at cloud area corners.
+# type: int
+# cloud_radius = 12
+
+# Multiplier for view bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+# type: float
+# view_bobbing_amount = 1.0
+
+# Multiplier for fall bobbing.
+# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.
+# type: float
+# fall_bobbing_amount = 0.0
+
+# 3D support.
+# Currently supported:
+# - none: no 3d output.
+# - anaglyph: cyan/magenta color 3d.
+# - interlaced: odd/even line based polarisation screen support.
+# - topbottom: split screen top/bottom.
+# - sidebyside: split screen side by side.
+# - pageflip: quadbuffer based 3d.
+# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, pageflip
+# 3d_mode = none
+
+# In-game chat console background color (R,G,B).
+# type: string
+# console_color = (0,0,0)
+
+# In-game chat console background alpha (opaqueness, between 0 and 255).
+# type: int min: 0 max: 255
+# console_alpha = 200
+
+# Selection box border color (R,G,B).
+# type: string
+# selectionbox_color = (0,0,0)
+
+# Width of the selectionbox's lines around nodes.
+# type: int min: 1 max: 5
+# selectionbox_width = 2
+
+# Crosshair color (R,G,B).
+# type: string
+# crosshair_color = (255,255,255)
+
+# Crosshair alpha (opaqueness, between 0 and 255).
+# type: int min: 0 max: 255
+# crosshair_alpha = 255
+
+# Whether node texture animations should be desynchronized per mapblock.
+# type: bool
+# desynchronize_mapblock_texture_animation = true
+
+# Maximum proportion of current window to be used for hotbar.
+# Useful if there's something to be displayed right or left of hotbar.
+# type: float
+# hud_hotbar_max_width = 1.0
+
+# Enables caching of facedir rotated meshes.
+# type: bool
+# enable_mesh_cache = false
+
+# Enables minimap.
+# type: bool
+# enable_minimap = true
+
+# Shape of the minimap. Enabled = round, disabled = square.
+# type: bool
+# minimap_shape_round = true
+
+# True = 256
+# False = 128
+# Useable to make minimap smoother on slower machines.
+# type: bool
+# minimap_double_scan_height = true
+
+# Make fog and sky colors depend on daytime (dawn/sunset) and view direction.
+# type: bool
+# directional_colored_fog = true
+
# The strength (darkness) of node ambient-occlusion shading.
# Lower is darker, Higher is lighter. The valid range of values for this
# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
# set to the nearest valid value.
-#enable_mesh_cache = false
-# Enables caching of facedir rotated meshes
-
-#enable_minimap = true
-# Enables minimap
-#minimap_shape_round = true
-# true - round shape, false - square
-#minimap_double_scan_height = true
-# true = 256, false = 128
-# useable to make minimap smoother on slower machines
-
-# The time in seconds it takes between repeated
-# right clicks when holding the right mouse button.
-#repeat_rightclick_time = 0.25
-# Make fog and sky colors depend on daytime (dawn/sunset) and view direction
-#directional_colored_fog = true
-# Delay showing tooltips, stated in milliseconds
-#tooltip_show_delay = 400
-# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens
-#screen_dpi = 72
-# Default timeout for cURL, stated in milliseconds.
-# Only has an effect if compiled with cURL.
-#curl_timeout = 5000
-# Limits number of parallel HTTP requests. Affects:
-# Media fetch if server uses remote_media setting.
-# Serverlist download and server announcement.
-# Downloads performed by main menu (e.g. mod manager).
-# Only has an effect if compiled with cURL.
-#curl_parallel_limit = 8
-# Maximum time in ms a file download (e.g. a mod download) may take
-#curl_file_download_timeout = 300000
-# Enable usage of remote media server (if provided by server)
-#enable_remote_media_server = true
-# Url to the server list displayed in the Multiplayer Tab
-#serverlist_url = servers.minetest.net
-# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab
-#serverlist_file = favoriteservers.txt
-# Whether freetype fonts are used, requires freetype support to be compiled in
-#freetype = true
-# Path to TrueTypeFont or bitmap
-#font_path = fonts/liberationsans.ttf
-#font_size = 15
-# Font shadow offset, if 0 then shadow will not be drawn
-#font_shadow = 1
-# Font shadow alpha (opaqueness, between 0 and 255)
-#font_shadow_alpha = 128
-#mono_font_path = fonts/liberationmono.ttf
-#mono_font_size = 15
-# This font will be used for certain languages
-#fallback_font_path = fonts/DroidSansFallbackFull.ttf
-#fallback_font_size = 15
-#fallback_font_shadow = 1
-#fallback_font_shadow_alpha = 128
+# type: float min: 0.25 max: 4
+# ambient_occlusion_gamma = 2.2
+
+# Enables animation of inventory items.
+# type: bool
+# inventory_items_animations = false
+
+### Menus
+
+# Use a cloud animation for the main menu background.
+# type: bool
+# menu_clouds = true
+
+# Scale gui by a user specified value.
+# Use a nearest-neighbor-anti-alias filter to scale the GUI.
+# This will smooth over some of the rough edges, and blend
+# pixels when scaling down, at the cost of blurring some
+# edge pixels when images are scaled by non-integer sizes.
+# type: float
+# gui_scaling = 1.0
+
+# When gui_scaling_filter is true, all GUI images need to be
+# filtered in software, but some images are generated directly
+# to hardware (e.g. render-to-texture for nodes in inventory).
+# type: bool
+# gui_scaling_filter = false
+
+# When gui_scaling_filter_txr2img is true, copy those images
+# from hardware to software for scaling. When false, fall back
+# to the old scaling method, for video drivers that don't
+# propery support downloading textures back from hardware.
+# type: bool
+# gui_scaling_filter_txr2img = true
+
+# Delay showing tooltips, stated in milliseconds.
+# type: int
+# tooltip_show_delay = 400
+
+# Whether freetype fonts are used, requires freetype support to be compiled in.
+# type: bool
+# freetype = true
+
+# Path to TrueTypeFont or bitmap.
+# type: path
+# font_path = fonts/liberationsans.ttf
+
+# type: int
+# font_size = 15
+
+# Font shadow offset, if 0 then shadow will not be drawn.
+# type: int
+# font_shadow = 1
+
+# Font shadow alpha (opaqueness, between 0 and 255).
+# type: int min: 0 max: 255
+# font_shadow_alpha = 128
+
+# type: path
+# mono_font_path = fonts/liberationmono.ttf
+
+# type: int
+# mono_font_size = 15
+
+# This font will be used for certain languages.
+# type: path
+# fallback_font_path = fonts/DroidSansFallbackFull.ttf
+
+# type: int
+# fallback_font_size = 15
+
+# type: int
+# fallback_font_shadow = 1
+
+# type: int min: 0 max: 255
+# fallback_font_shadow_alpha = 128
+
+# Path to save screenshots at.
+# type: path
+# screenshot_path =
+
+# Format of screenshots.
+# type: enum values: png, jpg, bmp, pcx, ppm, tga
+# screenshot_format = png
+
+# Screenshot quality. Only used for JPEG format.
+# 1 means worst quality; 100 means best quality.
+# Use 0 for default quality.
+# type: int min: 0 max: 100
+# screenshot_quality = 0
+
+### Advanced
+
+# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
+# type: int
+# screen_dpi = 72
+
+## Sound
+
+# type: bool
+# enable_sound = true
+
+# type: float min: 0 max: 1
+# sound_volume = 0.7
+
+## Advanced
+
+# Timeout for client to remove unused map data from memory.
+# type: int
+# client_unload_unused_data_timeout = 600
+
+# Maximum number of mapblocks for client to be kept in memory.
+# Set to -1 for unlimited amount.
+# type: int
+# client_mapblock_limit = 5000
+
+# Whether to show the client debug info (has the same effect as hitting F5).
+# type: bool
+# show_debug = false
#
-# Server stuff
+# Server / Singleplayer
#
-# Network port to listen (UDP)
-#port = 30000
-# Bind address
-#bind_address =
-# Name of server
-#server_name = Minetest server
-# Description of server
-#server_description = mine here
-# Domain name of server
-#server_address = game.minetest.net
-# Homepage of server
-#server_url = http://minetest.net
-# Automaticaly report to masterserver
-#server_announce = 0
-# Announce to this masterserver.
-# If you want to announce your ipv6 address - use serverlist_url = v6.servers.minetest.net.
-#serverlist_url = servers.minetest.net
-# Default game (default when creating a new world)
-#default_game = minetest
-# World directory (everything in the world is stored here)
-#map-dir = /custom/world
-# Message of the Day
-#motd = Welcome to this awesome Minetest server!
-# Maximum number of players connected simultaneously
-#max_users = 15
-# Set to true to disallow old clients from connecting
-#strict_protocol_version_checking = false
-# Time in seconds for item entity to live. Default value: 900s.
+# Name of the server, to be displayed when players join and in the serverlist.
+# type: string
+# server_name = Minetest server
+
+# Description of server, to be displayed when players join and in the serverlist.
+# type: string
+# server_description = mine here
+
+# Domain name of server, to be displayed in the serverlist.
+# type: string
+# server_address = game.minetest.net
+
+# Homepage of server, to be displayed in the serverlist.
+# type: string
+# server_url = http://minetest.net
+
+# Automaticaly report to the serverlist.
+# type: bool
+# server_announce = false
+
+# Announce to this serverlist.
+# If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net.
+# type: string
+# serverlist_url = servers.minetest.net
+
+## Network
+
+# Network port to listen (UDP).
+# This value will be overridden when starting from the main menu.
+# type: int
+# port = 30000
+
+# The network interface that the server listens on.
+# type: string
+# bind_address =
+
+# Enable to disallow old clients from connecting.
+# Older clients are compatible in the sense that they will not crash when connecting
+# to new servers, but they may not support all new features that you are expecting.
+# type: bool
+# strict_protocol_version_checking = false
+
+# Specifies URL from which client fetches media instead of using UDP.
+# $filename should be accessible from $remote_media$filename via cURL
+# (obviously, remote_media should end with a slash).
+# Files that are not present will be fetched the usual way.
+# type: string
+# remote_media =
+
+# Enable/disable running an IPv6 server. An IPv6 server may be restricted
+# to IPv6 clients, depending on system configuration.
+# Ignored if bind_address is set.
+# type: bool
+# ipv6_server = false
+
+### Advanced
+
+# How many blocks are flying in the wire simultaneously per client.
+# type: int
+# max_simultaneous_block_sends_per_client = 10
+
+# How many blocks are flying in the wire simultaneously for the whole server.
+# type: int
+# max_simultaneous_block_sends_server_total = 40
+
+# To reduce lag, block transfers are slowed down when a player is building something.
+# This determines how long they are slowed down after placing or removing a node.
+# type: float
+# full_block_send_enable_min_time_from_building = 2.0
+
+# Maximum number of packets sent per send step, if you have a slow connection
+# try reducing it, but don't reduce it to a number below double of targeted
+# client number.
+# type: int
+# max_packets_per_iteration = 1024
+
+## Game
+
+# Default game when creating a new world.
+# This will be overridden when creating a world from the main menu.
+# type: string
+# default_game = minetest
+
+# Message of the day displayed to players connecting.
+# type: string
+# motd =
+
+# Maximum number of players that can connect simultaneously.
+# type: int
+# max_users = 15
+
+# World directory (everything in the world is stored here).
+# Not needed if starting from the main menu.
+# type: path
+# map-dir =
+
+# Time in seconds for item entity (dropped items) to live.
# Setting it to -1 disables the feature.
-#item_entity_ttl = 900
-# Set to true to enable creative mode (unlimited inventory)
-#creative_mode = false
-# Enable players getting damage and dying
-#enable_damage = false
-# A chosen map seed for a new map, leave empty for random
-#fixed_map_seed =
-# Gives some stuff to players at the beginning
-#give_initial_stuff = false
-# New users need to input this password
-#default_password =
-# Available privileges: interact, shout, teleport, settime, privs, ...
+# type: int
+# item_entity_ttl = 900
+
+# Enable players getting damage and dying.
+# type: bool
+# enable_damage = false
+
+# A chosen map seed for a new map, leave empty for random.
+# Will be overridden when creating a new world in the main menu.
+# type: string
+# fixed_map_seed =
+
+# New users need to input this password.
+# type: string
+# default_password =
+
+# The privileges that new users automatically get.
# See /privs in game for a full list on your server and mod configuration.
-#default_privs = interact, shout
+# type: string
+# default_privs = interact, shout
+
+# Privileges that players with basic_privs can grant
+# type: string
+# basic_privs = interact, shout
+
# Whether players are shown to clients without any range limit.
# Deprecated, use the setting player_transfer_distance instead.
-#unlimited_player_transfer_distance = true
-# Defines the maximal player transfer distance in blocks (0 = unlimited)
-#player_transfer_distance = 0
-# Whether to enable players killing each other
-#enable_pvp = true
-# If this is set, players will always (re)spawn at the given position
-#static_spawnpoint = 0, 10, 0
-# If true, new players cannot join with an empty password
-#disallow_empty_password = false
-# If true, disable cheat prevention in multiplayer
-#disable_anticheat = false
-# If true, actions are recorded for rollback
-# This option is only read when server starts
-#enable_rollback_recording = false
-# Handling for deprecated lua api calls:
-# "legacy" = (try to) mimic old behaviour (default for release).
-# "log" = mimic and log backtrace of deprecated call (default for debug).
-# "error" = abort on usage of deprecated call (suggested for mod developers).
-#deprecated_lua_api_handling = legacy
-
-#kick_msg_shutdown = Server shutting down.
-# A message to be displayed to all clients when the server shuts down
-#kick_msg_crash = This server has experienced an internal error. You will now be disconnected.
-# A message to be displayed to all clients when the server crashes
-#ask_reconnect_on_crash = false
-# Whether to ask clients to reconnect after a (lua) crash.
+# type: bool
+# unlimited_player_transfer_distance = true
+
+# Defines the maximal player transfer distance in blocks (0 = unlimited).
+# type: int
+# player_transfer_distance = 0
+
+# Whether to allow players to damage and kill each other.
+# type: bool
+# enable_pvp = true
+
+# If this is set, players will always (re)spawn at the given position.
+# type: string
+# static_spawnpoint =
+
+# If enabled, new players cannot join with an empty password.
+# type: bool
+# disallow_empty_password = false
+
+# If enabled, disable cheat prevention in multiplayer.
+# type: bool
+# disable_anticheat = false
+
+# If enabled, actions are recorded for rollback.
+# This option is only read when server starts.
+# type: bool
+# enable_rollback_recording = false
+
+# A message to be displayed to all clients when the server shuts down.
+# type: string
+# kick_msg_shutdown = Server shutting down.
+
+# A message to be displayed to all clients when the server crashes.
+# type: string
+# kick_msg_crash = This server has experienced an internal error. You will now be disconnected.
+
+# Whether to ask clients to reconnect after a (Lua) crash.
# Set this to true if your server is set up to restart automatically.
+# type: bool
+# ask_reconnect_on_crash = false
+
+# From how far clients know about objects, stated in mapblocks (16 nodes).
+# type: int
+# active_object_send_range_blocks = 3
+
+# How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes).
+# In active blocks objects are loaded and ABMs run.
+# type: int
+# active_block_range = 2
+
+# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
+# type: int
+# max_block_send_distance = 10
+
+# Maximum number of forceloaded mapblocks.
+# type: int
+# max_forceloaded_blocks = 16
+
+# Interval of sending time of day to clients.
+# type: int
+# time_send_interval = 5
+
+# Controls length of day/night cycle.
+# Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
+# type: int
+# time_speed = 72
+
+# Interval of saving important changes in the world, stated in seconds.
+# type: float
+# server_map_save_interval = 5.3
+
+### Physics
+
+# type: float
+# movement_acceleration_default = 3
+
+# type: float
+# movement_acceleration_air = 2
+
+# type: float
+# movement_acceleration_fast = 10
+
+# type: float
+# movement_speed_walk = 4
+
+# type: float
+# movement_speed_crouch = 1.35
+
+# type: float
+# movement_speed_fast = 20
+
+# type: float
+# movement_speed_climb = 2
+
+# type: float
+# movement_speed_jump = 6.5
+
+# type: float
+# movement_speed_descend = 6
+
+# type: float
+# movement_liquid_fluidity = 1
+
+# type: float
+# movement_liquid_fluidity_smooth = 0.5
+
+# type: float
+# movement_liquid_sink = 10
+
+# type: float
+# movement_gravity = 9.81
+
+### Advanced
+
+# Handling for deprecated lua api calls:
+# - legacy: (try to) mimic old behaviour (default for release).
+# - log: mimic and log backtrace of deprecated call (default for debug).
+# - error: abort on usage of deprecated call (suggested for mod developers).
+# type: enum values: legacy, log, error
+# deprecated_lua_api_handling = legacy
+
+# Useful for mod developers.
+# type: bool
+# mod_profiling = false
+
+# Detailed mod profile data. Useful for mod developers.
+# type: bool
+# detailed_profiling = false
+
+# Profiler data print interval. 0 = disable. Useful for developers.
+# type: int
+# profiler_print_interval = 0
-# Mod profiler
-#mod_profiling = false
-# Detailed mod profile data
-#detailed_profiling = false
-# Profiler data print interval. #0 = disable.
-#profiler_print_interval = 0
-#enable_mapgen_debug_info = false
-# From how far client knows about objects
-#active_object_send_range_blocks = 3
-# How large area of blocks are subject to the active block stuff.
-# Active = objects are loaded and ABMs run.
-#active_block_range = 2
-# How many blocks are flying in the wire simultaneously per client
-#max_simultaneous_block_sends_per_client = 10
-# How many blocks are flying in the wire simultaneously per server
-#max_simultaneous_block_sends_server_total = 40
-# From how far blocks are sent to clients, stated in mapblocks (16 nodes)
-#max_block_send_distance = 10
-# From how far blocks are generated for clients, stated in mapblocks (16 nodes)
-#max_block_generate_distance = 6
-# Where the map generator stops.
-# Please note:
-# * Limited to 31000 (setting above has no effect)
-# * The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).
-# * Those groups have an offset of -32, -32 nodes from the origin.
-# * Only groups which are within the map_generation_limit are generated
-#map_generation_limit = 31000
# Number of extra blocks that can be loaded by /clearobjects at once.
# This is a trade-off between sqlite transaction overhead and
# memory consumption (4096=100MB, as a rule of thumb).
-#max_clearobjects_extra_loaded_blocks = 4096
-# Maximum number of forceloaded blocks
-#max_forceloaded_blocks = 16
-# Interval of sending time of day to clients
-#time_send_interval = 5
-# Controls length of day/night cycle.
-# 72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged.
-#time_speed = 72
-#server_unload_unused_data_timeout = 29
-# Maximum number of statically stored objects in a block
-#max_objects_per_block = 49
-# Interval of saving important changes in the world, stated in seconds
-#server_map_save_interval = 5.3
-# http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2
-#sqlite_synchronous = 2
-# To reduce lag, block transfers are slowed down when a player is building something.
-# This determines how long they are slowed down after placing or removing a node.
-#full_block_send_enable_min_time_from_building = 2.0
-# Length of a server tick and the interval at which objects are generally updated over network
-#dedicated_server_step = 0.1
-# Can be set to true to disable shutting down on invalid world data
-#ignore_world_load_errors = false
-# Specifies URL from which client fetches media instead of using UDP.
-# $filename should be accessible from $remote_media$filename via cURL
-# (obviously, remote_media should end with a slash).
-# Files that are not present would be fetched the usual way.
-#remote_media =
-# Level of logging to be written to debug.txt:
-# 0 = none, 1 = errors and debug, 2 = action, 3 = info, 4 = verbose.
-#debug_log_level = 2
-# Maximum number of blocks that can be queued for loading
-#emergequeue_limit_total = 256
+# type: int
+# max_clearobjects_extra_loaded_blocks = 4096
+
+# How much the server will wait before unloading unused mapblocks.
+# Higher value is smoother, but will use more RAM.
+# type: int
+# server_unload_unused_data_timeout = 29
+
+# Maximum number of statically stored objects in a block.
+# type: int
+# max_objects_per_block = 49
+
+# See http://www.sqlite.org/pragma.html#pragma_synchronous
+# type: enum values: 0, 1, 2
+# sqlite_synchronous = 2
+
+# Length of a server tick and the interval at which objects are generally updated over network.
+# type: float
+# dedicated_server_step = 0.1
+
+# Time in between active block management cycles
+# type: float
+# active_block_mgmt_interval = 2.0
+
+# Length of time between ABM execution cycles
+# type: float
+# abm_interval = 1.0
+
+# Length of time between NodeTimer execution cycles
+# type: float
+# nodetimer_interval = 1.0
+
+# If enabled, invalid world data won't cause the server to shut down.
+# Only enable this if you know what you are doing.
+# type: bool
+# ignore_world_load_errors = false
+
+# Max liquids processed per step.
+# type: int
+# liquid_loop_max = 100000
+
+# The time (in seconds) that the liquids queue may grow beyond processing
+# capacity until an attempt is made to decrease its size by dumping old queue
+# items. A value of 0 disables the functionality.
+# type: int
+# liquid_queue_purge_time = 0
+
+# Liquid update interval in seconds.
+# type: float
+# liquid_update = 1.0
+
+## Mapgen
+
+# Name of map generator to be used when creating a new world.
+# Creating a world in the main menu will override this.
+# type: enum values: v5, v6, v7, flat, valleys, fractal, singlenode
+# mg_name = v6
+
+# Water surface level of the world.
+# type: int
+# water_level = 1
+
+# From how far blocks are generated for clients, stated in mapblocks (16 nodes).
+# type: int
+# max_block_generate_distance = 6
+
+# Where the map generator stops.
+# Please note:
+# - Limited to 31000 (setting above has no effect)
+# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).
+# - Those groups have an offset of -32, -32 nodes from the origin.
+# - Only groups which are within the map_generation_limit are generated
+# type: int min: 0 max: 31000
+# map_generation_limit = 31000
+
+# Global map generation attributes.
+# In Mapgen v6 the 'decorations' flag controls all decorations except trees
+# and junglegrass, in all other mapgens this flag controls all decorations.
+# The default flags set in the engine are: caves, light, decorations
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+# type: flags possible values: caves, dungeons, light, decorations, nocaves, nodungeons, nolight, nodecorations
+# mg_flags = caves,dungeons,light,decorations
+
+### Advanced
+
+# Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes).
+# type: int
+# chunksize = 5
+
+# Dump the mapgen debug infos.
+# type: bool
+# enable_mapgen_debug_info = false
+
+# Maximum number of blocks that can be queued for loading.
+# type: int
+# emergequeue_limit_total = 256
+
# Maximum number of blocks to be queued that are to be loaded from file.
# Set to blank for an appropriate amount to be chosen automatically.
-#emergequeue_limit_diskonly = 32
+# type: int
+# emergequeue_limit_diskonly = 32
+
# Maximum number of blocks to be queued that are to be generated.
# Set to blank for an appropriate amount to be chosen automatically.
-#emergequeue_limit_generate = 32
+# type: int
+# emergequeue_limit_generate = 32
+
# Number of emerge threads to use. Make this field blank, or increase this number
# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly
# at the cost of slightly buggy caves.
-#num_emerge_threads = 1
-# Maximum number of packets sent per send step, if you have a slow connection
-# try reducing it, but don't reduce it to a number below double of targeted
-# client number.
-#max_packets_per_iteration = 1024
+# type: int
+# num_emerge_threads = 1
-# Enable/disable IPv6
-#enable_ipv6 = true
-# Enable/disable running an IPv6 server. An IPv6 server may be restricted
-# to IPv6 clients, depending on system configuration.
-# Ignored if bind_address is set.
-#ipv6_server = false
-#main_menu_script =
-#main_menu_game_mgr = 0
-#main_menu_mod_mgr = 1
-#modstore_download_url = https://forum.minetest.net/media/
-#modstore_listmods_url = https://forum.minetest.net/mmdb/mods/
-#modstore_details_url = https://forum.minetest.net/mmdb/mod/*/
-# Makes DirectX work with LuaJIT. Disable if it causes troubles.
-#high_precision_fpu = true
-# Override language. When no value is provided (default) system language is used.
-# Check "locale" directory for the list of available translations.
-#language =
+# Noise parameters for biome API temperature, humidity and biome blend.
+# type: noise_params
+# mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0
-#
-# Physics stuff
-#
+# type: noise_params
+# mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0
-#movement_acceleration_default = 3
-#movement_acceleration_air = 2
-#movement_acceleration_fast = 10
-#movement_speed_walk = 4
-#movement_speed_crouch = 1.35
-#movement_speed_fast = 20
-#movement_speed_climb = 2
-#movement_speed_jump = 6.5
-#movement_speed_descend = 6
-#movement_liquid_fluidity = 1
-#movement_liquid_fluidity_smooth = 0.5
-#movement_liquid_sink = 10
-#movement_gravity = 9.81
+# type: noise_params
+# mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0
-#
-# Mapgen stuff
-#
+# type: noise_params
+# mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0
+
+#### Mapgen v5
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+# type: float
+# mgv5_cave_width = 0.125
+
+# type: noise_params
+# mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0
+
+# type: noise_params
+# mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0
-# Name of map generator to be used. Currently supported: v5, v6, v7, singlenode.
-#mg_name = v6
-# Water surface level of map
-#water_level = 1
-# Size of chunks to be generated, stated in mapblocks (16 nodes)
-#chunksize = 5
-# Global map generation attributes. Currently supported: trees, caves, flat, dungeons, light.
+# type: noise_params
+# mgv5_np_height = 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0
+
+# type: noise_params
+# mgv5_np_cave1 = 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0
+
+# type: noise_params
+# mgv5_np_cave2 = 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0
+
+#### Mapgen v6
+
+# Map generation attributes specific to Mapgen v6.
+# When snowbiomes are enabled jungles are automatically enabled, the 'jungles' flag is ignored.
+# The default flags set in the engine are: biomeblend, mudflow
+# The flags string modifies the engine defaults.
# Flags that are not specified in the flag string are not modified from the default.
-# To explicitly turn off a flag, prepend "no" to the beginning, e.g. nolight.
-#mg_flags = trees, caves, dungeons, light
-# Enable/disable floating dungeons and dungeon slices
-#enable_floating_dungeons = true
-
-# Map generation attributes specific to Mapgen V6.
-# Currently supported: jungles, biomeblend, mudflow, snowbiomes.
-# When snowbiomes are enabled jungles are enabled and the jungles flag is ignored.
-#mgv6_spflags = jungles, biomeblend, mudflow, snowbiomes
-# Controls size of deserts and beaches in Mapgen V6
+# Flags starting with 'no' are used to explicitly disable them.
+# type: flags possible values: jungles, biomeblend, mudflow, snowbiomes, flat, trees, nojungles, nobiomeblend, nomudflow, nosnowbiomes, noflat, notrees
+# mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes,trees
+
+# Controls size of deserts and beaches in Mapgen v6.
# When snowbiomes are enabled 'mgv6_freq_desert' is ignored.
-#mgv6_freq_desert = 0.45
-#mgv6_freq_beach = 0.15
-
-# Map generation attributes specific to Mapgen V7.
-# Currently supported: mountains, ridges.
-#mgv7_spflags = mountains, ridges
-
-# Perlin noise attributes for different map generation parameters.
-# Noise parameters can be specified as a set of positional values:
-# Offset, scale, (spread factors), seed offset, number of octaves, persistence, lacunarity.
-#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
-# Or the new group format can be used instead, for example:
-#mgv6_np_terrain_base = {
-# offset = -4
-# scale = 20
-# spread = (250, 250, 250)
-# seed = 82341
-# octaves = 5
-# persistence = 0.6
-# lacunarity = 2.0
-# flags = "defaults"
-#}
-# Only the group format supports noise flags which are needed for eased noise.
-# Mgv5 uses eased noise for np_ground so this is shown in group format,
-# other noise parameters are shown in positional format to save space.
-
-# Noise parameters for biome API temperature, humidity and biome blend
-#mg_biome_np_heat = 50, 50, (1000, 1000, 1000), 5349, 3, 0.5, 2.0
-#mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0
-#mg_biome_np_humidity = 50, 50, (1000, 1000, 1000), 842, 3, 0.5, 2.0
-#mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0
-
-#mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0
-#mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0
-#mgv5_np_height = 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0
-#mgv5_np_cave1 = 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0
-#mgv5_np_cave2 = 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0
-#mgv5_np_ground = {
-# offset = 0
-# scale = 40
-# spread = (80, 80, 80)
-# seed = 983240
-# octaves = 4
-# persistence = 0.55
-# lacunarity = 2.0
-# flags = "eased"
-#}
-
-#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
-#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0
-#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0
-#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0
-#mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0
-#mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0
-#mgv6_np_biome = 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0
-#mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0
-#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0
-#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0
-#mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0
-
-#mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0
-#mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0
-#mgv7_np_terrain_persist = 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0
-#mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0
-#mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
-#mgv7_np_mount_height = 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0
-#mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0
-#mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0
-#mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0
-#mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
-#mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+# type: float
+# mgv6_freq_desert = 0.45
+
+# type: float
+# mgv6_freq_beach = 0.15
+
+# type: noise_params
+# mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
+
+# type: noise_params
+# mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0
+
+# type: noise_params
+# mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0
+
+# type: noise_params
+# mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0
+
+# type: noise_params
+# mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0
+
+# type: noise_params
+# mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0
+
+# type: noise_params
+# mgv6_np_biome = 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0
+
+# type: noise_params
+# mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0
+
+# type: noise_params
+# mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0
+
+# type: noise_params
+# mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0
+
+# type: noise_params
+# mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0
+
+#### Mapgen v7
+
+# Map generation attributes specific to Mapgen v7.
+# The 'ridges' flag controls the rivers.
+# The default flags set in the engine are: mountains, ridges
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+# type: flags possible values: mountains, ridges, nomountains, noridges
+# mgv7_spflags = mountains,ridges
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+# type: float
+# mgv7_cave_width = 0.3
+
+# type: noise_params
+# mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0
+
+# type: noise_params
+# mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0
+
+# type: noise_params
+# mgv7_np_terrain_persist = 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0
+
+# type: noise_params
+# mgv7_np_height_select = -8, 16, (500, 500, 500), 4213, 6, 0.7, 2.0
+
+# type: noise_params
+# mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+
+# type: noise_params
+# mgv7_np_mount_height = 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0
+
+# type: noise_params
+# mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0
+
+# type: noise_params
+# mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0
+
+# type: noise_params
+# mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0
+
+# type: noise_params
+# mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
+
+# type: noise_params
+# mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+
+#### Mapgen flat
+
+# Map generation attributes specific to Mapgen flat.
+# Occasional lakes and hills can be added to the flat world.
+# The default flags set in the engine are: none
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+# type: flags possible values: lakes, hills, , nolakes, nohills
+# mgflat_spflags =
+
+# Y of flat ground.
+# type: int
+# mgflat_ground_level = 8
+
+# Y of upper limit of large pseudorandom caves.
+# type: int
+# mgflat_large_cave_depth = -33
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+# type: float
+# mgflat_cave_width = 0.3
+
+# Terrain noise threshold for lakes.
+# Controls proportion of world area covered by lakes.
+# Adjust towards 0.0 for a larger proportion.
+# type: float
+# mgflat_lake_threshold = -0.45
+
+# Controls steepness/depth of lake depressions.
+# type: float
+# mgflat_lake_steepness = 48.0
+
+# Terrain noise threshold for hills.
+# Controls proportion of world area covered by hills.
+# Adjust towards 0.0 for a larger proportion.
+# type: float
+# mgflat_hill_threshold = 0.45
+
+# Controls steepness/height of hills.
+# type: float
+# mgflat_hill_steepness = 64.0
+
+# Determines terrain shape.
+# The 3 numbers in brackets control the scale of the
+# terrain, the 3 numbers should be identical.
+# type: noise_params
+# mgflat_np_terrain = 0, 1, (600, 600, 600), 7244, 5, 0.6, 2.0
+
+# type: noise_params
+# mgflat_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+
+# type: noise_params
+# mgflat_np_cave1 = 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0
+
+# type: noise_params
+# mgflat_np_cave2 = 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0
+
+#### Mapgen fractal
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+# type: float
+# mgfractal_cave_width = 0.3
+
+# Choice of 18 fractals from 9 formulas.
+# 1 = 4D "Roundy" mandelbrot set.
+# 2 = 4D "Roundy" julia set.
+# 3 = 4D "Squarry" mandelbrot set.
+# 4 = 4D "Squarry" julia set.
+# 5 = 4D "Mandy Cousin" mandelbrot set.
+# 6 = 4D "Mandy Cousin" julia set.
+# 7 = 4D "Variation" mandelbrot set.
+# 8 = 4D "Variation" julia set.
+# 9 = 3D "Mandelbrot/Mandelbar" mandelbrot set.
+# 10 = 3D "Mandelbrot/Mandelbar" julia set.
+# 11 = 3D "Christmas Tree" mandelbrot set.
+# 12 = 3D "Christmas Tree" julia set.
+# 13 = 3D "Mandelbulb" mandelbrot set.
+# 14 = 3D "Mandelbulb" julia set.
+# 15 = 3D "Cosine Mandelbulb" mandelbrot set.
+# 16 = 3D "Cosine Mandelbulb" julia set.
+# 17 = 4D "Mandelbulb" mandelbrot set.
+# 18 = 4D "Mandelbulb" julia set.
+# type: int min: 1 max: 18
+# mgfractal_fractal = 1
+
+# Iterations of the recursive function.
+# Controls the amount of fine detail.
+# type: int
+# mgfractal_iterations = 11
+
+# Approximate (X,Y,Z) scale of fractal in nodes.
+# type: v3f
+# mgfractal_scale = (4096.0, 1024.0, 4096.0)
+
+# (X,Y,Z) offset of fractal from world centre in units of 'scale'.
+# Used to move a suitable spawn area of low land close to (0, 0).
+# The default is suitable for mandelbrot sets, it needs to be edited for julia sets.
+# Range roughly -2 to 2. Multiply by 'scale' for offset in nodes.
+# type: v3f
+# mgfractal_offset = (1.79, 0.0, 0.0)
+
+# W co-ordinate of the generated 3D slice of a 4D fractal.
+# Determines which 3D slice of the 4D shape is generated.
+# Has no effect on 3D fractals.
+# Range roughly -2 to 2.
+# type: float
+# mgfractal_slice_w = 0.0
+
+# Julia set only: X component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+# type: float
+# mgfractal_julia_x = 0.33
+
+# Julia set only: Y component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+# type: float
+# mgfractal_julia_y = 0.33
+
+# Julia set only: Z component of hypercomplex constant determining julia shape.
+# Range roughly -2 to 2.
+# type: float
+# mgfractal_julia_z = 0.33
+
+# Julia set only: W component of hypercomplex constant determining julia shape.
+# Has no effect on 3D fractals.
+# Range roughly -2 to 2.
+# type: float
+# mgfractal_julia_w = 0.33
+
+# type: noise_params
+# mgfractal_np_seabed = -14, 9, (600, 600, 600), 41900, 5, 0.6, 2.0
+
+# type: noise_params
+# mgfractal_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
+
+# type: noise_params
+# mgfractal_np_cave1 = 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0
+
+# type: noise_params
+# mgfractal_np_cave2 = 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0
+
+#### Mapgen Valleys
+
+##### General
+
+# Map generation attributes specific to Mapgen Valleys.
+# 'altitude_chill' makes higher elevations colder, which may cause biome issues.
+# 'humid_rivers' modifies the humidity around rivers and in areas where water would tend to pool,
+# it may interfere with delicately adjusted biomes.
+# The default flags set in the engine are: altitude_chill, humid_rivers
+# The flags string modifies the engine defaults.
+# Flags that are not specified in the flag string are not modified from the default.
+# Flags starting with 'no' are used to explicitly disable them.
+# type: flags possible values: altitude_chill, noaltitude_chill, humid_rivers, nohumid_rivers
+# mg_valleys_spflags = altitude_chill,humid_rivers
+
+# The altitude at which temperature drops by 20C
+# type: int
+# mgvalleys_altitude_chill = 90
+
+# Depth below which you'll find large caves.
+# type: int
+# mgvalleys_large_cave_depth = -33
+
+# Creates unpredictable lava features in caves.
+# These can make mining difficult. Zero disables them. (0-10)
+# type: int
+# mgvalleys_lava_features = 0
+
+# Depth below which you'll find massive caves.
+# type: int
+# mgvalleys_massive_cave_depth = -256
+
+# How deep to make rivers
+# type: int
+# mgvalleys_river_depth = 4
+
+# How wide to make rivers
+# type: int
+# mgvalleys_river_size = 5
+
+# Creates unpredictable water features in caves.
+# These can make mining difficult. Zero disables them. (0-10)
+# type: int
+# mgvalleys_water_features = 0
+
+# Controls width of tunnels, a smaller value creates wider tunnels.
+# type: float
+# mgvalleys_cave_width = 0.3
+
+##### Noises
+
+# Caves and tunnels form at the intersection of the two noises
+# type: noise_params
+# mgvalleys_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
+
+# Caves and tunnels form at the intersection of the two noises
+# type: noise_params
+# mgvalleys_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+
+# The depth of dirt or other filler
+# type: noise_params
+# mgvalleys_np_filler_depth = 0, 1.2, (256, 256, 256), 1605, 3, 0.5, 2.0
+
+# Massive caves form here.
+# type: noise_params
+# mgvalleys_np_massive_caves = 0, 1, (768, 256, 768), 59033, 6, 0.63, 2.0
+
+# River noise -- rivers occur close to zero
+# type: noise_params
+# mgvalleys_np_rivers = 0, 1, (256, 256, 256), -6050, 5, 0.6, 2.0
+
+# Base terrain height
+# type: noise_params
+# mgvalleys_np_terrain_height = -10, 50, (1024, 1024, 1024), 5202, 6, 0.4, 2.0
+
+# Raises terrain to make valleys around the rivers
+# type: noise_params
+# mgvalleys_np_valley_depth = 5, 4, (512, 512, 512), -1914, 1, 1.0, 2.0
+
+# Slope and fill work together to modify the heights
+# type: noise_params
+# mgvalleys_np_inter_valley_fill = 0, 1, (256, 512, 256), 1993, 6, 0.8, 2.0
+
+# Amplifies the valleys
+# type: noise_params
+# mgvalleys_np_valley_profile = 0.6, 0.5, (512, 512, 512), 777, 1, 1.0, 2.0
+
+# Slope and fill work together to modify the heights
+# type: noise_params
+# mgvalleys_np_inter_valley_slope = 0.5, 0.5, (128, 128, 128), 746, 1, 1.0, 2.0
+
+## Security
# Prevent mods from doing insecure things like running shell commands.
-#secure.enable_security = false
+# type: bool
+# secure.enable_security = false
+
# Comma-separated list of trusted mods that are allowed to access insecure
# functions even when mod security is on (via request_insecure_environment()).
-#secure.trusted_mods =
+# type: string
+# secure.trusted_mods =
+
+# Comma-seperated list of mods that are allowed to access HTTP APIs, which
+# allow them to upload and download data to/from the internet.
+# type: string
+# secure.http_mods =
+
+#
+# Client and Server
+#
+
+# Name of the player.
+# When running a server, clients connecting with this name are admins.
+# When starting from the main menu, this is overridden.
+# type: string
+# name =
+
+# Set the language. Leave empty to use the system language.
+# A restart is required after changing this.
+# type: enum values: , be, cs, da, de, eo, es, et, fr, hu, id, it, ja, jbo, ko, ky, lt, nb, nl, pl, pt, pt_BR, ro, ru, tr, uk, zh_CN, zh_TW
+# language =
+
+# Level of logging to be written to debug.txt:
+# - <nothing> (no logging)
+# - none (messages with no level)
+# - error
+# - warning
+# - action
+# - info
+# - verbose
+# type: enum values: , warning, action, info, verbose
+# debug_log_level = action
+
+# IPv6 support.
+# type: bool
+# enable_ipv6 = true
+
+## Advanced
+
+# Default timeout for cURL, stated in milliseconds.
+# Only has an effect if compiled with cURL.
+# type: int
+# curl_timeout = 5000
+
+# Limits number of parallel HTTP requests. Affects:
+# - Media fetch if server uses remote_media setting.
+# - Serverlist download and server announcement.
+# - Downloads performed by main menu (e.g. mod manager).
+# Only has an effect if compiled with cURL.
+# type: int
+# curl_parallel_limit = 8
+
+# Maximum time in ms a file download (e.g. a mod download) may take.
+# type: int
+# curl_file_download_timeout = 300000
+
+# Makes DirectX work with LuaJIT. Disable if it causes troubles.
+# type: bool
+# high_precision_fpu = true
+
+# Replaces the default main menu with a custom one.
+# type: string
+# main_menu_script =
+
+# type: int
+# main_menu_game_mgr = 0
+
+# type: int
+# main_menu_mod_mgr = 1
+
+# type: string
+# modstore_download_url = https://forum.minetest.net/media/
+
+# type: string
+# modstore_listmods_url = https://forum.minetest.net/mmdb/mods/
+
+# type: string
+# modstore_details_url = https://forum.minetest.net/mmdb/mod/*/
+
diff --git a/misc/minetest.appdata.xml b/misc/minetest.appdata.xml
index 6ef8b7f62..19d042805 100644
--- a/misc/minetest.appdata.xml
+++ b/misc/minetest.appdata.xml
@@ -28,8 +28,9 @@
</ul>
</description>
<screenshots>
- <screenshot type="default" width="1440" height="851">http://minetest.net/_media/screen2.png</screenshot>
- <screenshot width="1440" height="851">http://minetest.net/_media/screenshot_4032289578.png</screenshot>
+ <screenshot type="default" width="1920" height="1080">http://www.minetest.net/media/gallery/1.jpg</screenshot>
+ <screenshot width="1920" height="1080">http://www.minetest.net/media/gallery/3.jpg</screenshot>
+ <screenshot width="1920" height="1080">http://www.minetest.net/media/gallery/5.jpg</screenshot>
</screenshots>
<url type="homepage">http://minetest.net</url>
<updatecontact>sfan5@live.de</updatecontact>
diff --git a/misc/minetest.desktop b/misc/minetest.desktop
index 4257cef37..1d2430a2c 100644
--- a/misc/minetest.desktop
+++ b/misc/minetest.desktop
@@ -9,7 +9,7 @@ Comment[ja]=マルãƒãƒ—レイã«å¯¾å¿œã—ãŸã€ç„¡é™ã®ä¸–ç•Œã®ãƒ–ロックåž
Comment[ru]=Игра-пеÑочница Ñ Ð±ÐµÐ·Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð½Ñ‹Ð¼ миром, ÑоÑтоÑщим из блоков
Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et
Exec=minetest
-Icon=minetest-icon
+Icon=minetest
Terminal=false
Type=Application
Categories=Game;
diff --git a/misc/minetest-icon.svg b/misc/minetest.svg
index 46c9ac702..fe036c3dd 100644
--- a/misc/minetest-icon.svg
+++ b/misc/minetest.svg
@@ -14,7 +14,7 @@
id="svg2856"
version="1.1"
inkscape:version="0.47 r22583"
- sodipodi:docname="minetest-icon.svg"
+ sodipodi:docname="minetest.svg"
inkscape:export-filename="/home/erlehmann/pics/icons/minetest/minetest-icon-24x24.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45">
diff --git a/po/be/minetest.po b/po/be/minetest.po
index daddc00ac..c8a707a8f 100644
--- a/po/be/minetest.po
+++ b/po/be/minetest.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
"PO-Revision-Date: 2013-11-23 17:37+0100\n"
"Last-Translator: Selat <LongExampleTestName@gmail.com>\n"
"Language-Team: Belarusian\n"
@@ -15,615 +15,759 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr ""
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr ""
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
-msgid "Loading..."
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
msgstr ""
-#: builtin/mainmenu/common.lua:240
-msgid "Try reenabling public serverlist and check your internet connection."
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-msgid "Hide Game"
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
-msgid "Save"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:116
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No worldname given or no game selected"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: 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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
msgstr ""
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
msgstr ""
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: builtin/mainmenu/store.lua
+msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
msgstr ""
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:30
-msgid "Installed Mods:"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:78
-msgid "No mod description available"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
-msgid "Connect"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-msgid "Creative mode"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-msgid "Damage enabled"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
-msgid "Creative Mode"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
-msgid "Enable Damage"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
-msgid "Name/Password"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
-msgid "Port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
+#: builtin/mainmenu/tab_server.lua
msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
-msgid "Bilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:44
-msgid "Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
-msgid "Mipmap + Aniso. Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:212
+#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
-msgid "Shaders"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
-msgid "Waving Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
-msgid "Waving Plants"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr ""
-#: src/client.cpp:1721
-msgid "Loading textures..."
+#: src/client.cpp
+msgid "Connection timed out."
msgstr ""
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
+#: src/client.cpp
+msgid "Done!"
msgstr ""
-#: src/client.cpp:1743
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client.cpp
msgid "Initializing nodes..."
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/client.cpp
+msgid "Loading textures..."
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
msgstr ""
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
msgstr ""
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
msgstr ""
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
msgstr ""
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/game.cpp
+msgid "Change Keys"
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Change Password"
msgstr ""
-#: src/game.cpp:1072
-msgid "You died."
+#: src/game.cpp
+msgid "Connecting to server..."
msgstr ""
-#: src/game.cpp:1073
-msgid "Respawn"
+#: src/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
msgstr ""
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -639,503 +783,3248 @@ msgid ""
" --> place single item to slot\n"
msgstr ""
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
+#: src/game.cpp
+msgid "Exit to Menu"
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
+#: src/game.cpp
+msgid "Exit to OS"
msgstr ""
-#: src/game.cpp:1129
-msgid "Change Password"
+#: src/game.cpp
+msgid "Item definitions..."
msgstr ""
-#: src/game.cpp:1134
-msgid "Sound Volume"
+#: src/game.cpp
+msgid "KiB/s"
msgstr ""
-#: src/game.cpp:1136
-msgid "Change Keys"
+#: src/game.cpp
+msgid "Media..."
msgstr ""
-#: src/game.cpp:1139
-msgid "Exit to Menu"
+#: src/game.cpp
+msgid "MiB/s"
msgstr ""
-#: src/game.cpp:1141
-msgid "Exit to OS"
+#: src/game.cpp
+msgid "Node definitions..."
msgstr ""
-#: src/game.cpp:1841
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr ""
+
+#: src/game.cpp
msgid "Shutting down..."
msgstr ""
-#: src/game.cpp:1948
-msgid "Creating server..."
+#: src/game.cpp
+msgid "Sound Volume"
msgstr ""
-#: src/game.cpp:1984
-msgid "Creating client..."
+#: src/game.cpp
+msgid "You died."
msgstr ""
-#: src/game.cpp:2159
-msgid "Resolving address..."
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
msgstr ""
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
msgstr ""
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
+#: src/guiKeyChangeMenu.cpp
msgid "Key already in use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
msgid "Right"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
msgid "Use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
+#: src/guiPasswordChange.cpp
+msgid "Change"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
+#: src/guiVolumeChange.cpp
+msgid "Exit"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
+#: src/keycode.cpp
+msgid "Apps"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
+#: src/keycode.cpp
+msgid "Attn"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
+#: src/keycode.cpp
+msgid "Back"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
+#: src/keycode.cpp
+msgid "Capital"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
+#: src/keycode.cpp
+msgid "Clear"
msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
+#: src/keycode.cpp
+msgid "Comma"
msgstr ""
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
+#: src/keycode.cpp
+msgid "Control"
msgstr ""
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
+#: src/keycode.cpp
+msgid "Convert"
msgstr ""
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
+#: src/keycode.cpp
+msgid "CrSel"
msgstr ""
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
+#: src/keycode.cpp
+msgid "Down"
msgstr ""
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
+#: src/keycode.cpp
+msgid "End"
msgstr ""
-#: src/guiVolumeChange.cpp:119
-msgid "Exit"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "ExSel"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Left Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Middle Button"
msgstr ""
-#: src/keycode.cpp:223
-msgid "Right Button"
+#: src/keycode.cpp
+msgid "Minus"
msgstr ""
-#: src/keycode.cpp:223
-msgid "X Button 1"
+#: src/keycode.cpp
+msgid "Mode Change"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Back"
+#: src/keycode.cpp
+msgid "Next"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Clear"
+#: src/keycode.cpp
+msgid "Nonconvert"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Return"
+#: src/keycode.cpp
+msgid "Num Lock"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Tab"
+#: src/keycode.cpp
+msgid "Numpad *"
msgstr ""
-#: src/keycode.cpp:224
-msgid "X Button 2"
+#: src/keycode.cpp
+msgid "Numpad +"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Capital"
+#: src/keycode.cpp
+msgid "Numpad -"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Control"
+#: src/keycode.cpp
+msgid "Numpad /"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Kana"
+#: src/keycode.cpp
+msgid "Numpad 0"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Menu"
+#: src/keycode.cpp
+msgid "Numpad 1"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
+#: src/keycode.cpp
+msgid "Numpad 2"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Shift"
+#: src/keycode.cpp
+msgid "Numpad 3"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Convert"
+#: src/keycode.cpp
+msgid "Numpad 4"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Escape"
+#: src/keycode.cpp
+msgid "Numpad 5"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Final"
+#: src/keycode.cpp
+msgid "Numpad 6"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Junja"
+#: src/keycode.cpp
+msgid "Numpad 7"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
+#: src/keycode.cpp
+msgid "Numpad 8"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Nonconvert"
+#: src/keycode.cpp
+msgid "Numpad 9"
msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
+#: src/keycode.cpp
+msgid "OEM Clear"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Home"
+#: src/keycode.cpp
+msgid "PA1"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Mode Change"
+#: src/keycode.cpp
+msgid "Pause"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Next"
+#: src/keycode.cpp
+msgid "Period"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
+msgid "Plus"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Prior"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Space"
+#: src/keycode.cpp
+msgid "Return"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Down"
+#: src/keycode.cpp
+msgid "Right Button"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Execute"
+#: src/keycode.cpp
+msgid "Right Control"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Print"
+#: src/keycode.cpp
+msgid "Right Menu"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Select"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Up"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
+#: src/keycode.cpp
+msgid "X Button 1"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Insert"
+#: src/keycode.cpp
+msgid "X Button 2"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Snapshot"
+#: src/keycode.cpp
+msgid "Zoom"
msgstr ""
-#: src/keycode.cpp:232
-msgid "Left Windows"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Apps"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 0"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 1"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Right Windows"
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Sleep"
+#: 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/keycode.cpp:234
-msgid "Numpad 2"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 3"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 5"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 6"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 7"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad *"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad +"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad -"
+#: 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/keycode.cpp:235
-msgid "Numpad /"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 8"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 9"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Num Lock"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Right Shift"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Control"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Menu"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Control"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Menu"
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Comma"
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Minus"
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Period"
+#: src/settings_translation_file.cpp
+msgid "Backward key"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Plus"
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
msgstr ""
-#: src/keycode.cpp:247
-msgid "Attn"
+#: src/settings_translation_file.cpp
+msgid "Basic"
msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Erase OEF"
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
+#: src/settings_translation_file.cpp
+msgid "Bind address"
msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Zoom"
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
msgstr ""
diff --git a/po/ca/minetest.po b/po/ca/minetest.po
new file mode 100644
index 000000000..c81cfa76e
--- /dev/null
+++ b/po/ca/minetest.po
@@ -0,0 +1,4214 @@
+# Catalan translations for minetest package.
+# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# Automatically generated, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-04-20 13:21+0000\n"
+"Last-Translator: Joan Ciprià Moreno Teodoro <joancipria@gmail.com>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/minetest/"
+"minetest/ca/>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.6-dev\n"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured in a Lua script, such as a mod:"
+msgstr "S'ha produït un error en un script Lua, com per exemple un mod :"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured:"
+msgstr "Ha ocorregut un error:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menú principal"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
+msgid "Ok"
+msgstr "D'acord"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Torneu a connectar"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "El servidor ha sol·licitat una reconnexió:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
+msgstr "Carregant ..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Desajust de la versió del protocol. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "El servidor fa complir la versió $1 del protocol. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+"El servidor es compatible amb les versions de protocol entre $ 1 i $ 2 . "
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+"Intenta tornar a habilitar la llista de servidors públics i comprovi la seva "
+"connexió a Internet ."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Nosaltres sols suportem la versió $1 del protocol."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Nosaltres suportem versions del protocol entre la versió $1 i la $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dependències:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Desactivar MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Activar MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Activar tot"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Error al habilitar el mod \"$1\" perquè conté caràcters no permesos. Només "
+"estan permesos els caràcters [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "Ocultar Joc"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr "Ocultar contingut MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Mod:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Guardar"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Món:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "Activat"
+
+#: 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 "Create"
+msgstr "Crear"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr ""
+"Descarrega un subjoc, com per exemple minetest_game, des de minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Descarrega'n alguns des de minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Joc"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generador de mapes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "No s'ha donat un nom al món o no s'ha seleccionat ningun"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Llavor"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ""
+"Advertència: El joc \"Minimal development test\" esta dissenyat per a "
+"desenvolupadors."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nom del món"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "No tens subjocs instal·lats."
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Realment desitja esborrar \"$1\"?"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Esborrar"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr "Modmgr: Error al esborrar \"$1\""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr "Modmgr: Ruta del mod \"$1\" invàlida"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Eliminar el món \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Acceptar"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Reanomenar el paquet de mods:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" no és un indicador vàlid."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Cap descripció d'ajustament donada)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Torna a la pàgina de configuració"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Navegar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Desactivat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Editar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Activat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"El format és 3 números separats per comes i aquests dins de parèntesis."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Format: <offset> <escala> (<extensió X>, <extensió Y> , <extensión Z>), "
+"<llavor>, <octaves>, <persistència>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Jocs"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Si us plau, introduïu una llista d'indicadors separada per comes."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Si us plau, introduïu un enter vàlid."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Si us plau, introduïu un nombre vàlid."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Els possibles valors són: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Restablir per defecte"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Seleccioneu la ruta"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Mostrar els noms tècnics"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "El valor ha de ser major que $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "El valor ha de ser menor que $1."
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
+msgstr ""
+"\n"
+"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "Error al instal·lar $1 en $2"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instal·lar mod: Arxiu: \"$1\""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr "Instal·lar mod: Impossible trobar el nom real del mod per a: $1"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Instal·lar mod: Impossible de trobar el nom de la carpeta adequat per al "
+"paquet de mods $1"
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Tancar repositori"
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr "Descarregant $1, si us plau esperi ..."
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instal·lar"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Pàgina $1 de $2"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "Classificació"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Buscar"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nom curt:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Instal·lat amb èxit:"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Sense ordenar"
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Reinstal·lar"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Col·laboradors Actius"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Desenvolupadors del nucli"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Crèdits"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Antics Col·laboradors"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Antics Desenvolupadors del nucli"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr "Mods Instal·lats:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informació del mod:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr "Cap descripció del mod disponible"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr "Reanomenar"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Selecciona el fitxer del mod:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Desinstal·lar el mod seleccionat"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Desinstal·lar el paquet de mods seleccionat"
+
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
+msgstr "Adreça / Port:"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Client"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "Connectar"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "Mode creatiu"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "Dany activat"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nom / Contrasenya:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP activat"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Adreça BIND"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Configurar"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "Mode Creatiu"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr "Permetre Danys"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "Nom/Contrasenya"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nou"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "No s'ha creat ningun món o no s'ha seleccionat!"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
+msgstr "Port"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Públic"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Seleccionar un món:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "Servidor"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port del Servidor"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Començar Joc"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Núvols 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Advanced Settings"
+msgstr "Configuració"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Suavitzat (Antialiasing):"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Esteu segur que voleu reiniciar el seu món d'un sol jugador?"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "Filtre Bilineal"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Mapat de relleu"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Configurar controls"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Connectar"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Fulles Boniques"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr "Mipmap"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "Mipmap + Aniso. Filtre"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "No"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Sense Filtre"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Sense MipMap"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Node ressaltat"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Node ressaltat"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Ningun"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Fulles opaques"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Aigua opaca"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Oclusió de paral·laxi"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Activar tot"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Configuració"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "Ombres"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Fulles senzilles"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Il·luminació suau"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturització:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Per habilitar les ombres el controlador OpenGL ha ser utilitzat."
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
+msgstr "Llindar tàctil (px)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtratge Trilineal"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr "Moviment de les Fulles"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr "Moviment de Plantes"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Onatge"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Sí"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "Configurar mods"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "Principal"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Començar Un Jugador"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "Jugar"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "Un jugador"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "Sense informació disponible"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selecciona un paquet de textures:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Textures"
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Temps d'espera de la connexió esgotat."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Completat!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Inicialitzant nodes"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicialitzant nodes ..."
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Carregant textures ..."
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Reconstruint ombreig ..."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Error de connexió (¿temps esgotat?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "No es pot trobar o carregar el joc \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "El Joc especificat no és vàlid."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menú principal"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Cap món seleccionat i cap adreça facilitada. Res a fer."
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nom del jugador massa llarg."
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "La ruta del món especificat no existeix: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Comprovi debug.txt per a detalls."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Configurar Controls"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Canviar contrasenya"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Connectant al servidor ..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Continuar"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Creant client ..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Creant servidor ..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Controls predeterminats:\n"
+"- WASD: moure\n"
+"- Espai: botar / pujar\n"
+"- Maj .: puntetes / baixar\n"
+"- Q: deixar anar objecte\n"
+"- I: inventari\n"
+"- Ratolí: girar / mirar\n"
+"- Ratolí esq .: excavar / colpejar\n"
+"- Ratolí dre .: col·locar / utilitzar\n"
+"- Roda ratolí: triar objecte\n"
+"- T: xat\n"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Controls predeterminats:\n"
+"Amb el menú ocult:\n"
+"- Toc simple: botó activar\n"
+"- Toc doble: posar / utilitzar\n"
+"- Lliscar dit: mirar al voltant\n"
+"Amb el menú / inventari visible:\n"
+"- Toc doble (fora):\n"
+" -> tancar\n"
+"- Toc a la pila d'objectes:\n"
+" -> moure la pila\n"
+"- Toc i arrossegar, toc amb 2 dits:\n"
+" -> col·locar només un objecte\n"
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr "Eixir al menú"
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "Eixir al S.O"
+
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definicions d'objectes ..."
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/game.cpp
+msgid "Media..."
+msgstr "Media ..."
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Definicions dels nodes ..."
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Resolent adreça ..."
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Reaparèixer"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Tancant ..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volum del so"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "Has mort."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "Acceptar"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Introdueix "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Continuar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "\"Utilitzar\" = Descendir"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Arrere"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Xat"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comandament"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Consola"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Dos tocs \"botar\" per volar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Amollar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Avant"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventari"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Botar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "La tecla s'està utilitzant"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Combinacions de tecles. (Si aquest menú espatlla, esborrar coses de minetest."
+"conf)"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Esquerra"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Imprimir piles"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Seleccionar distancia"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Dreta"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Discreció"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Activar Cinematogràfic"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Activar ràpid"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Activar volar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "Activar noclip"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Utilitzar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "Premsa una tecla"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Canviar"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirma contrasenya"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nova contrasenya"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Contrasenya vella"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Les contrasenyes no coincideixen!"
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "Tancar"
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volum de so: "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplicacions"
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Atentament"
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr "Enrere"
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Bloq Maj"
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "Netejar"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Coma"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr "Control"
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convertir"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "CrSel"
+msgstr "CrSel"
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Avall"
+
+#: src/keycode.cpp
+msgid "End"
+msgstr "Fi"
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Esborrar OEF"
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr "Esc"
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Executar"
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr "Fi"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Inici"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Introduir"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Junja"
+msgstr "Junja"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Kanji"
+msgstr "Kanji"
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Botó esquerre"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Control esq"
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menú esq"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift esq"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Windows esquerre"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menú"
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Botó del mig"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Menys"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Canvi de mode"
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Següent"
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "No convertir"
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Bloq Num"
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Teclat Num. *"
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Teclat Num. +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Teclat Num. -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Teclat Num. /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "Teclat Num. 0"
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "Teclat Num. 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "Teclat Num. 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "Teclat Num. 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "Teclat Num. 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "Teclat Num. 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "Teclat Num. 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "Teclat Num. 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "Teclat Num. 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "Teclat Num. 9"
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Netejar OEM"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "PA1"
+msgstr "PA1"
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pausa"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Període"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Més"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Anterior"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Tornar"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Botó dret"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "Control dta"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "Menú dta"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift Dta"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Windows dret"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Bloq Despl"
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Seleccionar"
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Dormir"
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Captura de pantalla"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Espai"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulador"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Amunt"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Botó 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Botó 2"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Zoom"
+msgstr "Zoom"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"(X, Y, Z) compensar de fractal del món centre en unitats d \"escala\".\n"
+"Solia passar un adequat respawn de terra baixa a prop de (0, 0).\n"
+"L'omissió és adequat per als conjunts de mandelbrot, que necessita ser "
+"editats per julia estableix.\n"
+"Gamma aproximadament -2 a 2. Multiplicar per el \"escala\" per a òfset de "
+"nodes."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = oclusió de la paral.laxi amb informació d'inclinació (més ràpid).\n"
+"1 = mapa de relleu (més lent, més precís)."
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Núvols 3D"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Mode 3D"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Suport 3D.\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"
+"- pageflip: quadbuffer based 3d."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"Elegeix una llavor per al nou mapa, deixa buit per a una llavor a l'atzar.\n"
+"Serà anul·lat si es crea un nou món al menú principal."
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Un missatge que es mostrarà a tots els clients quan el servidor s'estavella."
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Un missatge que es mostrarà a tots els clients quan el servidor s'apaga."
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Límit absolut de cues emergents"
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Acceleració en l'aire"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "Rang del bloc actiu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "Rang del bloc actiu"
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Rang del bloc actiu"
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Rang d'enviament de l'objecte actiu"
+
+#: 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 ""
+"Adreça a connectar-se.\n"
+"Deixar aquest espai en buit per començar un servidor local.\n"
+"Tingueu en compte que el camp d'adreça en el menú principal invalida aquest "
+"paràmetre."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Ajustar la configuració de punts per polsada (dpi) a la teva pantalla (no "
+"X11/Sols Android) Ex. per a pantalles amb 4K."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avançat"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Fred d'altitud"
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Sempre volar y ràpid"
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Gamma d'oclusió d'ambient"
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Amplifica les valls"
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtrat anisotròpic"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Anunciar servidor"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Anunciar a aquesta llista de servidors.\n"
+"Si vols anunciar el teu direcció ipv6, fes servir serverlist_url = v6."
+"servers.minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Aproximar (X, Y, Z) escala del fractal en els nodes."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Preguntar per tornar a connectar després d'una caiguda"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Automàticament informar a la llista del servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Tecla de retrocés"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Alçada del terreny base"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Bàsic"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Basic Privileges"
+msgstr "Privilegis per defecte"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtre bilineal"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Adreça BIND"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bits per píxel (profunditat de color) en el mode de pantalla completa."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Construir dins el jugador"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Mapat de relleu"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Suavitzat de la càmera"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Suavitzat de la càmera en mode cinematogràfic"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tecla alternativa per a l'actualització de la càmera"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Soroll de cova #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Soroll de cova #2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Coves i túnels es formen en la intersecció dels dos sorolls"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tecla del xat"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tecla alternativa per al xat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Selecció de 18 fractals de 9 fórmules.\n"
+"1 = 4D \"Roundy\" mandelbrot set.\n"
+"2 = 4D \"Roundy\" julia set.\n"
+"3 = 4D \"Squarry\" mandelbrot set.\n"
+"4 = 4D \"Squarry\" julia set.\n"
+"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" julia set.\n"
+"7 = 4D \"Variation\" mandelbrot set.\n"
+"8 = 4D \"Variation\" julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
+"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" julia set.\n"
+"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
+"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" julia set."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Mida del chunk"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Mode cinematogràfic"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tecla mode cinematogràfic"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Netejar textures transparents"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Client i Servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Velocitat d'escalada"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Alçada del núvol"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Radi del núvol"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Núvols"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Els núvols són un efecte de costat del client."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Núvols en el menú"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Boira de color"
+
+#: 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 ""
+"Llista de mods de fiar separada per comes que tenen permís per accedir a "
+"funcions\n"
+"insegures fins i tot quan \"mod security\" està activat (via "
+"request_insecure_environment ())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Llista de mods separada per comes que tenen permís per accedir a les APIs "
+"HTTP,\n"
+"les quals els permeten pujar/descarregar informació de/cap a internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tecla comandament"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Connectar vidre"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Connectar a servidor de mitjans externs"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Connecta vidre si el node ho admet."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Consola Alpha"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Color de la consola"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tecla de la consola"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Avanç continu"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Avanç continu (sols utilitzat per a testing)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Controls"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Controla la duració del cicle dia/nit.\n"
+"Exemples: 72 = 20min, 360 = 4min, 1 = 24hora, 0 = dia/nit/el que sigui es "
+"queda inalterat."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Controla la mida dels deserts i platges a Mapgen v6.\n"
+"Quan \"snowbiomes\" estan activats 'mgv6_freq_desert' és ignorat."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controla el pendent o la profunditat de les depressions de llac."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controla la pendent i alçada dels turons."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Missatge d'error"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea característiques imprevisibles de la lava en coves.\n"
+"Aquestes poden fer difícil minar. Zero els inhabilita (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea característiques imprevisibles de l'aigua en coves.\n"
+"Aquestes poden fer difícil minar. Zero els inhabilita (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Punt de mira Alpha"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Color del punt de mira"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Color del punt de mira (R, G, B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Velocitat al ajupir-se"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI (punts per polsada)"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Dany"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Tecla alternativa per a la informació de la depuració"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Nivell de registre de depuració"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Pas de servidor dedicat"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Acceleració per defecte"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Joc per defecte"
+
+#: 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 ""
+"Joc per defecte en crear un nou món.\n"
+"Aço será invalid quan es cree un món des del menú principal."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Contrasenya per defecte"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilegis per defecte"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Temporització per defecte per a cURL, manifestat en mil·lisegons.\n"
+"Només té un efecte si és compilat amb cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+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 "Polsar dues vegades \"botar\" per volar"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Polsar dues vegades \"botar\" per alternar el mode de vol."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Activar MP"
+
+#: 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 "Habilitar l'entrada aleatòria d'usuari (només utilitzat per testing)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Moviment ràpid"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Moviment ràpid (via utilitzar clau).\n"
+"Això requereix el \"privilegi\" ràpid en el servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Tecla Avançar"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Mods"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Tecla Inventari"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Invertir ratolí"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Invertir moviment vertical del ratolí."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Tecla botar"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per obrir el inventari.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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
+#, fuzzy
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per obrir el inventari.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per botar.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per moure el jugador cap arrere.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per moure avant al jugador.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per moure el jugador cap a l'esquerra.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per moure el jugador cap a la dreta.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla per obrir el inventari.\n"
+"Veure http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Utilitzar la tecla \"utilitzar\" per escalar/descendir"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+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 "Tecla esquerra"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Menú principal del gestor de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Generador de mapes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Generador de mapes"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Generador de mapes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Generador de mapes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Sensibilitat del ratolí"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Multiplicador de sensibilitat del ratolí."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Entrada aleatòria"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Tecla dreta"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Interval de repetició del click dret"
+
+#: 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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Suavitza la càmera quan estiga movent-se i mirant al seu voltant.\n"
+"Útil per a la gravació de vídeos."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+"Suavitza la rotació de la càmera en mode cinematogràfic. 0 per deshabilitar."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Suavitza la rotació de la càmera. 0 per deshabilitar."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Tecla sigil"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"El temps en segons que es pren entre la repetició de clicks drets quan "
+"s'està mantenint el botó dret del ratolí."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Utilitza la tecla"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Textures de objectes ..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 "No!!!"
+#~ msgstr "No!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generar Mapes Normals"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Llista de servidors públics"
+
+#~ msgid "No of course not!"
+#~ msgstr "No, per descomptat que no!"
diff --git a/po/cs/minetest.po b/po/cs/minetest.po
index 4fcaab18a..a3d57a4d3 100644
--- a/po/cs/minetest.po
+++ b/po/cs/minetest.po
@@ -7,173 +7,292 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-02-12 16:16+0100\n"
-"Last-Translator: Jakub Vanek <vanek.jakub4@seznam.cz>\n"
-"Language-Team: Czech <>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-03-04 04:45+0000\n"
+"Last-Translator: Jakub Vaněk <vanek.jakub4@seznam.cz>\n"
+"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
+"cs/>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 2.5-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Nastala chyba v Lua skriptu, což může být např. mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Nastala chyba:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Hlavní nabídka"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Znovu se připojit"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Server vyžaduje znovupřipojení se:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Nahrávám..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Neshoda verze protokolu. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Server vyžaduje protokol verze $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Server podporuje verze protokolů mezi $1 a $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové "
+"připojení."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Podporujeme pouze protokol verze $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Podporujeme verze protokolů mezi $1 a $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Zrušit"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Svět:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Závislosti:"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Zakázat balíÄek"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Povolit balíÄek"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Povolit vše"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Nepodařilo se povolit mod \"$1\" protože obsahuje nepovolené znaky. Povoleny "
+"jsou pouze znaky a-z, 0-9."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Skrýt vnitřní"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Skrýt obsahy balíÄků"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Závislosti:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Uložit"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Povolit balíÄek"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Zakázat balíÄek"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Svět:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "povoleno"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Povolit vše"
+#: 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:50
-msgid "World name"
-msgstr "Název světa"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Vytvořit"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seedové Äíslo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Stáhněte si z minetest.net podhru, například minetest_game"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Generátor mapy"
+#: 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:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Hra"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Vytvořit"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generátor mapy"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "Nemáte nainstalované žádné podhry."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Nebyla vybrána podhra nebo název"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Stáhněte si jednu z minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seedové Äíslo"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Stáhněte si z minetest.net podhru, například minetest_game."
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Svět s názvem \"$1\" už existuje"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Název světa"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Nebyla vybrána podhra nebo název"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Nemáte nainstalované žádné podhry."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "SkuteÄnÄ› chcete odstranit \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ano"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Jistě že ne!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Smazat"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Nepodařilo se odstranit \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Neplatná cesta k modu \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Doopravdy chcete smazat svět \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Ne"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Přijmout"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "PÅ™ejmenovat balíÄek modů:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Přijmout"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" není platný příznak."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Instalace modu: ze souboru: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Nebyl zadán popis nastavení)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Procházet"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Zakázáno"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Upravit"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Povoleno"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Formát jsou tÅ™i Äísla uvnitÅ™ závorek oddÄ›lená Äárkami."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formát: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Hry"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mody"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "Lakunarita může být specifikována spolu s pÅ™edcházející Äárkou."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Prosím zadejte Äárkami oddÄ›lený seznam vlajek."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Prosím zadejte platné celé Äíslo."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Zadejte prosím platné Äíslo."
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Možné hodnoty jsou: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Obnovit výchozí"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Vyberte cestu"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Zobrazit technické názvy"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Hodnota musí být větší než $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Hodnota musí být nižší než $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -181,461 +300,517 @@ msgstr ""
"\n"
"Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Selhala instalace $1 do $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Instalace modu: nenalezen vhodný adresář s přísluÅ¡ným názvem pro balíÄek $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instalace modu: ze souboru: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Instalace modu: nenaÅ¡el jsem skuteÄné jméno modu: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Neřazené"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Instalace modu: nenalezen vhodný adresář s přísluÅ¡ným názvem pro balíÄek $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Hledání"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Zavřít obchod"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "Stahuji $1, prosím Äekejte..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Úspěšně nainstalováno:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instalovat"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Zkratka:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Strana $1 z $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Hodnocení"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Přeinstalovat"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instalovat"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Hledání"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Zavřít obchod"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Zkratka:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Strana $1 z $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Úspěšně nainstalováno:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Autoři"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Neřazené"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Vývojáři jádra"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Přeinstalovat"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Aktivní přispěvatelé"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
-msgstr "Vývojáři jádra"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "KlíÄoví vývojáři"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Autoři"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Bývalí přispěvatelé"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Bývalí klíÄoví vývojáři"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Nainstalované mody:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Online repozitář modů"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informace o modu:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Popis modu není dostupný"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Informace o modu:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Přejmenovat"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Odinstalovat oznaÄený balíÄek"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Vybrat soubor s modem:"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr "Odinstalovat vybraný mod"
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
-msgstr "Vybrat soubor s modem:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mody"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Odinstalovat oznaÄený balíÄek"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
msgstr "Adresa / Port :"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Jméno / Heslo :"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Seznam veřejných serverů"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Smazat"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Klient"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Připojit"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Kreativní mód"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Poškození povoleno"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Oblíbené:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Oblíbené:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Jméno / Heslo :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP povoleno"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Klient"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nový"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Svázat adresu"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Nastavit"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Spustit hru"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Vyber svět:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Kreativní mód"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Povolit poškození"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Veřejný"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Jméno/Heslo"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "Svázat adresu"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nový"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Žádný svět nebyl vytvořen ani vybrán!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Port serveru"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Veřejný"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Nebyla vybrána podhra nebo název"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Vyber svět:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Neprůhledná voda"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port serveru"
-#: builtin/mainmenu/tab_settings.lua:22
-#, fuzzy
-msgid "Simple Leaves"
-msgstr "Vlnění listů"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Spustit hru"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Ozdobné stromy"
+msgid "3D Clouds"
+msgstr "3D mraky"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Žádný filtr"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "PokroÄilá nastavení"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+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 "Bilinear Filter"
-msgstr "Bilineární filtr"
+msgstr "Bilineární filtrování"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Trilineární filtr"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Bump mapování"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Žádné Mipmapy"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Změnit nastavení kláves"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Propojené sklo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Vícevrstevné listí"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmapa"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "Mipmapa + Anizo. filtr"
-#: builtin/mainmenu/tab_settings.lua:98
-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
+msgid "No"
+msgstr "Ne"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Ne!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Žádné filtr"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Plynulé osvětlení"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Žádné Mipmapy"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Povolit Äástice"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Zvýraznění bloků"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D mraky"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Zvýraznění bloků"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Neprůhledná voda"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Žádný"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Propojené sklo"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Tone mapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Zvýraznění bloků"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Neprůhledné listí"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Texturování:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Neprůhledná voda"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Parallax Occlusion"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Renderování:"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Povolit Äástice"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Aby se zmÄ›na ovladaÄe projevila, restartujte Minetest."
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Nastavení"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shadery"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Změnit nastavení kláves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Jednoduché listí"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Reset místního světa"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Plynulé osvětlení"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Měřítko GUI"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturování:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Měřítko aplikované na prvky menu: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Pro povolení shaderů musíte používat OpenGL ovladaÄ."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Středový kurzor"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Tone mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "Dosah dotyku (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Bump mapování"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Generovat normálové mapy"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Vlnění vody"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "Trilineární filtrování"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
msgstr "Vlnění listů"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
msgstr "Vlnění rostlin"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Pro povolení shaderů musíte používat OpenGL ovladaÄ."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Nastavení"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Water"
+msgstr "Vlnění vody"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Start místní hry"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ano"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Nastavení modů"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Hlavní nabídka"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Start místní hry"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Hrát"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Místní hra"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Vyberte balíÄek textur:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Informace nejsou dostupné"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Vyberte balíÄek textur:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "BalíÄky textur"
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "VyprÅ¡el Äasový limit pÅ™ipojení."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Hotovo!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Inicializuji bloky"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Vytvářím bloky..."
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr "NaÄítám textury..."
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr "Sestavuji shadery..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Inicializuji bloky..."
-
-#: src/client.cpp:1760
-#, fuzzy
-msgid "Initializing nodes"
-msgstr "Inicializuji bloky..."
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Chyba spojení (vyprÅ¡el Äas?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Textury věcí..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Hru nebylo možné nahrát nebo najít \""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Hotovo!"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Neplatná specifikace hry."
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Hlavní nabídka"
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Jméno hráÄe je příliÅ¡ dlouhé."
-
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Chyba spojení (vyprÅ¡el Äas?)"
-
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat."
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Jméno hráÄe je příliÅ¡ dlouhé."
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "Uvedená cesta ke světu neexistuje: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Hru nebylo možné nahrát nebo najít \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Neplatná specifikace hry."
-
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Pro detaily se podívejte do debug.txt."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Změnit klávesy"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Změnit heslo"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Připojuji se k serveru..."
+
+#: src/game.cpp
+msgid "Continue"
msgstr "PokraÄovat"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Zemřel jsi."
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Vytvářím klienta..."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Znovu stvořit"
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Vytvářím server..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Výchozí ovládání:\n"
+"- WASD: pohyb\n"
+"- Mezera: skákání/šplhání\n"
+"- Shift: plížení\n"
+"- Q: zahodit věc\n"
+"- I: inventář\n"
+"- MyÅ¡: otáÄení,rozhlížení\n"
+"- Myš(levé tl.): kopat, štípat\n"
+"- Myš(pravé tl.): položit, použít\n"
+"- MyÅ¡(koleÄko): vybrat pÅ™ihrádku\n"
+"- T: chat\n"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -663,610 +838,3408 @@ msgstr ""
"- stisk a přesun, klik druhým prstem\n"
" --> umístit samostatnou věc do přihrádky\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"Výchozí ovládání:\n"
-"- WASD: pohyb\n"
-"- Mezera: skákání/šplhání\n"
-"- Shift: plížení\n"
-"- Q: zahodit věc\n"
-"- I: inventář\n"
-"- MyÅ¡: otáÄení,rozhlížení\n"
-"- Myš(levé tl.): kopat, štípat\n"
-"- Myš(pravé tl.): položit, použít\n"
-"- MyÅ¡(koleÄko): vybrat pÅ™ihrádku\n"
-"- T: chat\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "PokraÄovat"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Změnit heslo"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Hlasitost"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Změnit klávesy"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Odejít do nabídky"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "UkonÄit hru"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Vypínání..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Vytvářím server..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Vytvářím klienta..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definice věcí..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Překládám adresu..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Připojuji se k serveru..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Média..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definice věcí..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Definice bloků..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Média..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Překládám adresu..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Znovu stvořit"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Vypínání..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Pro detaily se podívejte do debug.txt."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Hlasitost"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Zadejte "
+#: src/game.cpp
+msgid "You died."
+msgstr "Zemřel jsi."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "OK"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z "
-"minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Zadejte "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "PokraÄovat"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Použít\" = slézt dolů"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Dvojstisk klávesy \"skok\" zapne létání"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Vzad"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Klávesa je již používána"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chat"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "stiskni klávesu"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Příkaz"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Vpřed"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konzole"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Vzad"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Dvojstisk klávesy \"skok\" zapne létání"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Doleva"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Zahodit"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Doprava"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Vpřed"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Použít"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventář"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Skok"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Plížit se"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Klávesa je již používána"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Zahodit"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z "
+"minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventář"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Doleva"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chat"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Vypsat hromádky"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Příkaz"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Změna dohledu"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konzole"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Doprava"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Létání"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Plížit se"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Plynulý pohyb kamery"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Turbo"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Turbo"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Létání"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Duch"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Změna dohledu"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Vypsat hromádky"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Použít"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Staré heslo"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "stiskni klávesu"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nové heslo"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Změnit"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Potvrdit heslo"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Změnit"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nové heslo"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Staré heslo"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Hesla se neshodují!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Hlasitost: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Odejít"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Levé tlaÄítko myÅ¡i"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "ProstÅ™ední tlaÄítko myÅ¡i"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Hlasitost: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Pravé tlaÄítko myÅ¡i"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplikace"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X TlaÄítko 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Zpět"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Klávesa velkého písmene"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "VyÄistit"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Vrátit"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulátor"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X TlaÄítko 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Klávesa velkého písmene"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Čárka"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Nabídka"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pauza"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Dolů"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Smazat EOF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Spustit"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Pomoc"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Levé tlaÄítko myÅ¡i"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Levý Control"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Změna režimu"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Levá klávesa Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Další"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Levý Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Předchozí"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Levá klávesa Windows"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Mezerník"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Nabídka"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Dolů"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "ProstÅ™ední tlaÄítko myÅ¡i"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Spustit"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Mínus"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print Screen"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Změna režimu"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Vybrat"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Další"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Nahoru"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Pomoc"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numerická klávesnice: *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Snapshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numerická klávesnice: +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Levá klávesa Windows"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numerická klávesnice: -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Aplikace"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numerická klávesnice: /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numerická klávesnice: 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numerická klávesnice: 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Pravá klávesa Windows"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Spánek"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numerická klávesnice: 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numerická klávesnice: 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numerická klávesnice: 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numerická klávesnice: 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numerická klávesnice: 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numerická klávesnice: 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numerická klávesnice: *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numerická klávesnice: +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numerická klávesnice: -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numerická klávesnice: /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numerická klávesnice: 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numerická klávesnice: 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Levý Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pauza"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Pravý Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "TeÄka"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Levý Control"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Levá klávesa Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print Screen"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Předchozí"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Vrátit"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Pravé tlaÄítko myÅ¡i"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Pravý Control"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Pravá klávesa Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Čárka"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Pravý Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Mínus"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Pravá klávesa Windows"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "TeÄka"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Vybrat"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Spánek"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Smazat EOF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Snapshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Mezerník"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulátor"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Nahoru"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X TlaÄítko 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X TlaÄítko 2"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Přiblížení"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapování"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anizotropní filtrování"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = paralaxní okluze s informacemi o sklonu (rychlejší).\n"
+"1 = mapování reliéfu (pomalejší, ale přesnější)."
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr ""
-#~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D mraky"
-#~ msgid "Local install"
-#~ msgstr "Místní instalace"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Režim 3D zobrazení"
-#~ msgid "Add mod:"
-#~ msgstr "Přidat mod:"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Podpora 3D zobrazení.\n"
+"V souÄasné dobÄ› podporovány:\n"
+"- none: žádný 3D výstup.\n"
+"- 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."
+
+#: 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 ""
+"Zvolený seed pro novou mapu, nechte prázdné pro vygenerování náhodného "
+"seedu.\n"
+"Toto bude přepsáno při vytváření nové mapy přes hlavní menu."
-#~ msgid "MODS"
-#~ msgstr "MODY"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "Zpráva, která se zobrazí všem klientům, když server havaruje."
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "BALÃÄŒKY TEXTUR"
+#: src/settings_translation_file.cpp
+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."
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "HRA JEDNOHO HRÃÄŒE"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
-#~ msgid "Finite Liquid"
-#~ msgstr "KoneÄná voda"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Zrychlení ve vzduchu"
-#~ msgid "Preload item visuals"
-#~ msgstr "PÅ™ednaÄíst textury pÅ™edmÄ›tů"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
-#~ msgid "SETTINGS"
-#~ msgstr "NASTAVENÃ"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr ""
-#~ msgid "Password"
-#~ msgstr "Heslo"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
-#~ msgid "Name"
-#~ msgstr "Jméno"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
-#~ msgid "START SERVER"
-#~ msgstr "MÃSTNÃ SERVER"
+#: 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 ""
+"Adresa, kam se připojit.\n"
+"Nechte prázdné, pokud chcete spustit místní server.\n"
+"Poznámka: pole adresy v hlavním menu přepisuje toto nastavení."
-#~ msgid "Favorites:"
-#~ msgstr "Oblíbené:"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Upraví nastavení DPI pro vaši obrazovku (není pro X11/Android). Pro použití "
+"například s 4k obrazovkami."
-#~ msgid "CLIENT"
-#~ msgstr "KLIENT"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Přidat mod"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "PokroÄilé"
-#~ msgid "Remove selected mod"
-#~ msgstr "Odstranit vybraný mod"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
-#~ msgid "EDIT GAME"
-#~ msgstr "UPRAVIT HRU"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Vždy mít zapnuté létání a turbo"
-#~ msgid "new game"
-#~ msgstr "nová hra"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
-#~ msgid "edit game"
-#~ msgstr "upravit hru"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr ""
-#~ msgid "Mods:"
-#~ msgstr "Mody:"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Anizotropní filtrování"
-#~ msgid "Games"
-#~ msgstr "Hry"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
-#~ msgid "GAMES"
-#~ msgstr "HRY"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\""
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
-#~ msgid "Game Name"
-#~ msgstr "Název hry"
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Zeptat se na znovupřipojení po havárii"
-#~ msgid "Downloading"
-#~ msgstr "Stahuji"
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Automaticky hlásit seznamu serverů."
-#~ msgid " MB/s"
-#~ msgstr " MB/s"
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Vzad"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Základní výška terénu"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Základní"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Basic Privileges"
+msgstr "Výchozí práva"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Bilineární filtrování"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Svázat adresu"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "StavÄ›ní uvnitÅ™ hráÄe"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bump mapování"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Klávesa pro přepínání aktualizace pohledu"
+
+#: 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
+#, fuzzy
+msgid "Cave width"
+msgstr "Šířka obrazovky"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Klávesa chatu"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Klávesa zobrazení chatu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Plynulý pohyb kamery"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Klávesa plynulého pohybu kamery"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Vynulovat průhledné textury"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Klient a Server"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Rychlost šplhání"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Výška mraků"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Poloměr mraků"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Mraky"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Mraky jsou pouze lokální efekt."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Mraky v menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Barevná mlha"
+
+#: 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 ""
+"Seznam důvÄ›ryhodných modů oddÄ›lených Äárkami, které mohou používat "
+"potenciálnÄ› nebezpeÄné\n"
+"funkce ve chvílích, kdy je zapnuto zabezpeÄení modů (pomocí "
+"request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr "Příkazová klávesa"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Propojené sklo"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Připojit se k externímu serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Spojí bloky skla, pokud je to jimi podporováno."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Konzole"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Barva konzole"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Klávesa konzole"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Ovládání"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Ovládání délky denního cyklu.\n"
+"Příklad: 72 = 20 minut, 360 = 4 minutý, 1 = 24 hodin, 0 = zůstává pouze noc "
+"nebo den."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Zpráva o havárii"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Zranění"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Klávesa pro zobrazení ladících informací"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Úroveň minimální důležitosti ladících informací"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Výchozí zrychlení"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Výchozí hra"
+
+#: 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 ""
+"Výchozí hra pro nové světy.\n"
+"Při vytváření nového světa přes hlavní menu bude toto nastavení přepsáno."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Výchozí heslo"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Výchozí práva"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr "Definuje maximální posun hráÄe v blocích (0 = bez limitu)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Prodleva před zobrazením bublinové nápovědy, uvádějte v milisekundách."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Rychlost slézání"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Popis serveru, který bude zobrazen novÄ› pÅ™ipojeným hráÄům a který bude "
+"uveden v seznamu serverů."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "Detailní profilovací data modů. UžiteÄné pro vývojáře modů."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Detailní profilování modů"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Zakázat anticheat"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Zakázat prázdná hesla"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Doménové jméno serveru, které bude zobrazené v seznamu serverů."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Dvojstisk klávesy \"skok\" zapne létání"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Dvojstisk klávesy \"skok\" zapne létání."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Klávesa pro vyhození předmětu"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Povolit VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Povolit zabezpeÄení módů"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Povolit zranÄ›ní a úmrtí hráÄů."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable 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 ""
+"Povolte pro zakázání připojení starých klientů.\n"
+"Starší klienti jsou kompatibilní v takovém smyslu, že při připojení k novým "
+"serverům\n"
+"nehavarují, ale nemusí podporovat vÅ¡echny vlastnosti, které byste oÄekával/a."
+
+#: 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 ""
+"Povolit použití vzdáleného media serveru (je-li poskytnut serverem).\n"
+"Vzdálené servery nabízejí výrazně rychlejší způsob, jak stáhnout\n"
+"média (např. textury) při připojování k serveru."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr "Povolit filmový tone mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Povolit minimapu."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS v menu pauzy"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Záložní písmo"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Stín záložního písma"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Průhlednost stínu záložního písma"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Velikost záložního písma"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Klávesa pro přepnutí turbo režimu"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Zrychlení v turbo režimu"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Rychlost v turbo režimu"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Turbo režim pohybu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Turbo režim pohybu (pomocí klávesy použít).\n"
+"Vyžaduje na serveru přidělené právo \"fast\"."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Filtrování"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Fixované seedové Äislo"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Klávesa létání"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Létání"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Mlha"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Klávesa pro přepnutí mlhy"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Cesta k písmu"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Stín písma"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Průhlednost stínu písma"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Neprůhlednost stínu písma (od 0 do 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "Odsazení stínu písma, pokud je nastaveno na 0, stín nebude vykreslen."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Velikost písma"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Vpřed"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Písma Freetype"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Celá obrazovka"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Bitová hloubka v celoobrazovkovém režimu"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Celoobrazovkový režim."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Měřítko GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Měřítko GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtr měřítka GUI txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Generovat normálové mapy"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravitace"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP mody"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Klávesa pro přepnutí HUD (Head-Up Display)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "VýpoÄty ve FPU s vysokou pÅ™esností"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 server"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Podpora IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Ve hře"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Klávesa inventáře"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Skok"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Jazyk"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+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 "Doleva"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Skript hlavní nabídky"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Mapgen údolí"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Ladění generátoru mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Mapgen plochy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen plochy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen plochy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Jméno generátoru mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Mapgen v5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mapgen v5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Mapgen v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Mapgen v7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mapgen v7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Nabídky"
+
+#: 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 "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mip-mapování"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "ZvýraznÄ›ní oznaÄených bloků"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion Scale"
+msgstr "Škála paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Náklon paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "PoÄet iterací paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Režim paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "Síla paralaxní okluze"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Fyzika"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Jméno hráÄe"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "HrÃ¡Ä proti hráÄi (PvP)"
+
+#: 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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Náhodný vstup"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Klávesa pro oznaÄení vÄ›tšího poÄtu vÄ›cí"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Vzdálená média"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Vzdálený port"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Klávesa doprava"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Kulatá minimapa"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Výška obrazovky"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Šířka obrazovky"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Snímek obrazovky"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Složka se snímky obrazovky"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Složka se snímky obrazovky"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Snímek obrazovky"
+
+#: 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 "Security"
+msgstr "ZabezpeÄení"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Server / Místní hra"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Adresa serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Popis serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Jméno serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Port serveru"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "Adresa seznamu veřejných serverů"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Soubor se seznamem veřejných serverů"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Zobrazit ladící informace"
+
+#: 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 chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Plynulé osvětlení"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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 "Klávesa plížení"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Zvuk"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "Síla vygenerovaných normálových map."
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "Cesta k texturám"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Trilineární filtrování"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Klávesa použít"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "UžiteÄné pro vývojáře modů."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "Vertikální synchronizace"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "OvladaÄ grafiky"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Hlasitost"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Rychlost chůze"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Vlastnosti vody"
+
+#: 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 "Vlnění bloků"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Vlnění listů"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Vlnění rostlin"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Vlnění vody"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Výška vodních vln"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Délka vodních vln"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Rychlost vodních vln"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "cURL limit paralelních stahování"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL timeout"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "PÅ™ednaÄíst inventářové textury"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Reset místního světa"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Měřítko aplikované na prvky menu: "
+
+#~ msgid "Touch free target"
+#~ msgstr "Středový kurzor"
#~ msgid " KB/s"
#~ msgstr " KB/s"
-#~ msgid "Fly mode"
-#~ msgstr "Létací režim"
+#~ msgid " MB/s"
+#~ msgstr " MB/s"
+
+#~ msgid "Downloading"
+#~ msgstr "Stahuji"
+
+#~ msgid "Game Name"
+#~ msgstr "Název hry"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\""
+
+#~ msgid "GAMES"
+#~ msgstr "HRY"
+
+#~ msgid "Mods:"
+#~ msgstr "Mody:"
+
+#~ msgid "new game"
+#~ msgstr "nová hra"
+
+#~ msgid "EDIT GAME"
+#~ msgstr "UPRAVIT HRU"
+
+#~ msgid "Remove selected mod"
+#~ msgstr "Odstranit vybraný mod"
+
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Přidat mod"
+
+#~ msgid "CLIENT"
+#~ msgstr "KLIENT"
+
+#~ msgid "START SERVER"
+#~ msgstr "MÃSTNÃ SERVER"
+
+#~ msgid "Name"
+#~ msgstr "Jméno"
+
+#~ msgid "Password"
+#~ msgstr "Heslo"
+
+#~ msgid "SETTINGS"
+#~ msgstr "NASTAVENÃ"
+
+#~ msgid "Preload item visuals"
+#~ msgstr "PÅ™ednaÄíst textury pÅ™edmÄ›tů"
+
+#~ msgid "Finite Liquid"
+#~ msgstr "KoneÄná voda"
+
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "HRA JEDNOHO HRÃÄŒE"
+
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "BALÃÄŒKY TEXTUR"
+
+#~ msgid "MODS"
+#~ msgstr "MODY"
+
+#~ msgid "Add mod:"
+#~ msgstr "Přidat mod:"
+
+#~ msgid "Local install"
+#~ msgstr "Místní instalace"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr ""
+#~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Aby se zmÄ›na ovladaÄe projevila, restartujte Minetest"
+
+#~ msgid "Rendering:"
+#~ msgstr "Renderování:"
+
+#~ msgid "If enabled, "
+#~ msgstr "Je-li povoleno, "
+
+#~ msgid "If disabled "
+#~ msgstr "Je-li zakázáno "
+
+#~ msgid "\""
+#~ msgstr "\""
+
+#~ msgid "No!!!"
+#~ msgstr "Ne!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generovat normálové mapy"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Seznam veřejných serverů"
+
+#~ msgid "No of course not!"
+#~ msgstr "Jistě že ne!"
diff --git a/po/da/minetest.po b/po/da/minetest.po
index 8405261b2..6337ba14e 100644
--- a/po/da/minetest.po
+++ b/po/da/minetest.po
@@ -7,1217 +7,4225 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-02-17 00:41+0200\n"
-"Last-Translator: Rune Biskopstö Christensen <lakersforce@gmail.com>\n"
-"Language-Team: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-06 13:58+0000\n"
+"Last-Translator: Thomas Wagner Nielsen <thomas@viawords.com>\n"
+"Language-Team: Danish "
+"<https://hosted.weblate.org/projects/minetest/minetest/da/>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 1.4-dev\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Der skete en fejt i Lua scriptet, så som et mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Der skete en fejl:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Hovedmenu"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
-msgstr ""
+msgstr "Ok"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Forbind igen"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Serveren har anmodet om at forbinde igen:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Indlæser..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokol versionerne matchede ikke. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Serveren kræver protokol version $1. "
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Serveren understøtter protokol versioner mellem $1 og $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Prøv at slå den offentlige serverliste fra og til, og tjek din internet "
+"forbindelse."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Vi understøtter kun protokol version $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Vi understøtter protokol versioner mellem $1 og $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Anuller"
-#: builtin/mainmenu/dlg_config_world.lua:29
-#, fuzzy
-msgid "World:"
-msgstr "Vælg verden:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Afhænger af:"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-#, fuzzy
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Deaktivér MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Aktivér MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Aktivér alle"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Kunne ikke slå mod \"$1\" til, da den indeholder ugyldige tegn. Kun tegnene "
+"[a-z0-9_] er tilladte."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
-msgstr "Spil"
+msgstr "Skjul spil"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr ""
+msgstr "Skjul mp indhold"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr ""
+msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-#, fuzzy
-msgid "Depends:"
-msgstr "afhænger af:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Gem"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Anuller"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Verden:"
-#: builtin/mainmenu/dlg_config_world.lua:71
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "aktiveret"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "En verden med navnet \"$1\" eksisterer allerede"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Skab"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Hent et subgame, så som minetest_game fra minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Hent en fra minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Spil"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-msgid "Enable MP"
-msgstr "Aktivér alle"
+msgid "No worldname given or no game selected"
+msgstr "Intet navn på verden angivet eller intet spil valgt"
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
-msgid "Disable MP"
-msgstr "Deaktivér alle"
+msgid "Seed"
+msgstr "Kim"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr "Advarsel: Den minimale udvikings test er kun lavet for udviklerne."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Verdens navn"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Du har ikke installeret nogle subgames."
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Er du sikker på du vil slette \"$1\"?"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Slet"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr "Modmgr: Kunne ikke slette \"$1\""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr "Modmgr: ugyldig mod-sti \"$1\""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Slet verden \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Accepter"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Omdøb Modpack:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" er ikke en gyldig indstilling."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Der er ikke nogen beskrivelse af denne indstilling)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "< Back to Settings page"
+msgstr "< Tilbage til siden Indstillinger"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Browse"
+msgstr "Gennemse"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Rediger"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
msgstr "aktiveret"
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Formatet er 3 tal, adskilt af kommaer, og omgivet af parenteser."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
-msgid "Enable all"
-msgstr "Aktivér alle"
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Format: <forskydning>, <skalering>, (<udbredelseX>, <udbredelseY>, "
+"<udbredelseZ>), <kim>, <oktaver>, <vedholdenhed>"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Verdens navn"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Spil"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Indtast venligst en liste af indstillinger som er adskilt med kommaer."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Indtast venligst et gyldigt heltal."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Indtast venligt et gyldigt nummer."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Mulige værdier er: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Gendan standard"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Vælg sti"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Vis tekniske navne"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Værdien skal være større end $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Værdien skal være mindre end $1."
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
+"\n"
+"Installer Mod: filtypen \"$1\" er enten ikke understøttet, ellers er arkivet "
+"korrupt"
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
-msgstr "Spil"
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "Kunne ikke installere $1 til $2"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Skab"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Installer Mod: Fil: \"$1\""
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr "Installer Mod: kunne ikke finde det rigtige mod navn for: $1"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr "Installer Mod: kunne ikke finde passende mappe navn for modpack $1"
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Luk marked"
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr "Henter $1, vent venligst..."
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Installer"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Side $1 af $2"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "Bedømmelse"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Søg"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Kort navn:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Succesfuldt installeret:"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Usorteret"
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "geninstaller"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Aktive bidragere"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Hoved udviklere"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Skabt af"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Tidligere bidragere"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Tidligere hoved udviklere"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr "Installerede mods:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Information om mod:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr "Der er ikke nogen beskrivelse af tilgængelig af det valgte mod"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr "Omdøb"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Vælg mod fil:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Afinstaller det valgte mod"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Afinstaller den valgte modpack"
+
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Adresse/port"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Klient"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "Forbind"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "Kreativ tilstand"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "Skade aktiveret"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Vis favoritter"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Vis favoritter"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Navn/kodeord:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "Spiller mod spiller aktiveret"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Konfigurér"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "Kreativ tilstand"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr "Aktivér skade"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "Navn/kodeord"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Ny"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#, fuzzy
+msgid "No world created or selected!"
+msgstr "Ingen verden skabt eller valgt!"
+
+#: builtin/mainmenu/tab_server.lua
+#, fuzzy
+msgid "Port"
+msgstr "Port"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Offentlig"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Vælg verden:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "Server"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Server port"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Start spil / Forbind"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D-skyer"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Avancerede indstillinger"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Er du sikker på, at du vil nulstille din enkelt spiller-verden?"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "Bi-lineær filtréring"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Mip-mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Skift bindinger"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Forbundet glas"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Opakt (uigennemsigtigt) vand"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Mipmap"
+msgstr "Mip-mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nej"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Intet filter"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Mipmap"
+msgstr "Mip-mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Glat belysning"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Glat belysning"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Ingen"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Mip-mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Opaque Leaves"
+msgstr "Opakt (uigennemsigtigt) vand"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Opaque Water"
+msgstr "Opakt (uigennemsigtigt) vand"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "A world named \"$1\" already exists"
-msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede"
+msgid "Particles"
+msgstr "Aktivér partikler"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Indstillinger"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "Shadere"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Enkle blade"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Glat belysning"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tone Mapping"
+msgstr "Mip-mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Tri-lineær filtréring"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Leaves"
+msgstr "\"Smarte\" træer"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Plants"
+msgstr "\"Smarte\" træer"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Water"
+msgstr "\"Smarte\" træer"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
msgstr "Ja"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "Konfigurér mods"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "Hovedmenu"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Enlig spiller"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "Spil"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "Enlig spiller"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "Der er ikke nogen information tilgængelig"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
-msgid "Modmgr: failed to delete \"$1\""
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
-msgid "Modmgr: invalid modpath \"$1\""
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Forbindelses fejl (tidsfristen udløb)."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Færdig!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Initialiserer noder"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Initialiserer noder..."
+
+#: src/client.cpp
+msgid "Loading textures..."
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
-#, fuzzy
-msgid "Delete World \"$1\"?"
-msgstr "Slet verden"
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nej"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
-msgid "Rename Modpack:"
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Kunne ikke finde eller indlæse spil \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Ugyldig spilspecifikationer."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Hovedmenu"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
msgstr ""
+"Ingen verden valgt og ingen adresse angivet. Der er ikke noget at gøre."
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Accepter"
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Spillerens navn er for langt."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: src/client/clientlauncher.cpp
+#, fuzzy
+msgid "Provided world path doesn't exist: "
+msgstr "Den angivne sti til verdenen findes ikke: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: src/game.cpp
msgid ""
"\n"
-"Install Mod: unsupported filetype \"$1\" or broken archive"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Tjek debug.txt for detaljer."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Skift tastatur-bindinger"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Skift kodeord"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Forbinder til server..."
-#: builtin/mainmenu/modmgr.lua:365
+#: src/game.cpp
+msgid "Continue"
+msgstr "Fortsæt"
+
+#: src/game.cpp
#, fuzzy
-msgid "Failed to install $1 to $2"
-msgstr "Mislykkedes i at initialisere verden"
+msgid "Creating client..."
+msgstr "Opretter klient..."
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: src/game.cpp
+#, fuzzy
+msgid "Creating server..."
+msgstr "Opretter server..."
+
+#: src/game.cpp
+#, fuzzy
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Standard-styring:\n"
+"- WASD: Bevæge sig rundt\n"
+"- Mellemrumstast: Hoppe/klatre\n"
+"- Skift: Snige/gå nedad\n"
+"- Q: Smide genstand\n"
+"- I: Medbragt\n"
+"- Mus: Vende rundt/kigge\n"
+"- Mus venstre: Grave/slå\n"
+"- Mus højre: Placere/bruge\n"
+"- Musehjul: Vælge genstand\n"
+"- T: Chat\n"
+
+#: src/game.cpp
+#, fuzzy
+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 ""
+"Standard-styring:\n"
+"Ingen menu synlig:\n"
+"- Enkelt tryk: Aktivér knap\n"
+"- Dobbelt tryk: Placér/brug\n"
+"- Stryg finger: Kig rundt\n"
+"Menu/Medbragt synlig:\n"
+"- Dobbelt tryk (uden for):\n"
+" --> Luk\n"
+"- Rør ved stakken, rør ved felt:\n"
+" --> Flyt stakken\n"
+"- Rør ved og træk, tryk med 2. finger\n"
+" --> Placér enkelt genstand på feltet\n"
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr "Afslut til menu"
-#: builtin/mainmenu/modmgr.lua:388
-msgid "Install Mod: unable to find real modname for: $1"
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "Afslut til operativsystemet"
+
+#: src/game.cpp
+msgid "Item definitions..."
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: src/game.cpp
+#, fuzzy
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/game.cpp
+msgid "Media..."
+msgstr "Medier..."
+
+#: src/game.cpp
+#, fuzzy
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/game.cpp
+#, fuzzy
+msgid "Node definitions..."
+msgstr "Blokdefinitioner..."
+
+#: src/game.cpp
+msgid "Resolving address..."
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Genopstå"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Lukker ned..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Lydniveau"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "Du døde."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "ok"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: builtin/mainmenu/store.lua:126
-msgid "Downloading $1, please wait..."
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Fortsæt"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "\"Brug\" = klatre ned"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Baglæns"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Snak"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Kommando"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsol"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
msgstr ""
+"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
+"tilstand"
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Slip"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Fremad"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Beholdning"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Hop"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tast allerede i brug"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
+"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest."
+"conf)"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Venstre"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Udskriv stakke"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Afstands vælg"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Højre"
-#: builtin/mainmenu/store.lua:162
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Snige"
+
+#: src/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "Shortname:"
-msgstr "Verdens navn"
+msgid "Toggle Cinematic"
+msgstr "Omstil hurtig"
-#: builtin/mainmenu/store.lua:472
-msgid "Rating"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Omstil hurtig"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Omstil flyvning"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "Omstil fylde"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Brug"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "Tryk på en tast"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Skift"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Bekræft kodeord"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nyt kodeord"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Gammelt kodeord"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Kodeordene er ikke ens!"
+
+#: src/guiVolumeChange.cpp
+#, fuzzy
+msgid "Exit"
+msgstr "Afslut"
+
+#: src/guiVolumeChange.cpp
+#, fuzzy
+msgid "Sound Volume: "
+msgstr "Lydstyrke: "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Apps"
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Giv agt"
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr "Tilbage"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Capital"
+msgstr "Store bogstaver"
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "Ryd"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Komma"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr "Control"
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Konvertér"
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Ned"
+
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Udvisk Slut-PÃ¥-Fil"
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr "Escape"
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Eksekvér"
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr "Endelig"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Hjælp"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr "Junja"
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "Kanji"
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Venstre knap"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Venstre Control"
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Venstre Menu"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Venstre Skift"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Venstre meta"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Midterste knap"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minus"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Tilstandsskift"
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Næste"
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "Numpad 0"
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "Numpad 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "Numpad 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "Numpad 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "Numpad 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "Numpad 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "Numpad 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "Numpad 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "Numpad 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "Numpad 9"
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Ryd"
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punktum"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Udskriv"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Foregående"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Højre knap"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "Højre Control"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "Højre Menu"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Højre Skift"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Højre meta"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Vælg"
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sov"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Snapshot"
+msgstr "Tilstandsbillede"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Mellemrum"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulator"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Op"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X knap 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X knap 2"
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "Zoom"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "3D skyer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode"
+msgstr "3D-tilstand"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: 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 ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "Besked, som skal vises til alle klienter, når serveren går ned."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "Besked, som skal vises til alle klienter, når serveren lukker ned."
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Skabt af"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Acceleration in air"
+msgstr "Acceleration i luft"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:30
-msgid "Installed Mods:"
+#: 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 ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
msgstr ""
+"Justér DPI-konfigurationen til din skærm (ikke-X11 / kun Andorid) f.eks. til "
+"4k-skærme."
-#: builtin/mainmenu/tab_mods.lua:78
-msgid "No mod description available"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avanceret"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:93
-msgid "Rename"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Always fly and fast"
+msgstr "Flyv altid og hurtigt"
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Amplifies the valleys"
+msgstr "Forstærker dalene"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Anisotropic filtering"
+msgstr "Anisotropisk filtréring"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:121
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Select Mod File:"
-msgstr "Vælg verden:"
+msgid "Ask to reconnect after crash"
+msgstr "Spørg om at forbinde igen, efter den er gået ned."
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Automaticaly report to the serverlist."
+msgstr "Rapportér automatisk til serverlisten."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "Baglæns"
+
+#: 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 ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Address / Port :"
-msgstr "Adresse/port"
+msgid "Bilinear filtering"
+msgstr "Bi-lineær filtréring"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Name / Password :"
-msgstr "Navn/kodeord"
+msgid "Build inside player"
+msgstr "Flerspiller"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bumpmapping"
+msgstr "Mip-mapping"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Slet"
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
-msgid "Connect"
-msgstr "Forbind"
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Creative mode"
+msgid "Chat key"
+msgstr "Skift bindinger"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "Skift bindinger"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
msgstr "Kreativ tilstand"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Damage enabled"
-msgstr "aktiveret"
+msgid "Cinematic mode key"
+msgstr "Kreativ tilstand"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Skyer"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "PvP enabled"
-msgstr "aktiveret"
+msgid "Clouds in menu"
+msgstr "Hovedmenu"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Ny"
+#: 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 ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Konfigurér"
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
-#: builtin/mainmenu/tab_server.lua:29
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Start Game"
-msgstr "Start spil / Forbind"
+msgid "Command key"
+msgstr "Kommando"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Vælg verden:"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Forbind"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
-msgid "Creative Mode"
-msgstr "Kreativ tilstand"
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
-msgid "Enable Damage"
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Control"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
msgstr "Aktivér skade"
-#: builtin/mainmenu/tab_server.lua:35
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Public"
-msgstr "Vis offentlig"
+msgid "Default password"
+msgstr "Nyt kodeord"
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
-msgid "Name/Password"
-msgstr "Navn/kodeord"
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
-msgid "Port"
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Opakt (uigennemsigtigt) vand"
+msgid "Disable anticheat"
+msgstr "Aktivér partikler"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: 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 ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "\"Smarte\" træer"
+msgid "Double tap jump for fly"
+msgstr ""
+"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
+"tilstand"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
+"tilstand"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Bilinear Filter"
-msgstr "Bi-lineær filtréring"
+msgid "Enable VBO"
+msgstr "Aktivér MP"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 ""
-#: builtin/mainmenu/tab_settings.lua:34
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Tri-lineær filtréring"
+msgid "Enables filmic tone mapping"
+msgstr "Aktivér skade"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Aktivér skade"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:44
-msgid "Mipmap"
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
-msgid "Mipmap + Aniso. Filter"
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: src/settings_translation_file.cpp
+msgid "FSAA"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Glat belysning"
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Aktivér partikler"
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D skyer"
+#: 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 ""
-#: builtin/mainmenu/tab_settings.lua:208
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use 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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
#, fuzzy
-msgid "Opaque Water"
-msgstr "Opakt (uigennemsigtigt) vand"
+msgid "Filtering"
+msgstr "Anisotropisk filtréring"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Connected Glass"
-msgstr "Forbind"
+msgid "Forward key"
+msgstr "Fremad"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
-msgid "Shaders"
-msgstr "Shadere"
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Skift bindinger"
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:236
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Enligspiller"
+msgid "HTTP Mods"
+msgstr "Mods"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: 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 ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Bumpmapping"
-msgstr "Mip-mapping"
+msgid "In-Game"
+msgstr "Spil"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
-msgid "Waving Leaves"
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
-msgid "Waving Plants"
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Beholdning"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Indstillinger"
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Enligspiller"
+msgid "Jump key"
+msgstr "Hop"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Config mods"
-msgstr "Konfigurér"
+msgid "Left key"
+msgstr "Venstre Menu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Main"
+msgid "Main menu mod manager"
msgstr "Hovedmenu"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
-msgid "Play"
-msgstr "Afspil"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Hovedmenu"
-#: builtin/mainmenu/tab_singleplayer.lua:246
-msgid "Singleplayer"
-msgstr "Enligspiller"
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: src/settings_translation_file.cpp
+msgid "Map directory"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
-msgid "Texturepacks"
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
msgstr ""
-#: src/client.cpp:1721
-msgid "Loading textures..."
+#: 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.\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."
msgstr ""
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
msgstr ""
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
msgstr ""
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Hovedmenu"
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave."
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Kunne ikke finde eller indlæse spil \""
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Ugyldig spilspecifikationer."
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Mapgen"
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Fortsæt"
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Du døde."
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Genopstå"
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
-#: src/game.cpp:1092
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"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"
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
msgstr ""
-#: src/game.cpp:1106
+#: src/settings_translation_file.cpp
msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Fortsæt"
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Skift kodeord"
+#: 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/game.cpp:1134
-msgid "Sound Volume"
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
msgstr ""
-#: src/game.cpp:1136
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Change Keys"
-msgstr "Skift bindinger"
+msgid "Menus"
+msgstr "Menu"
-#: src/game.cpp:1139
-msgid "Exit to Menu"
-msgstr "Afslut til menu"
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
-#: src/game.cpp:1141
-msgid "Exit to OS"
-msgstr "Afslut til operativsystemet"
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
-#: src/game.cpp:1841
-msgid "Shutting down..."
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
msgstr ""
-#: src/game.cpp:1948
-msgid "Creating server..."
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
msgstr ""
-#: src/game.cpp:1984
-msgid "Creating client..."
+#: src/settings_translation_file.cpp
+msgid "Minimap"
msgstr ""
-#: src/game.cpp:2159
-msgid "Resolving address..."
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
msgstr ""
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip-mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
msgstr ""
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
msgstr ""
-#: src/game.cpp:4363
+#: src/settings_translation_file.cpp
msgid ""
-"\n"
-"Check debug.txt for details."
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
-"\n"
-"Tjek debug.txt for detaljer."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: 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 ""
-"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest."
-"conf)"
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
-msgstr "\"Brug\" = klatre ned"
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/settings_translation_file.cpp
+msgid "Network"
msgstr ""
-"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
-"tilstand"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tast allerede i brug"
+#: 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/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "Tryk på en tast"
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Fremad"
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Baglæns"
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Venstre"
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Højre"
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Brug"
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Hop"
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Snige"
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Slip"
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Beholdning"
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Snak"
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Kommando"
+#: 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/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsol"
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Omstil flyvning"
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Omstil hurtig"
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Omstil hurtig"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
-msgstr "Omstil fylde"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
msgstr "Afstands vælg"
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Udskriv stakke"
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Gammelt kodeord"
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nyt kodeord"
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
-msgstr "Bekræft kodeord"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Højre Menu"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Skift"
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
-msgstr "Kodeordene er ikke ens!"
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr ""
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
+#: src/settings_translation_file.cpp
+msgid "River Noise"
msgstr ""
-#: src/guiVolumeChange.cpp:119
-msgid "Exit"
+#: src/settings_translation_file.cpp
+msgid "River Size"
msgstr ""
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Venstre knap"
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Midterste knap"
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Højre knap"
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X knap 1"
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
-#: src/keycode.cpp:224
-msgid "Back"
-msgstr "Tilbage"
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
-#: src/keycode.cpp:224
-msgid "Clear"
-msgstr "Ryd"
+#: 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/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulator"
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X knap 2"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Tilstandsbillede"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
-#: src/keycode.cpp:225
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Capital"
-msgstr "Store bogstaver"
+msgid "Screenshot format"
+msgstr "Tilstandsbillede"
-#: src/keycode.cpp:225
-msgid "Control"
-msgstr "Control"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Tilstandsbillede"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: 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/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Konvertér"
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Escape"
-msgstr "Escape"
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Final"
-msgstr "Endelig"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Enligspiller"
-#: src/keycode.cpp:226
-msgid "Junja"
-msgstr "Junja"
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
-msgstr "Kanji"
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Tilstandsskift"
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Næste"
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Foregående"
+#: 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/keycode.cpp:227
-msgid "Space"
-msgstr "Mellemrum"
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Ned"
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Eksekvér"
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Udskriv"
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Vælg"
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Op"
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Hjælp"
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
-#: src/keycode.cpp:229
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Snapshot"
-msgstr "Tilstandsbillede"
+msgid "Smooth lighting"
+msgstr "Glat belysning"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Venstre meta"
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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/keycode.cpp:233
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Apps"
-msgstr "Applikationer"
+msgid "Sneak key"
+msgstr "Snige"
-#: src/keycode.cpp:233
-msgid "Numpad 0"
-msgstr "Numpad 0"
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 1"
-msgstr "Numpad 1"
+#: 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/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Højre meta"
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sov"
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 2"
-msgstr "Numpad 2"
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 3"
-msgstr "Numpad 3"
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
-msgstr "Numpad 4"
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 5"
-msgstr "Numpad 5"
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 6"
-msgstr "Numpad 6"
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 7"
-msgstr "Numpad 7"
+#: 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/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
+#: 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/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 8"
-msgstr "Numpad 8"
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 9"
-msgstr "Numpad 9"
+#: 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/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: 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/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Venstre Skift"
+#: 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/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Højre Skift"
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Venstre Control"
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Venstre Menu"
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Control"
-msgstr "Højre Control"
+#: 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/keycode.cpp:241
-msgid "Right Menu"
-msgstr "Højre Menu"
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Komma"
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Minus"
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punktum"
+#: 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/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Giv agt"
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Tri-lineær filtréring"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Udvisk Slut-PÃ¥-Fil"
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Ryd"
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
-#: src/keycode.cpp:248
-msgid "Zoom"
-msgstr "Zoom"
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Spil"
+msgid "Use key"
+msgstr "Tryk på en tast"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Games"
-#~ msgstr "Spil"
+msgid "Waving leaves"
+msgstr "\"Smarte\" træer"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
#, fuzzy
-#~ msgid "Favorites:"
+#~ msgid "Downloading"
+#~ msgstr "Ned"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed"
+
+#~ msgid "is required by:"
+#~ msgstr "er påkrævet af:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Konfiguration gemt. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver"
+
+#~ msgid "Show Public"
+#~ msgstr "Vis offentlig"
+
+#~ msgid "Show Favorites"
#~ msgstr "Vis favoritter"
-#, fuzzy
-#~ msgid "Password"
-#~ msgstr "Gammelt kodeord"
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server."
-#~ msgid "Preload item visuals"
-#~ msgstr "For-indlæs elementernes grafik"
+#~ msgid "Create world"
+#~ msgstr "Skab verden"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n"
-#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. "
+#~ msgid "Address required."
+#~ msgstr "Adresse påkrævet."
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
-#~ msgstr ""
-#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n"
-#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. "
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Kan ikke slette verden: ingenting valgt"
-#~ msgid "Delete map"
-#~ msgstr "Slet mappen"
+#~ msgid "Files to be deleted"
+#~ msgstr "Filer som slettes"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Kan ikke skabe verden: ingen spil fundet"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Kan ikke konfigurere verden: ingenting valgt"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Mislykkedes i at slette alle verdenens filer"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1244,63 +4252,44 @@ msgstr "Zoom"
#~ "- ESC: denne menu\n"
#~ "- T: snak\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Mislykkedes i at slette alle verdenens filer"
-
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Kan ikke konfigurere verden: ingenting valgt"
-
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Kan ikke skabe verden: ingen spil fundet"
-
-#~ msgid "Files to be deleted"
-#~ msgstr "Filer som slettes"
-
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Kan ikke slette verden: ingenting valgt"
-
-#~ msgid "Address required."
-#~ msgstr "Adresse påkrævet."
-
-#~ msgid "Create world"
-#~ msgstr "Skab verden"
-
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server."
-
-#~ msgid "Show Favorites"
-#~ msgstr "Vis favoritter"
-
-#~ msgid "Show Public"
-#~ msgstr "Vis offentlig"
-
-#~ msgid "Advanced"
-#~ msgstr "Avanceret"
+#~ msgid "Delete map"
+#~ msgstr "Slet mappen"
-#~ msgid "Multiplayer"
-#~ msgstr "Flerspiller"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n"
+#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. "
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n"
+#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. "
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. "
+#~ msgid "Preload item visuals"
+#~ msgstr "For-indlæs elementernes grafik"
-#~ msgid "Configuration saved. "
-#~ msgstr "Konfiguration gemt. "
+#, fuzzy
+#~ msgid "Password"
+#~ msgstr "Gammelt kodeord"
-#~ msgid "is required by:"
-#~ msgstr "er påkrævet af:"
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Spil"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed"
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "aktiveret"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anisotropisk filtréring"
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Deaktivér alle"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-mapping"
+#~ msgid "Public Serverlist"
+#~ msgstr "Offentlig serverliste"
-#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Ned"
+#~ msgid "No of course not!"
+#~ msgstr "Nej selvfølgelig ikke!"
diff --git a/po/de/minetest.po b/po/de/minetest.po
index 698f6920e..b9db120e5 100644
--- a/po/de/minetest.po
+++ b/po/de/minetest.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-08-09 21:51+0200\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-06 02:25+0000\n"
+"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German "
"<https://hosted.weblate.org/projects/minetest/minetest/de/>\n"
"Language: de\n"
@@ -17,169 +17,291 @@ 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 2.4-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr "Ein Fehler ist in Lua aufgetreten (z.B. aufgrund eines Mods):"
+msgstr "Es ist ein Fehler in einem Lua-Skript aufgetreten, z.B. in einer Mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr "Ein Fehler ist aufgetreten:"
+msgstr "Es ist ein Fehler aufgetreten:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Hauptmenü"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Erneut verbinden"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Der Server hat um eine Wiederverbindung gebeten:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
-msgstr "Lädt ..."
+msgstr "Lädt …"
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokollversionsfehler. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Server erfordert Protokollversion $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Server unterstützt Protokollversionen $1 bis $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Bitte versuchen Sie die Öffentliche Serverliste neu zu aktivieren, und "
-"prüfen Sie Ihre Internetverbindung."
+"Versuchen Sie, die öffentliche Serverliste neu zu laden und prüfen Sie Ihre "
+"Internetverbindung."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Wir unterstützen nur Protokollversion $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Wir unterstützen Protokollversionen zwischen $1 und $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Abbrechen"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Welt:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Abhängig von:"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "MP deaktivieren"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "MP aktivieren"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Alle an"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Fehler beim Aktivieren der Mod „$1“: Ungültiger Name. Nur folgende Zeichen "
+"sind erlaubt: [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Spiel ausblenden"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr "MP-Mods verstecken"
+msgstr "Modpacks verstecken"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Abhängig von:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Speichern"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "MP aktivieren"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "MP deaktivieren"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Welt:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "Aktiviert"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Alle an"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Eine Welt mit dem Namen „$1“ existiert bereits"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Weltname"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Erstellen"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seed"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr ""
+"Andere Spiele (wie minetest_game) können von minetest.net heruntergeladen "
+"werden"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Weltgenerator"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Spiele können von minetest.net heruntergeladen werden"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spiel"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Erstellen"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Kartengenerator"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "Keine Spiele installiert."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Spiele können von minetest.net heruntergeladen werden"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-"Andere Spiele (wie minetest_game) können von minetest.net heruntergeladen "
-"werden"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Eine Welt namens „$1“ existiert bereits"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Weltname"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Keine Spiele installiert."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "„$1“ wirklich löschen?"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ja"
+msgstr "Sind Sie sich sicher, dass Sie „$1“ löschen wollen?"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Nein, natürlich nicht!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Entfernen"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Fehler beim Löschen von „$1“"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Unzulässiger Modpfad „$1“"
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Welt „$1“ löschen?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nein"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Annehmen"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Modpack umbenennen:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Annehmen"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "„$1“ ist kein gültiger Bitschalter."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Mod installieren: Datei: „$1“"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Keine Beschreibung vorhanden)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Einstellungsseite"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Durchsuchen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Ändern"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"Das Format besteht aus 3 mit Komma getrennten Zahlen, die sich\n"
+"in Klammern befinden."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Format: <Offset>, <Skalierung>, (<AusbreitungX>, <AusbreitungY>, "
+"<AusbreitungZ>), <Seed>,\n"
+"<Oktaven>, <Persistenz>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Spiele"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Optional kann die Lacunarity, mit einem weiteren Komma abgetrennt, angehängt "
+"werden."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+"Bitte geben Sie eine mit Kommata getrennte Liste von\n"
+"Flags an."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Bitte geben Sie eine gültige ganze Zahl ein."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Bitte geben Sie eine gültige Zahl ein."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Mögliche Werte sind: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Standardwert"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Pfad auswählen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Technische Namen zeigen"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Der Wert muss größer als $1 sein."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Der Wert muss kleiner als $1 sein."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -187,455 +309,501 @@ msgstr ""
"\n"
"Mod installieren: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Fehler bei der Installation von $1 nach $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Mod installieren: Geeigneter Ordnername für Modpack $1 konnte nicht gefunden "
-"werden"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Mod installieren: Datei: „$1“"
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Unsortiert"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Mod installieren: Geeigneter Ordnername für Modpack $1 konnte nicht gefunden "
+"werden"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Suchen"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Schließen"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "$1 wird heruntergeladen, bitte warten ..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Erfolgreich installiert:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Installieren"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Kurzname:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Seite $1 von $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Bewertung"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Erneut installieren"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Installieren"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Suchen"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Schließen"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Kurzname:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Seite $1 von $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Erfolgreich installiert:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Mitwirkende"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Unsortiert"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Hauptentwickler"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Erneut installieren"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Aktive Mitwirkende"
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr "Frühere Hauptentwickler"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Hauptentwickler"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Mitwirkende"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Frühere Mitwirkende"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Ehemalige Hauptentwickler"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Installierte Mods:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Online-Mod-Archiv"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Modinformation:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Keine Modbeschreibung verfügbar"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Modinformation:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Umbenennen"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Ausgewähltes Modpack deinstallieren"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Ausgewählte Mod deinstallieren"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Mod-Datei auswählen:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mods"
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
-msgstr "Adresse/Port:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Ausgewählte Mod deinstallieren"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Name/Passwort:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Ausgewähltes Modpack deinstallieren"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Öffentliche Serverliste"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Adresse / Port"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Entfernen"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Client"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Verbinden"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Kreativmodus"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Schaden aktiviert"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Favorit löschen"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Favorit"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Name / Passwort"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Spielerkampf aktiviert"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Client"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Neu"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Bind-Adresse"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Konfigurieren"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Spiel starten"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Welt wählen:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Kreativmodus"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Schaden einschalten"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Öffentlich"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Name/Passwort"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "Bind-Adresse"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Neu"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Keine Welt angegeben oder ausgewählt!"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Serverport"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Öffentlich"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "Kein Weltname angegeben oder kein Spiel ausgewählt!"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Welt wählen:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "Undurchs. Blätter"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Serverport"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "Einfache Blätter"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Spiel starten"
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
-msgstr "Schöne Blätter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Kein Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D-Wolken"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Kantenglättung:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Bilinearer Filter"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Trilinearer Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "Bumpmapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Keine Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Tasten ändern"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Verbundenes Glas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Schöne Blätter"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "Mipmap u. Aniso. Filter"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nein"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Nein!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Kein Filter"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Besseres Licht"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Keine Mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Partikel aktivieren"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Blöcke hervorheben"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D-Wolken"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Blöcke umranden"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Undurchs. Wasser"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Keines"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Verbundenes Glas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "Normalmapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Blöcke hervorheben"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Undurchs. Blätter"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Texturierung:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Undurchs. Wasser"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Rendering:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Parallax-Occlusion"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Neustart nach Ändern des Treibers erforderlich"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Partikel"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Einstellungen"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shader"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Tasten ändern"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Einfache Blätter"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Einzelspielerwelt zurücksetzen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Geglättetes Licht"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "GUI-Skalierfaktor"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturierung:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Auf Menüelemente angewandter Skalierfaktor: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Berührungsfreies Ziel"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Tone-Mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "Berührungsempfindlichkeit (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Bumpmapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Normalmaps generieren"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Wasserwellen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Trilinearer Filter"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Wehende Blätter"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Wogende Pflanzen"
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden."
+msgstr "Wehende Pflanzen"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Einstellungen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Wasserwellen"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Einzelspieler starten"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ja"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Mods konfigurieren"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Hauptmenü"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Einzelspieler starten"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Spielen"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Einzelspieler"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Texturpaket auswählen:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Keine Informationen vorhanden"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-msgid "Texturepacks"
-msgstr "Texturpakete"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Texturenpaket auswählen:"
-#: src/client.cpp:1721
-msgid "Loading textures..."
-msgstr "Texturen laden ..."
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Texturenpakete"
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
-msgstr "Shader wiederherstellen ..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Verbindungsfehler, Zeitüberschreitung."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Blöcke initialisieren ..."
+#: src/client.cpp
+msgid "Done!"
+msgstr "Fertig!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr "Blöcke initialisieren"
+msgstr "Initialisiere Blöcke"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Inventarbilder ..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Fertig!"
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Initialisiere Blöcke..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Hauptmenü"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Lade Texturen..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Spielername zu lang."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Shader wiederherstellen..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Verbindungsfehler (Zeitüberschreitung?)"
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Kann Spiel nicht finden oder laden \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Ungültige Spielspezif."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Hauptmenü"
+
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun."
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Spielername zu lang."
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "Angegebener Weltpfad existiert nicht: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Kann Spiel nicht finden/laden \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Ungültige Spielspezif."
-
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Fortsetzen"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Siehe debug.txt für Details."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Sie sind gestorben."
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Tasten ändern"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Wiederbeleben"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Passwort ändern"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Verbinde mit Server..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Weiter"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Client erstellen ..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Erstelle Server..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Standardsteuerung:\n"
+"- WASD: bewegen\n"
+"- Leertaste: springen/klettern\n"
+"- Umschalt: kriechen/herunterklettern\n"
+"- Q: Item fallen lassen\n"
+"- I: Inventar\n"
+"- Maus: drehen/umschauen\n"
+"- Maus links: graben/schlagen\n"
+"- Maus rechts: platzieren/benutzen\n"
+"- Mausrad: Gegenstand auswählen\n"
+"- T: Chat\n"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -663,580 +831,4077 @@ msgstr ""
"- berühren u. ziehen, mit 2. Finger antippen\n"
" --> 1 Gegenstand ins Feld platzieren\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"Standard-Tastenbelegung:\n"
-"- WASD: Bewegen\n"
-"- Leertaste: Springen/Klettern\n"
-"- Umschalt: Kriechen/herunterklettern\n"
-"- Q: Item fallen lassen\n"
-"- I: Inventar\n"
-"- Maus: drehen/umschauen\n"
-"- Maus links: Abbauen/Schlagen\n"
-"- Maus rechts: Platzieren/Benutzen\n"
-"- Mausrad: Gegenstand auswählen\n"
-"- T: Chat\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Weiter"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Passwort ändern"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Tonlautstärke"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Tasten ändern"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Hauptmenü"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Programm beenden"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Herunterfahren ..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Server erstellen ..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Client erstellen ..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Item-Definitionen..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Adresse auflösen ..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Zum Server verbinden ..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Medien..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Item-Definitionen ..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
-msgstr "Node-Definitionen ..."
+msgstr "Blockdefinitionen..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Medien ..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Löse Adresse auf..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr "KiB/s"
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Wiederbeleben"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr "MiB/s"
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Herunterfahren..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Siehe debug.txt für Details."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Tonlautstärke"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Enter "
+#: src/game.cpp
+msgid "You died."
+msgstr "Sie sind gestorben."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "OK"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Steuerung (Falls dieses Menü versagt, entfernen Sie Sachen aus minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Enter "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Fortsetzen"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "Benutzen = runterklettern"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "2×Sprungtaste zum Fliegen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Rückwärts"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Taste bereits in Benutzung"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chat"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "Taste drücken"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Befehl"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Vorwärts"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsole"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Rückwärts"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "2×Sprungtaste zum Fliegen"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Links"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Wegwerfen"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Rechts"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Vorwärts"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Benutzen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventar"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Springen"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Schleichen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Taste bereits in Benutzung"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Wegwerfen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Steuerung (Falls dieses Menü fehlerhaft formatiert ist, entfernen Sie "
+"Einstellungen aus minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventar"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Links"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chat"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Stack ausgeben"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Befehl"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Weite Sicht"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsole"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Rechts"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Flugmodus"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Schleichen"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Filmmodus umschalten"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Schnellmodus"
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
-msgstr "Kinomodus"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Flugmodus"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Geistmodus"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Weite Sicht"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Benutzen"
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Stack ausgeben"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "Taste drücken"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Altes Passwort"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Ändern"
-#: src/guiPasswordChange.cpp:124
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Passwort bestätigen"
+
+#: src/guiPasswordChange.cpp
msgid "New Password"
msgstr "Neues Passwort"
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
-msgstr "Passwort wiederholen"
-
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Ändern"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Altes Passwort"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr "Passwörter passen nicht zusammen!"
+msgstr "Passwörter stimmen nicht überein!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Tonlautstärke: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Zurück"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Linke Taste"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Mittlere Taste"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Tonlautstärke: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Rechte Taste"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Anwendungen"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X-Knopf 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Rücktaste"
-#: src/keycode.cpp:224
-msgid "Clear"
-msgstr "Clear"
-
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Eingabe"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X-Knopf 2"
-
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Capital"
msgstr "Feststellen"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "sauber"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Komma"
+
+#: src/keycode.cpp
msgid "Control"
msgstr "Strg"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menü"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Runter"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Umsch."
+#: src/keycode.cpp
+msgid "End"
+msgstr "Ende"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Ausführen"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Hilfe"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Pos1"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Einfg"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Ende"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Linke Taste"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Pos1"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Strg links"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menü links"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Bild runter"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Umsch. links"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Bild hoch"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Win links"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Leertaste"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menü"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Runter"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Mittlere Taste"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Ausführen"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minus"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Druck"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Modus wechseln"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Select"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Bild runter"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Hoch"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Hilfe"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Einfg"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Ziffernblock *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Druck"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Ziffernblock +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Win links"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Ziffernblock -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Apps"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Ziffernblock /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Ziffernblock 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Ziffernblock 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Win rechts"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Schlaf"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Ziffernblock 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Ziffernblock 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Ziffernblock 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Ziffernblock 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Ziffernblock 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Ziffernblock 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Ziffernblock *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Ziffernblock +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Ziffernblock -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Ziffernblock /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Ziffernblock 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Ziffernblock 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Rollen"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Umsch. links"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Umsch. rechts"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punkt"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Strg links"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Alt"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Druck"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Bild hoch"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Eingabe"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Rechte Taste"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Strg rechts"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
-msgstr "Alt Gr"
+msgstr "Menü rechts"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Komma"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Umsch. rechts"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Minus"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Win rechts"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punkt"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Rollen"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Auswählen"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Umsch."
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Schlaf"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Druck"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Leertaste"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Hoch"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X-Knopf 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X-Knopf 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid "Downloading"
-#~ msgstr "Lade herunter"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"(X,Y,Z)-Versatz des Fraktals vom Weltmittelpunkt in Einheiten von „scale“.\n"
+"Benutzt, um einen passenden Einstiegsbereich aus niedriegem Gelände in die\n"
+"Nähe von (0, 0) zu verschieben. Die Standardeinstellung ist brauchbar für\n"
+"Mandelbrotmengen, für Juliamengen muss sie verändert werden. Die Reichweite\n"
+"liegt grob zwischen -2 und 2. Mit „scale“ multiplizieren, um einen Versatz "
+"in Blöcken\n"
+"zu erhalten."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = Parallax-Mapping mit Stufeninformation (schneller).\n"
+"1 = Relief-Mapping (langsamer, genauer)."
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D-Wolken"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anisotroper Filter"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D-Modus"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3D-Unterstützung.\n"
+"Aktuell verfügbar:\n"
+"- none: Keine 3D-Ausgabe.\n"
+"- anaglyph: Türkises / magenta 3D.\n"
+"- interlaced: Bildschirmunterstützung für gerade / ungerade "
+"zeilenbasierte Polarisation.\n"
+"- topbottom: Bildschirm horizontal teilen.\n"
+"- sidebyside: Bildschirm vertikal teilen.\n"
+"- pageflip: Quadbuffer-basiertes 3D."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"Ein festgelegter Kartengenerator-Seed für neue Welten. Leer lassen für "
+"zufällige Erzeugung.\n"
+"Wird überschrieben, wenn die Welt im Menü erstellt wird."
-#~ msgid "is required by:"
-#~ msgstr "wird benötigt von:"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Eine Nachricht, die an alle verbundenen Clients versendet wird, wenn der "
+"Server abstürzt."
-#~ msgid "Configuration saved. "
-#~ msgstr "Konfiguration gespeichert. "
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Eine Nachricht, die an alle verbundene Clients gesendet wird, wenn der "
+"Server herunterfährt."
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Warnung: Konfiguration nicht konsistent. "
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Absolute Grenze der Erzeugungswarteschlangen"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Beschleunigung in der Luft"
-#~ msgid "Multiplayer"
-#~ msgstr "Mehrspieler"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr "Active-Block-Management-Intervall"
-#~ msgid "Advanced"
-#~ msgstr "Erweitert"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr "Active-Block-Modifier-Intervall"
-#~ msgid "Show Public"
-#~ msgstr "Zeige öffentliche"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Reichweite aktiver Kartenblöcke"
-#~ msgid "Show Favorites"
-#~ msgstr "Zeige Favoriten"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Reichweite aktiver Objekte"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten."
+#: 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 ""
+"Adresse, mit der verbunden werden soll.\n"
+"Leer lassen, um einen lokalen Server zu starten.\n"
+"Die Adresse im Hauptmenü überschreibt diese Einstellung."
-#~ msgid "Create world"
-#~ msgstr "Welt erstellen"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme."
-#~ msgid "Address required."
-#~ msgstr "Adresse benötigt."
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Ändert die Gammakodierung der Lichttabellen. Kleinere Werte sind heller.\n"
+"Diese Einstellung ist rein clientseitig und wird vom Server ignoriert."
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Erweitert"
-#~ msgid "Files to be deleted"
-#~ msgstr "Zu löschende Dateien"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Höhenabkühlung"
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Immer schnell fliegen"
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Umgebungsverdeckungs-Gamma"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Verstärkt die Täler"
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Anisotroper Filter"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Server ankündigen"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Meldet den Server in der Serverliste.\n"
+"Wenn ein IPv6-Server angemeldet werden soll, muss serverlist_url auf\n"
+"v6.servers.minetest.net gesetzt werden."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Julia-Menge: Approximative (X,Y,Z)-Skalierungen in Blöcken."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Zum Neuverbinden nach Absturz auffordern"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Automatisch bei der Serverliste melden."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Rückwärtstaste"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Basisgeländehöhe"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Grundlegend"
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr "Grundprivilegien"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Bilinearer Filter"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Bind-Adresse"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bits pro Pixel (Farbtiefe) im Vollbildmodus."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Innerhalb des Spielers bauen"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bumpmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Kameraglättung"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Kameraglättung im Filmmodus"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Taste zum Umschalten der Kameraaktualisierung"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Höhlenrauschen Nr. 1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Höhlenrauschen Nr. 2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr "Höhlenbreite"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Höhlen und Tunnel bilden sich am Schnittpunkt der zwei Rauschen"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Chattaste"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Taste zum Umschalten des Chatprotokolls"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Auswahl von 18 Fraktalen aus 9 Formeln.\n"
+"1 = 4D-Mangelbrotmenge, Typ „rund“.\n"
+"2 = 4D-Juliamenge, Typ „rund“.\n"
+"3 = 4D-Mangelbrotmenge, Typ „eckig“.\n"
+"4 = 4D-Juliamenge, Typ „eckig“.\n"
+"5 = 4D-Mangelbrotmenge, Typ „Mandel-Cousin“.\n"
+"6 = 4D-Juliamenge, Typ „Mandel-Cousin“.\n"
+"7 = 4D-Mangelbrotmenge, Typ „Variante“.\n"
+"8 = 4D-Juliamenge, Typ „Variante“.\n"
+"9 = 3D-Mangelbrotmenge, Typ „Madelbrot/Mandelbar“.\n"
+"10 = 3D-Juliamenge, Typ „Madelbrot/Mandelbar“.\n"
+"11 = 3D-Mangelbrotmenge, Typ „Weihnachtsbaum“.\n"
+"12 = 3D-Juliamenge, Typ „Weihnachtsbaum“.\n"
+"13 = 3D-Mangelbrotmenge, Typ „Mandelbulb“.\n"
+"14 = 3D-Juliamenge, Typ „Mandelbulb“.\n"
+"15 = 3D-Mangelbrotmenge, Typ „Kosinus-Mandelbulb“.\n"
+"16 = 3D-Juliamenge, Typ „Kosinus-Mandelbulb“.\n"
+"17 = 4D-Mangelbrotmenge, Typ „Mandelbulb“.\n"
+"18 = 4D-Juliamenge, Typ „Mandelbulb“."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Chunk-Größe"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Filmmodus"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Filmmodustaste"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Transparente Texturen säubern"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Client und Server"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Klettergeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Wolkenhöhe"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Wolkenradius"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Wolken"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Wolken sind ein clientseitiger Effekt."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Wolken im Menü"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Gefärbter Nebel"
+
+#: 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 ""
+"Kommagetrennte Liste der Mods, denen Sie vertrauen. Vertrauten Mods ist es "
+"erlaubt,\n"
+"unsichere Funktionen zu verwenden, sogar dann, wenn Modsicherheit "
+"eingeschaltet ist\n"
+"(mit request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Kommagetrente Liste von Mods, welche auf HTTP-APIs zugreifen dürfen, was\n"
+"es ihnen erlaubt, Daten aus und Daten zum Internet herunter- und hochzuladen."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Befehlstaste"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Verbundenes Glas"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Zu externen Medienserver verbinden"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Verbindet Glas, wenn der Block dies unterstützt."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Konsolenundurchsichtigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Konsolenfarbe"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Konsolentaste"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Kontinuierliche Vorwärtsbewegung"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Kontinuierliches Vorwärtsbewegen (nur zum Testen verwendet)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Steuerung"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Verändert Länge des Tag-Nacht-Zyklus.\n"
+"Beispiele: 72 = 10 Minuten, 360 = 4 Minuten, 1 = 24 Stunden, 0 = Keine "
+"Veränderung."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Verändert die Größe der Wüsten und Strände im\n"
+"Kartengenerator v6. Falls Schneebiome aktiviert sind, wird\n"
+"„mgv6_freq_desert“ ignoriert."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Steuert die Steilheit/Tiefe von Seesenken."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Steuert die Steilheit/Höhe von Hügeln."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+"Legt die Breite von Tunneln fest; ein kleinerer Wert erzeugt breitere Tunnel."
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Absturzmeldung"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Erstellt unvorhersehbare Lavakammern in Höhlen.\n"
+"Sie können das Graben erschweren. Null deaktiviert sie. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Erstellt unvorhersehbare Wasserkammern in Höhlen.\n"
+"Sie können das Graben erschweren. Null deaktiviert sie. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Fadenkreuzundurchsichtigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Fadenkreuzfarbe"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Fadenkreuzfarbe (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Schleichgeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Schaden"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Taste zum Umschalten der Debug-Info"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Debugausgabelevel"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Taktung dedizierter Server"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Standardbeschleunigung"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Standardspiel"
+
+#: 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 ""
+"Standardspiel beim Erstellen einer neuen Welt.\n"
+"Diese Einstellung wird nicht genutzt, wenn die Welt im Hauptmenü erstellt "
+"wird."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Standardpasswort"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Standardprivilegien"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Standardzeitlimit für cURL, in Millisekunden.\n"
+"Hat nur eine Wirkung, wenn mit cURL kompiliert wurde."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Definiert die Sampling-Schrittgröße der Textur.\n"
+"Ein höherer Wert resultiert in weichere Normal-Maps."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Setzt die maximale Distanz, in der die Spieler übertragen werden, in "
+"Kartenblöcken (0 = unbegrenzt)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Verzögerung beim Zeigen von Tooltipps, in Millisekunden."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Veraltete Lua-API-Handhabung"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Tiefe, unter der man große Höhlen finden wird."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Tiefe, unter der man gigantische Höhlen finden wird."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Abstiegsgeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Die Beschreibung des Servers. Wird neuen Clients und in der Serverliste "
+"angezeigt."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Blockanimationen desynchronisieren"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "Detaillierte Mod-Profildaten. Nützlich für Mod-Entwickler."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Detailliertes Mod-Profiling"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Legt die Geländeform fest.\n"
+"Die 3 Zahlen in Klammern steuern die Skalierung des\n"
+"Geländes, die 3 Zahlen sollten gleich sein."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Anti-Cheat deaktivieren"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Leere Passwörter verbieten"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Domainname des Servers. Wird in der Serverliste angezeigt."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "2×Sprungtaste zum Fliegen"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Doppelttippen der Sprungtaste schaltet Flugmodus um."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Wegwerfen-Taste"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Die Kartengenerator-Debuginformationen auf Konsole ausgeben."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "VBO aktivieren"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Modsicherheit aktivieren"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Spielerschaden und -tod aktivieren."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Weiches Licht mit einfacher Ambient-Occlusion aktivieren.\n"
+"Für bessere Performanz oder anderes Aussehen deaktivieren."
+
+#: 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 ""
+"Aktivieren, um alten Clients die Verbindung zu verwehren.\n"
+"Ältere Clients sind kompatibel in der Hinsicht, dass sie beim Verbinden zu "
+"neuen\n"
+"Servern nicht abstürzen, aber sie könnten nicht alle neuen Funktionen, die "
+"Sie\n"
+"erwarten, unterstützen."
+
+#: 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 ""
+"Aktiviert die Benutzung eines entfernen Medienservers (falls vom Server "
+"angeboten).\n"
+"Entfernte Server bieten eine deutlich schnellere Methode, um Medien (z.B. "
+"Texturen)\n"
+"während des Verbindungsaufbaus zum Server herunterzuladen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Server als IPv6 laufen lassen. Ein IPv6-Server könnte,\n"
+"abhängig von der Systemkonfiguration, auf IPv6-Clients eingeschränkt sein.\n"
+"Wird ignoriert, falls bind_address gesetzt ist."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Aktiviert die Animation von Inventaritems."
+
+#: 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 ""
+"Aktiviert das Bump-Mapping für Texturen. Normal-Maps müssen im "
+"Texturenpaket\n"
+"vorhanden sein oder müssen automatisch erzeugt werden.\n"
+"Shader müssen aktiviert werden, bevor diese Einstellung aktiviert werden "
+"kann."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+"Aktiviert das Zwischenspeichern von 3D-Modellen, die mittels facedir rotiert "
+"werden."
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Aktiviert filmisches Tone-Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Aktiviert die Ãœbersichtskarte."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"Aktiviert die spontane Normalmap-Erzeugung (Prägungseffekt).\n"
+"Für diese Einstellung muss außerdem Bump-Mapping aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Aktiviert Parralax-Occlusion-Mapping.\n"
+"Hierfür müssen Shader aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Experimentelle Einstellung, könnte sichtbare Leerräume zwischen\n"
+"Blöcken verursachen, wenn auf einen Wert größer 0 gesetzt."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "Bildwiederholrate im Pausenmenü"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Kameraschütteln beim Aufprallen"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Ersatzschriftart"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Ersatzschriftschatten"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Undurchsichtigkeit des Ersatzschriftschattens"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Ersatzschriftgröße"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Schnelltaste"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Schnellmodusbeschleunigung"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Schnellmodusgeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Schnell bewegen"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Schnelle Bewegung (mittels Benutzen-Taste).\n"
+"Dazu wird das „fast“-Privileg auf dem Server benötigt."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Gesichtsfeld"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Gesichtsfeld in Grad."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Datei in client/serverlist/, die Ihre Serverfavoriten aus dem "
+"Mehrspielermenü beinhaltet."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr "Fülltiefe"
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Filmisches Tone-Mapping"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+"Gefilterte Texturen können RGB-Werte mit transparenten Nachbarn,\n"
+"die PNG-Optimierer üblicherweise verwerfen, mischen. Manchmal\n"
+"resultiert dies in einer dunklen oder hellen Kante bei transparenten\n"
+"Texturen. Aktivieren Sie diesen Filter, um dies beim Laden der\n"
+"Texturen aufzuräumen."
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filter"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Fester Karten-Seed"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Flugtaste"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Fliegen"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Nebel"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Taste für Nebel umschalten"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Schriftpfad"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Schriftschatten"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Schriftschatten-Undurchsichtigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Undurchsichtigkeit des Schattens der Schrift (Wert zwischen 0 und 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+"Abstand des Schattens hinter der Schrift. Wenn 0, wird der Schatten nicht "
+"gezeichnet."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Schriftgröße"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr "Format von Bildschirmfotos."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Vorwärtstaste"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "FreeType-Schriften"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Maximale Entfernung, in der Kartenblöcke für Clients erzeugt werden, in\n"
+"Kartenblöcken (16 Blöcke) angegeben."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Maximale Entfernung, in der Kartenblöcke zu Clients gesendet werden, in\n"
+"Kartenblöcken (16 Blöcke) angegeben."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Maximale Entfernung, in der Clients über Objekte bescheid wissen, in\n"
+"Kartenblöcken (16 Blöcke) angegeben."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Vollbild"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Vollbildfarbtiefe"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Vollbildmodus."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "GUI-Skalierung"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "GUI-Skalierfilter"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "GUI-Skalierungsfilter txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Allgemein"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Normalmaps generieren"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"Globale Kartengenerierungsattribute.\n"
+"Im Kartengenerator v6 wird das „decorations“-Flag alle Dekorationen außer\n"
+"Bäume und Dschungelgras aktivieren, in allen anderen Kartengeneratoren\n"
+"wird dieses Flag alle Dekorationen aktivieren.\n"
+"Die von der Engine standardmäßig gesetzten Flags lauten:\n"
+"„caves, light, decorations“.\n"
+"Die Flags-Zeichenkette modifiert den Standardwert der Engine.\n"
+"Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+"werden von der Standardeinstellung unverändert gelassen.\n"
+"Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+"zu deaktivieren."
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravitation"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP-Mods"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Taste zum Umschalten des HUD"
+
+#: 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 ""
+"Handhabung für veraltete Lua-API-Aufrufe:\n"
+"- legacy: Versuchen, altes Verhalten zu imitieren (Standard für Release).\n"
+"- log: Imitieren, und den Backtrace des veralteten Funktionsaufrufs "
+"protokollieren (Standard für\n"
+" Debug).\n"
+"- error: Bei Verwendung eines veralteten Funktionsaufrufs abbrechen ("
+"empfohlen für Mod-\n"
+" Entwickler)."
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "Höhenkomponente der anfänglichen Fenstergröße."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Höhe, in der Wolken auftauchen."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "Hochpräzisions-FPU"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "Homepage des Servers. Wird in der Serverliste angezeigt."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Wie tief Flüsse sein sollen"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Wie groß das Gebiet ist, in dem Kartenblöcke aktiv sind.\n"
+"In aktiven Blöcken werden Objekte geladen und ABMs ausgeführt.\n"
+"1 Kartenblock = 16×16×16 Blöcke."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+"Wie viele Kartenblöcke gleichzeitig für den gesamten Server auf der Leitung "
+"unterwegs sind."
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+"Wie viele Kartenblöcke gleichzeitig pro Client auf der Leitung unterwegs "
+"sind."
+
+#: 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 ""
+"Wie lange der Server warten wird, bevor nicht mehr verwendete Kartenblöcke\n"
+"entladen werden. Ein höher Wert führt zu besserer Performanz, aber auch\n"
+"zur Benutzung von mehr Arbeitsspeicher."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Wie breit Flüsse sein sollen"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6-Server"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6-Unterstützung."
+
+#: 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 ""
+"Falls die Bildwiederholrate diesen Wert überschreitet,\n"
+"wird sie durch Nichtstun begrenzt, um die CPU nicht\n"
+"unnötig zu belasten."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Falls deaktiviert, wird die „Benutzen“-Taste benutzt, um schnell zu "
+"fliegen,\n"
+"wenn sowohl der Flug- als auch der Schnellmodus aktiviert ist."
+
+#: 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 ""
+"Falls es aktiviert ist, kann der Spieler im Flugmodus durch feste Blöcke "
+"fliegen.\n"
+"Dafür wird das „noclip“-Privileg auf dem Server benötigt."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Falls aktiviert, wird die „Benutzen“-Taste statt der „Schleichen“-Taste zum\n"
+"Herunterklettern und Sinken benutzt."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+"Falls aktiviert, werden Aktionen für die Rollback-Funktion aufgezeichnet.\n"
+"Diese Einstellung wird nur beim Starten des Servers gelesen."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+"Wenn diese Einstellung aktiviert ist, werden die Anti-Cheat-Maßnahmen "
+"deaktiviert."
+
+#: 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 ""
+"Falls aktiviert, werden ungültige Weltdaten den Server nicht dazu\n"
+"veranlassen, sich zu beenden.\n"
+"Aktivieren Sie dies nur, wenn Sie wissen, was sie tun."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+"Falls aktiviert, können neue Spieler nicht mit einem leeren Passwort\n"
+"beitreten."
+
+#: 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 ""
+"Falls aktiviert, können Sie Blöcke an der Position (Füße u. Augenhöhe), auf "
+"der Sie\n"
+"stehen, platzieren. Dies ist hilfreich, wenn mit „Nodeboxen“ auf engen Raum\n"
+"gearbeitet wird."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+"Falls dies gesetzt ist, werden Spieler immer an der gegebenen\n"
+"Position im Spiel einsteigen bzw. nach dem Tod wieder einsteigen."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Weltfehler ignorieren"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Spiel"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel\n"
+"(Wert zwischen 0 und 255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Hintergrundfarbe (R,G,B) der Chat-Konsole im Spiel."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Zeitintervall des Abspeicherns wichtiger Änderungen in der Welt,\n"
+"in Sekunden."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr "Zeitintervall, in dem die Tageszeit an Clients gesendet wird."
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "Animierte Inventaritems"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Inventartaste"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Maus umkehren"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Kehrt die vertikale Mausbewegung um."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Item-Entity-TTL"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"Iterationen der rekursiven Funktion.\n"
+"Steuert die Skalierung mit einem sehr hohem Detailgrad."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Nur für Juliamenge: W-Komponente der hyperkomplexen Konstanten, welche die "
+"Juliaform festlegt.\n"
+"Hat keine Wirkung auf 3D-Fraktale.\n"
+"Reichweite liegt grob zwischen -2 und 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Julia-Menge: X-Komponente der hyperkomplexen Konstanten, welche die "
+"Juliaform festlegt.\n"
+"Weite liegt grob zwischen -2 und 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Julia-Menge: Y-Komponente der hyperkomplexen Konstanten, welche die "
+"Juliaform festlegt.\n"
+"Weite liegt grob zwischen -2 und 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Julia-Menge: Z-Komponente der hyperkomplexen Konstanten, welche die "
+"Juliaform festlegt.\n"
+"Weite liegt grob zwischen -2 und 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Sprungtaste"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Sprunggeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um die Sichtweite zu reduzieren.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Fallenlassen des ausgewählten Gegenstandes.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um die Sichtweite zu erhöhen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Springen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um sich schnell im Schnellmodus zu bewegen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um den Spieler rückwärts zu bewegen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um den Spieler vorwärts zu bewegen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um den Spieler nach links zu bewegen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um den Spieler nach rechts zu bewegen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um die Chat-Konsole im Spiel zu öffnen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste, um das Chat-Fenster zu öffnen, um Kommandos einzugeben.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Öffnen des Chat-Fensters.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Öffnen des Inventars.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um die Debug-Stacks auszugeben. Für die Entwicklung benutzt.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste zum Schleichen.\n"
+"Wird auch zum Runterklettern und das Sinken im Wasser verwendet, falls "
+"aux1_descends deaktiviert ist.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste zum Wechseln der Kamera (Ego- oder Dritte-Person-Perspektive).\n"
+"Siehe 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 ""
+"Taste zur Erzeugung von Bildschirmfotos.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten des Filmmodus.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Wechseln der Anzeige der Ãœbersichtskarte.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten des Schnellmodus.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten des Flugmodus.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten des Geistmodus.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten der Kameraaktualisierung. Nur für die Entwicklung "
+"benutzt.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste zum Umschalten der Anzeige der Debug-Informationen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste, um das HUD zu verbergen oder wieder anzuzeigen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um das Chatprotokoll zu verbergen oder wieder anzuzeigen.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste zum Umschalten des Nebels.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Taste zum Umschalten der Profiler-Anzeige. Für die Entwicklung benutzt.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Taste, um die unbegrenzte Sichtweite ein- oder auszuschalten.\n"
+"Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "„Benutzen“-Taste zum Runterklettern"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Sprache"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Tiefe für große Höhlen"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Lavakammern"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Blätterstil"
+
+#: 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 ""
+"Blätterstil:\n"
+"- Fancy: Alle Seiten sind sichtbar\n"
+"- Simple: Nur die äußeren Seiten sind sichtbar, oder special_tiles werden "
+"benutzt\n"
+"- Opaque: Blätter sind undurchsichtig"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Linkstaste"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+"Länge eines Servertakts und dem Zeitintervall, in dem Objekte über das "
+"Netzwerk üblicherweise\n"
+"aktualisiert werden."
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr "Dauer der Zeit zwischen ABM-Ausführungszyklen"
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr "Dauer der Zeit zwischen NodeTimer-Ausführungszyklen"
+
+#: 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 ""
+"Bis zu welcher Dringlichkeitsstufe Protokollmeldungen\n"
+"in debug.txt geschrieben werden sollen:\n"
+"- <nichts> (keine Protokollierung)\n"
+"- none (Meldungen ohne Einstufung)\n"
+"- error (Fehler)\n"
+"- warning (Warnungen)\n"
+"- action (Aktionen)\n"
+"- info (Informationen)\n"
+"- verbose (Ausführlich)"
+
+#: 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"
+
+#: 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 ""
+"Begrenzt die Anzahl der parallelen HTTP-Anfragen. Betrifft:\n"
+"- Medienabholung, falls der Server die remote_media-Einstellung "
+"verwendet.\n"
+"- Herunterladen der Serverliste und Server-Ankündigungsdaten.\n"
+"- Downloads, die vom Hauptmenü aus getätigt werden (z.B. Mod-Manager).\n"
+"Hat nur eine Wirkung, wenn mit cURL-Unterstützung kompiliert wurde."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Flüssigkeitswiederstand"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Flüssigkeitswiderstandsglättung"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "Max. Flüssigkeitsiterationen"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "Aufräumzeit für Flüssigkeitswarteschlange"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Sinkgeschwindigkeit in Flüssigkeiten"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Flüssigkeitsaktualisierungsintervall in Sekunden."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "Flüssigkeitsaktualisierungstakt"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Hauptmenü-Spiel-Manager"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Hauptmenü-Mod-Manager"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Hauptmenü-Skript"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang)\n"
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Kartenordner"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Kartengenerierungsattribute speziell für den Kartengenerator „Täler“.\n"
+"„altitude_chill“ macht höhere Höhen kälter, was ein paar Biomprobleme "
+"hervorrufen könnte.\n"
+"„humid_rivers“ modifiert die Luftfeuchtigkeit um Flüssen und in Gebieten, wo "
+"sich Wasser\n"
+"ansammeln würde; es könnte fein abgestimmte Biomen beeinträchtigen.\n"
+"Die von der Engine standardmäßig gesetzten Flags lauten:\n"
+"„altitude_chill, humid_rivers“.\n"
+"Die Flags-Zeichenkette modifiert den Standardwert der Engine.\n"
+"Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+"werden von der Standardeinstellung unverändert gelassen.\n"
+"Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+"zu deaktivieren."
+
+#: 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.\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."
+msgstr ""
+"Kartengenerierungsattribute speziell für den flachen Kartengenerator.\n"
+"Gelegentlich werden Seen und Hügel zur flachen Welt hinzugefügt.\n"
+"Die von der Engine standardmäßig gesetzten Flags sind: keine.\n"
+"Die Flags-Zeichenkette modifiert den Standardwert der Engine.\n"
+"Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+"werden von der Standardeinstellung unverändert gelassen.\n"
+"Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+"zu deaktivieren."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Kartengenerierungsattribute speziell für den Kartengenerator v6.\n"
+"Falls Schneebiome aktiviert, werden Dschungel aktiviert und das „jungles“-"
+"Flag\n"
+"wird ignoriert.\n"
+"Die von der Engine standardmäßig gesetzten Flags lauten:\n"
+"„biomeblend, mudflow“.\n"
+"Die Flags-Zeichenkette modifiert den Standardwert der Engine.\n"
+"Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+"werden von der Standardeinstellung unverändert gelassen.\n"
+"Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+"zu deaktivieren."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"Kartengenerierungsattribute speziell für den Kartengenerator v7.\n"
+"Das „ridges“-Flag steuert die Flüsse.\n"
+"Die von der Engine standardmäßig gesetzten Flags lauten:\n"
+"„mountains, ridges“.\n"
+"Die Flags-Zeichenkette modifiert den Standardwert der Engine.\n"
+"Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+"werden von der Standardeinstellung unverändert gelassen.\n"
+"Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+"zu deaktivieren."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Kartenerzeugungsgrenze"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Speicherintervall der Karte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Kartenblock-Grenze"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "Timeout zum Entladen von Kartenblöcken"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Täler-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Biomhitzen-Rauschparameter"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Biomluftfeuchtigkeitsübergangs-Rauschparameter"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Biomluftfeuchtigkeits-Rauschparameter"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Kartengenerator-Debugging"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Kartengenerator-Flags"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Flacher Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr "Höhlenbreite für den flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr "cave1-Rauschparameter für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr "cave2-Rauschparameter für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr "Fülltiefenrauschparameter für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Flags für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Basishöhe für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Hügelsteilheilt für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Hügel-Schwellwert für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "See-Steilheit für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "See-Schwellwert für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr "Tiefe für große Höhlen für den flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr "Gelände-Rauschparameter für flachen Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr "Höhlenbreite für den Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "cave1-Rauschparameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "cave2-Rauschparameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr "Fülltiefenrauschparameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "Fraktale-Kartengenerator-Fraktal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "Iterationen für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "w-Parameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "x-Parameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "y-Parameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "z-Parameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "Versatz für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "Skalierung für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Meeresgrundrauschparameter für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "w-Ausschnitt für Fraktale-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr "Hitzenübergangs-Rauschparameter"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Kartengeneratorname"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr "Höhlenbreite für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr "cave1-Höhlen-Rauschparameter für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr "cave2-Höhlen-Rauschparameter für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr "Faktor-Rauschparameter für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr "Fülltiefen-Rauschparameter für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr "Höhen-Rauschparameter für v5-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr "Apfelbaum-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "Strandhäufigkeit für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr "Strand-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr "Biom-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr "Höhlen-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Wüsten-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "v6-Kartengenerator-Flags"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr "Höhenauswahl-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr "Luftfeuchtigkeits-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr "Schlamm-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr "Steilheits-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr "Geländehöhen-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr "Basisgelände-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr "Baum-Rauschparameter für v6-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr "Höhlenbreite für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr "cave1-Höhlen-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr "cave2-Höhlen-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr "Fülltiefen-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "v7-Kartengenerator-Flags"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr "Höhenauswahl-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr "Berghöhen-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr "Berg-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr "Fluss-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr "Flusswasser-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr "Geländehöhen-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr "Basisgelände-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr "Geländepersistenz-Rauschparameter für v7-Kartengenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "Tiefe für gigantische Höhlen"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr "Rauschen für gigantische Höhlen"
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr "An dieser Tiefe und darunter bilden sich gigantische Höhlen."
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr "Max. Distanz für Kartenblockerzeugung"
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr "Max. Distanz für Kartenblockübertragung"
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr "Max. Flüssigkeitsblöcke, die pro Schritt verarbeitet werden."
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr "Max. clearobjects-Zusatz-Kartenblöcke"
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr "Max. Pakete pro Iteration"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr "Maximale Bildwiederholrate"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "Maximale Bildwiederholrate, wenn das Spiel pausiert ist."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "Maximal zwangsgeladene Kartenblöcke"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Max. Breite der Schnellzugriffsleiste"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+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."
+msgstr ""
+"Maximale Anzahl der Kartenblöcke, die in die Erzeugungswarteschlage gesetzt "
+"werden.\n"
+"Feld frei lassen, um automatisch einen geeigneten Wert zu bestimmen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "Maximale Anzahl der zwangsgeladenen Kartenblöcke."
+
+#: 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 ""
+"Maximale Anzahl der Kartenblöcke, die der Client im Speicher vorhalten "
+"soll.\n"
+"Auf -1 setzen, um keine Obergrenze zu verwenden."
+
+#: 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 ""
+"Maximale Anzahl der Pakete, die pro Sende-Schritt 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 "
+"Sie\n"
+"anstreben."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "Maximale Anzahl der Spieler, die sich simultan verbinden können."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+"Maximale Anzahl der statisch gespeicherten Objekte in einem Kartenblock."
+
+#: 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 ""
+"Maximales Verhältnis zum aktuellen Fenster, das für die\n"
+"Schnellzugriffsleiste verwendet werden soll. Nützlich, wenn es\n"
+"etwas gibt, was links oder rechts von ihr angezeigt werden soll."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Max. gleichzeitig versendete Kartenblöcke pro Client"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Max. gleichzeitig versendete Kartenblöcke"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Maximale Zeit in ms, die das Herunterladen einer Datei (z.B. einer Mod) "
+"dauern darf."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Maximale Benutzerzahl"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Maximale Objekte pro Kartenblock"
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Menüs"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr "3D-Modell-Zwischenspeicher"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Meldung des Tages (message of the day)"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+"Die Meldung des Tages, die frisch verbundenen Spielern angezeigt werden "
+"soll.\n"
+"Auf Englisch bekannt als „message of the day“ oder „MOTD“."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr "Verwendete Methode, um ein ausgewähltes Objekt hervorzuheben."
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Ãœbersichtskarte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Ãœbersichtskartentaste"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Abtasthöhe der Übersichtskarte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "Minimale Texturengröße für Filter"
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mip-Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr "Mod-Profiling"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "Modspeicher: Details-URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "Modspeicher: Download-URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "Modspeicher: Listen-URL"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Pfad der Festbreitenschrift"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "Größe der Festbreitenschrift"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Mausempfindlichkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Faktor für die Mausempfindlichkeit."
+
+#: 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 ""
+"Faktor für Kameraschütteln beim Sturz.\n"
+"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert, 2.0 für "
+"doppelte Geschwindigkeit."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"Faktor für Auf- und Abbewegung (grafischer Effekt).\n"
+"Zum Beispiel: 0 für keine Auf- und Abbewegung, 1.0 für den Standardwert, 2.0 "
+"für doppelte Geschwindigkeit."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"Name des Kartengenerators, der für die Erstellung neuer Welten\n"
+"verwendet werden soll. Mit der Erstellung einer Welt im Hauptmenü\n"
+"wird diese Einstellung überschrieben."
+
+#: 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 ""
+"Name des Spielers.\n"
+"Wenn ein Server gestartet wird, werden Clients mit diesem Namen zu "
+"Administratoren.\n"
+"Wird vom Hauptmenü aus gestartet, wird diese Einstellung überschrieben."
+
+#: src/settings_translation_file.cpp
+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."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Netzwerk"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"Netzwerkport (UDP), auf dem gelauscht werden soll.\n"
+"Dieser Wert wird überschrieben, wenn vom Hauptmenü\n"
+"aus gestartet wird."
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "Neue Benutzer müssen dieses Passwort eingeben."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Geistmodus"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Geistmodustaste"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "Blöcke hervorheben"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr "NodeTimer-Intervall"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
+"Rauschparameter für Temperatur-, Luftfeuchtigkeits- und Biomübergänge\n"
+"in der Biom-API."
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr "Rauschen"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr "Normalmaps-Sampling"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr "Normalmaps-Stärke"
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr "Anzahl der Erzeugerthreads"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+"Anzahl der zu benutzenden Erzeugerthreads. Lassen Sie dieses Feld frei, oder "
+"erhöhen Sie\n"
+"diese Zahl, um mehrere Threads zu verwenden. Auf Mehrprozessorsystemen wird "
+"dies die\n"
+"Geschwindigkeit der Kartengenerierung auf Kosten von leicht fehlerhaften "
+"Höhlen stark\n"
+"erhöhen."
+
+#: 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 ""
+"Anzahl der zusätzlichen Kartenblöcke, welche mit /clearobjects gleichzeitig\n"
+"geladen werden können. Dies ist ein Kompromiss zwischen SQLite-\n"
+"Transaktions-Overhead und Speicherverbrauch (Faustregel: 4096=100MB)."
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "Anzahl der Parallax-Occlusion-Iterationen."
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr "Startwert des Parallax-Occlusion-Effektes, üblicherweise Skalierung/2."
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr "Gesamtskalierung des Parallax-Occlusion-Effektes."
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Parallax-Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "Parallax-Occlusion-Skalierung"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Parallax-Occlusion-Startwert"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Parallax-Occlusion-Iterationen"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Parallax-Occlusion-Modus"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "Parallax-Occlusion-Stärke"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "Pfad zu einer TrueType- oder Bitmap-Schrift."
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+"Pfad der Texturenverzeichnisse. Alle Texturen werden von dort zuerst gesucht."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Physik"
+
+#: 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 ""
+"Der Spieler kann unabhängig von der Schwerkraft fliegen.\n"
+"Dafür wird das „fly“-Privileg auf dem Server benötigt."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Spielername"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr "Spieler-Ãœbertragungsdistanz"
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "Spielerkampf"
+
+#: 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-Port, zu dem sich verbunden werden soll.\n"
+"Beachten Sie, dass das Port-Feld im Hauptmenü diese Einstellung\n"
+"überschreibt."
+
+#: 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."
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr "Privilegien, die Spieler mit basic_privs gewähren können"
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+"Profiler-Datenausgabeintervall. 0 = deaktivieren. Nützlich für Entwickler."
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "Profiler-Umschalten-Taste"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "Profiler-Ausgabeintervall"
+
+#: 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 ""
+"Radius des Wolkenbereichs; In Einheiten von 64 Blöcken.\n"
+"Werte größer als 26 werden scharfe Schnittkanten an den Ecken des Wolken-\n"
+"bereichs erzeugen."
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr "Erhöht das Gelände, um Täler um den Flüssen zu erzeugen"
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Zufällige Steuerung"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Sichtweitentaste"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Externer Medienserver"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Serverport"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr "Ersetzt das Standardhauptmenü mit einem benutzerdefinierten Hauptmenü."
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Rechtstaste"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Rechtsklick-Wiederholungsrate"
+
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr "Flusstiefe"
+
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr "Flussrauschen"
+
+#: src/settings_translation_file.cpp
+msgid "River Size"
+msgstr "Flussgröße"
+
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr "Flussrauschen – Flüsse erscheinen in der Nähe von null"
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "Rollback-Aufzeichnung"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Runde Ãœbersichtskarte"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "Speichert die vom Client empfangene Karte auf dem Datenträger."
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "Karte vom Server speichern"
+
+#: 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 ""
+"GUI mit einem benutzerdefinierten Wert skalieren.\n"
+"Benutzt einen Pixelwiederholungs-Anti-Aliasing-Filter, um\n"
+"die GUI zu skalieren. Dies wird einige der harten Kanten\n"
+"abglätten und Pixel beim Verkleinern mischen, wobei einige\n"
+"Kantenpixel verschwommen werden, wenn sie mit nicht-\n"
+"ganzzahligen Größen skaliert werden."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Bildschirmhöhe"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Bildschirmbreite"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Bildschirmfoto"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Bildschirmfotoverzeichnis"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr "Bildschirmfotoformat"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr "Bildschirmfotoqualität"
+
+#: 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 ""
+"Bildschirmfotoqualität. Wird nur für das JPEG-Format benutzt.\n"
+"1 steht für die schlechteste Qualität, 100 für die beste Qualität.\n"
+"Benutzen Sie 0 für die Standardqualität."
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr "Sicherheit"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Siehe http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "Farbe der Auswahlbox (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "Auswahlboxfarbe"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "Auswahlboxbreite"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Server / Einzelspieler"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "Server-URL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Serveradresse"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Serverbeschreibung"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Servername"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Serverport"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "Serverlisten-URL"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Serverlistendatei"
+
+#: 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 ""
+"Setzt die Sprache. Leer lassen, um Systemsprache zu verwenden.\n"
+"Nach Änderung ist ein Neustart erforderlich."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Auf „wahr“ setzen, um sich im Wind wehende Blätter zu aktivieren.\n"
+"Dafür müssen Shader aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Auf „wahr“ setzen, um sich im Wind wehende Pflanzen zu aktivieren.\n"
+"Dafür müssen Shader aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Auf „wahr“ setzen, um Wasserwogen zu aktivieren.\n"
+"Dafür müssen Shader aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"Shader werden für fortgeschrittene visuelle Effekte benötigt und können die "
+"Performanz\n"
+"auf einigen Grafikkarten erhöhen.\n"
+"Funktioniert nur mit dem OpenGL-Backend."
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr "Form der Ãœbersichtskarte. Aktiviert = rund, Deaktiviert = rechteckig."
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Debug-Info zeigen"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr "Entitiy-Auswahlboxen zeigen"
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "Herunterfahrnachricht"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Größe der Stücke, die gleichzeitig vom Kartengenerator erzeugt werden,\n"
+"in Kartenblöcken (16×16×16 Blöcke)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr "Hänge und Füllungen arbeiten zusammen, um die Höhen zu verändern"
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Geglättetes Licht"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Glättet Kamerabewegungen bei der Fortbewegung und\n"
+"beim Umsehen. Nützlich zum Aufnehmen von Videos."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr "Glättet die Rotation der Kamera im Filmmodus. 0 zum Ausschalten."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Glättet die Rotation der Kamera. 0 zum Ausschalten."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Schleichtaste"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Sound"
+
+#: 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 ""
+"Spezifiziert die URL, von der die Clients die Medien (Texturen, Sounds, …) "
+"herunterladen.\n"
+"$Dateiname sollte von $remote_media$Dateiname mittels cURL erreichbar sein\n"
+"(diese Einstellung sollte also mit einem Schrägstrich enden).\n"
+"Dateien, die nicht über diesen Server erreichbar sind, werden auf dem "
+"üblichen\n"
+"Weg heruntergeladen (UDP)."
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "Statische Einstiegsposition"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "Stärke der generierten Normalmaps."
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr "Stärke von Parallax."
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "Strikte Protokollversionsprüfung"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr "Ältere Server unterstützen"
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "Synchrones SQLite"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+msgstr "Geländehöhe"
+
+#: 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 ""
+"Schwellwert für Geländerauschen der Hügel.\n"
+"Steuert das Verhältnis des Weltgebiets, das von Hügeln bedeckt ist.\n"
+"Passen Sie diesen Wert in Richtung 0.0 für ein größeres Verhältnis an."
+
+#: 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 ""
+"Schwellwert für Geländerauschen der Seen.\n"
+"Steuert das Verhältnis des Weltgebiets, das von Seen bedeckt ist.\n"
+"Passen Sie diesen Wert in Richtung 0.0 für ein größeres Verhältnis an."
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr "Texturpfad"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr "Die Höhe, ab der die Temperatur um 20 °C fällt"
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr "Die Tiefe von Erde oder einem anderem Füller"
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr "Die Netzwerkschnittstelle, auf die der Server lauscht."
+
+#: 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 ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Das Render-Backend für Irrlicht."
+
+#: 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 ""
+"Die Stärke (Dunkelheit) der blockweisen Ambient-Occlusion-Schattierung.\n"
+"Niedriger bedeutet dunkler, höher bedeutet heller. Gültige Werte liegen\n"
+"zwischen 0.25 und 4.0 inklusive. (Achtung: Punkt als Dezimaltrennzeichen\n"
+"verwenden!) Falls der Wert außerhalb liegt, wird er zum nächsten gültigen\n"
+"Wert gesetzt."
+
+#: 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 ""
+"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"
+"diese Funktion."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"Das Intervall in Sekunden, in dem Rechtsklicks wiederholt werden, wenn die "
+"rechte\n"
+"Maustaste gedrückt gehalten wird."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "Diese Schrift wird von bestimmten Sprachen benutzt."
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr "Zeit zwischen Active-Block-Management-Zyklen"
+
+#: 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 ""
+"Zeit in Sekunden, die Item-Entitys (fallengelassene Gegenstände)\n"
+"existieren dürfen. Der Wert -1 deaktiviert diese Funktion."
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr "Zeit-Sendeintervall"
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+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."
+
+#: 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 ""
+"Um Verzögerungen zu reduzieren, werden Kartenblockübertragungen verlangsamt, "
+"während\n"
+"ein Spieler etwas baut. Diese Einstellung bestimmt, wie lange sie "
+"verlangsamt sind,\n"
+"nachdem ein Block platziert oder entfernt wurde."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Kameraauswahltaste"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "Tooltip-Verzögerung"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Trilinearer Filter"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"Wahr = 256\n"
+"Falsch = 128\n"
+"Nützlich, um die Übersichtskarte performanter auf langsamen Maschinen zu "
+"machen."
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "Vertrauenswürdige Mods"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+"URL der Serverliste, die in der Mehrspieler-Registerkarte angezeigt wird."
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "Unbegrenzte Spielerübertragungsdistanz"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "Nicht benutzte Serverdaten entladen"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "Wolken blockförmig statt flach aussehen lassen."
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+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."
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "Bilineare Filterung bei der Skalierung von Texturen benutzen."
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Benutztaste"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+"Mip-Mapping benutzen, um Texturen zu skalieren. Kann die Performanz\n"
+"leicht erhöhen."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "Trilineare Filterung bei der Skalierung von Texturen benutzen."
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Nützlich für Mod-Entwickler."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "Vertikale Synchronisation"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr "VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Depth"
+msgstr "Taltiefe"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Fill"
+msgstr "Talfüllung"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Profile"
+msgstr "Talprofil"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Slope"
+msgstr "Talhang"
+
+#: src/settings_translation_file.cpp
+msgid "Valleys C Flags"
+msgstr "C-Täler-Flags"
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "Vertikale Bildschirmsynchronisation."
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Grafiktreiber"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "Auf- und Abbewegung der Ansicht"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"Sichtweite in Blöcken.\n"
+"Minimum = 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "Taste „Sichtweite reduzieren“"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "Taste „Sichtweite erhöhen“"
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr "Sichtweite"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Tonlautstärke"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"W-Koordinate des generierten 3D-Ausschnitts eines 4D-Fraktals.\n"
+"Bestimmt, welcher 3D-Ausschnitt der 4D-Form generiert wird.\n"
+"Hat keine Auswirkung auf 3D-Fraktale.\n"
+"Die Weite liegt grob zwischen -2 und 2."
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Gehgeschwindigkeit"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Wasserkammern"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Meeresspiegel"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "Die Höhe des (Meer-)Wassers in der Welt."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "Wehende Blöcke"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Wehende Blätter"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Wehende Pflanzen"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Wasserwellen"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Wasserwellenhöhe"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Wasserwellenlänge"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Wasserwellengeschwindigkeit"
+
+#: 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 ""
+"Falls gui_scaling_filter wahr ist, dann müssen alle GUI-Bilder\n"
+"von der Software gefiltert werden, aber einige Bilder werden\n"
+"direkt zur Hardware erzeugt (z.B. Rendern in die Textur für\n"
+"die Inventarbilder von Blöcken)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+"Falls gui_scaling_filter_txr2img auf „wahr“ gesetzt ist, werden\n"
+"diese Bilder von der Hardware zur Software für die Skalierung\n"
+"kopiert. Falls es auf „falsch“ gesetzt ist, wird für alte Videotreiber,\n"
+"die das Herunterladen von Texturen zurück von der Hardware\n"
+"nicht vernünftig unterstützen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+"Wenn bilineare, trilineare oder anisotrope Filter benutzt werden, können\n"
+"niedrigauflösende Texturen verschwommen sein, also werden sie automatisch\n"
+"mit Pixelwiederholung vergrößert, um scharfe Pixel zu behalten. Dies setzt "
+"die\n"
+"minimale Texturengröße für die vergrößerten Texturen; höhere Werte führen\n"
+"zu einem schärferen Aussehen, aber erfordern mehr Speicher. Zweierpotenzen\n"
+"werden empfohlen. Ein Wert größer als 1 könnte keinen sichtbaren Effekt\n"
+"hervorbringen, es sei denn, die bilineare, trilineare oder anisotropische "
+"Filterung\n"
+"ist aktiviert."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Wo der Kartengenerator aufhört.\n"
+"Bitte beachten Sie:\n"
+"- Begrenzt auf 31000 (größere Werte sind wirkungslos).\n"
+"- Der Kartengenerator arbeitet in Gruppen von 80×80×80 Blöcken (5×5×5 "
+"Kartenblöcke).\n"
+"- Diese Gruppen haben einen Abstand von [-32, -32] Blöcken vom Ursprung.\n"
+"- Nur Gruppen, welche innerhalb der von map_generation_limit definierten "
+"Grenze liegen,\n"
+" werden erzeugt."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+"Ob FreeType-Schriften benutzt werden.\n"
+"Dafür muss Minetest mit FreeType-Unterstüzung kompiliert worden sein."
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+"Ob Blocktexturanimationen pro Kartenblock desynchronisiert sein sollten."
+
+#: 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 ""
+"Ob Spieler an Clients ohne Distanzbegrenzung angezeigt werden.\n"
+"Veraltet, benutzen Sie stattdessen die Einstellung "
+"„player_transfer_distance“."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr "Ob sich Spieler gegenseitig Schaden zufügen und töten können."
+
+#: 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 ""
+"Ob Clients gefragt werden sollen, sich nach einem (Lua-)Absturz\n"
+"neu zu verbinden. Auf „wahr“ setzen, falls Ihr Server für auto-\n"
+"matische Neustarts eingerichtet ist."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "Ob das Ende des sichtbaren Gebietes im Nebel verschwinden soll."
+
+#: 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)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+"Ob ältere Server vor Protokollversion 25 unterstützt werden sollen.\n"
+"Aktivieren Sie dies, falls Sie sich mit Servern der Version 0.4.12 und\n"
+"davor verbinden möchten. Server ab 0.4.13 werden funktionieren,\n"
+"Server der Version 0.4.12-dev könnten funktionieren.\n"
+"Die Deaktivierung dieser Einstellung wird Ihr Passwort besser schützen."
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "Breiten-Komponente der anfänglichen Fenstergröße."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Breite der Linien der Auswahlbox um Blöcken."
+
+#: 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 ""
+"Weltverzeichnis (alles in der Welt wird hier gespeichert).\n"
+"Nicht benötigt, wenn vom Hauptmenü aus gestartet wird."
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr "Y-Höhe des flachen Bodens."
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr "Y-Wert der Obergrenze von großen pseudozufälligen Höhlen."
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "cURL-Dateidownload-Zeitüberschreitung"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "cURL-Parallel-Begrenzung"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL-Zeitüberschreitung"
+
+#~ msgid "Item textures..."
+#~ msgstr "Inventarbilder ..."
+
+#~ msgid ""
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
+#~ msgstr ""
+#~ "Eine etwas niedrigere Wasseroberfläche aktivieren, damit der Node\n"
+#~ "nicht vollständig „gefüllt“ wird. Beachten Sie, dass dies nicht wirklich\n"
+#~ "optimiert wurde, und dass weiches Licht auf der Wasseroberfläche\n"
+#~ "nicht mit dieser Einstellung funktioniert."
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr "Blöcke bei Auswahl aufleuchten lassen (Deaktiviert die Auswahlbox)."
+
+#~ msgid ""
+#~ "Julia set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by j_scale for offsets in nodes."
+#~ msgstr ""
+#~ "Julia-Menge: (X,Y,Z)-Versatz vom Mittelpunkt der Welt.\n"
+#~ "Reichweite liegt grob von -2 bis 2, wird mit j_scale für Versätze in\n"
+#~ "Nodes multipliziert."
+
+#~ msgid ""
+#~ "Julia set: W value determining the 4D shape.\n"
+#~ "Range roughly -2 to 2."
+#~ msgstr ""
+#~ "Julia-Menge: W-Wert, der die 4D-Form festlegt.\n"
+#~ "Weite liegt grob zwischen -2 und 2."
+
+#~ msgid ""
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Taste zur Reduzierung der Sichtweite. Verändert die minimale Sichtweite.\n"
+#~ "Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Taste zur Erhöhung der Sichtweite. Verändert die minimale Sichtweite.\n"
+#~ "Siehe http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Mandelbrot set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by m_scale for offsets in nodes."
+#~ msgstr ""
+#~ "Mandelbrotmenge: (X,Y,Z)-Versatz vom Mittelpunkt der Welt.\n"
+#~ "Reichweite liegt grob von -2 bis 2, wird mit m_scale für\n"
+#~ "Versätze in Nodes multipliziert."
+
+#~ msgid "Mandelbrot set: Approximate (X,Y,Z) scales in nodes."
+#~ msgstr "Mandelbrotmenge: Approximative (X,Y,Z)-Skalierungen in Nodes."
+
+#~ msgid ""
+#~ "Mandelbrot set: Iterations of the recursive function.\n"
+#~ "Controls scale of finest detail."
+#~ msgstr ""
+#~ "Mandelbrotmenge: Iterationen der rekursiven Funktion.\n"
+#~ "Steuert die Skalierung mit einem sehr hohem Detailgrad."
+
+#~ msgid ""
+#~ "Mandelbrot set: W co-ordinate of the generated 3D slice of the 4D shape.\n"
+#~ "Range roughly -2 to 2."
+#~ msgstr ""
+#~ "Madnelbrotmenge: W-Koordinate des generierten 3D-Ausschnitts der 4D-"
+#~ "Form.\n"
+#~ "Die Weite liegt grob zwischen -2 und 2."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen fractal.\n"
+#~ "'julia' selects a julia set to be generated instead of a mandelbrot set.\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."
+#~ msgstr ""
+#~ "Kartengenerierungsattribute, die speziell für den Fraktale-\n"
+#~ "Kartenerzeuger sind.\n"
+#~ "„julia“ wählt für die Erzeugung eine Julia-Menge statt einer\n"
+#~ "Mandelbrotmenge aus.\n"
+#~ "Bitschalter, welche in der Bitschalterzeichenkette nicht angegeben sind,\n"
+#~ "werden von der Standardeinstellung unverändert gelassen.\n"
+#~ "Bitschalter, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+#~ "zu deaktivieren."
+
+#~ msgid "Mapgen fractal mandelbrot iterations"
+#~ msgstr "Mandelbrotiterationen für Fraktale-Kartenerzeuger"
+
+#~ msgid "Mapgen fractal mandelbrot offset"
+#~ msgstr "Mandelbrotversatz für Fraktale-Kartenerzeuger"
+
+#~ msgid "Mapgen fractal mandelbrot scale"
+#~ msgstr "Mandelbrotskalierung für Fraktale-Kartenerzeuger"
+
+#~ msgid "Mapgen fractal mandelbrot slice w"
+#~ msgstr "Mandelbrot-w-Ausschnitt für Fraktale-Kartenerzeuger"
+
+#~ msgid ""
+#~ "Maximum distance above water level for player spawn.\n"
+#~ "Larger values result in spawn points closer to (x = 0, z = 0).\n"
+#~ "Smaller values may result in a suitable spawn point not being found,\n"
+#~ "resulting in a spawn at (0, 0, 0) possibly buried underground."
+#~ msgstr ""
+#~ "Höchstabstand über dem Meeresspiegel für den Spieler-\n"
+#~ "startpunkt. Größere Werte führen zu Startpunkten näher an\n"
+#~ "(x = 0, z = 0). Kleinere Werte können dazu führen, dass kein\n"
+#~ "brauchbarer Startpunkt gefunden wird, was wiederum zu einem\n"
+#~ "Startpunkt bei (0, 0, 0) führt, der möglicherweise im Untergrund\n"
+#~ "eingegraben ist."
+
+#~ msgid ""
+#~ "Minimum wanted FPS.\n"
+#~ "The amount of rendered stuff is dynamically set according to this. and "
+#~ "viewing range min and max."
+#~ msgstr ""
+#~ "Minimal gewünschte Bildwiederholrate.\n"
+#~ "Die Anzahl der berechneten Dinge wird anhand dieses Werts dynamisch "
+#~ "angepasst; auch\n"
+#~ "die minimale und maximale Sichtweite werden angepasst."
+
+#~ msgid "New style water"
+#~ msgstr "Wasser im neuen Stil"
+
+#~ msgid ""
+#~ "Pre-generate all item visuals used in the inventory.\n"
+#~ "This increases startup time, but runs smoother in-game.\n"
+#~ "The generated textures can easily exceed your VRAM, causing artifacts in "
+#~ "the inventory."
+#~ msgstr ""
+#~ "Alle Itembilder im Inventar vor dem Spielstart erzeugen.\n"
+#~ "Dies erhöht die Vorbereitungszeit, wird aber zu einem flüssigerem Spiel "
+#~ "führen.\n"
+#~ "Die erzeugten Texturen können Ihr VRAM leicht überlasten, was Artefakte "
+#~ "im Inventar\n"
+#~ "verursachen kann."
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Texturen vorgenerieren"
+
+#~ msgid ""
+#~ "The allowed adjustment range for the automatic rendering range "
+#~ "adjustment.\n"
+#~ "Set this to be equal to viewing range minimum to disable the auto-"
+#~ "adjustment algorithm."
+#~ msgstr ""
+#~ "Die erlaubte Anpassungsreichweite für die automatische Render-"
+#~ "Reichweitenanpassung.\n"
+#~ "Setzen Sie den Wert auf den gleichen Wert wie die minimale Sichtweite, um "
+#~ "den automatischen\n"
+#~ "Anpassungsalgorithmus zu deaktivieren."
+
+#~ msgid "Vertical initial window size."
+#~ msgstr "Anfängliche Fensterhöhe."
+
+#~ msgid "Vertical spawn range"
+#~ msgstr "Vertikaler Startpunktbereich"
+
+#~ msgid "Viewing range minimum"
+#~ msgstr "Minimale Sichtweite"
+
+#~ msgid "Wanted FPS"
+#~ msgstr "Gewünschte Bildwiederholrate"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Einzelspielerwelt zurücksetzen"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Auf Menüelemente angewandter Skalierfaktor: "
+
+#~ msgid "Touch free target"
+#~ msgstr "Berührungsfreies Ziel"
+
+#~ msgid " KB/s"
+#~ msgstr " KB/s"
+
+#~ msgid " MB/s"
+#~ msgstr " MB/s"
+
+#~ msgid "Game Name"
+#~ msgstr "Spielname"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren"
+
+#~ msgid "GAMES"
+#~ msgstr "SPIELE"
+
+#~ msgid "Mods:"
+#~ msgstr "Mods:"
+
+#~ msgid "new game"
+#~ msgstr "neues Spiel"
+
+#~ msgid "EDIT GAME"
+#~ msgstr "SPIEL ÄNDERN"
+
+#~ msgid "Remove selected mod"
+#~ msgstr "Ausgewählte Mod löschen"
+
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Mod hinzufügen"
+
+#~ msgid "CLIENT"
+#~ msgstr "CLIENT"
+
+#~ msgid "START SERVER"
+#~ msgstr "SERVER STARTEN"
+
+#~ msgid "Name"
+#~ msgstr "Name"
+
+#~ msgid "Password"
+#~ msgstr "Passwort"
+
+#~ msgid "SETTINGS"
+#~ msgstr "EINSTELLUNGEN"
+
+#~ msgid "Preload item visuals"
+#~ msgstr "Lade Inventarbilder vor"
+
+#~ msgid "Finite Liquid"
+#~ msgstr "Endliches Wasser"
+
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "EINZELSPIELER"
+
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "TEXTUREN PAKETE"
+
+#~ msgid "MODS"
+#~ msgstr "MODS"
+
+#~ msgid "Add mod:"
+#~ msgstr "Modifikation hinzufügen:"
+
+#~ msgid "Local install"
+#~ msgstr "Lokale Install."
+
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n"
+#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. "
+
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Warnung: Einige konfigurierte Mods fehlen.\n"
+#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert "
+#~ "wird. "
+
+#~ msgid "KEYBINDINGS"
+#~ msgstr "TASTEN EINST."
+
+#~ msgid "Delete map"
+#~ msgstr "Karte löschen"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1262,101 +4927,117 @@ msgstr "Zoom"
#~ "- I: Inventar\n"
#~ "- T: Chat\n"
-#~ msgid "Delete map"
-#~ msgstr "Karte löschen"
-
-#~ msgid "KEYBINDINGS"
-#~ msgstr "TASTEN EINST."
-
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
-#~ msgstr ""
-#~ "Warnung: Einige konfigurierte Mods fehlen.\n"
-#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert "
-#~ "wird. "
-
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n"
-#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. "
-
-#~ msgid "Local install"
-#~ msgstr "Lokale Install."
-
-#~ msgid "Add mod:"
-#~ msgstr "Modifikation hinzufügen:"
-
-#~ msgid "MODS"
-#~ msgstr "MODS"
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "TEXTUREN PAKETE"
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "EINZELSPIELER"
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden"
-#~ msgid "Finite Liquid"
-#~ msgstr "Endliches Wasser"
+#~ msgid "Files to be deleted"
+#~ msgstr "Zu löschende Dateien"
-#~ msgid "Preload item visuals"
-#~ msgstr "Lade Inventarbilder vor"
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt"
-#~ msgid "SETTINGS"
-#~ msgstr "EINSTELLUNGEN"
+#~ msgid "Address required."
+#~ msgstr "Adresse benötigt."
-#~ msgid "Password"
-#~ msgstr "Passwort"
+#~ msgid "Create world"
+#~ msgstr "Welt erstellen"
-#~ msgid "Name"
-#~ msgstr "Name"
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten."
-#~ msgid "START SERVER"
-#~ msgstr "SERVER STARTEN"
+#~ msgid "Show Favorites"
+#~ msgstr "Zeige Favoriten"
-#~ msgid "Favorites:"
-#~ msgstr "Favoriten:"
+#~ msgid "Show Public"
+#~ msgstr "Zeige öffentliche"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENT"
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Mod hinzufügen"
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Warnung: Konfiguration nicht konsistent. "
-#~ msgid "Remove selected mod"
-#~ msgstr "Ausgewählte Mod löschen"
+#~ msgid "Configuration saved. "
+#~ msgstr "Konfiguration gespeichert. "
-#~ msgid "EDIT GAME"
-#~ msgstr "SPIEL ÄNDERN"
+#~ msgid "is required by:"
+#~ msgstr "wird benötigt von:"
-#~ msgid "new game"
-#~ msgstr "neues Spiel"
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen"
-#~ msgid "edit game"
-#~ msgstr "Spiel ändern"
+#~ msgid "Downloading"
+#~ msgstr "Lade herunter"
-#~ msgid "Mods:"
-#~ msgstr "Mods:"
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Neustart nach Ändern des Treibers erforderlich"
-#~ msgid "Games"
-#~ msgstr "Spiele"
+#~ msgid "Rendering:"
+#~ msgstr "Rendering:"
-#~ msgid "GAMES"
-#~ msgstr "SPIELE"
+#~ msgid "If enabled, "
+#~ msgstr "Wenn aktiviert, "
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren"
+#~ msgid "If disabled "
+#~ msgstr "Wenn deaktiviert "
-#~ msgid "Game Name"
-#~ msgstr "Spielname"
+#~ msgid "Enable a bit lower water surface, so it doesn't "
+#~ msgstr "Senkt ein bisschen den Wasserspiegel, so tut es nicht "
-#~ msgid " MB/s"
-#~ msgstr " MB/s"
+#, fuzzy
+#~ msgid "\""
+#~ msgstr "â€"
-#~ msgid " KB/s"
-#~ msgstr " KB/s"
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "Kartengenerierungsattribute speziell für Kartengenerator v7.\n"
+#~ "„ridges“ sind die Flüsse.\n"
+#~ "Flags, welche in der Bitschalterzeichenkette nicht angegeben sind,\n"
+#~ "werden von der Standardeinstellung unverändert gelassen.\n"
+#~ "Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+#~ "zu deaktivieren."
-#~ msgid "Fly mode"
-#~ msgstr "Flugmodus"
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Kartengenerierungsattribute speziell für den Täler-Kartengenerator.\n"
+#~ "Flags, welche in der Flags-Zeichenkette nicht angegeben sind,\n"
+#~ "werden von der Standardeinstellung unverändert gelassen.\n"
+#~ "Flags, welche mit „no“ beginnen, werden benutzt, um sie explizit\n"
+#~ "zu deaktivieren.\n"
+#~ "„altitude_chill“ macht höhere Höhen kälter, was zu einigen Biomproblemen "
+#~ "führen könnte.\n"
+#~ "„humid_rivers“ modifiziert die Luftfeuchtigkeit um Flüssen und in "
+#~ "Gebieten, in denen das Wasser sich in Pfützen ansammeln würde.\n"
+#~ "Dies könnte mit fein abgestimmten Biomen zu Konflikten führen."
+
+#~ msgid "No!!!"
+#~ msgstr "Nein!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Normalmaps generieren"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Öffentliche Serverliste"
+
+#~ msgid "No of course not!"
+#~ msgstr "Nein, natürlich nicht!"
diff --git a/po/eo/minetest.po b/po/eo/minetest.po
new file mode 100644
index 000000000..d1c137f21
--- /dev/null
+++ b/po/eo/minetest.po
@@ -0,0 +1,4229 @@
+# Esperanto translations for minetest package.
+# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# Automatically generated, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2015-09-13 12:36+0200\n"
+"Last-Translator: Tim <t4im@openmailbox.org>\n"
+"Language-Team: Esperanto <https://hosted.weblate.org/projects/minetest/"
+"minetest/eo/>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.4-dev\n"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured in a Lua script, such as a mod:"
+msgstr "Eraro okazis en Lua skripto, kiel modifo:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured:"
+msgstr "Eraro okazis:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Ĉefmenuo"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
+msgid "Ok"
+msgstr "Bone"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Rekonekti"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Servilo petis rekonekton:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
+msgstr "Ŝargas…"
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr "Provu reÅalti la publikan serviloliston kaj kontrolu vian retkonekton."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Nuligi"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dependas:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "MalÅaltu modifaron"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Åœaltu modifaron"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Ŝaltu ĉiujn"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Fiaskis aktivigi modifon \"$1\", ĉar Äi enhavas malpermesajn signojn. Nur "
+"literciferaj signoj [a-z0-9_] estas permesaj."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "KaÅu ludon"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr "KaÅu modifarojn"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Modifo:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Konservi"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Mondo:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "Åaltita"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Mondo nomata \"$1\" jam ekzistas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Krei"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "ElÅutu subludon, kiel minetest_game, el minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "ElÅutu ludon el minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Ludo"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Mondogenerilo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Neniu mondonomo donitas aÅ­ neniu ludon elektitas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Fontnombro"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ""
+"Averto: La minimuma programista testo estas intencita por programistoj."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Monda nomo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Neniu instalantaj subludoj."
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Ĉu vi certas forigi \"$1\"?"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Forigi"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr "Modmgr: fiaskis forigi \"$1\""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr "Modmgr: malvalida modifo-dosierindiko \"$1\""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Ĉu forigi mondon \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Akcepti"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Alinomi modifaron:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
+#, fuzzy
+msgid "Disabled"
+msgstr "MalÅaltu modifaron"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "Åaltita"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Games"
+msgstr "Ludo"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Modifoj"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Select path"
+msgstr "Selekto"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
+msgstr ""
+"\n"
+"Instali Modifon: malsubtenata dosiertipo \"$1\" aÅ­ rompiÄata arkivo"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "Fiaskis instali $1 al $2"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instali modifon: dosiero \"$1\""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr "Instali modifon: Ne povis trovi veran modifonomon por $1"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Instali modifon: Ne povis trovi Äustan dosierujan nomon por modifaro $1"
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Fermi"
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr "ElÅutas $1, bonvolu atendi…"
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instali"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "PaÄo $1 de $2"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "Takso"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Serĉi"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Konciza nomo:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Instalis sukcese:"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Neordigita"
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Instali denove"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Aktivaj kontribuistoj"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Kernprogramistoj"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Kontribuantaro"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Eksaj kontribuistoj"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Eksaj kernprogramistoj"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr "Instalantaj modifoj:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Modifaj informoj:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr "Neniu modifa priskribo disponeblas"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr "Alinomi"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Selekti modifan dosieron:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Malinstali selektan modifo"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Malinstali selektan modifaron"
+
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
+msgstr "Adreso / Pordo:"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Kliento"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "Konekti"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "Kreiva reÄimo"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "DamaÄo Åaltitas"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nomo / Pasvorto:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "Dueloj Åaltitas"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Asocianta adreso"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Agordi"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "Kreiva reÄimo"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr "Åœalti damaÄon"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "Nomo/Pasvorto"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nova"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Neniu mondo kreintas aÅ­ selektantas!"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
+msgstr "Pordo"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Publika"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Elektu mondon:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "Servilo"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Servila pordo"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Startigi ludon"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "3D Clouds"
+msgstr "3D nuboj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Advanced Settings"
+msgstr "Agordoj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Glatigo:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Ĉu vi certas, ke vi volas nuligi vian solludantan mondon?"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bilinear Filter"
+msgstr "Bilineara filtrilo"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Protuberancmapado"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "ÅœanÄi klavojn"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Ligata glaco"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Ŝikaj foliaĵoj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr "Mipmapo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "Mipmapo + Malizotropa filtrilo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Ne"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Filter"
+msgstr "Neniu filtrilo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Neniu Mipmapo"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Marki nodaĵojn"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Marki nodaĵojn"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Protuberancmapado"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Opakaj foliaĵoj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Opaka akvo"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Paralaksa Okludo"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Ŝaltu ĉiujn"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Agordoj"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "Ombrigiloj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Simplaj foliaĵoj"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Glatiga lumo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Teksturado:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Por uzi ombrigilojn, OpenGL-a pelilo estas necesa."
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tone Mapping"
+msgstr "Protuberancmapado"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
+msgstr "TuÅa sojlo (px)"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "Triineara filtrilo"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Leaves"
+msgstr "Ondantaj foliaĵoj"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Plants"
+msgstr "Ondantaj plantoj"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Water"
+msgstr "Ondanta akvo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Jes"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "Agordi modifojn"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "Ĉefmenuo"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Startigi solludanton"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "Ludi"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "Solludanto"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "Neniu informoj disponeblas"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selekti teksturaron:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Teksturaroj"
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Konekto eltempiÄas."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Finita!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Pravalorizi nodaĵojn"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Pravalorizi nodaĵojn…"
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Ŝargi teksturojn…"
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Refaru ombrigilojn…"
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Konekteraro (ĉu eltempiÄo?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Ne povas trovi aÅ­ Åuti ludon \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Nevalida ludspecifo."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Ĉefmenuo"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Ne mondo selektas kaj ne adreso provizatas. Nenion fari."
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Ludanta nomo trolongas."
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Donita monda dosierindiko ne ekzistas. "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Reviziu debug.txt por detaloj."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "ÅœanÄi klavojn"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "ÅœanÄi pasvorton"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Konekti al servilo…"
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "DaÅ­rigi"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Krei klienton…"
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Krei servilon…"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"DefaÅ­ltaj Klavoj:\n"
+"- WASD: movi\n"
+"- Spacetklavo: salti/klimi\n"
+"- Majuskliga Klavo: lanti/malsupreniri\n"
+"- Q: lasi aĵon\n"
+"- I: inventaro\n"
+"- Muso: turni/rigardi\n"
+"- Muso maldekstra: fosi/bati\n"
+"- Muso dekstra: lokigi/uzi\n"
+"- Musrado: elekti aĵon\n"
+"- T: babili\n"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"DefaÅ­ltaj Klavoj:\n"
+"Nevidebla menuo :\n"
+"- unufoja tuÅeto: aktivigi butonon\n"
+"- dufoja tuÅeto: lokigi/uzi\n"
+"- Åova fingro: rigardi\n"
+"Videbla menuo/inventaro:\n"
+"- dufoja tuÅeto (ekstere):\n"
+" -->fermi\n"
+"- tuÅi stakon, tuÅi inventaran spacon:\n"
+" --> movi stakon\n"
+"- tuÅi kaj treni, tuÅeti duan fingron\n"
+" --> lokigi unun aĵon al inventara spaco\n"
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr "Foriri al menuo"
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "Foriri al operaciumo"
+
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Aĵaj difinoj…"
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/game.cpp
+msgid "Media..."
+msgstr "Medioj…"
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Nodaĵaj difinoj…"
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Adrestrovili…"
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "RenaskiÄi"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "MalÅaltiÄi…"
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Sonintenso"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "Vi mortis."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "bone"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Enen "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "DaÅ­rigi"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "\"Uzi\" = malsupreniri"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "MalantaÅ­en"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Babili"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Komando"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konzolo"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Dufoja tuÅeto \"salti\" por baskuli flugreÄimon"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Lasi"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "AntaÅ­en"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventaro"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Salti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Klavo jam uzatas"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Klavagordoj (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Maldekstren"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Presi stakojn"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "ÅœanÄi vidodistancon"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Dekstren"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Lanti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Baskuli filmreÄimon"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Baskuli rapidreÄimon"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Baskuli flugreÄimon"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "Baskuli nekolizian reÄimon"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Uzi"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "premi klavon"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "ÅœanÄi"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Certigi pasvorton"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nova pasvorto"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Malnova pasvorto"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Pasvortoj ne kongruas!"
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "Foriri"
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Sonintenso: "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplikaĵoj"
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr "Retro"
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "FiksiÄema klavo"
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "Vakigo"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Komo"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr "Stiro"
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Konverto"
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Malsupren"
+
+#: src/keycode.cpp
+msgid "End"
+msgstr "Fino"
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "ViÅi OEF"
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr "Eskapo"
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Ruli"
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr "Finalo"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Helpo"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Hejmen"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Enmeti"
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr "Junja"
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "Kanji"
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Maldekstra butono"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Maldekstra Stiro"
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Maldekstra Menuo"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Maldekstra Majuskligo"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Maldekstra fenestro"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menuo"
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Meza butono"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minuso"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "ReÄima ÅanÄo"
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Sekvanto"
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nekonverto"
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Nombra Baskulo"
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Klavareto *"
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Klavareto +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Klavareto -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Klavareto /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "Klavareto 0"
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "Klavareto 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "Klavareto 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "Klavareto 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "Klavareto 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "Klavareto 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "Klavareto 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "Klavareto 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "Klavareto 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "Klavareto 9"
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Vakigi"
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Haltigo"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punkto"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Pluso"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Presi"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "AntaÅ­e"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enen"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Dekstra butono"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "Dekstra Stiro"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "Dekstra Menuo"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Dekstra Majuskligo"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Dekstra fenestro"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Ruluma Baskulo"
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Selekto"
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Majuskligo"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Dormo"
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Ekrankopio"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spacetklavo"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabo"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Supren"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X-Butono 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X-Butono 2"
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "Zomo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "3D nuboj"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "MalantaÅ­en"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Base terrain height"
+msgstr "Ondanta akvo"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "Bilineara filtrilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr "Asocianta adreso"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Protuberancmapado"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "ÅœanÄi klavojn"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "ÅœanÄi klavojn"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Kreiva reÄimo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Kreiva reÄimo"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "3D nuboj"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Ĉefmenuo"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Komando"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Ligata glaco"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "Konekti al servilo…"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Konzolo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Konzolo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Konzolo"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Stiro"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Åœalti damaÄon"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Nova pasvorto"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "Åœalti partiklojn"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double tap jump for fly"
+msgstr "Dufoja tuÅeto \"salti\" por baskuli flugreÄimon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Dufoja tuÅeto \"salti\" por baskuli flugreÄimon"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Åœaltu modifaron"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable mod security"
+msgstr "Interreta modifo-deponejo"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Åœalti damaÄon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Åœalti damaÄon"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "no"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Neniu filtrilo"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "AntaÅ­en"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "GUI scaling filter"
+msgstr "GUI skala faktoro"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Generate normalmaps"
+msgstr "Generi Normalmapojn"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Modifoj"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Ludo"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Inventaro"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Salti"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Maldekstra Menuo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Ĉefmenuo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Ĉefmenuo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mondogenerilo"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Menuo"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Protuberancmapado"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node highlighting"
+msgstr "Marki nodaĵojn"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion Scale"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion bias"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion iterations"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion mode"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion strength"
+msgstr "Paralaksa Okludo"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Player name"
+msgstr "Ludanta nomo trolongas."
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "ÅœanÄi vidodistancon"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Dekstra Menuo"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Ekrankopio"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Ekrankopio"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Ekrankopio"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Startigi solludanton"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "Servilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "Servila pordo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "Servila pordo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "Servilo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "Servila pordo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Publika servilolisto"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Publika servilolisto"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Glatiga lumo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Lanti"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of generated normalmaps."
+msgstr "Generi Normalmapojn"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Teksturaroj"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Triineara filtrilo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "premi klavon"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Eksaj kernprogramistoj"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Sonintenso"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Walking speed"
+msgstr "Ondantaj foliaĵoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Aĵaj teksturoj…"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Ondantaj foliaĵoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Ondantaj foliaĵoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving plants"
+msgstr "Ondantaj plantoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water"
+msgstr "Ondanta akvo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water height"
+msgstr "Ondanta akvo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water length"
+msgstr "Ondanta akvo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water speed"
+msgstr "Ondanta akvo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Ŝargi teksturojn…"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Nuligi solludantan mondon"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Skala faktoro por menuoj "
+
+#~ msgid "Touch free target"
+#~ msgstr "SentuÅa celo"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Restartigu Minetest-on por efikigi pelilan ÅanÄon"
+
+#~ msgid "Rendering:"
+#~ msgstr "Bildigo:"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "Åaltita"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "MalÅaltu modifaron"
+
+#~ msgid "No!!!"
+#~ msgstr "Ne!!!"
+
+#, fuzzy
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generi Normalmapojn"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Publika servilolisto"
+
+#~ msgid "No of course not!"
+#~ msgstr "Ne, memkompreneble!"
diff --git a/po/es/minetest.po b/po/es/minetest.po
index 29dca2f2d..03df1d597 100644
--- a/po/es/minetest.po
+++ b/po/es/minetest.po
@@ -7,176 +7,295 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-02-14 13:35+0100\n"
-"Last-Translator: Diego Martínez <lkaezadl3@yahoo.com>\n"
-"Language-Team: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-10 18:21+0000\n"
+"Last-Translator: Diego Martínez <lkaezadl3@gmail.com>\n"
+"Language-Team: Spanish "
+"<https://hosted.weblate.org/projects/minetest/minetest/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.7.4\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr "Ha ocurrido un error en una script de Lua, como en un mod:"
+msgstr "Un error ha ocurrido en un script de Lua, tal como en un mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "Ha ocurrido un error:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menú principal"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Aceptar"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Reconectar"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "El servidor ha solicitado una reconexión:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Cargando..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Desajuste con la versión del protocolo. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "El servidor hace respetar la versión $1 del protocolo "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "El servidor soporta versiones del protocolo entre $1 y $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
-msgstr "Intenta re-habilitar la lista de servidores públicos y verifica tu conexión a Internet."
+msgstr ""
+"Intente rehabilitar la lista de servidores públicos y verifique su conexión "
+"a Internet."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Solo se soporta la versión de protocolo $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Nosotros soportamos versiones de protocolo entre la versión $1 y $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Cancelar"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Mundo:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dependencias:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Desactivar paquete"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Activar paquete"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Activar todos"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Error al activar el mod \"$1\" por contener caracteres no permitidos. Solo "
+"los caracteres [a-z0-9_] estan permitidos."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Ocultar juego"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr "Ocultar contenido mp"
+msgstr "Ocultar contenido"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Dependencias:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Guardar"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Activar paquete"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Desactivar paquete"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Mundo:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "Activado"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Activar todos"
+#: 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:50
-msgid "World name"
-msgstr "Nombre del mundo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Crear"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Semilla"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Generador de mapas"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Descarga uno desde minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Juego"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Crear"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generador de mapas"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "No tienes sub-juegos instalados."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Descarga algunos desde minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Semilla"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
"Advertencia: El juego \"Minimal development test\" está diseñado para "
"desarrolladores."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Ya existe un mundo llamado \"$1\""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nombre del mundo"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "No tienes sub-juegos instalados."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "¿Realmente desea borrar \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Sí"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "¡No, por su puesto que no!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Borrar"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Error al borrar \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Ruta del mod \"$1\" inválida"
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "¿Eliminar el mundo \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "No"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Aceptar"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Renombrar paquete de mod:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Aceptar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" no es un indicador válido."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Instalar mod: Archivo: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Ninguna descripción de ajuste dada)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Volver a la página de Configuración"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Navegar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Desactivado"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Editar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Activado"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"El formato es 3 números separados por comas y éstos dentro de paréntesis."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formato: <offset> <escala> (<extensión X>, <extensión Y> , <extensión Z>), "
+"<semilla>, <octavas>, <persistencia>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Juegos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "Opcionalmente, el lacunaridad puede ser anexado con una coma líder."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Por favor, introduzca una lista de indicadores separados por comas."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Por favor, introduzca un entero válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Por favor, introduzca un número válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Los valores posibles son: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Restablecer por defecto"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Seleccionar ruta"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Mostrar los nombres técnicos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "El valor debe ser mayor que $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "El valor debe ser menor que $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -184,462 +303,507 @@ msgstr ""
"\n"
"Instalar mod: Formato de archivo \"$1\" no soportado o archivo corrupto"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Fallo al instalar $1 en $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Instalar mod: Imposible encontrar un nombre de archivo adecuado para el "
-"paquete de mod $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instalar mod: Archivo: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Sin ordenar"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Instalar mod: Imposible encontrar un nombre de archivo adecuado para el "
+"paquete de mod $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Buscar"
+# En el menú principal de mods pone repositorio no tienda.
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Cerrar repositorio"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "Descargando $1, por favor espere..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Instalado con éxito:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instalar"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Nombre corto:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Página $1 de $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Clasificación"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Reinstalar"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instalar"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Buscar"
-# En el menú principal de mods pone repositorio no tienda.
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Cerrar repositorio"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nombre corto:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Página $1 de $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Instalado con éxito:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Créditos"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Sin ordenar"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Desarrolladores principales"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Reinstalar"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Colaboradores activos"
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr "Antiguos desarrolladores"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Desarrolladores principales"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Créditos"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Antiguos colaboradores"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Antiguos desarrolladores principales"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Mods instalados:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Repositorio de mods en línea"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Información del mod:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "La descripción del mod no está disponible"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Información del mod:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Renombrar"
-# El nombre completo no cabe.
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Desinstalar el paquete selecc."
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Desinstalar el mod seleccionado"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Selecciona el fichero del mod:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mods"
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
-msgstr "Dirección / puerto:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Desinstalar el mod seleccionado"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Nombre / contraseña:"
+# El nombre completo no cabe.
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Desinstalar el paquete seleccionado"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Lista de servidores públicos"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Dirección / puerto"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Borrar"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Cliente"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Conectar"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Modo creativo"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Daño activado"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Borrar Fav."
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Favorito"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Nombre / contraseña"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP activado"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Cliente"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nuevo"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Asociar dirección"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Configurar"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Iniciar juego"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Selecciona un mundo:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Modo creativo"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Permitir daños"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Público"
-
# Los dos puntos son intencionados.
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
-msgstr "Nombre / contraseña:"
+msgstr "Nombre / contraseña"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "Asociar dirección"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nuevo"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Puerto"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Puerto del servidor:"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Público"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Selecciona un mundo:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Servidor"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "Hojas opacas"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Puerto del servidor"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "Hojas simples"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Iniciar juego"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Ãrboles detallados"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Sin filtro"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Nubes 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Configuración Avanzada"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Suavizado:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Filtro bi-lineal"
+msgstr "Filtrado bilineal"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Filtro tri-lineal"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "Mapeado de relieve"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Sin Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Configurar teclas"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Vidrio Conectado"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Hojas elegantes"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "Mipmap + Filtro aniso."
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "No"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "¡¡¡No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Sin Filtrado"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Iluminación suave"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Sin Mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Habilitar partículas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Resaltar nodos"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nubes 3D"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Marcar nodos"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Agua opaca"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Ninguno"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Vidrios conectados"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "Mapeado de relieve"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Resaltar nodos"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Hojas opacas"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Texturizado:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Agua opaca"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Oclusión de paralaje"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Renderizado:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Partículas"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Reinicia minetest para que los cambios en el controlador tengan efecto"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Configuración"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Sombreadores"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Configurar teclas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Hojas simples"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Reiniciar mundo de un jugador"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Iluminación Suave"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Factor de escala (GUI)"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturizado:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Factor de escala aplicado a los elementos del menú: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Tocar para interactuar"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Mapeado de tonos"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "Umbral táctil (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Mapeado de relieve"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Generar mapas normales"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Oclusión de paralaje"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Oleaje en el agua"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtrado Trilineal"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Movimiento de hojas"
+msgstr "Movimiento de Hojas"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Movimiento de plantas"
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL."
+msgstr "Movimiento de Plantas"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Configuración"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Oleaje"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Comenzar un jugador"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Sí"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Configurar mods"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Principal"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Comenzar un jugador"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Jugar"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Un jugador"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Seleccione un paquete de texturas:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Sin información disponible"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Seleccione un paquete de texturas:"
+
# No cabe "Paquetes de texturas".
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Texturas"
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Tiempo de espera de la conexión agotado."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "¡Completado!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Inicializando nodos"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicializando nodos..."
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr "Cargando texturas..."
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr "Reconstruyendo sombreadores..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Inicializando nodos..."
-
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr "Inicializando nodos"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Error de conexión (¿tiempo agotado?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Texturas de objetos..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "No se puede encontrar o cargar el juego \""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "¡Completado!"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Juego especificado no válido."
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Menú principal"
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Nombre de jugador demasiado largo."
-
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Error de conexión (¿tiempo agotado?)"
-
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"No se seleccionó el mundo y no se ha especificado una dirección. Nada que "
"hacer."
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nombre de jugador demasiado largo."
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "La ruta del mundo especificada no existe: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "No se puede encontrar o cargar el juego \""
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Juego especificado no válido."
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Revisa debug.txt para más detalles."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Configurar teclas"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Cambiar contraseña"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Conectando al servidor..."
+
+#: src/game.cpp
+msgid "Continue"
msgstr "Continuar"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Has muerto."
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Creando cliente..."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Revivir"
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Creando servidor..."
-#: src/game.cpp:1092
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Controles predeterminados:\n"
+"- WASD: moverse\n"
+"- Espacio: saltar/subir\n"
+"- Mayús.: puntillas/bajar\n"
+"- Q: soltar objeto\n"
+"- I: inventario\n"
+"- Ratón: girar/mirar\n"
+"- Ratón izq.: cavar/golpear\n"
+"- Ratón der.: colocar/usar\n"
+"- Ratón rueda: elegir objeto\n"
+"- T: chat\n"
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -667,528 +831,3457 @@ msgstr ""
"- toque y arrastrar, toque con 2 dedos:\n"
" -->colocar solamente un objeto\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"Controles predeterminados:\n"
-"- WASD: moverse\n"
-"- Espacio: saltar/subir\n"
-"- Mayús.: puntillas/bajar\n"
-"- Q: soltar objeto\n"
-"- I: inventario\n"
-"- Ratón: girar/mirar\n"
-"- Ratón izq.: cavar/golpear\n"
-"- Ratón der.: colocar/usar\n"
-"- Ratón rueda: elegir objeto\n"
-"- T: chat\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuar"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Cambiar contraseña"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volumen del sonido"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Configurar teclas"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Salir al menú"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Salir al S.O."
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Cerrando..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Creando servidor..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Creando cliente..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definiciones de objetos..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Resolviendo dirección..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Conectando al servidor..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Media..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definiciones de objetos..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Definiciones de nodos..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Resolviendo dirección..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Revivir"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Cerrando..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Consulta debug.txt para obtener más detalles."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volumen del sonido"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Ingresar "
+#: src/game.cpp
+msgid "You died."
+msgstr "Has muerto."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "aceptar"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Combinaciones de teclas. (Si este menú da error, elimina líneas en minetest."
-"conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Ingresar "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Continuar"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Usar\" = Descender"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Pulsar dos veces \"saltar\" para volar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Atrás"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "La tecla ya se está utilizando"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chat"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "pulsa una tecla"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comando"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Adelante"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Consola"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Atrás"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Pulsar dos veces \"saltar\" para volar"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Izquierda"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Tirar"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Derecha"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Adelante"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Usar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventario"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Saltar"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Caminar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "La tecla ya se está utilizando"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Tirar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Combinaciones de teclas. (Si este menú da error, elimina líneas en minetest."
+"conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventario"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Izquierda"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chat"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Imprimir pilas"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Comando"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Seleccionar distancia"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Consola"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Derecha"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Activar volar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Caminar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Activar cinemático"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Activar rápido"
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
-msgstr "Activar cinemático"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Activar volar"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Activar noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Seleccionar distancia"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Imprimir pilas"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Usar"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Contraseña anterior"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "pulsa una tecla"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Contraseña nueva"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Cambiar"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Confirmar contraseña"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Cambiar"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Contraseña nueva"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Contraseña anterior"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "¡Las contraseñas no coinciden!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volúmen del sonido: "
-
# Es en el menú de sonido. Salir suena muy fuerte.
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Cerrar"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Botón izquierdo"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Botón central"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volúmen del sonido: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Botón derecho"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplicaciones"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X Button 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Atentamente"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Atrás"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Bloq Mayús"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Limpiar"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Retorno"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulador"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Button 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Bloq Mayús"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Coma"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convertir"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menú"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pausa"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Abajo"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Fin"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convertir"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Borrar OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Ejecutar"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Ayuda"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Inicio"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Introducir"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "No convertir"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Fin"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Botón izquierdo"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Inicio"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Control izq."
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Cambio de modo"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menú izq."
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Siguiente"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift izq."
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Anterior"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Win izq."
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Espacio"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menú"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Abajo"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Botón central"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Ejecutar"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Menos"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Captura"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Cambio de modo"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Seleccionar"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Siguiente"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Arriba"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "No convertir"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Ayuda"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Bloq Núm"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Introducir"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Captura de pantalla"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Win izq."
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Aplicaciones"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Win der."
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Suspender"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Bloq Núm"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Limpiar OEM"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Bloq Despl"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift izq."
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pausa"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift der."
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punto"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Control izq."
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Más"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Menú izq."
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Captura"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Anterior"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Retorno"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Botón derecho"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Control der."
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Menú der."
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Coma"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift der."
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Menos"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Win der."
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punto"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Bloq Despl"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Más"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Seleccionar"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Suspender"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Borrar OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Captura de pantalla"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Espacio"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "Limpiar OEM"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulador"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Arriba"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Botón 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Botón 2"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid " MB/s"
-#~ msgstr " MB/s"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"Compensado (X,Y,Z) del ruido fractal en unidades de 'scale'.\n"
+"Usado para mover un área plana adecuada para el inicio a (0, 0).\n"
+"El valor predeterminado es adecuado para conjunts de Mandelbrot,\n"
+"necesita ser editado para conjuntos de Julia.\n"
+"El valor debe ser entre -2 y 2. Multiplicar por 'scale' para compensar en "
+"nodos."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = oclusión de paralaje con información de inclinación (más rápido).\n"
+"1 = mapa de relieve (más lento, más preciso)."
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Nubes en 3D"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Modo 3D"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Soporte 3D.\n"
+"Soportado Actualmente:\n"
+"- Ninguno (none): No hay salida 3D.\n"
+"- Anaglifo (anaglyph): 3D para anteojos de colores cyan y magenta.\n"
+"- Entrelazado (interlaced): Filas pares e impares intercaladas.\n"
+"- Superior-inferior (topbottom): Partir pantalla horizontalmente.\n"
+"- Lado a lado (sidebyside): Partir pantalla verticalmente."
+
+#: 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 ""
+"Una semilla de mapa para un mapa nuevo, deja vacío para una semilla al "
+"azar.\n"
+"Será anulado si se crea un nuevo mundo en el menú principal."
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Un mensaje para ser mostrado a todos los clientes cuando el servidor cae."
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Un mensaje para ser mostrado a todos los clientes cuando el servidor se "
+"apaga."
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Limite absoluto de colas emergentes"
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Aceleración en el aire"
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr "Intervalo de administración de bloques activos"
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr "Intervalo de modificador de bloques activos"
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Rango de bloque activo"
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Alcance de objetos activos a enviar"
+
+#: 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 ""
+"Dirección a conectarse.\n"
+"Dejar aquí vacío para iniciar un servidor local.\n"
+"Nótese que el campo de dirección en el menú principal anula este ajuste."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Ajustar la configuración de puntos por pulgada a tu pantalla (único no X11/"
+"Android) p.ej. para pantallas 4K."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Ajustar la codificación gamma para las tablas de luz. Los números mas bajos "
+"son mas brillantes.\n"
+"Este ajuste es solo para el cliente y es ignorado por el servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Altura de enfriamiento"
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Siempre volar y rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Gamma de oclusión de ambiente"
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Amplificar valles"
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtrado anisotrópico"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Anunciar servidor"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Anunciar a esta lista de servidores.\n"
+"Si deseas anunciar tu dirección ipv6, usa serverlist_url = v6.servers."
+"minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Escala aproximada (X,Y,Z) en nodos, de los fractales"
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Preguntar para volver a conectar despues de una caída"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Automáticamente informar a la lista del servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Tecla retroceso"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Altura base del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Básico"
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr "Privilegios básicos"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtrado bilineal"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Dirección BIND"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+"Bits por píxel (también conocido como profundidad de color) en modo de "
+"pantalla completa."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Construir dentro de jugador"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Mapeado de relieve"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Suavizado de cámara"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Suavizado de cámara en modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tecla alternativa para la actualización de la cámara"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Ruido de cueva Nº1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Ruido de cueva Nº2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr "Anchura de cueva"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Formar cuevas y túneles en la intersección de dos ruidos"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tecla del Chat"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tecla alternativa para el chat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Elección de 18 fractales desde 9 fórmulas.\n"
+"1 = Conjunto de Mandelbrot 4D \"Redondo\".\n"
+"2 = Conjunto de Julia 4D \"Redondo\".\n"
+"3 = Conjunto de Mandelbrot 4D \"Cuadrado\".\n"
+"4 = Conjunto de Julia 4D \"Cuadrado\".\n"
+"5 = Conjunto de Mandelbrot 4D \"Mandy Cousin\".\n"
+"6 = Conjunto de Julia 4D \"Mandy Cousin\".\n"
+"7 = Conjunto de Mandelbrot 4D \"Variado\".\n"
+"8 = Conjunto de Julia 4D \"Variado\".\n"
+"9 = Conjunto de Mandelbrot 3D \"Mandelbrot/Mandelbar\".\n"
+"10 = Conjunto de Julia 3D \"Mandelbrot/Mandelbar\".\n"
+"11 = Conjunto de Mandelbrot 3D \"Ãrbol de Navidad\".\n"
+"12 = Conjunto de Julia 3D \"Ãrbol de Navidad\".\n"
+"13 = Conjunto de Mandelbrot 3D \"Mandelbulb\".\n"
+"14 = Conjunto de Julia 3D \"Mandelbulb\".\n"
+"15 = Conjunto de Mandelbrot 3D \"Mandelbulb Coseno\".\n"
+"16 = Conjunto de Julia 3D \"Mandelbulb Coseno\".\n"
+"17 = Conjunto de Mandelbrot 4D \"Mandelbulb\".\n"
+"18 = Conjunto de Julia 4D \"Mandelbulb\"."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Tamaño del chunk"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tecla modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Limpiar texturas transparentes"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Cliente y servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Velocidad de escalada"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Altura de la nube"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Radio de nube"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Nubes"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Las nubes son un efecto del lado del cliente."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Nubes en el menú"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Niebla colorida"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"Lista de mods de fiar separada por coma que se permiten acceder a funciones\n"
+"inseguras incluso quando securidad de mods está puesto (vía "
+"request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Lista separada por comas de los mods a los que se les permite usar las\n"
+"interfaces de HTTP, las cuales permiten cargar y descargar datos desde/"
+"hacia\n"
+"la Internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tecla comando"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Conectar vidrio"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Conectar a un servidor media externo"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Conectar gafas si el nodo lo soporta."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Alfa de consola"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Color de la consola"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tecla de la consola"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Avance continuo"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Avance continuo (sólo utilizado para la testing)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Controles"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Controla el 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 size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Controla el tamaño de desiertos y playas en Mapgen v6.\n"
+"Cuando snowbiomes están activados 'mgv6_freq_desert' se ignora."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controla lo escarpado/profundo de las depresiones."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controla lo escarpado/alto de las colinas."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+"Controla el ancho de los túneles, un valor menor crea túneles más anchos."
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Mensaje de error"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea características de lava impredecibles en cuevas.\n"
+"Pueden hacer la minería más difícil. Cero lo deshabilita. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea características de agua impredecibles en cuevas.\n"
+"Pueden hacer la minería más difícil. Cero lo deshabilita. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Opacidad de punto de mira"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Alfa del punto de mira (opacidad, entre 0 y 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Color de la cruz"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Color de la cruz (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Velocidad al agacharse"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Daño"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Tecla alternativa para la información de la depuración"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Nivel de registro de depuración"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Intervalo de servidor dedicado"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Aceleración por defecto"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Juego por defecto"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+"Juego predeterminado al crear un nuevo mundo.\n"
+"Será sobreescrito al crear un mundo desde el menú principal."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Contraseña por defecto"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilegios por defecto"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Tiempo de espera predeterminado para cURL, en milisegundos.\n"
+"Sólo tiene efecto si está compilado con cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Define el intervalo de muestreo de las texturas.\n"
+"Un valor más alto causa mapas de relieve más suaves."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Define la distancia máxima de envío de jugadores, en bloques (0 = sin "
+"límite)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Demora para mostrar información sobre herramientas, en milisegundos."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Manejo de funciones de Lua obsoletas"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Profundidad en la cual comienzan las grandes cuevas."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Profundidad en la cual comienzan cuevas enormes."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Velocidad de descenso"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Descripción del servidor, que se muestra cuando los jugadores se unen, y en\n"
+"la lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Desincronizar animación de bloques"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+"Datos detallados de perfilación de mod. Útil para desarrolladores de mods."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Perfilador detallado de los mods"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Determina la forma del terreno.\n"
+"Los tres números entre paréntesis controlan la escala\n"
+"del terreno, y deben ser iguales."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Desactivar Anticheat"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "No permitir contraseñas vacías"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+"Nombre de dominio del servidor, será mostrado en la lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Pulsar dos veces \"saltar\" para volar"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Pulsar dos veces \"saltar\" alterna el modo vuelo."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Tecla de \"Soltar objeto\""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Imprimir información de depuración del generador de mapas."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Activar VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Activar seguridad de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Habilitar daños y muerte de jugadores."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Habilitar entrada aleatoria (solo usar para pruebas)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Habilita iluminación suave con oclusión ambiental simple.\n"
+"Deshabilítalo para mayor velocidad o una vista diferente."
+
+#: 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 ""
+"Habilitar para no permitir que clientes antíguos se conecten.\n"
+"Los clientes antíguos son compatibles al punto de conectarse a nueos "
+"servidores,\n"
+"pero pueden no soportar nuevas características."
+
+#: 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 ""
+"Habilita el uso de un servidor remoto de medios (si lo provee el servidor).\n"
+"Servidores remotos ofrecen una manera significativamente más rápida de\n"
+"descargar medios (por ej. texturas) cuando se conecta a un servidor."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Habilita la animación de objetos en el inventario."
+
+#: 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 ""
+"Habilita mapeado de relieves para las texturas. El mapeado de normales "
+"necesita ser\n"
+"suministrados por el paquete de texturas, o será generado automaticamente.\n"
+"Requiere habilitar sombreadores."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "Habilitar cacheado de mallas giradas."
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Habilita el mapeado de tonos fílmico"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Activar mini-mapa."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"Habilita la generación de mapas de normales (efecto realzado) en el momento."
+"\n"
+"Requiere habilitar mapeado de relieve."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Habilita mapeado de oclusión de paralaje.\n"
+"Requiere habilitar sombreadores."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Opción experimental, puede causar espacios visibles entre los\n"
+"bloques si se le da un valor mayor a 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS (cuadros/s) en el menú de pausa"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Movimiento de cámara al caer"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Fuente de reserva"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Sombra de fuente de reserva"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Alfa de sombra de fuente de reserva"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Tamaño de fuente de reserva"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Tecla de \"Rápido\""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Aceleración del modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Velocidad del modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Movimiento rápido"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Movimiento rápido (por medio de tecla de \"Uso\").\n"
+"Requiere privilegio \"fast\" (rápido) en el servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Campo visual"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Campo visual en grados."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Fichero en client/serverlist/ que contiene sus servidores favoritos que se "
+"mostrarán en la página de Multijugador."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr "Profundidad del relleno"
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Mapa de tonos fílmico"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+"Las texturas filtradas pueden mezclar los valores RGB de los vecinos\n"
+"completamete tranparentes, los cuales los optimizadores de ficheros\n"
+"PNG usualmente descartan, lo que a veces resulta en un borde claro u\n"
+"oscuro en las texturas transparentes. Aplica éste filtro para limpiar ésto\n"
+"al cargar las texturas."
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filtrado"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Semilla de mapa fija"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Tecla vuelo"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Volar"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Niebla"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Tecla para alternar niebla"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Ruta de fuentes"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Sombra de fuentes"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Alfa de sombra de fuentes"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Alfa de sombra de fuentes (opacidad, entre 0 y 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "Compensado de sombra de fuente, si es 0 no se dibujará la sombra."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Tamaño de fuente"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr "Formato de capturas de pantalla."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Tecla Avanzar"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Fuentes Freetype"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Desde cuán lejos se generan los bloques para los clientes, especificado\n"
+"en bloques de mapa (mapblocks, 16 nodos)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Desde cuán lejos se envían bloques a los clientes, especificado en\n"
+"bloques de mapa (mapblocks, 16 nodos)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Desde cuán lejos los clientes saben acerca de otros objetos,\n"
+"especificado en bloques de mapa (mapblocks, 16 nodos)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Pantalla completa"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Profundidad de color en pantalla completa"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Modo de pantalla completa."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Escala de IGU"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filtro de escala de IGU"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtro de escala de IGU \"txr2img\""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Generar mapas normales"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Mods"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Juego"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Tecla Inventario"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Tecla Saltar"
+
+#: 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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+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 "Tecla izquierda"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Menú principal del gestor de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Script del menú principal"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Depuración del generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Generador de mapas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Menús"
+
+#: 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 "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mapeado de relieve"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Resaltado de los nodos"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion Scale"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion bias"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion iterations"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion mode"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion strength"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Nombre del jugador"
+
+#: 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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Tecla seleccionar rango de visión"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Tecla derecha"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Captura de pantalla"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Captura de pantalla"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Captura de pantalla"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Servidor / Un jugador"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL del servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Dirección del servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Descripción del servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nombre del servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Puerto del servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "Lista de las URLs de servidores"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Archivo de la lista de servidores"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Iluminación suave"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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 "Tecla sigilo"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of generated normalmaps."
+msgstr "Generar mapas normales"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 ""
+
+# No cabe "Paquetes de texturas".
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr "Ruta de la textura"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Filtrado trilineal"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Usa la tecla"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Útil para los desarrolladores de mods."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volumen"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Velocidad del caminar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Texturas de objetos..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Movimiento de hojas"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Movimiento de hojas"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Movimiento de plantas"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Oleaje en el agua"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water height"
+msgstr "Oleaje en el agua"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water length"
+msgstr "Oleaje en el agua"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Velocidad del oleaje en el agua"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 "Tiempo de espera de cURL"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Precarga de las texturas del inventario"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Reiniciar mundo de un jugador"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Factor de escala aplicado a los elementos del menú: "
+
+#~ msgid "Touch free target"
+#~ msgstr "Tocar para interactuar"
#~ msgid " KB/s"
#~ msgstr " KB/s"
-#~ msgid "Fly mode"
-#~ msgstr "Modo vuelo"
+#~ msgid " MB/s"
+#~ msgstr " MB/s"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr ""
+#~ "Reinicia minetest para que los cambios en el controlador tengan efecto"
+
+#~ msgid "Rendering:"
+#~ msgstr "Renderizado:"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "Activado"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Desactivar paquete"
+
+#~ msgid "No!!!"
+#~ msgstr "¡¡¡No!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generar mapas normales"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Lista de servidores públicos"
+
+#~ msgid "No of course not!"
+#~ msgstr "¡No, claro que no!"
diff --git a/po/et/minetest.po b/po/et/minetest.po
index 561b69a43..15cfe12ae 100644
--- a/po/et/minetest.po
+++ b/po/et/minetest.po
@@ -7,674 +7,800 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-12-18 21:28+0200\n"
-"Last-Translator: Jabo Babo <bb7b@gmx.de>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-04-09 13:53+0000\n"
+"Last-Translator: Jan Harald <kuus29@gmail.com>\n"
+"Language-Team: Estonian <https://hosted.weblate.org/projects/minetest/"
+"minetest/et/>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Lue skriptis ilmnes viga; nagu näiteks mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Ilmnes viga:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Peamenüü"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
-msgstr "kinnitama"
+msgstr "Olgu."
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Taasta ühendus"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Server taotles taasühendumist:"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Laadimine..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokolli versioon ei sobi. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Server jõustab protokolli versiooni $1. "
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Server toetab protokolli versioone $1 kuni $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Proovi lubada uuesti avalike serverite loend ja kontrolli oma Interneti "
+"ühendust."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Meie toetame ainult protokolli versiooni $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Meie toetame protokolli versioone $1 kuni $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Tühista"
-#: builtin/mainmenu/dlg_config_world.lua:29
-#, fuzzy
-msgid "World:"
-msgstr "Vali maailm:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Sõltub:"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-#, fuzzy
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Keela MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Luba MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Luba kõik"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Mod \"$1\" kasutamine nurjus, sest ta sisaldab keelatud sümboleid. Lubatud "
+"on ainult märgid [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
-msgstr "Mäng"
+msgstr "Peida mäng"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr ""
+msgstr "Peida mod. pakkide sisu"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr ""
+msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-#, fuzzy
-msgid "Depends:"
-msgstr "Vajab:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Salvesta"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Tühista"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-#, fuzzy
-msgid "Enable MP"
-msgstr "Lülita kõik sisse"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-#, fuzzy
-msgid "Disable MP"
-msgstr "Lülita kõik välja"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Maailm:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "Sisse lülitatud"
-#: builtin/mainmenu/dlg_config_world.lua:85
-#, fuzzy
-msgid "Enable all"
-msgstr "Lülita kõik sisse"
+#: 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:50
-msgid "World name"
-msgstr "Maailma nimi"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Loo"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Laadi alla alammäng, näiteks minetest_game, aadressilt minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-#, fuzzy
-msgid "Mapgen"
-msgstr "Põlvkonna kaardid"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Laadi minetest.net-st üks mäng alla"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Mäng"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Loo"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Kaardi generaator"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "No nimi või no mäng valitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr "Hoiatus: minimaalne arendustest on mõeldud arendajatele."
-#: builtin/mainmenu/dlg_create_world.lua:68
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Maailma nimi"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no subgames installed."
+msgstr "Sa ei ole alammänge paigaldanud."
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Kustuta"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Kas kustutada maailm \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Nõustu"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
#, fuzzy
-msgid "A world named \"$1\" already exists"
-msgstr "Maailma loomine ebaõnnestus: Samanimeline maailm on juba olemas"
+msgid "Disabled"
+msgstr "Lülita kõik välja"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "No nimi või no mäng valitud"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "Sisse lülitatud"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Jah"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Mängud"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
-msgid "Modmgr: failed to delete \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
-msgid "Modmgr: invalid modpath \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
-#, fuzzy
-msgid "Delete World \"$1\"?"
-msgstr "Kustuta maailm: \"$1\"?"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Ei"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
-msgid "Rename Modpack:"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Nõustu"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Select path"
+msgstr "Vali"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
-#, fuzzy
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Maailma initsialiseerimine ebaõnnestus"
+msgstr "$1 paigaldamine $2 nurjus"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
msgstr ""
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Maailma nimi"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr ""
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: builtin/mainmenu/store.lua
+msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Lühike nimi:"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Tänuavaldused"
-
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Põhiline arendaja"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Co-arendaja"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Põhiline arendaja"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Tänuavaldused"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Early arendajad"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Eelmised põhilised arendajad"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr ""
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Vali modifikatsiooni fail:"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:121
-#, fuzzy
-msgid "Select Mod File:"
-msgstr "Vali maailm:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "IP/Port"
-
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Nimi/Parool"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-#, fuzzy
-msgid "Public Serverlist"
-msgstr "Avatud serverite nimekiri:"
+msgid "Address / Port"
+msgstr "Aadress / Port:"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Kustuta"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Liitu"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
-msgstr "Kujunduslik mängumood"
+msgstr "Loov režiim"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "Sisse lülitatud"
+msgstr "Kahjustamine lubatud"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Lemmikud:"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Lemmikud:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nimi / Parool:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "PvP enabled"
msgstr "Sisse lülitatud"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Uus"
-
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Konfigureeri"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Alusta mängu"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Vali maailm:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Kujunduslik mängumood"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Lülita valu sisse"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Avalik"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nimi/Parool"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Uus"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#, fuzzy
+msgid "No world created or selected!"
+msgstr "No nimi või no mäng valitud"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Avalik"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Vali maailm:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua
msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "No nimi või no mäng valitud"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Alusta mängu"
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Läbipaistmatu vesi"
+msgid "3D Clouds"
+msgstr "3D pilved"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Uhked puud"
+msgid "Advanced Settings"
+msgstr "Sätted"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Üksikmäng"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Bilinear Filter"
msgstr "Bi-lineaarsed Filtreerimine"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Tri-Linear Filtreerimine"
+msgid "Bump Mapping"
+msgstr "Väga hea kvaliteet"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Vaheta nuppe"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Liitu"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Läbipaistmatu vesi"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap"
-msgstr ""
+msgstr "Väga hea kvaliteet"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Ei"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Filter"
+msgstr "Anisotroopne Filtreerimine"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Mipmap"
+msgstr "Väga hea kvaliteet"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
msgstr "Ilus valgustus"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Lülita osakesed sisse"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Ilus valgustus"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D pilved"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Water"
-msgstr "Läbipaistmatu vesi"
+msgid "Normal Mapping"
+msgstr "Väga hea kvaliteet"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Liitu"
+msgid "Opaque Leaves"
+msgstr "Läbipaistmatu vesi"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Opaque Water"
+msgstr "Läbipaistmatu vesi"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Luba kõik"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Sätted"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Varjutajad"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Vaheta nuppe"
-
-#: builtin/mainmenu/tab_settings.lua:236
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Üksikmäng"
-
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+msgid "Simple Leaves"
+msgstr "Läbipaistmatu vesi"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Ilus valgustus"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver."
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
-msgid "Bumpmapping"
+msgid "Tone Mapping"
msgstr "Väga hea kvaliteet"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "Tri-Linear Filtreerimine"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
-msgstr ""
+msgstr "Uhked puud"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Sätted"
+msgstr "Uhked puud"
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Üksikmäng"
+msgid "Waving Water"
+msgstr "Uhked puud"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Jah"
+
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Config mods"
msgstr "Konfigureeri"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Main"
msgstr "Menüü"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Start Singleplayer"
+msgstr "Üksikmäng"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Mängi"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Üksikmäng"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Vali graafika:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Informatsioon ei ole kättesaadav"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Vali graafika:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
#, fuzzy
msgid "Texturepacks"
msgstr "Vali graafika:"
-#: src/client.cpp:1721
-msgid "Loading textures..."
+#: src/client.cpp
+#, fuzzy
+msgid "Connection timed out."
+msgstr "Ãœhenduse viga (Aeg otsas?)"
+
+#: src/client.cpp
+msgid "Done!"
msgstr ""
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
+#: src/client.cpp
+msgid "Initializing nodes"
msgstr ""
-#: src/client.cpp:1743
+#: src/client.cpp
msgid "Initializing nodes..."
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/client.cpp
+msgid "Loading textures..."
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Ãœhenduse viga (Aeg otsas?)"
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Ei leia ega suuda jätkata mängu \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Vale mängu ID."
+
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Menüü"
-#: src/client/clientlauncher.cpp:223
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha."
+
+#: src/client/clientlauncher.cpp
msgid "Player name too long."
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Ãœhenduse viga (Aeg otsas?)"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha."
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr ""
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Vaata debug.txt info jaoks."
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Ei leia ega suuda jätkata mängu \""
+#: src/game.cpp
+#, fuzzy
+msgid "Change Keys"
+msgstr "Vaheta nuppe"
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Vale mängu ID."
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Vaheta parooli"
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/game.cpp
+msgid "Connecting to server..."
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Continue"
msgstr "Jätka"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Sa surid."
-
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Ärka ellu"
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ""
-#: src/game.cpp:1092
-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"
+#: src/game.cpp
+msgid "Creating server..."
msgstr ""
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -689,558 +815,3396 @@ msgid ""
"- T: chat\n"
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Jätka"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Vaheta parooli"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Hääle volüüm"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Vaheta nuppe"
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Välju menüüsse"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Välju mängust"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr ""
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr ""
-
-#: src/game.cpp:1984
-msgid "Creating client..."
+#: src/game.cpp
+msgid "Item definitions..."
msgstr ""
-#: src/game.cpp:2159
-msgid "Resolving address..."
+#: src/game.cpp
+msgid "KiB/s"
msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
+#: src/game.cpp
+msgid "Media..."
msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/game.cpp
+msgid "MiB/s"
msgstr ""
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Ärka ellu"
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/game.cpp
+msgid "Shutting down..."
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Vaata debug.txt info jaoks."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Hääle volüüm"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "Sa surid."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-"Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist minetest."
-"conf)"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Jätka"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Tegevus\" = Roni alla"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine"
-
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Nupp juba kasutuses"
-
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "Vajuta nuppu"
-
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Edasi"
-
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Tagasi"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Vasakule"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Paremale"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Jututuba"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Tegevus"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Käsklus"
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Hüppamine"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsool"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Hiilimine"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine"
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr "Viska maha"
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Edasi"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr "Seljakott"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Jututuba"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Hüppamine"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Käsklus"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Nupp juba kasutuses"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsool"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist minetest."
+"conf)"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Lülita lendamine sisse"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Vasakule"
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Lülita kiirus sisse"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Prindi kogused"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Kauguse valik"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Paremale"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Hiilimine"
-#: src/guiKeyChangeMenu.cpp:413
+#: src/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle Cinematic"
msgstr "Lülita kiirus sisse"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Lülita kiirus sisse"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Lülita lendamine sisse"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Lülita läbi seinte minek sisse"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Kauguse valik"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Prindi kogused"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Tegevus"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Vana parool"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "Vajuta nuppu"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Uus parool"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Muuda"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Kinnita parooli"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Muuda"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Uus parool"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Vana parool"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Paroolid ei ole samad!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Hääle Volüüm: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Välju"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Vasak nupp"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Keskmine nupp"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Hääle Volüüm: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Parem nupp"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplikatsioonid"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X Nuppp 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Tagasi"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Tühjenda"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Reavahetus"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Nupp 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Koma"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "CTRL"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Konverteeri"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menüü"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Paus"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Alla"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift,"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Lõpeta"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Konverteeri"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Kustuta OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Põgene"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Soorita"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Viimane"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Abi"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Kodu"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Sisesta"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Konverteerimatta"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Lõpeta"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Vasak nupp"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Kodu"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Vasak CTRL"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Moodi vahetamine"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Vasak Menüü"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Järgmine"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Vasak Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Eelnev"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Vasak Windowsi nupp"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Tühik"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menüü"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Alla"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Keskmine nupp"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Soorita"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Miinus"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Prindi"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Moodi vahetamine"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Vali"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Järgmine"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Ãœles"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Konverteerimatta"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Abi"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Numbrilaual Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Sisesta"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numbrilaual *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Mängupilt"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numbrilaual +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Vasak Windowsi nupp"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numbrilaual -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Aplikatsioonid"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numbrilaual /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numbrilaual 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numbrilaual 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Parem Windowsi nupp"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Maga"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numbrilaual 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numbrilaual 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numbrilaual 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numbrilaual 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numbrilaual 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numbrilaual 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numbrilaual *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numbrilaual +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numbrilaual -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numbrilaual /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numbrilaual 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numbrilaual 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Numbrilaual Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Tühi"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll lukk"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Vasak Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Paus"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Parem Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punkt"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Vasak CTRL"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Pluss"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Vasak Menüü"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Prindi"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Eelnev"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Parem nupp"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Parem CTRL"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Parem Menüü"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Koma"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Parem Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Miinus"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Parem Windowsi nupp"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punkt"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll lukk"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Pluss"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Vali"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift,"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Maga"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Kustuta OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Mängupilt"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Tühik"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Tühi"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Reavahetus"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Ãœles"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Nuppp 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Nupp 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Suumi"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Mäng"
+msgid "3D clouds"
+msgstr "3D pilved"
-#~ msgid "GAMES"
-#~ msgstr "MÄNGUD"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
-#~ msgid "Games"
-#~ msgstr "Mängud"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Arenenud sätted"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "Amplifies the valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "edit game"
-#~ msgstr "Muuda mängu"
+msgid "Anisotropic filtering"
+msgstr "Anisotroopne Filtreerimine"
-#~ msgid "new game"
-#~ msgstr "uus mängu"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
-#~ msgid "EDIT GAME"
-#~ msgstr "MUUDA MÄNGU"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Remove selected mod"
-#~ msgstr "Eemalda valitud muutus"
+msgid "Backward key"
+msgstr "Tagasi"
+
+#: 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
#, fuzzy
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Lisama muutus"
+msgid "Bilinear filtering"
+msgstr "Bi-lineaarsed Filtreerimine"
-#~ msgid "Favorites:"
-#~ msgstr "Lemmikud:"
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
-#~ msgid "Name"
-#~ msgstr "Nimi"
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
-#~ msgid "Password"
-#~ msgstr "Parool"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Build inside player"
+msgstr "Mitmikmäng"
-#~ msgid "SETTINGS"
-#~ msgstr "Seaded"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bumpmapping"
+msgstr "Väga hea kvaliteet"
-#~ msgid "Preload item visuals"
-#~ msgstr "Lae asjade visuaale"
+#: 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 #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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Finite Liquid"
-#~ msgstr "Löppev vedelik"
+msgid "Chat key"
+msgstr "Vaheta nuppe"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n"
-#~ "Need lülitatakse sisse kohe pärast sätete salvestamist."
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "Vaheta nuppe"
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Kujunduslik mängumood"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Kujunduslik mängumood"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "3D pilved"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Menüü"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Käsklus"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Liitu"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Konsool"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Konsool"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Konsool"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "CTRL"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Lülita valu sisse"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default game"
+msgstr "Muuda mängu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Uus parool"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "Lülita osakesed sisse"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double tap jump for fly"
+msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Luba MP"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Lülita valu sisse"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Lülita valu sisse"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Anisotroopne Filtreerimine"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "Edasi"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Mäng"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Seljakott"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Hüppamine"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Vasak Menüü"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Menüü"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Menüü"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Menüü"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Väga hea kvaliteet"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "Kauguse valik"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Parem Menüü"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Mängupilt"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Mängupilt"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Mängupilt"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Üksikmäng"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Avatud serverite nimekiri:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Avatud serverite nimekiri:"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Ilus valgustus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Hiilimine"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Vali graafika:"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Tri-Linear Filtreerimine"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "Vajuta nuppu"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Põhiline arendaja"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Hääle volüüm"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Uhked puud"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "cURL faili allalaadimine aegus"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Alla"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
-#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n"
-#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon."
+#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut "
+#~ "asja"
+
+#~ msgid "is required by:"
+#~ msgstr "Seda vajavad:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Konfiguratsioon salvestatud. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Hoiatus: Konfiguratsioon pole kindel."
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti"
+
+#~ msgid "Show Public"
+#~ msgstr "Näita avalikke"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Näita lemmikuid"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit."
+
+#~ msgid "Create world"
+#~ msgstr "Loo maailm"
+
+#~ msgid "Address required."
+#~ msgstr "IP on vajalkik."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Failid mida kustutada"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1267,65 +4231,64 @@ msgstr "Suumi"
#~ "- ESC: Menüü\n"
#~ "- T: Jututupa\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus"
-
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud"
-
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud"
-
-#~ msgid "Files to be deleted"
-#~ msgstr "Failid mida kustutada"
-
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud"
-
-#~ msgid "Address required."
-#~ msgstr "IP on vajalkik."
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n"
+#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon."
-#~ msgid "Create world"
-#~ msgstr "Loo maailm"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n"
+#~ "Need lülitatakse sisse kohe pärast sätete salvestamist."
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit."
+#, fuzzy
+#~ msgid "Finite Liquid"
+#~ msgstr "Löppev vedelik"
-#~ msgid "Show Favorites"
-#~ msgstr "Näita lemmikuid"
+#~ msgid "Preload item visuals"
+#~ msgstr "Lae asjade visuaale"
-#~ msgid "Show Public"
-#~ msgstr "Näita avalikke"
+#~ msgid "SETTINGS"
+#~ msgstr "Seaded"
-#~ msgid "Advanced"
-#~ msgstr "Arenenud sätted"
+#~ msgid "Password"
+#~ msgstr "Parool"
-#~ msgid "Multiplayer"
-#~ msgstr "Mitmikmäng"
+#~ msgid "Name"
+#~ msgstr "Nimi"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti"
+#, fuzzy
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Lisama muutus"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Hoiatus: Konfiguratsioon pole kindel."
+#, fuzzy
+#~ msgid "Remove selected mod"
+#~ msgstr "Eemalda valitud muutus"
-#~ msgid "Configuration saved. "
-#~ msgstr "Konfiguratsioon salvestatud. "
+#~ msgid "EDIT GAME"
+#~ msgstr "MUUDA MÄNGU"
-#~ msgid "is required by:"
-#~ msgstr "Seda vajavad:"
+#~ msgid "new game"
+#~ msgstr "uus mängu"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr ""
-#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut "
-#~ "asja"
+#~ msgid "GAMES"
+#~ msgstr "MÄNGUD"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anisotroopne Filtreerimine"
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Mäng"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Väga hea kvaliteet"
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "Sisse lülitatud"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Alla"
+#~ msgid "If disabled "
+#~ msgstr "Lülita kõik välja"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Avalikud serverid"
diff --git a/po/fr/minetest.po b/po/fr/minetest.po
index b9666ccdf..523c73bbf 100644
--- a/po/fr/minetest.po
+++ b/po/fr/minetest.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-07-17 22:49+0200\n"
-"Last-Translator: Jean-Patrick G. <jeanpatrick.guerrero@gmail.com>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-07 11:19+0000\n"
+"Last-Translator: Yvan YR <yvan_yr@yahoo.fr>\n"
"Language-Team: French "
"<https://hosted.weblate.org/projects/minetest/minetest/fr/>\n"
"Language: fr\n"
@@ -17,642 +17,774 @@ 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 2.4-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr "Une erreur est survenue avec un script Lua, comme un mod :"
+msgstr "Une erreur est survenue avec un script Lua, il peut s'agir d'un mod :"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "Une erreur est survenue :"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu principal"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Se reconnecter"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Le serveur souhaite rétablir une connexion :"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Chargement..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "La version du protocole ne correspond pas. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Le serveur impose une version du protocole $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Le serveur supporte les versions de protocole entre $1 et $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Rechargez la liste des serveurs publics et vérifiez votre connexion Internet."
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Sélectionner un monde :"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Nous supportons seulement la version du protocole $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Nous supportons seulement les versions du protocole entre $1 et $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Annuler"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dépend de :"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Désactiver les packs de mods"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Activer le pack de mods"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Tout activer"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Échec du chargement du mod \"$1\" car il contient des caractères non-"
+"autorisés.\n"
+"Seulement les caractères alphanumériques [a-z0-9_] sont autorisés."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Cacher le jeu"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Cacher le pack de mods"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod :"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Dépend de :"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Enregistrer"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Annuler"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Activer le pack de mods"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Désactiver le pack de mods"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Sélectionner un monde :"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "activé"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Tout activer"
+#: 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:50
-msgid "World name"
-msgstr "Nom du monde"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Créer"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Graine"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Téléchargez un jeu, comme minetest_game, depuis minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Générateur de carte"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Téléchargez-en un depuis minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jeu"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Créer"
+#: 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:68
-msgid "You have no subgames installed."
-msgstr "Vous n'avez pas de sous-jeux installés."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Nom du monde manquant ou aucun jeu sélectionné"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Téléchargez-en un depuis minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Graine"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "Avertissement : le jeu minimal est fait pour les développeurs."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Le monde \"$1\" existe déjà"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nom du monde"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Nom du monde manquant ou aucun jeu sélectionné"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Vous n'avez pas de jeux installés."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Êtes-vous sûr de vouloir supprimer \"$1\" ?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Oui"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Non, bien sûr que non !"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Supprimer"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr "Modmgr : n'a pas pu supprimer \"$1\""
+msgstr "Le gestionnaire de mods n'a pas pu supprimer \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr "Modmgr : chemin de mod invalide \"$1\""
+msgstr "Gestionnaire de mods : chemin de mod invalide \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Supprimer le monde \"$1\" ?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Non"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Accepter"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Renommer le pack de mods :"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Accepter"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" n'est pas un drapeau valide."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Installer un mod : fichier : \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Aucune description donnée de l'option)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Revenir aux paramètres"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Naviguer"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Modifier"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Activé"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"Le format est 3 nombres séparés par des virgules et entre les parenthèses."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Format : <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Jeux"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Éventuellement, l'option \"lacunarity\" peut être jointe par une virgule "
+"d'en-tête."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Veuillez séparer les drapeaux par des virgules dans la liste."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Veuillez entrer un nombre entier valide."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Veuillez entrer un nombre valide."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Les valeurs possibles sont : "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Réinitialiser"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Sélectionner un chemin"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Montrer les noms techniques"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "La valeur doit être supérieure à $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "La valeur doit être inférieure à $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Installer un mod : type de fichier non supporté \"$1\" ou archive cassée"
+"Installation d'un mod : type de fichier non supporté \"$1\" ou archive "
+"endommagée"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "N'a pas pu installer $1 à $2"
+msgstr "Échec de l'installation de $1 vers $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Installer un mod : impossible de trouver un nom de dossier valide pour le "
-"pack de mods $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Installation d'un mod : fichier : \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
-msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1"
+msgstr ""
+"Installation d'un mod : impossible de trouver le vrai nom du mod pour : $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Non trié"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Installation un mod : impossible de trouver un nom de dossier valide pour le "
+"pack de mods $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Rechercher"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Fermer le magasin"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "Téléchargement de $1, veuillez patienter..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Installé avec succès :"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Installer"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Nom :"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Page $1 de $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Note"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Réinstaller"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Installer"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Rechercher"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Fermer le store"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nom court :"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Page $1 sur $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Installé avec succès :"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Crédits"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Non-trié"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Développeurs principaux"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Ré-installer"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Contributeurs actifs"
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr "Anciens développeurs"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Développeurs principaux"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Crédits"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Anciens contributeurs"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Anciens développeurs"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Mods installés :"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Dépôt de mods en ligne"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informations du mod :"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Pas de description disponible"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Information du mod :"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Renommer"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Désinstaller le pack de mods"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Sélectionner un fichier de mod :"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr "Désinstaller le mod"
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
-msgstr "Sélectionner un fichier de mod :"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mods"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Désinstaller le pack de mods"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
msgstr "Adresse / Port :"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Nom / Mot de passe :"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Liste de serveurs publics"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Supprimer"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Client"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Rejoindre"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Mode créatif"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Dégâts activés"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Supprimer favoris :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Favoris :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nom / Mot de passe :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Combat activé"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Client"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nouveau"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Adresse à assigner"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Configurer"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Démarrer"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Sélectionner un monde :"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Mode créatif"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Activer les dégâts"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Public"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nom / Mot de passe"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "Adresse à assigner"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nouveau"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Aucun monde créé ou sélectionné !"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Port du serveur"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Public"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "Aucun monde créé ou sélectionné !"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Sélectionner un monde :"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Serveur"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "Arbres minimaux"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port du serveur"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "Arbres simples"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Démarrer"
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
-msgstr "Arbres détaillés"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Aucun filtrage"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Nuages en 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Réglages avancés"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Anti-crénelage :"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Filtrage bilinéaire"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Filtrage trilinéaire"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Bump mapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Sans MIP map"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Changer les touches"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Verre unifié"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Arbres détaillés"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "MIP mapping"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "MIP map + anisotropie"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Non"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Non !"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Aucun filtre"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Lumière douce"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Sans MIP map"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Particules"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Surbrillance des blocs"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nuages 3D"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Surbrillance des blocs"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Eau opaque"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Aucun"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Verre connecté"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Échantillonnage de normalmaps"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Eclairage des nodes"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Arbres minimaux"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Textures :"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Eau opaque"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Affichage :"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Occlusion parallaxe"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Activer les particules"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Réglages"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shaders"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Changer les touches"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Arbres simples"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Réinitialiser le monde"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Lumière douce"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Taille des menus"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Textures :"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Taille appliquée aux menus : "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé."
-#: builtin/mainmenu/tab_settings.lua:250
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
-msgid "Touch free target"
-msgstr ""
+msgid "Tone Mapping"
+msgstr "Mip-mapping"
-#: builtin/mainmenu/tab_settings.lua:256
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr ""
+msgstr "Sensibilité du toucher (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Bump mapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Normal mapping"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Occlusion parallaxe"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Liquides mouvants"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtrage trilinéaire"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Feuilles mouvantes"
+msgstr "Feuilles ondulantes"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Plantes mouvantes"
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé."
+msgstr "Plantes ondulantes"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Réglages"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Eau ondulante"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Démarrer la partie solo"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Oui"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Configurer les mods"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Menu principal"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Démarrer une partie solo"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Jouer"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Solo"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Sélectionner un pack de textures :"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Pas d'information disponible"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Sélectionner un pack de textures :"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Packs de textures"
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Connexion perdue."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Terminé !"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Initialisation des blocs"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Initialisation des blocs..."
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr "Chargement des textures..."
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Construction des shaders..."
-
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Initialisation des nodes..."
+msgstr "Reconstruction des shaders..."
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr "Initialisation des nodes"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Erreur de connexion (perte de connexion ?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Textures d'objets..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Le jeu \" n'a pas pu être trouvé"
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Terminé !"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "gamespec invalide."
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Menu principal"
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Nom du joueur trop long."
-
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Erreur de connexion (perte de connexion ?)"
-
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire."
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nom du joueur trop long."
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "Le chemin du monde spécifié n'existe pas : "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Le jeu \" n'a pas pu être trouvé"
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "gamespec invalide."
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Voir debug.txt pour plus d'informations."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-#, fuzzy
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Changer les touches"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Procéder"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Changer votre mot de passe"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Vous êtes mort."
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Connexion au serveur..."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Ressusciter"
+#: src/game.cpp
+msgid "Continue"
+msgstr "Continuer"
-#: src/game.cpp:1092
-#, fuzzy
-msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
-msgstr ""
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Création du client..."
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Création du serveur..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -669,7 +801,7 @@ msgstr ""
"Contrôles:\n"
"- ZQSD : se déplacer\n"
"- Espace : sauter/grimper\n"
-"- Maj. : marcher prudemment/descendre\n"
+"- Maj. : marcher lentement/descendre\n"
"- A : lâcher l'objet en main\n"
"- I : inventaire\n"
"- Souris : tourner/regarder\n"
@@ -678,585 +810,3989 @@ msgstr ""
"- Molette souris : sélectionner objet\n"
"- T : discuter\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuer"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Changer mot de passe"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volume du son"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Changer les touches"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Touches par défaut :\n"
+"Sans menu visible :\n"
+"- un seul appui : touche d'activation\n"
+"- double-appui : placement / utilisation\n"
+"- Glissement du doigt : regarder autour\n"
+"Menu / Inventaire visible :\n"
+"- double-appui (en dehors) : fermeture\n"
+"- objet(s) dans l'inventaire : déplacement\n"
+"- appui, glissement et appui : placement d'un seul item par slot\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Quitter vers le menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Quitter le jeu"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Fermeture du jeu..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Création du serveur..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Création du client..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Définitions des items..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Résolution de l'adresse..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "Ko/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Connexion au serveur..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Média..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Définitions d'objets..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "Mo/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Définitions des blocs..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Média..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Résolution de l'adresse..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr "Ko/s"
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Réapparaître"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr "Mo/s"
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Fermeture du jeu..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Voir debug.txt pour plus d'information."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volume du son"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Entrer "
+#: src/game.cpp
+msgid "You died."
+msgstr "Vous êtes mort."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "ok"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Raccourcis"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Entrer "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Procéder"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
-msgstr "\"Use\" = descendre (escalade)"
+msgstr "\"Use\" = descendre"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Double-appui sur \"saut\" pour voler"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Reculer"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Touche déjà utilisée"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chatter"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "appuyez sur une touche"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Commande"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Avancer"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Console"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Reculer"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Double-appui sur \"saut\" pour voler"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Gauche"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Lâcher"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Droite"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Avancer"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Utiliser"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventaire"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Sauter"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Marcher"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Touche déjà utilisée"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Jeter"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "Raccourcis"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventaire"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Gauche"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chatter"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Afficher les stacks"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Commande"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Distance de vue"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Console"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Droite"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Voler"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Marcher lentement"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Mode cinématique"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Mode rapide"
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
-msgstr "Mode cinématique"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Voler"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Mode sans collision"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Distance d'affichage"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Utiliser"
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Imprimer stacks"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "appuyez sur une touche"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Ancien mot de passe"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Changer"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Confirmer le mot de passe"
-#: src/guiPasswordChange.cpp:124
+#: src/guiPasswordChange.cpp
msgid "New Password"
msgstr "Nouveau mot de passe"
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
-msgstr "Confirmer mot de passe"
-
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Changer"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Ancien mot de passe"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Les mots de passe ne correspondent pas !"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume du son : "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Quitter"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Bouton gauche"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Bouton du milieu"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volume du son : "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Bouton droit"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Applications"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Bouton X 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attente"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
-msgstr "Retour en arrière"
-
-#: src/keycode.cpp:224
-msgid "Clear"
-msgstr "Vider"
-
-#: src/keycode.cpp:224
-msgid "Return"
msgstr "Retour"
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulation"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Bouton X 2"
-
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Capital"
msgstr "Verr Maj"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "Vider"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Virgule"
+
+#: src/keycode.cpp
msgid "Control"
msgstr "Contrôle"
-#: src/keycode.cpp:225
-#, fuzzy
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convertir"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "Vider sélection"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Bas"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Fin"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convertir"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Écraser l'OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Échap"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Exécuter"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
-#, fuzzy
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Aide"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Origine"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insérer"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
-#, fuzzy
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-#, fuzzy
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Fin"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Bouton gauche"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Origine"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Contrôle gauche"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Changer de mode"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menu gauche"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Suivant"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift gauche"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Précédent"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Windows gauche"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Espace"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Bas"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Bouton du milieu"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Exécuter"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Moins"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Imprimer"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Changer de mode"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Sélectionner"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Suivant"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Haut"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Non converti"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Aide"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Verr Num"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insérer"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Pavé num. *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Capture d'écran"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Pavé num. +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Windows gauche"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Pavé num. -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Applications"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Pavé num. /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Pavé num. 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Pavé num. 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Windows droite"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Mise en veille"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Pavé num. 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Pavé num. 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Pavé num. 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Pavé num. 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Pavé num. 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Pavé num. 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Pavé num. *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Pavé num. +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Pavé num. -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Pavé num. /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Pavé num. 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Pavé num. 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Verr Num"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Verr. défilement"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift gauche"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift droite"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Point"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Contrôle gauche"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Menu gauche"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Imprimer"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Précédent"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Retour"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Bouton droit"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Contrôle droite"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Menu droite"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Virgule"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift droit"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Moins"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Windows droite"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Point"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Verr. défilement"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Sélectionner"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attente"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "Vider sélection"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Mise en veille"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Écraser l'OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Capture d'écran"
-#: src/keycode.cpp:248
-#, fuzzy
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Espace"
-#: src/keycode.cpp:248
-#, fuzzy
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulation"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Haut"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Bouton X 1"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Bouton X 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoomer"
-#~ msgid "Game Name"
-#~ msgstr "Nom du jeu"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\""
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = occlusion parallaxe avec des informations de pente (plus rapide).\n"
+"1 = cartographie en relief (plus lent, plus précis)."
-#~ msgid "GAMES"
-#~ msgstr "JEUX"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Nuages 3D"
-#~ msgid "Games"
-#~ msgstr "Jeux"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Mode écran 3D"
-#~ msgid "Mods:"
-#~ msgstr "Mods :"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Support 3D.\n"
+"Options :\n"
+"- aucun : pas de sortie 3D.\n"
+"- anaglyphe : couleur 3D bleu turquoise/violet.\n"
+"- entrelacé : polarisation basée sur des lignes avec support de l'écran.\n"
+"- horizontal : partage de l'écran horizontal.\n"
+"- vertical : partage de l'écran vertical.\n"
+"- pageflip: 3D basé sur quadbuffer."
+
+#: 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 ""
+"Une graine de génération de terrain pour un nouveau monde, laisser vide pour "
+"une graine aléatoire.\n"
+"Sera annulé lors de la création d'un nouveau monde dans le menu."
-#~ msgid "edit game"
-#~ msgstr "éditer le jeu"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Un message qui sera affiché à tous les joueurs quand le serveur s'interrompt."
-#~ msgid "new game"
-#~ msgstr "nouveau jeu"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Un message qui sera affiché à tous les joueurs quand le serveur s’interrompt."
-#~ msgid "EDIT GAME"
-#~ msgstr "MODIFIER LE JEU"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Limite absolue des files émergentes"
-#~ msgid "Remove selected mod"
-#~ msgstr "Supprimer le mod sélectionné"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Accélération en l'air"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Ajouter un mod"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "Portée des mapblocks actifs"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENT"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "Portée des mapblocks actifs"
-#~ msgid "Favorites:"
-#~ msgstr "Favoris :"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Portée des mapblocks actifs"
-#~ msgid "START SERVER"
-#~ msgstr "DÉMARRER LE SERVEUR"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Portée des objets actifs envoyés"
-#~ msgid "Name"
-#~ msgstr "Nom"
+#: 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 ""
+"Adresse où se connecter.\n"
+"Laisser vide pour démarrer un serveur local.\n"
+"Le champ de l'adresse dans le menu peut annuler cette option."
-#~ msgid "Password"
-#~ msgstr "Mot de passe"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr "Ajuster le DPI de votre écran (non-X11 / Android seulement)."
-#~ msgid "SETTINGS"
-#~ msgstr "PARAMÈTRES"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"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 "Preload item visuals"
-#~ msgstr "Précharger les objets"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avancé"
-#~ msgid "Finite Liquid"
-#~ msgstr "Liquides limités"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude Chill"
+msgstr "Altitude d'état de froid"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "PARTIE SOLO"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Toujours voler et être rapide"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "PACKS DE TEXTURES"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Occlusion gamma ambiente"
-#~ msgid "MODS"
-#~ msgstr "MODS"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Amplifier les vallées"
-#~ msgid "Add mod:"
-#~ msgstr "Ajouter un mod :"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtrage anisotrope"
-#~ msgid "Local install"
-#~ msgstr "Installation locale"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Annoncer le serveur"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Annoncer à la liste des serveurs publics.\n"
+"Si vous voulez annoncer votre adresse IPv6, utilisez serverlist_url = v6."
+"servers.minetest.net."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Série Julia : échelles (X,Y,Z) en blocs."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Demander de se reconnecter après une coupure de connexion"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+"Déclarer automatiquement votre serveur à la liste des serveurs publics."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Reculer"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Hauteur du terrain de base"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Principal"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Basic Privileges"
+msgstr "Privilèges par défaut"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtrage bilinéaire"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Adresse à assigner"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bits par pixel (profondeur de couleur) en mode plein-écran."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Placement de bloc à la position du joueur"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bump mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Lissage du mouvement de la caméra"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Lissage du mouvement de la caméra en mode cinématique"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Touche de mise à jour de la caméra"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Bruit de cave #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Bruit de cave #2"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave width"
+msgstr "Largeur de la fenêtre"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Les caves et tunnels se forment à l'intersection de deux bruits"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Chatter"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Afficher le chat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr "Taille des chunks"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Mode cinématique"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Mode cinématique"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Textures transparentes filtrées"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Client et Serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Vitesse d'escalade du joueur"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Hauteur des nuages"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Niveau de détails des nuages"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Nuages"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Les nuages ont un effet sur le client exclusivement."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Nuages dans le menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Brume colorée"
+
+#: 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 ""
+"Liste séparée par des virgules des mods de confiance qui sont autorisés à "
+"accéder aux fonctions non\n"
+"sécurisées même lorsque l'option de sécurisation des mods est activée (via "
+"request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Liste séparée par des virgules des mods de confiance qui sont autorisés à "
+"accéder\n"
+"aux API HTTP, leur permettant d'envoyer et de télécharger des données vers/"
+"depuis Internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Commande"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Verre unifié"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Se connecter à un serveur de média externe"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Unifier le verre si le bloc le permet."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Opacité du fond de la console de jeu"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Couleur de la console de jeu"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Console de jeu"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Avancer en continu"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Mouvement avant permanent (seulement utilisé pour des tests)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Touches de contrôle"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Durée complet du cycle jour/nuit.\n"
+"Exemples : 72 = 20 minutes, 360 = 4 minutes, 1 = 24 heures, 0 = jour ou nuit "
+"reste figé(e)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Taille des déserts et plages dans Mapgen V6.\n"
+"Quand les environnements neigeux sont activés, le paramètre de fréquence des "
+"déserts dans Mapgen V6 est ignoré."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Contrôle l'élévation/profondeur des dépressions lacustres."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Contrôle l'élévation/hauteur des collines."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Message d'interruption du serveur"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crée des zones imprévisibles de lave dans les caves.\n"
+"Elles rendent le minage plus difficile. 0 les désactivent. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crée des zones aquatiques imprévisibles dans les caves.\n"
+"Elles rendent le minage plus difficile. 0 les désactivent. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Opacité du réticule"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Opacité du réticule (entre 0 et 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Couleur du réticule"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Couleur du réticule (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Vitesse du joueur en position accroupie"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Dégâts"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Infos de débogage"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Niveau de détails des infos de débogage"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Intervalle de mise à jour des objets sur le serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Vitesse d’accélération par défaut"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Jeu par défaut"
+
+#: 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 ""
+"Jeu par défaut lors de la création d'un nouveau monde.\n"
+"Sera annulé lors de la création d'un nouveau monde dans le menu."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Mot de passe par défaut"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilèges 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."
+msgstr ""
+"Délais d'interruption de cURL par défaut, établi en millisecondes.\n"
+"Seulement appliqué si Minetest est compilé avec cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Niveau de lissage des normal maps.\n"
+"Une valeur plus grande lisse davantage les normal maps."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Détermine la distance maximale de transfert du joueur en mapblocks (0 = "
+"illimité)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Latence d'apparition des infobulles, établie en millisecondes."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Traitement d'API Lua obsolète(s)"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Profondeur en-dessous duquel se trouvent de grandes caves."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Profondeur en-dessous duquel se trouvent des caves massives."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Vitesse de descente du joueur"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr "Description du serveur affichée sur la liste des serveurs."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Désynchroniser les textures animées par mapblock"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+"Profil détaillé des données du mod. Utile pour les développeurs de mods."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Profil détaillé des mods"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Détermine la forme du terrain.\n"
+"Les 3 nombres entre parenthèses contrôlent l'échelle du terrain,\n"
+"ces nombres doivent être identiques."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Désactiver l'anti-triche"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Refuser les mots de passe vides"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Nom de domaine du serveur affichée sur la liste des serveurs publics."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+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."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Lâcher"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Afficher les infos de débogage de la génération de terrain."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Activer le pack de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Activer la sécurisation des mods"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Active les dégâts et la mort des joueurs."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+"Active l'entrée aléatoire du joueur (seulement utilisé pour des tests)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Active l'éclairage doux avec une occlusion ambiante simple.\n"
+"Désactiver pour davantage de performances."
+
+#: 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 ""
+"Activer pour empêcher les anciens clients de se connecter.\n"
+"Les anciens clients sont compatibles dans le sens où ils ne s'interrompent "
+"pas lors de la connexion\n"
+"aux serveurs récents, mais ils peuvent ne pas supporter certaines "
+"fonctionnalités."
+
+#: 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 ""
+"Activer l'usage d'un serveur de média distant (si pourvu par le serveur).\n"
+"Les serveurs de média distants offrent un moyen significativement plus "
+"rapide de télécharger\n"
+"des données média (ex.: textures) lors de la connexion au serveur."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Active/désactive l'usage d'un serveur IPv6. Un serveur IPv6 peut être "
+"restreint\n"
+"aux clients IPv6, selon leur configuration système.\n"
+"Ignoré si bind_address est paramétré."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Active la rotation des items d'inventaire."
+
+#: 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 ""
+"Active le bumpmapping pour les textures.\n"
+"Les normalmaps peuvent être fournies par un pack de textures pour un "
+"meilleur effet de relief,\n"
+"ou bien celui-ci est auto-généré.\n"
+"Nécessite les shaders pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "Active la mise en cache des meshnodes."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Active la mini-carte."
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Active la mini-carte."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"Active la génération à la volée des normalmaps.\n"
+"Nécessite le bumpmapping pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Active l'occlusion parallaxe.\n"
+"Nécessite les shaders pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Option expérimentale, peut causer un espace vide visible entre les blocs\n"
+"quand paramétré avec un nombre supérieur à 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS maximum sur le menu pause"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Fréquence du mouvement du bras en tombant"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Police alternative"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Ombre de la police alternative"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Opacité de l'ombre de la police alternative"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Taille de la police alternative"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Mode rapide"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Accélération en mode rapide"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Vitesse en mode rapide"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Mouvement rapide"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Mouvement rapide (via la touche utiliser).\n"
+"Nécessite le privilège \"fast\" sur un serveur."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Champ de vision"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Champ de vision en degrés."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Fichier localisé dans /client/serverlist contenant vos serveurs favoris dans "
+"l'onglet multijoueur."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Tone Mapping"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+"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"
+"Appliquer ce filtre pour nettoyer cela au chargement de la texture."
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filtrage"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Graine de génération de terrain déterminée"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Voler"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Voler"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Brume"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Brume"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Chemin du fichier de police"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Ombre de la police"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Opacité de l'ombre de la police"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Niveau d'opacité de l'ombre de la police (entre 0 et 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, 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."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Taille de la police"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Format of screenshots."
+msgstr "Chemin où les captures d'écran sont sauvegardées."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Avancer"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Polices Freetype"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Distance maximale de génération des mapblocks (16^3 blocs) depuis la "
+"position du client."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Distance maximale d'envoi des mapblocks aux clients, établie en mapblocks "
+"(16^3 blocs)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Distance maximale d'envoi de données sur les objets aux clients, établie en "
+"mapblocks (16^3 blocs)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Plein écran"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Bits par pixel en mode plein écran"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Mode plein écran."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Taille du GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filtrage des images du GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtrage txr2img du GUI"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Général"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Normal mapping"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"Attributs spécifiques à Mapgen V6.\n"
+"Quand les terrains neigeux sont activés, les jungles sont activés et les "
+"drapeaux jungle est ignoré.\n"
+"Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs par "
+"défaut.\n"
+"Les drapeaux commençant par \"non\" sont désactivés."
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Options graphiques"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravité"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Mods"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "HUD"
+
+#: 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 ""
+"Traitement des appels d'API Lua obsolètes :\n"
+"- legacy : imite l'ancien comportement (par défaut en mode release).\n"
+"- log : imite et registre 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)."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Height component of the initial window size."
+msgstr "Résolution verticale de la fenêtre de jeu."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Hauteur des nuages dans le jeu."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "FPU de haute précision"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "Adresse web du serveur affichée sur la liste des serveurs."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Profondeur des rivières"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Largeur des aires de mapblocks qui sont sujets à être gardés actifs, établie "
+"en mapblocks (16^3 blocs).\n"
+"Les mapblocks actifs sont chargés et les ABMs y sont actifs."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr "Nombre maximum de mapblocks simultanés envoyés sur le serveur."
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr "Nombre maximum de mapblocks simultanés envoyés par client."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+"Délais maximum jusqu'où le serveur va attendre avant de purger les mapblocks "
+"inactifs.\n"
+"Une valeur plus grande est plus confortable, mais utilise davantage de "
+"mémoire."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Largeur des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "Serveur IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Support IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+"Si le nombre d'images par seconde (FPS) veut aller au-delà de cette valeur, "
+"il est limité\n"
+"pour ne pas gaspiller inutilement les ressources du processeur."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Si désactivé la touche \"Utiliser\" est utilisée pour voler + mode rapide "
+"(si ceux-ci sont activés)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+"Si activé avec le mode vol, le joueur sera capable de traverser les blocs "
+"solides en volant."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Si activé, la touche \"Utiliser\" est utilisée à la place de la touche "
+"\"Sneak\" pour monter ou descendre."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+"Si activé, les actions sont enregistrés pour une restauration éventuelle.\n"
+"Cette option est seulement activé quand le serveur démarre."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr "Si activé, cela désactive la détection anti-triche en multijoueur."
+
+#: 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 activé, les données invalides du monde ne causeront pas l'interruption du "
+"serveur.\n"
+"Activer seulement si vous sachez ce que vous faites."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+"Si activé, les nouveaux joueurs ne pourront pas se connecter avec un mot de "
+"passe vide."
+
+#: 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 ""
+"Si activé, vous pourrez placer des blocs à la position où vous êtes.\n"
+"C'est utile quand vous travaillez avec des modèles nodebox dans des zones "
+"exiguës."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr "Détermine les coordonnées où les joueurs vont toujours réapparaître."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Ignorer les erreurs du monde"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Dans le jeu"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr "Opacité de fond de la console du jeu (entre 0 et 255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Couleur de fond de la console du jeu (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Intervalle de sauvegarde des changements importants dans le monde, établie "
+"en secondes."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr "Intervalle d'envoi de l'heure de jeu aux clients."
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "Animation des items d'inventaire"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Inventaire"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Inverser la souris"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Inverser les mouvements verticaux de la souris."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Durée de vie des items abandonnés"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"Série Julia : itérations de la fonction récursive.\n"
+"Contrôle l'échelle du détail le plus subtil."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Série Julia : valeur X déterminant la forme 4D.\n"
+"La portée est environ entre -2 et 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Série Julia : valeur Y déterminant la forme 4D.\n"
+"La portée est environ entre -2 et 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Série Julia : valeur Z déterminant la forme 4D.\n"
+"La portée est environ entre -2 et 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Sauter"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Vitesse de saut du joueur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour activer/désactiver la distance de vue illimitée.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour jeter l'objet sélectionné.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour activer/désactiver la distance de vue illimitée.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour sauter.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour se déplacer rapidement en mode rapide.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour reculer.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour avancer.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour se déplacer à gauche.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour se déplacer à droite.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour ouvrir la console de jeu.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour ouvrir la fenêtre de chat pour entrer des commandes.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour ouvrir la fenêtre de chat.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour ouvrir l'inventaire.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour afficher les infos de débogage. Utilisé pour le développement.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour se déplacer lentement.\n"
+"Utilisé pour descendre si aux1_descends est désactivé.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour changer de vue entre la 1ère et 3ème personne.\n"
+"Voir 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 ""
+"Touche pour prendre des captures d'écran.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour passer en mode cinématique.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour afficher/cacher la mini-carte.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour passer en mode rapide.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour voler.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour passer en mode \"sans-collision\".\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche de mise à jour de la caméra. Seulement utilisé pour le "
+"développement.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour afficher/cacher les infos de débogage.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour afficher/cacher le HUD.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour afficher/cacher la zone de chat.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour afficher/cacher la brume.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Touche pour afficher/cacher la zone de profilage. Utilisé pour le "
+"développement.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Touche pour activer/désactiver la distance de vue illimitée.\n"
+"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Touche \"utiliser\" pour monter/descendre"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Langue"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Profondeur des grandes caves"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Fonctionnalités de la lave"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Apparence des feuilles d'arbres"
+
+#: 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 ""
+"Apparence des feuilles d'arbres :\n"
+"- Détaillée : toutes les faces sont visibles\n"
+"- Simple : seulement les faces externes sont visibles\n"
+"- Opaque : désactive la transparence entre les feuilles"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Gauche"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr "Temps d'intervalle entre la mise à jour des objets sur le réseau."
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 ""
+"Niveau de détails des infos de débogage écrits dans debug.txt :\n"
+"- <rien> (pas d'infos)\n"
+"- aucun (messages sans niveau)\n"
+"- erreur\n"
+"- avertissement\n"
+"- action\n"
+"- info\n"
+"- prolixe"
+
+#: 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"
+
+#: 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 ""
+"Nombre limite de requête HTTP en parallèle. Affecte :\n"
+"- L'obtention de média si le serveur utilise l'option remote_media.\n"
+"- Le téléchargement de la liste des serveurs et l'annonce du serveur.\n"
+"- Les téléchargements effectués par le menu (ex.: gestionnaire de mods).\n"
+"Prend seulement effet si Minetest est compilé avec cURL."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Fluidité des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Régularité de la fluidité des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "Itérations maximum pendant la transformation des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "Délais de nettoyage d'une file de liquide"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Facteur d'écoulement des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Intervalle de mise-à-jour des liquides en secondes."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "Intervalle de mise-à-jour des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Gestionnaire de jeux du menu"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Gestionnaire de mods du menu"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Script de menu personnalisé"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Rendre la couleur de la brume et du ciel différente selon l'heure du jour et "
+"la direction du regard."
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+"Rendre DirectX compatible avec LuaJIT. Désactiver si cela cause des "
+"problèmes."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Chemin du monde"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Attributs spécifiques à Mapgen V6.\n"
+"Quand les terrains neigeux sont activés, les jungles sont activés et les "
+"drapeaux jungle est ignoré.\n"
+"Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs par "
+"défaut.\n"
+"Les drapeaux commençant par \"non\" sont désactivés."
+
+#: 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.\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."
+msgstr ""
+"Attributs de terrain spécifiques à Mapgen V7.\n"
+"'ridges' sont les rivières.\n"
+"Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs par "
+"défaut.\n"
+"Les drapeaux commençant par \"non\" sont désactivés."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Attributs spécifiques à Mapgen V6.\n"
+"Quand les terrains neigeux sont activés, les jungles sont activés et les "
+"drapeaux jungle est ignoré.\n"
+"Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs par "
+"défaut.\n"
+"Les drapeaux commençant par \"non\" sont désactivés."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"Attributs spécifiques à Mapgen V6.\n"
+"Quand les terrains neigeux sont activés, les jungles sont activés et les "
+"drapeaux jungle est ignoré.\n"
+"Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs par "
+"défaut.\n"
+"Les drapeaux commençant par \"non\" sont désactivés."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Limites de génération du terrain"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Intervalle de sauvegarde de la carte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Limite des mapblocks"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "Délais d'interruption du déchargement des mapblocks"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Nom du générateur de carte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Mapgen : paramètres de bruit de la température"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Mapgen : paramètres de mélange de l'humidité"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Mapgen : paramètres de bruit de l'humidité"
+
+#: src/settings_translation_file.cpp
+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
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Drapeaux de génération de terrain"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave1 noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit cave1"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave2 noise parameters"
+msgstr "Mapgen V5 : paramètre de bruit cave2"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat filler depth noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit sur la profondeur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Drapeaux des fractales de la génération de terrain"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Drapeaux de génération de terrain"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Élévation des collines plates"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Mapgen Julia : itérations fractales"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat large cave depth"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat terrain noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit du terrain de base"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Fractales de la génération de terrain"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen Julia : couche fractale W"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit cave1"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "Mapgen V5 : paramètre de bruit cave2"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit sur la profondeur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Drapeaux des fractales de la génération de terrain"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Mapgen Julia : itérations fractales"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "Mapgen Julia : fractale W"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "Mapgen Julia : fractale X"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Mapgen Julia : fractale Y"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Mapgen Julia : fractale Z"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Mapgen Julia : décalages fractals"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Mapgen : paramètres de bruit du fond de l'eau"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Mapgen Julia : couche fractale W"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr "Mapgen : paramètres de mélange de la température"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Nom du générateur de carte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Mapgen V5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit cave1"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr "Mapgen V5 : paramètre de bruit cave2"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr "Mapgen V5 : paramètres de facteur de dispersion"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit sur la profondeur"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr "Mapgen V5 : paramètres de bruit de la hauteur"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Mapgen V6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des pommiers"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "Mapgen V6 : fréquence des plages"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des plages"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des biomes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des caves"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Mapgen V6 : fréquence des déserts"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "Mapgen V6 : drapeaux"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr "Mapgen V6 : paramètres de sélection de la hauteur de bruit"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit de l'humidité"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit de la vase"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des pentes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit de l'altitude du terrain"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit du terrain de base"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr "Mapgen V6 : paramètres de bruit des arbres"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Mapgen V7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mapgen Julia : échelles fractales"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit cave1"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit cave2"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit sur la profondeur"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "Mapgen V7 : drapeaux"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr "Mapgen V7 : paramètres de sélection de la hauteur du bruit"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr "Mapgen V7 : paramètres de hauteur du bruit des montagnes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit des montagnes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit de l'eau des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr "Mapgen V7 : paramètres de bruit de l'altitude du terrain"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr "Mapgen V7 : paramètres du bruit du terrain de base"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr "Mapgen V7 : paramètres du bruit de la persistance du terrain"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "Profondeur des caves massives"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr "Bruit des caves massives"
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr "Forme des caves massives."
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr "Distance maximale de génération des mapblocks"
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr "Distance maximale d'envoi des mapblocks"
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr "Maximum de liquides traités par étape de serveur."
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr "Maximum d'extra-mapblocks par clearobjects"
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr "Paquets maximum par itération"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr "FPS maximum"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "FPS maximum quand le jeu est en pause."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "Mapblocks maximum chargés de force"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Largeur maximale de la barre d'inventaire"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr "Nombre maximum de mapblocks qui peuvent être listés pour chargement."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Nombre maximum de mapblocks à lister qui doivent être générés.\n"
+"Laisser ce champ vide pour un montant approprié défini automatiquement."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Nombre maximum de mapblocks à lister qui doivent être générés depuis un "
+"fichier.\n"
+"Laisser ce champ vide pour un montant approprié défini automatiquement."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "Nombre maximum de mapblocks chargés de force."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+"Nombre maximum de mapblocks gardés dans la mémoire du client.\n"
+"Définir à -1 pour un montant illimité."
+
+#: 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 ""
+"Nombre maximum de paquets envoyés par étape d'envoi. Si vous avez une "
+"connexion lente,\n"
+"essayez de réduire cette valeur, mais réduisez pas cette valeur en-dessous "
+"du double du nombre\n"
+"de clients maximum sur le serveur."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "Nombre maximum de joueurs qui peuvent être connectés en même temps."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "Nombre maximum d'objets sauvegardés dans un mapblock (16^3 blocs)."
+
+#: 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 ""
+"Proportion maximale de la fenêtre à utiliser pour la barre d'inventaire.\n"
+"Utile quand il y a quelque chose à afficher à gauche ou à droite de la barre."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Nombre maximum de mapblocks simultanés envoyés par client"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Nombre maximum total de mapblocks simultanés envoyés"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Délais maximum de téléchargement d'un fichier (ex.: un mod), établi en "
+"millisecondes."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Joueurs maximum"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Nombre maximum d'objets par mapblock"
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Menus"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr "Mise en cache des meshes"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Message du jour"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "Message du jour affiché aux joueurs lors de la connexion."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr "Méthodes utilisées pour l'éclairage des objets."
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Mini-carte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Mini-carte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Hauteur de scannage de la mini-carte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "Taille minimum des textures à filtrer"
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mip-mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr "Profilage des mods"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "URL des détails du magasin de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "URL de téléchargement du magasin de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "URL de liste des mods du magasin de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Chemin de la police Monospace"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "Taille de la police Monospace"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Sensibilité de la souris"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Facteur de sensibilité de la souris."
+
+#: 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 ""
+"Facteur de mouvement de bras en tombant.\n"
+"Exemples : 0 = aucun mouvement, 1 = normal, 2 = double."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"Facteur de mouvement de bras.\n"
+"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"Nom du générateur de terrain à utiliser lorsque de la création d'un nouveau "
+"monde.\n"
+"Créer un nouveau monde dans le menu va annuler ce paramètre."
+
+#: 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 ""
+"Nom du joueur.\n"
+"Lors qu'un serveur est lancé, les clients se connectant avec ce nom sont "
+"administrateurs."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+"Nom du serveur, affiché sur liste des serveurs publics et lorsque les "
+"joueurs se connectent."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Réseau"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"Port du réseau à écouter (UDP).\n"
+"Cette valeur est annulée en commençant depuis le menu."
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "Les nouveaux joueurs ont besoin d'entrer ce mot de passe."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Sans collision"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Mode sans collision"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "Eclairage des blocs"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "NodeTimer interval"
+msgstr "Intervalle d'envoi du temps"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
+"Paramètres de mélange pour la température, humidité et mélange de biomes."
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr "Bruits"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr "Échantillonnage de normalmaps"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr "Force des normalmaps"
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr "Nombre de threads"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+"Nombre de threads à utiliser. Laisser ce champ vide, ou augmenter cette "
+"valeur\n"
+"pour utiliser le multi-threading. Sur des systèmes multi-processeurs, cela "
+"va améliorer grandement\n"
+"la génération de terrain au détriment de quelques caves altérées."
+
+#: 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 ""
+"Nombre d'extra-mapblocks qui peuvent être chargés par /clearobjects dans "
+"l'immédiat.\n"
+"C'est un compromis entre un transfert SQLite plafonné et la consommation "
+"mémoire\n"
+"(4096 = 100 Mo, comme règle fondamentale)."
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "Nombre d'itérations sur l'occlusion parallaxe."
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+"Bias général de l'occlusion parallaxe, habituellement échelle divisée par 2."
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr "Echelle générale de l'occlusion parallaxe."
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "Echelle de l'occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Bias de l'occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Nombre d'itérations sur l'occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Mode occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "Force de l'occlusion parallaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "Chemin vers police TrueType ou Bitmap."
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Chemin où les captures d'écran sont sauvegardées."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+"Chemin vers le dossier des textures. Toutes les textures sont d'abord "
+"cherchées dans ce dossier."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Physique"
+
+#: 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 ""
+"Le joueur est capable de voler sans être affecté par la gravité.\n"
+"Nécessite le privilège \"fly\" sur un serveur."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Nom du joueur"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr "Distance de transfert du joueur"
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "Mode combat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+"Port où se connecter (UDP).\n"
+"Le champ de port dans le menu va annuler ce paramètre."
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+"Empêcher les mods d'exécuter des fonctions insécurisées (comme des commandes "
+"système)."
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+"Délais d’intervalle d'affichage du profilage des données. 0 = "
+"désactivation.\n"
+"Utile pour les développeurs."
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "Profilage"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "Délais d'intervale du profilage"
+
+#: 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 ""
+"Rayon de l'aire des nuages où se trouve 64 blocs de nuage.\n"
+"Les valeurs plus grandes que 26 entraînent une \"coupure\" nette des nuages "
+"aux coins de l'aire."
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr "Élève le terrain pour former des vallées autour des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Entrée aléatoire"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Distance d'affichage illimitée"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Média distant"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Port distant"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr "Remplace le menu par défaut par un menu personnalisé."
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Droite"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Intervalle de répétition du clic droit"
+
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr "Profondeur des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr "Bruit des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "River Size"
+msgstr "Taille des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr "Bruit des rivières"
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "Enregistrement des actions"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Mini-carte circulaire"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "Sauvegarde le monde du serveur sur le disque-dur du client."
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "Sauvegarder le monde du serveur"
+
+#: 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 ""
+"Mise à l'échelle du GUI par une valeur spécifique de l'utilisateur.\n"
+"Cela va lisser certains bords grossiers, et mélanger les pixels en réduisant "
+"l'échelle\n"
+"au détriment d'un effet de flou sur des pixels en bordure quand les images "
+"sont\n"
+"misent à l'échelle par des valeurs non-entières."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Hauteur de la fenêtre"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Largeur de la fenêtre"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Capture d'écran"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Dossier des captures d'écran"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Dossier des captures d'écran"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Capture d'écran"
+
+#: 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 "Security"
+msgstr "Sécurité"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Voir http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "Couleur des bords de sélection (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "Couleur des bords de sélection"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "Epaisseur des bords de sélection"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Serveur / Partie solo"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Adresse du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Description du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nom du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Port du serveur"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL de la liste des serveurs publics"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Fichier des serveurs publics"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+"Détermine la langue. Laisser vide pour utiliser celui de votre système.\n"
+"Un redémarrage du jeu est nécessaire pour prendre effet."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables 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é."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Mettre sur \"true\" active les plantes mouvantes.\n"
+"Nécessite les shaders pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Mettre sur \"true\" active les liquides mouvants.\n"
+"Nécessite les shaders pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"Les shaders permettent des effets visuels avancés et peut améliorer les "
+"performances sur certaines cartes graphiques.\n"
+"Fonctionne seulement avec OpenGL."
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr "Forme de la mini-carte. Activé = ronde, désactivé = carré."
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Afficher les infos de débogage"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "Message d'arrêt du serveur"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr "Taille des chunks à générer, établie en mapblocks (16^3 blocs)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Lumière douce"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Lisse les mouvement de la caméra en se déplaçant et en regardant autour.\n"
+"Utile pour enregistrer des vidéos."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr "Lisse la rotation de la caméra en mode cinématique. 0 pour désactiver."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Lisse la rotation de la caméra. 0 pour désactiver."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Déplacement lent"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Audio"
+
+#: 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 ""
+"Spécifie l'URL à laquelle les clients obtiennent les fichiers média au lieu "
+"d'utiliser le port UDP.\n"
+"$filename doit être accessible depuis $remote_media$filename via cURL "
+"(évidemment, remote_media devrait\n"
+"se terminer avec un slash).\n"
+"Les fichiers qui ne sont pas présents seront obtenus avec le moyen usuel."
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "Emplacement du spawn"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "Force des normalmaps autogénérés."
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr "Force de l'occlusion parallaxe."
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "Vérification stricte du protocole"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "SQLite synchronisé"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+msgstr "Hauteur du terrain"
+
+#: 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 "Texture path"
+msgstr "Chemin des textures"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr "L'altitude à laquelle la température descend de 20°C"
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr "L'interface réseau que le serveur écoute."
+
+#: 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 ""
+"Les privilèges que les nouveaux joueurs obtiennent automatiquement.\n"
+"Entrer /privs dans le jeu pour voir une liste complète des privilèges."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Le pilote vidéo pour Irrlicht."
+
+#: 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 ""
+"Force (obscurité) de l'ombrage des blocs avec l'occlusion ambiante.\n"
+"Les valeurs plus basses sont plus sombres, les valeurs plus hautes sont plus "
+"claires.\n"
+"Une gamme valide de valeurs pour ceci se situe entre 0.25 et 4.0. Si la "
+"valeur est en dehors\n"
+"de cette gamme alors elle sera définie à la plus proche des valeurs valides."
+
+#: 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 ""
+"Le temps (en secondes) où la file des liquides peut s'agrandir au-delà de "
+"sa\n"
+"capacité de traitement jusqu'à ce qu'une tentative est faite pour réduire sa "
+"taille en vidant\n"
+"l'ancienne file d'items. Une valeur de 0 désactive cette fonctionnalité."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"L'intervalle en secondes entre des clics droits répétés lors de l'appui sur "
+"le bouton droit de la souris."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "Cette police sera utilisée pour certaines langues."
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+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 ""
+"Durée de visibilité des objets jetés.\n"
+"Définir ceci à -1 pour désactiver cette fonctionnalité."
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr "Intervalle d'envoi du temps"
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr "Vitesse du temps"
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+"Temps de délais pour le client pour supprimer les données de la carte de sa "
+"mémoire."
+
+#: 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 ""
+"Pour réduire le lag, le transfert des mapblocks sont ralentis quand un "
+"joueur\n"
+"est en train de construire quelque chose.\n"
+"Cela détermine la durée du ralentissement après placement ou destruction "
+"d'un bloc."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Changer de caméra"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "Délais d'apparition des infobulles"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Filtrage trilinéaire"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"Utile pour rendre la mini-carte plus fluide sur des ordinateurs peu "
+"performants."
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "Mods sécurisés"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr "URL de la liste des serveurs affichée dans l'onglet multijoueur."
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "Distance de transfert du joueur illimitée"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "Purger les données de serveur inutiles"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "Activation des nuages 3D au lieu des nuages 2D (plats)."
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr "Mouvement des nuages dans le menu."
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr "Utilisation du filtrage anisotrope."
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "Utilisation du filtrage bilinéaire."
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Utiliser"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr "Utilisation du mip-mapping. Peut impacter les performances."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "Utilisation du filtrage trilinéaire."
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Utile pour les développeurs de mods."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "Synchronisation verticale"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr "VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Depth"
+msgstr "Profondeur des vallées"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley Profile"
+msgstr "Profil des vallées"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Slope"
+msgstr "Inclinaison des vallées"
+
+#: src/settings_translation_file.cpp
+msgid "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "Synchronisation verticale de la fenêtre de jeu."
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Pilote vidéo"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "Mouvement du bras"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"Distance d'affichage en blocs.\n"
+"Minimum à 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "Réduire la distance d'affichage"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "Augmenter la distance d'affichage"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Viewing range"
+msgstr "Distance de vue maximum"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volume du son"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Série Julia : coordonnée W de la couche 3D de la forme 4D.\n"
+"La portée est environ entre -2 et 2."
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Vitesse de marche"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Niveau de l'eau"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Niveau de l'eau"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "Niveau de la surface de l'eau dans le monde."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "Environnement mouvant"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Feuilles d'arbres mouvantes"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Plantes mouvantes"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Liquides mouvants"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Hauteur des liquides mouvants"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Durée du mouvement des liquides"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Vitesse de mouvement des liquides"
+
+#: 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 ""
+"Quand gui_scaling_filter est activé, tous les images du GUI sont\n"
+"filtrées dans Minetest, mais quelques images sont générées directement\n"
+"par le matériel (ex.: textures des blocs dans l'inventaire)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+"Quand gui_scaling_filter_txr2img est activé, cela copie les images depuis\n"
+"votre matériel vers Minetest pour mise à l'échelle. Si désactivé, retour à "
+"la méthode par défaut\n"
+"pour les pilotes vidéo qui ne supportent pas le chargement des textures "
+"depuis le matériel."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+"En utilisant le filtrage bilinéaire / trilinéaire / anisotrope, les textures "
+"de basse résolution\n"
+"peuvent être floues en agrandissat automatiquement les textures avec une "
+"interpolation précise\n"
+"pour préserver les pixels hasardeux.\n"
+"\n"
+"Ceci détermine la taille de la texture minimale pour les textures agrandie. "
+"Les valeurs plus hautes rendent\n"
+"les textures plus détaillées, mais nécessitent plus de mémoire.\n"
+"Les valeurs en puissance de 2 sont recommandées. Définir une valeur "
+"supérieure à 1 peut ne pas\n"
+"avoir un effet visible sauf le filtrage bilinéaire / trilinéaire / "
+"anisotrope est activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Limite de la génération de terrain.\n"
+"Notes :\n"
+"- Limite absolue à 31000 (une valeur supérieure n'a aucun effet).\n"
+"- La génération de terrain fonctionne par groupes de 80^3 blocs (= 5^3 "
+"mapblocks).\n"
+"- Ces groupes ont un décalage de -32, -32 blocs depuis leur origine.\n"
+"- Seuls les groupes intégrant les limites définies par map_generation_limit "
+"sont générées"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+"Détermine l'utilisation des polices Freetype. Nécessite une compilation avec "
+"le support Freetype."
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr "Détermine la désynchronisation des textures animées par mapblock."
+
+#: 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 ""
+"Détermine l'exposition illimitée des noms de joueurs aux autres clients.\n"
+"Obsolète : utiliser l'option player_transfer_distance à la place."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr "Détermine la possibilité des joueurs de tuer d'autres joueurs."
+
+#: 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 ""
+"Détermine la possibilité des clients de se re-connecter après une "
+"interruption de serveur.\n"
+"Activé-le si votre serveur est paramétré pour redémarrer automatiquement."
+
+#: src/settings_translation_file.cpp
+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
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+"Détermine la visibilité des infos de débogage du client (même effet que "
+"taper F5)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Width component of the initial window size."
+msgstr "Résolution verticale de la fenêtre de jeu."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Épaisseur des bordures de sélection autour des blocs."
+
+#: 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 ""
+"Chemin du monde (tout ce qui relatif au monde est enregistré ici).\n"
+"Inutile si démarré depuis le menu."
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "Délais d'interruption de cURL lors d'un téléchargement de fichier"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "Limite parallèle de cURL"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "Délais d'interruption de cURL"
+
+#~ msgid "Item textures..."
+#~ msgstr "Textures d'items..."
#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
#~ msgstr ""
-#~ "Attention : certains mods ne sont pas encore configurés.\n"
-#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. "
+#~ "Rend la surface de l'eau légèrement plus basse, de façon à ce qu'elle ne "
+#~ "submerge pas\n"
+#~ "entièrement le bloc voisin.\n"
+#~ "Cette fonctionnalité est encore expérimentale et la lumière douce "
+#~ "n’apparaît pas à la\n"
+#~ "surface de l'eau."
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr ""
+#~ "Active l'éclairage des blocs pointés (et supprime les bordures noires de "
+#~ "sélection)."
#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#~ "Julia set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by j_scale for offsets in nodes."
#~ msgstr ""
-#~ "Attention : certains mods configurés sont introuvables.\n"
-#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. "
+#~ "Série Julia : décalages (X,Y,Z) à partir du centre du monde.\n"
+#~ "La portée est environ entre -2 et 2. Multiplier par j_scale pour décaler "
+#~ "en nombre de blocs."
-#~ msgid "Delete map"
-#~ msgstr "Supprimer la carte"
+#~ msgid ""
+#~ "Julia set: W value determining the 4D shape.\n"
+#~ "Range roughly -2 to 2."
+#~ msgstr ""
+#~ "Série Julia : valeur W déterminant la forme 4D.\n"
+#~ "La portée est environ entre -2 et 2."
+
+#~ msgid ""
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Touche pour réduire la distance de vue. Modifie la distance de vue "
+#~ "minimale.\n"
+#~ "Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Touche pour augmenter la distance de vue. Modifie la distance de vue "
+#~ "minimale.\n"
+#~ "Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Mandelbrot set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by m_scale for offsets in nodes."
+#~ msgstr ""
+#~ "Série Mandelbrot : décalages (X,Y,Z) à partir du centre du monde.\n"
+#~ "La portée est environ entre -2 et 2. Multiplier par m_scale pour décaler "
+#~ "en nombre de blocs."
+
+#~ msgid "Mandelbrot set: Approximate (X,Y,Z) scales in nodes."
+#~ msgstr "Série Mandelbrot : échelles (X,Y,Z) en blocs."
+
+#~ msgid ""
+#~ "Mandelbrot set: Iterations of the recursive function.\n"
+#~ "Controls scale of finest detail."
+#~ msgstr ""
+#~ "Série Mandelbrot : itérations de la fonction récursive.\n"
+#~ "Contrôle l'échelle du détail le plus subtil."
+
+#~ msgid ""
+#~ "Mandelbrot set: W co-ordinate of the generated 3D slice of the 4D shape.\n"
+#~ "Range roughly -2 to 2."
+#~ msgstr ""
+#~ "Série Mandelbrot : coordonnée W de la couche 3D de la forme 4D.\n"
+#~ "La portée est environ entre -2 et 2."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen fractal.\n"
+#~ "'julia' selects a julia set to be generated instead of a mandelbrot set.\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."
+#~ msgstr ""
+#~ "Attributs de terrain spécifiques à Mapgen V7.\n"
+#~ "'ridges' sont les rivières.\n"
+#~ "Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs "
+#~ "par défaut.\n"
+#~ "Les drapeaux commençant par \"non\" sont désactivés."
+
+#~ msgid "Mapgen fractal mandelbrot iterations"
+#~ msgstr "Mapgen Mandelbrot : itérations fractales"
+
+#~ msgid "Mapgen fractal mandelbrot offset"
+#~ msgstr "Mapgen Mandelbrot : décalages fractals"
+
+#~ msgid "Mapgen fractal mandelbrot scale"
+#~ msgstr "Mapgen Mandelbrot : échelles fractales"
+
+#~ msgid "Mapgen fractal mandelbrot slice w"
+#~ msgstr "Mapgen Mandelbrot : couche fractale W"
+
+#~ msgid ""
+#~ "Maximum distance above water level for player spawn.\n"
+#~ "Larger values result in spawn points closer to (x = 0, z = 0).\n"
+#~ "Smaller values may result in a suitable spawn point not being found,\n"
+#~ "resulting in a spawn at (0, 0, 0) possibly buried underground."
+#~ msgstr ""
+#~ "Distance maximum au-dessus du niveau de l'eau où le joueur apparaît.\n"
+#~ "Des valeurs plus grandes aboutissent à des locations plus proches de (x = "
+#~ "0, z = 0).\n"
+#~ "Des valeurs plus petites peut résulter à une location de spawn non-"
+#~ "trouvée, résultant\n"
+#~ "à une location située à (0, 0, 0) probablement enterrée sous le sol."
+
+#~ msgid ""
+#~ "Minimum wanted FPS.\n"
+#~ "The amount of rendered stuff is dynamically set according to this. and "
+#~ "viewing range min and max."
+#~ msgstr ""
+#~ "Images par seconde (FPS) minimum.\n"
+#~ "Le niveau de rendu est dynamiquement adapté selon ce paramètre et la "
+#~ "distance de vue (minimale et maximale)."
+
+#~ msgid "New style water"
+#~ msgstr "Nouveau style de liquide"
+
+#~ msgid ""
+#~ "Pre-generate all item visuals used in the inventory.\n"
+#~ "This increases startup time, but runs smoother in-game.\n"
+#~ "The generated textures can easily exceed your VRAM, causing artifacts in "
+#~ "the inventory."
+#~ msgstr ""
+#~ "Pré-générer tous les visuels d'items utilisés dans l'inventaire.\n"
+#~ "Cela augmente le temps de démarrage, mais rend les inventaires plus "
+#~ "fluides.\n"
+#~ "Les textures générées peuvent facilement déborder votre VRAM, causant des "
+#~ "bugs dans votre inventaire."
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Pré-chargement des textures d'inventaire"
+
+#~ msgid ""
+#~ "The allowed adjustment range for the automatic rendering range "
+#~ "adjustment.\n"
+#~ "Set this to be equal to viewing range minimum to disable the auto-"
+#~ "adjustment algorithm."
+#~ msgstr ""
+#~ "Distance d'affichage maximum.\n"
+#~ "Définir cette valeur égale à la distance de vue minimum pour désactiver\n"
+#~ "l'auto-ajustement dynamique de la distance d'affichage."
+
+#~ msgid "Vertical initial window size."
+#~ msgstr "Largeur initiale de la fenêtre de jeu."
+
+#~ msgid "Vertical spawn range"
+#~ msgstr "Portée verticale du spawn"
+
+#~ msgid "Viewing range minimum"
+#~ msgstr "Distance de vue minimum"
+
+#~ msgid "Wanted FPS"
+#~ msgstr "FPS minimum"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Réinitialiser le monde"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Taille appliquée aux menus : "
+
+#~ msgid "Downloading"
+#~ msgstr "Téléchargement"
+
+#~ msgid " KB/s"
+#~ msgstr " Ko/s"
+
+#~ msgid " MB/s"
+#~ msgstr " Mo/s"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr ""
+#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet"
+
+#~ msgid "is required by:"
+#~ msgstr "est requis par :"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Configuration enregistrée. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Attention : configuration incorrecte. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr ""
+#~ "Impossible de créer le monde : le nom contient des caractères invalides"
+
+#~ msgid "Show Public"
+#~ msgstr "Voir les serveurs publics"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Voir les serveurs favoris"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Laisser l'adresse vide pour lancer un serveur local."
+
+#~ msgid "Create world"
+#~ msgstr "Créer un monde"
+
+#~ msgid "Address required."
+#~ msgstr "Adresse requise."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Fichiers à supprimer"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Impossible de configurer ce monde : aucune sélection active"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1283,73 +4819,142 @@ msgstr "Zoomer"
#~ "- Échap : ce menu\n"
#~ "- T : discuter\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés"
+#~ msgid "Delete map"
+#~ msgstr "Supprimer la carte"
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Impossible de configurer ce monde : aucune sélection active"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Attention : certains mods configurés sont introuvables.\n"
+#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Attention : certains mods ne sont pas encore configurés.\n"
+#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. "
-#~ msgid "Files to be deleted"
-#~ msgstr "Fichiers à supprimer"
+#~ msgid "Local install"
+#~ msgstr "Installation locale"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné"
+#~ msgid "Add mod:"
+#~ msgstr "Ajouter un mod :"
-#~ msgid "Address required."
-#~ msgstr "Adresse requise."
+#~ msgid "MODS"
+#~ msgstr "MODS"
-#~ msgid "Create world"
-#~ msgstr "Créer un monde"
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "PACKS DE TEXTURES"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Laisser l'adresse vide pour lancer un serveur local."
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "PARTIE SOLO"
-#~ msgid "Show Favorites"
-#~ msgstr "Voir les serveurs favoris"
+#~ msgid "Finite Liquid"
+#~ msgstr "Liquides limités"
-#~ msgid "Show Public"
-#~ msgstr "Voir les serveurs publics"
+#~ msgid "Preload item visuals"
+#~ msgstr "Précharger les objets"
-#~ msgid "Advanced"
-#~ msgstr "Avancé"
+#~ msgid "SETTINGS"
+#~ msgstr "PARAMÈTRES"
-#~ msgid "Multiplayer"
-#~ msgstr "Multijoueur"
+#~ msgid "Password"
+#~ msgstr "Mot de passe"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr ""
-#~ "Impossible de créer le monde : le nom contient des caractères invalides"
+#~ msgid "Name"
+#~ msgstr "Nom"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Attention : configuration incorrecte. "
+#~ msgid "START SERVER"
+#~ msgstr "DÉMARRER LE SERVEUR"
-#~ msgid "Configuration saved. "
-#~ msgstr "Configuration enregistrée. "
+#~ msgid "CLIENT"
+#~ msgstr "CLIENT"
-#~ msgid "is required by:"
-#~ msgstr "est requis par :"
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Ajouter un mod"
-#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgid "Remove selected mod"
+#~ msgstr "Supprimer le mod sélectionné"
+
+#~ msgid "EDIT GAME"
+#~ msgstr "MODIFIER LE JEU"
+
+#~ msgid "new game"
+#~ msgstr "nouveau jeu"
+
+#~ msgid "Mods:"
+#~ msgstr "Mods :"
+
+#~ msgid "GAMES"
+#~ msgstr "JEUX"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Nom du jeu"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet"
+
+#~ msgid "Rendering:"
+#~ msgstr "Affichage :"
+
+#~ msgid "If enabled, "
+#~ msgstr "Si activé, "
+
+#~ msgid "If disabled "
+#~ msgstr "Si désactivé "
+
+#~ msgid "Enable a bit lower water surface, so it doesn't "
#~ msgstr ""
-#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet"
+#~ "Rend l'eau légèrement plus basse, de façon à ce qu'elle ne submerge pas "
+#~ "le bloc complètement.\n"
+#~ "Note : cette fonctionnalité est assez expérimentale et l'éclairage doux "
+#~ "ne fonctionne pas dessus. "
-#~ msgid " MB/s"
-#~ msgstr " Mo/s"
+#~ msgid "\""
+#~ msgstr "\""
-#~ msgid " KB/s"
-#~ msgstr " Ko/s"
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "Attributs de terrain spécifiques à Mapgen V7.\n"
+#~ "'ridges' sont les rivières.\n"
+#~ "Les drapeaux qui ne sont spécifiés dans le champ gardent leurs valeurs "
+#~ "par défaut.\n"
+#~ "Les drapeaux commençant par \"non\" sont désactivés."
-#~ msgid "Fly mode"
-#~ msgstr "Voler"
+#, fuzzy
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Attributs généraux de la génération de terrain.\n"
+#~ "Les drapeaux qui ne sont spécifiés dans leur champ respectif gardent "
+#~ "leurs valeurs par défaut."
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtrage anisotrope"
+#~ msgid "No!!!"
+#~ msgstr "Non !"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-mapping"
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Normal Mapping"
-#~ msgid "Downloading"
-#~ msgstr "Téléchargement"
+#~ msgid "Public Serverlist"
+#~ msgstr "Liste de serveurs publics"
+
+#~ msgid "No of course not!"
+#~ msgstr "Non, bien sûr que non !"
diff --git a/po/he/minetest.po b/po/he/minetest.po
new file mode 100644
index 000000000..f4229208c
--- /dev/null
+++ b/po/he/minetest.po
@@ -0,0 +1,4047 @@
+# Hebrew translations for minetest package.
+# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# Automatically generated, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2015-10-26 16:22+0200\n"
+"Last-Translator: ChaosWormz <chaoswormz@openmailbox.org>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/minetest/minetest/"
+"he/>\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.5-dev\n"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured in a Lua script, such as a mod:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occured:"
+msgstr "התרחשה שגי××”:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "תפריט ר×שי"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
+msgid "Ok"
+msgstr "×ישור"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "התחבר מחדש"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
+msgstr "טוען..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "ביטול"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "תלוי ב:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "×פשר בכל"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "הסתר משחק"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "מוד:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "שמור"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "עול×:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "מופעל"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "ליצור"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "משחק"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "×©× ×”×¢×•×œ×"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "×”×× ×‘×¨×¦×•× ×š למחוק ×ת \"$1\"?"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "מחק"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "למחוק ×¢×•×œ× \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "קבל"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "משחקי×"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "מודי×"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "החקן"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "דירוג"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "חפש"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "×©× ×§×¦×¨:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "הותקן בהצלחה:"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "התקן מחדש"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "קרדיטי×"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
+msgstr "כתובת / פורט :"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "קלינט"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "התחבר"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "ש×/סיסמה :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP ×פשר"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "קביעת תצורה"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "משחק יצירתי"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr "×פשר נזק"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "ש×/סיסמה"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "חדש"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "×ין ×¢×•×œ× × ×•×¦×¨ ×ו נבחר!"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
+msgstr "פורט"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "ציבורי"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "בחר עול×:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "שרת"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "התחל משחק"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "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
+#, fuzzy
+msgid "Advanced 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 "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "התחבר"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+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 builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+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
+#, fuzzy
+msgid "Particles"
+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 "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 ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+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 ""
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "שחק"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "שחקן יחיד"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr ""
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr ""
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "חבילות מרק×"
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr ""
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/game.cpp
+msgid "You died."
+msgstr ""
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr ""
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+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 "3D clouds"
+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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "×פשר בכל"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "מודי×"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "שרת"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 "Public Serverlist"
+#~ msgstr "רשימת ×©×¨×ª×™× ×¤×•×ž×‘×™"
+
+#~ msgid "No of course not!"
+#~ msgstr "×œ× ×‘×¨×•×¨ של×!"
diff --git a/po/hu/minetest.po b/po/hu/minetest.po
index 3db7b54e9..776ce693f 100644
--- a/po/hu/minetest.po
+++ b/po/hu/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-08-05 13:29+0200\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-07 03:17+0000\n"
"Last-Translator: Kisbenedek Márton <martonkisbenedek@gmail.com>\n"
"Language-Team: Hungarian "
"<https://hosted.weblate.org/projects/minetest/minetest/hu/>\n"
@@ -17,170 +17,281 @@ 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 2.4-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Hiba történt egy Lua scriptben (egy modban):"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "Hiba történt:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Főmenü"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Újracsatlakozás"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "A szerver újracsatlakozást kért:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Betöltés..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokoll verzió eltérés. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "A szerver $1 és $2 protokoll verzió közötti verziókat támogat. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Próbáld újra engedélyezni a nyilvános szerverlistát és ellenőrizd az "
"internetkapcsolatot."
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Világ:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Csak $1 protokoll verziót támogatjuk."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "$1 és $2 közötti protokoll verziókat támogatunk."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Mégse"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Függ:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Modpakk letiltás"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Modpakk engedélyez"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Mind engedélyez"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"A \"$1\" mod engedélyezése nem sikerült, mert rossz karaktereket tartalmaz. "
+"Csak az [0-z0-9_] karakterek engedélyezettek."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
-msgstr "Játék elrejtése"
+msgstr "Játék elrejtés"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr "Modpakk tartalom elrejtése"
+msgstr "Modpakk tartalom elrejtés"
-#: builtin/mainmenu/dlg_config_world.lua:49
-#, fuzzy
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Függ ettől:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Mentés"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Mégse"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Modpakk engedélyezése"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Modpakk letiltása"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Világ:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "Engedélyezve"
+msgstr "Engedélyez"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Összes engedélyezése"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "\"$1\" nevű világ már létezik"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Világ neve"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Létrehoz"
-#: builtin/mainmenu/dlg_create_world.lua:53
-#, fuzzy
-msgid "Seed"
-msgstr "Seed"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Tölts le egy al-játékot (mint a Minetest Game) a minetest.net-ről"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Térkép generátor"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Letöltés a minetest.net-ről"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Játék"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Létrehozás"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Térkép generátor"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "Nincsenek al-játékok telepítve."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Letöltés a minetest.net-ről"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
"Figyelmeztetés: A \"minimal development test\" csak fejlesztőknek ajánlott."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Tölts le egy al-játékot (pl. minetest_game) a minetest.net-ről"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "\"$1\" nevű világ már létezik"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Világ neve"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Nincsenek aljátékok telepítve."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Biztosan törölni akarod: \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Igen"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Persze, hogy nem!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Törlés"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: \"$1\" törlése meghiúsult"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: érvénytelen mod útvonal: \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "\"$1\" világ törlése?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nem"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Elfogad"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Modpakk átnevezése:"
+msgstr "Modpakk átnevezés:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Elfogad"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Mod telepítés: fájl: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Nincs megadva leírás a beállításhoz)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Vissza a Beállítások oldalra"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Keres"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Letiltva"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Szerkeszt"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Engedélyezve"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "A formátum 3 szám vesszőkkel elválasztva, zárójelek között."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Játékok"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Modok"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Ãrj be egy érvényes egész számot."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Ãrj be egy érvényes számot."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Lehetséges értékek: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Alapértelmezett visszaállítás"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Útvonal kiválasztás"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Technikai nevek mutatása"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Az értéknek nagyobbnak kell lennie ennél: $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Az értéknek kisebbnek kell lennie ennél: $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -188,464 +299,506 @@ msgstr ""
"\n"
"Mod telepítés: \"$1\" nem támogatott fájltípus, vagy hibás archívum"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "$1 telepítése meghiúsult"
+msgstr "$1 telepítése meghiúsult ide: $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Mod telepítése: nem található megfelelő mappanév ehhez a modpakk-hoz: $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Mod telepítés: fájl: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Mod telepítése: nem található megfelelő mod név ehhez: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Rendezetlen"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Mod telepítése: nem található megfelelő mappanév ehhez a modpakk-hoz: $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Keresés"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Ãruház bezárása"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "$1 letöltése, kérlek várj..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Sikeresen telepítve:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Telepítés"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Rövid név:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Oldal $1 ennyiből: $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Értékelés"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Újratelepítés"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Telepítés"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Keresés"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Ãruház bezárása"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Rövid név:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Oldal $1 ennyiből: $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Sikeresen telepítve:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Készítők"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Rendezetlen"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Belső fejlesztők"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Újratelepítés"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Tevékeny hozzájárulók"
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr "Korábbi belső fejlesztők"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Belső fejlesztők"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Készítők"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Korábbi hozzájárulók"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Korábbi belső fejlesztők"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Telepített modok:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Online mod tároló"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Mod ismertető:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Nincs elérhető mod leírás"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Mod ismertető:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Ãtnevez"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Kiválasztott modpakk törlése"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Kiválasztott mod törlése"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Mod fájl kiválasztása:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Modok"
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
-msgstr "Cím / Port:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Kiválasztott mod törlése"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Név / jelszó:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Kiválasztott modpakk törlése"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Nyilvános szerverlista"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Cím / Port"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Törlés"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Kliens"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Csatlakozás"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Kreatív mód"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Sérülés engedélyezve"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
-msgid "PvP enabled"
-msgstr "PvP engedélyezve"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Kedvenc törlés"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Kliens"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Kedvenc"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Új"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Név / Jelszó"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Beállítás"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP engedélyezve"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Játék indítása"
+#: builtin/mainmenu/tab_server.lua
+#, fuzzy
+msgid "Bind Address"
+msgstr "Bind Address"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Világ kiválasztása:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Beállít"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Kreatív mód"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Sérülés engedélyezése"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Nyilvános"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Név/jelszó"
-#: builtin/mainmenu/tab_server.lua:45
-#, fuzzy
-msgid "Bind Address"
-msgstr "Bind Address"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Új"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nincs létrehozva, vagy kiválasztva világ!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Szerver port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Nyilvános"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "Nincs létrehozva, vagy kiválasztva világ!"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Világ kiválasztása:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Szerver"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "ÃttetszÅ‘ levelek"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Szerver port"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "Egyszerű levelek"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Játék indítása"
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
-msgstr "Szép levelek"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Nincs szűrés"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D felhők"
-#: builtin/mainmenu/tab_settings.lua:33
-msgid "Bilinear Filter"
-msgstr "Bi-lineáris szűrés"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Tri-lineáris szűrés"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Haladó beállítások"
-#: builtin/mainmenu/tab_settings.lua:43
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Élsimítás:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Biztosan visszaállítod az egyjátékos világod?"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "Bilineáris szűrés"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "No Mipmap"
-msgstr "No Mipmap"
+msgid "Bump Mapping"
+msgstr "Bumpmapping"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Gombok változtatása"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Csatlakozó üveg"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Szép levelek"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Mipmap"
msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Mipmap + Aniso. Filter"
msgstr "Mipmap + Aniso. Filter"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Biztosan visszaállítod az egyjátékos világod?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nem"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Nem!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Nincs szűrés"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Simított megvilágítás"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Nincs Mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Részecskék engedélyezése"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Blokk kiemelés"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D felhők"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Node körvonalazás"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "ÃttetszÅ‘ víz"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Nincs"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Tiszta (csatlakozó) üveg"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Node kiemelés"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Ãtlátszatlan levelek"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Textúrázás:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Ãtlátszatlan víz"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Renderelés:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax Occlusion"
+msgstr "Parallax Occlusion"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Részecskék"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Beállítások"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shaderek"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Gombok változtatása"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Egyszerű levelek"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Egyjátékos világ visszaállítása"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Simított megvilágítás"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Felhasználói felület méretaránya"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Textúrázás:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "A méretarány alkalmazva a menü elemekre: "
+#: 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."
-#: builtin/mainmenu/tab_settings.lua:250
-#, fuzzy
-msgid "Touch free target"
-msgstr "Touch free target"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr "Touchthreshold (px)"
-
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "Bumpmapping"
+msgstr "Érintésküszöb (px)"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-#, fuzzy
-msgid "Generate Normalmaps"
-msgstr "Generate Normalmaps"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-#, fuzzy
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Hullámzó víz"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Tri-lineáris szűrés"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Hullámzó levelek"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "Hullámzó növények"
-#: builtin/mainmenu/tab_settings.lua:308
-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."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Beállítások"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Hullámzó víz"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Egyjátékos mód indítása"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Igen"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Modok beállítása"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "Főmenü"
+msgstr "FÅ‘"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Egyjátékos mód indítása"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Játék"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
-msgstr "Egyjátékos mód"
-
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Textúra pakk kiválasztása:"
+msgstr "Egyjátékos"
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Nincs elérhető információ"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Textúrapakk kiválasztása:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Textúra pakkok"
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Csatlakozási idő lejárt."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Kész!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Csomópontok inicializálása"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Csomópontok inicializálása..."
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr "Textúrák betöltése..."
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr "Shaderek újraépítése..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Csomópontok inicializálása..."
-
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr "Csomópontok inicializálása"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Csatlakozási hiba (idő lejárt?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Elem textúrák..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Nem lehet betölteni, vagy nem található játék \""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Kész!"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Nem valós játék spec."
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Főmenü"
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Túl hosszú játékosnév."
-
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Csatlakozási hiba (idő lejárt?)"
-
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni."
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Túl hosszú játékosnév."
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "A megadott világ útvonala nem létezik: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Nem lehet betölteni, vagy nem található játék \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Nem valós játék spec."
-
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
#, fuzzy
msgid "needs_fallback_font"
msgstr "needs_fallback_font"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Folytatás"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Részletekért tekintsd meg a debug.txt fájlt."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Meghaltál."
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Gombok változtatása"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Újraéledés"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Jelszó változtatás"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Csatlakozás a szerverhez..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Tovább"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Kliens létrehozása..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Szerver létrehozása..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Alapértelmezett irányítás:\n"
+"- WASD: Mozgás\n"
+"- Space: Ugrás/Mászás\n"
+"- Shift: Lopakodás/Lefelé\n"
+"- Q: Tárgy eldobása\n"
+"- I: Eszköztár\n"
+"- Egér: Forgás/Nézelődés\n"
+"- Bal-egér: Ãsás/Ãœtés\n"
+"- Jobb-egér: Helyez/Használ\n"
+"- Egér görgő: Tárgy kiválaszt\n"
+"- T: Csevegés\n"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -662,623 +815,3781 @@ msgid ""
msgstr ""
"Alapértelmezett irányítás:\n"
"Nem látható menü:\n"
-"- egy érintés: gomb aktiválás\n"
-"- dupla érintés: helyez/használat\n"
+"- egy érintés: gomb aktivál\n"
+"- dupla érintés: helyez/használ\n"
"- ujj csúsztatás: körbenéz\n"
-"Menü/Inventory látható:\n"
+"Menü/Eszköztár látható:\n"
"- dupla érintés (külső):\n"
" -->bezár\n"
"- stack, vagy slot érintése:\n"
-" --> stack mozgatása\n"
+" --> stack mozgatás\n"
"- érint&megfogás, érintés 2. ujjal\n"
" --> egy elem slotba helyezése\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"Alapértelmezett irányítás:\n"
-"- WASD: Mozgás\n"
-"- Space: Ugrás/Mászás\n"
-"- Shift: Lopakodás/Lefele menés\n"
-"- Q: Tárgyak eldobása\n"
-"- I: Invertory\n"
-"- Egér: Forgás/Nézelődés\n"
-"- Egér Bal-gomb: Ãsás/Ãœtés\n"
-"- Egér jobb-gomb: Helyezés/Használat\n"
-"- Egér görgő: Tárgyak kiválasztása\n"
-"- T: Beszélgetés\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Tovább"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Jelszó változtatás"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Hangerő"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Gombok változtatása"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Kilépés a menübe"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
-msgstr "Kilépés az OP-rendszerbe"
-
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Leállítás..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Szerver létrehozása..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Kliens létrehozása..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Cím feloldása..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Csatlakozás a szerverhez..."
+msgstr "Bezárás"
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr "Elem definíciók..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr "Csomópont definíciók..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/mp"
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr "Média..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr "KiB/mp"
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr "MiB/mp"
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Részletekért tekintsd meg a debug.txt fájlt."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Csomópont definíciók..."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Belépés "
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Cím feloldása..."
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Újraéledés"
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Leállítás..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Hangerő"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "Meghaltál."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "Ok"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Gombkiosztás. (Ha elfuserálod ezt a menüt, távolíts el néhány cuccot a "
-"minetest.conf-ból)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Belépés "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Folytatás"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Használat\" = Lemászás"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Az \"ugrás\" gomb duplán a repüléshez"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Vissza"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "A gomb már használatban van"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Csevegés"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "Nyomj meg egy gombot"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Parancs"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Előre"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konzol"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Vissza"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Az \"ugrás\" gomb duplán a repüléshez"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Bal"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Eldobás"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Jobb"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Előre"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Használat"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Eszköztár"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Ugrás"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Lopakodás"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "A gomb már használatban van"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Eldobás"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Gombkiosztás. (Ha elfuserálod ezt a menüt, távolíts el néhány dolgot a "
+"minetest.conf-ból)"
-#: src/guiKeyChangeMenu.cpp:407
-#, fuzzy
-msgid "Inventory"
-msgstr "Inventory"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Bal"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Beszélgetés"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Halmok nyomtatása"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Parancs"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Látótávolság választása"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konzol"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Jobb"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Repülés bekapcsolása"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Lopakodás"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Váltás \"cinematic\" módba"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Gyorsaság bekapcsolása"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Toggle Cinematic"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Repülés bekapcsolása"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Váltás noclip-re"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Látótávolság választása"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Stacks nyomtatása"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Használat"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Régi jelszó"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "Nyomj meg egy gombot"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Új jelszó"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Változtat"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Jelszó megerősítés"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Változtat"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Új jelszó"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Régi jelszó"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Nem egyeznek a jelszavak!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Hangerő: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Kilépés"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Bal gomb"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Középső gomb"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Hangerő: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Jobb gomb"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Alkalmazások"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X gomb 1"
+#: src/keycode.cpp
+#, fuzzy
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Vissza"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Nagybetű"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Törlés"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulátor"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Gomb 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Nagybetű"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Vessző"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
#, fuzzy
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Konvertálás"
+
+#: src/keycode.cpp
#, fuzzy
-msgid "Kana"
-msgstr "Kana"
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menü"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Le"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Szünet"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Vége"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
#, fuzzy
-msgid "Shift"
-msgstr "Shift"
-
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Konvertálás"
+msgid "Erase OEF"
+msgstr "Erase OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Kilépés"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+#, fuzzy
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Végrehajt"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Befejezés"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Segítség"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Otthon"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Beilleszt"
+
+#: src/keycode.cpp
+#, fuzzy
msgid "Junja"
msgstr "Junjaa"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+#, fuzzy
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
+#, fuzzy
msgid "Kanji"
msgstr "Kanjii"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nem konvertált"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Bal gomb"
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Vége"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Bal Control"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Otthon"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Bal menü"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Bal Shift"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Bal Windows"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menü"
-#: src/keycode.cpp:227
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Középső gomb"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Mínusz"
+
+#: src/keycode.cpp
msgid "Mode Change"
msgstr "Mód váltás"
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Next"
msgstr "Következő"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Elsődleges"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nem konvertált"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Szóköz"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Numlock"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Le"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numerikus bill. *"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Végrehajt"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numerikus bill. +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numerikus bill. -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numerikus bill. /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "Numerikus bill. 0"
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "Numerikus bill. 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "Numerikus bill. 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "Numerikus bill. 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "Numerikus bill. 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "Numerikus bill. 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "Numerikus bill. 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "Numerikus bill. 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "Numerikus bill. 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "Numerikus bill. 9"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "OEM Clear"
+msgstr "OEM Clear"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "PA1"
+msgstr "PA1"
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Szünet"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Pont"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plusz"
+
+#: src/keycode.cpp
msgid "Print"
msgstr "Nyomtat"
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Elsődleges"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Jobb gomb"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "Jobb Control"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "Jobb menü"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Jobb Shift"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Jobb Windows"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "ScrollLock"
+
+#: src/keycode.cpp
msgid "Select"
msgstr "Kiválaszt"
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+#, fuzzy
+msgid "Shift"
+msgstr "Shift"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Alvás"
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Pillanatkép"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Szóköz"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulátor"
+
+#: src/keycode.cpp
msgid "Up"
msgstr "Fel"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Segítség"
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X gomb 1"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Beilleszt"
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Gomb 2"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Pillanatkép"
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "Nagyítás"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Bal Windows"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Alkalmazások"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = parallax occlusion with slope information (gyorsabb).\n"
+"1 = relief mapping (lassabb, pontosabb)."
-#: src/keycode.cpp:233
-msgid "Numpad 0"
-msgstr "Numerikus billentyű 0"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D felhők"
-#: src/keycode.cpp:233
-msgid "Numpad 1"
-msgstr "Numerikus billentyű 1"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D mód"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Jobb Windows"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3D támogatás.\n"
+"Jelenleg támogatott:\n"
+"- none: nincs 3d kimenet.\n"
+"- anaglyph: cián/magenta színű 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: osztott képernyő fent/lent.\n"
+"- sidebyside: osztott képernyő kétoldalt.\n"
+"- pageflip: quadbuffer based 3d."
+
+#: 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 ""
+"Egy választott map seed az új térképhez, véletlenszerűhöz hagyd üresen.\n"
+"Felül lesz írva új világ létrehozásánál a főmenüben."
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Alvás"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "Az összes kliensen megjelenített üzenet a szerver összeomlásakor."
-#: src/keycode.cpp:234
-msgid "Numpad 2"
-msgstr "Numerikus billentyű 2"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "Az összes kliensen megjelenített üzenet a szerver leállításakor."
-#: src/keycode.cpp:234
-msgid "Numpad 3"
-msgstr "Numerikus billentyű 3"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
-msgstr "Numerikus billentyű 4"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Gyorsulás levegőben"
-#: src/keycode.cpp:234
-msgid "Numpad 5"
-msgstr "Numerikus billentyű 5"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr "Aktív blokk kezelés időköze"
-#: src/keycode.cpp:234
-msgid "Numpad 6"
-msgstr "Numerikus billentyű 6"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr "Aktív blokk módosító időköze"
-#: src/keycode.cpp:234
-msgid "Numpad 7"
-msgstr "Numerikus billentyű 7"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Aktív blokk kiterjedési terület"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numerikus billentyű *"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Aktív objektum küldés hatótávolsága"
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numerikus billentyű +"
+#: 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 ""
+"Cím a csatlakozáshoz.\n"
+"Hagyd üresen helyi szerver indításához.\n"
+"Megjegyzés: a cím mező a főmenüben felülírja ezt a beállítást."
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numerikus billentyű -"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Dpi konfiguráció igazítása a képernyődhöz (nem X11/csak Android) pl. 4k "
+"képernyőkhöz."
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numerikus billentyű /"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"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."
-#: src/keycode.cpp:235
-msgid "Numpad 8"
-msgstr "Numerikus billentyű 8"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Haladó"
-#: src/keycode.cpp:235
-msgid "Numpad 9"
-msgstr "Numerikus billentyű 9"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Numlock"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Repülés és gyorsaság mindig"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "ScrollLock"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Bal Shift"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Felerősíti a völgyeket"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Jobb Shift"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Anizotrópikus szűrés"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Bal Controll"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Szerver kihirdetése"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Bal menü"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Kihirdetés a szerverlistára.\n"
+"Ha ki akarod hirdetni az ipv6 címedet, használd ezt: serverlist_url = v6."
+"servers.minetest.net."
-#: src/keycode.cpp:241
-msgid "Right Control"
-msgstr "Jobb Control"
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Menu"
-msgstr "Jobb menü"
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Összeomlás után újracsatlakozás kérése"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Vessző"
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Automatikus bejelentés a szerverlistára."
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Mínusz"
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Vissza gomb"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Pont"
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Alap terep magassága"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plusz"
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Alap"
-#: src/keycode.cpp:247
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr "Alap jogosultságok"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Bilineáris szűrés"
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Attn"
-msgstr "Attn"
+msgid "Bind address"
+msgstr "Bind Address"
+
+#: 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/keycode.cpp:247
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Építés játékos helyére"
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "CrSel"
-msgstr "CrSel"
+msgid "Bumpmapping"
+msgstr "Bumpmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Kamera simítás"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Kamera simítás \"cinematic\" módban"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Kamera frissítés váltás gomb"
+
+#: 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 "Barlang szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Csevegés gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Csevegés váltás gomb"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr "Térképdarab (chunk) mérete"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Filmkészítő mód"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Filmkészítő mód gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Tiszta átlátszó textúrák"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Kliens és szerver"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Mászás sebessége"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Felhő magasság"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Felhő rádiusz"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Felhők"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "A felhők egy kliens oldali effekt."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Felhők a menüben"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Színezett köd"
+
+#: 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 ""
+"Megbízható modok vesszővel elválasztott listája amiknek engedélyezettek nem "
+"biztonságos\n"
+"funkcióik még a mod biztonság bekapcsolása esetén is "
+"(request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Modok vesszővel elválasztott listája, melyeknek engedélyezett HTTP API-k "
+"elérése, amik\n"
+"lehetővé teszik, hogy feltöltsenek és letöltsenek adatokat a netről/netre."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Parancs gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Üveg csatlakozása"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+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."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Konzol alfa"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Konzol szín"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Konzol gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Folyamatos előre"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Folyamatos mozgás előre (csak tesztelésre használatos)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Irányítás"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Nap/éjjel ciklus hossza.\n"
+"Példák: 72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik "
+"változatlan marad."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Sivatagok és tengerpartok mérete a v6 térképgenerátorban.\n"
+"Amikor a havas területek engedélyezve vannak, 'mgv6_freq_desert' figyelmen "
+"kívül hagyva."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "A tavak süllyedésének meredekségét/mélységét állítja."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "A dombok meredekségét/magasságát állítja."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+"A járatok szélességét határozza meg, alacsonyabb érték szélesebb járatokat "
+"hoz létre."
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Üzenet összeomláskor"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Kiszámíthatatlanná teszi a láva viselkedését a barlangokban.\n"
+"Ez megnehezítheti a bányászatot. Nulla érték kikapcsolja. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Kiszámíthatatlanná teszi a víz viselkedését a barlangokban.\n"
+"Ez megnehezítheti a bányászatot. Nulla érték kikapcsolja. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Célkereszt alfa"
+
+#: 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)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Célkereszt színe"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Célkereszt színe (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Sebesség guggoláskor"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Sérülés"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Hibakereső infó váltás gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Hibakereső napló szint"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Alapértelmezett gyorsulás"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Alapértelmezett játék"
+
+#: 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 ""
+"Alapértelmezett játék új világ létrehozásánál.\n"
+"A főmenüből történő világ létrehozása ezt felülírja."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Alapértelmezett jelszó"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Alap jogosultságok"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Eszköztippek megjelenítésének késleltetése, ezredmásodpercben megadva."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: 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."
-#: src/keycode.cpp:248
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "A mélység, ami alatt masszív barlangokat találsz majd."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Ereszkedés sebessége"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"A szerver leírása, ami a szerverlistában jelenik meg és amikor a játékosok "
+"csatlakoznak."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "Részletes mod profil adat. Mod fejlesztőknek hasznos."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"A terep alakját határozza meg.\n"
+"A 3 szám a zárójelben határozza meg a terep \n"
+"méretarányát, a 3 számnak meg kell egyeznie."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Csalás elleni védelem letiltása"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Üres jelszavak tiltása"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "A szerver domain neve, ami a szerverlistában megjelenik."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Az \"ugrás\" gomb duplán a repüléshez"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+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"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "VBO engedélyez"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Mod biztonság engedélyezése"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Játékosok sérülésének és halálának engedélyezése."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"A simított megvilágítás engedélyezése egyszerű ambient occlusion-nel.\n"
+"A sebesség érdekében vagy másféle kinézetért kikapcsolhatod."
+
+#: 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 ""
+"Régi verziójú kliensek csatlakozásának tiltása.\n"
+"A régi kliensek kompatibilisek olyan értelemben, hogy nem omlanak össze ha "
+"egy új verziójú\n"
+"szerverhez csatlakoznak, de nem biztos, hogy támogatnak minden elvárt "
+"funkciót."
+
+#: 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 ""
+"Távoli média szerver használatának engedélyezése (ha a szerver biztosítja).\n"
+"Ezekről jelentősen gyorsabb a média letöltése (pl. textúrák)\n"
+"a szerverhez történő csatlakozáskor."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"IPv6 szerver futtatásának engedélyezése/letiltása. Egy IPv6 szerver "
+"lehetséges, hogy\n"
+"IPv6 kliensekre van korlátozva, a rendszer konfigurációtól függően.\n"
+"Nincs figyelembe véve, ha bind_address van beállítva."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Az eszköztár elemeinek animációjának engedélyezése."
+
+#: 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Minitérkép engedélyezése."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Kísérleti opció, látható rések jelenhetnek meg a blokkok között\n"
+"ha nagyobbra van állítva, mint 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS a szünet menüben"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Tartalék betűtípus"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Tartalék betűtípus árnyék"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Tartalék betűtípus árnyék alfa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Tartalék betűtípus méret"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Gyorsaság gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Gyorsulás gyors módban"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Sebesség gyors módban"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Gyors mozgás"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use 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."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Látótávolság"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Látóterület fokokban."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"A client/serverlist/ mappában lévő fájl, ami tartalmazza a kedvenc "
+"szervereket, amik a Többjátékos fül alatt jelennek meg."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Szűrés"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Repülés gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Repülés"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Köd"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Köd váltás gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Betűtípus helye"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Betűtípus árnyéka"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Betűtípus árnyék alfa"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Betűtípus árnyék alfa (átlátszatlanság, 0 és 255 között)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "Betűtípus árnyék eltolás, ha 0, akkor nem lesz árnyék rajzolva."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Betűtípus mérete"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr "Képernyőmentések formátuma."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Előre gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Freetype betűtípusok"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Milyen távolságból generálódnak a blokkok a kliensek számára, "
+"térképblokkokban megadva (16 blokk)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Milyen távolságból lesznek elküldve a blokkok a kliens számára, "
+"térképblokkokban megadva (16 blokk)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Milyen távolságból szereznek tudomást az objektumokról a kliensek, "
+"térképblokkokban megadva (16 blokk)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Teljes képernyő"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Teljes képernyő BPP"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Teljes képernyős mód."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Felhasználói felület méretaránya"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Felhasználói felület méretarány szűrő"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Felhasználói felület méretarány szűrő txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Ãltalános"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Normálfelületek generálása"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafika"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravitáció"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP Modok"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "HUD váltás gomb"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "A kezdeti ablak méret magasság összetevője."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "A felhők megjelenésének magassága."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "Nagy pontosságú FPU"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "A szerver honlapja, ami a szerverlistában megjelenik."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Milyen mélyek legyenek a folyók"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+"Mennyi ideig vár a szerver, mielőtt betöltetlenné teszi a nem használt "
+"térképblokkokat.\n"
+"Magasabb érték egyenletesebb, de több RAM-ot használ."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Milyen szélesek legyenek a folyók"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 szerver"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6 támogatás."
+
+#: 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 ""
+"Ha az FPS ennél magasabbra is tudna menni, lekorlátozható, \n"
+"hogy ne pazaroljon CPU erőforrást feleslegesen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Ha le van tiltva, a használat (use) gomb lesz használatban a gyors "
+"repüléshez,\n"
+"ha a repülés és a gyors mód is engedélyezve van."
+
+#: src/settings_translation_file.cpp
+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 ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Ha engedélyezve van, a \"használat\" (use) gomb lesz használatban a "
+"\"lopakodás\" (sneak) helyett lefelé mászáskor, vagy ereszkedéskor."
+
+#: 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 ""
+"Ha ez engedélyezve van, kikapcsolja a csalás megelőzést többjátékos módban."
+
+#: 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 ""
+"Ha engedélyezve van, érvénytelen világ adat nem okozza a szerver leállását.\n"
+"Csak akkor engedélyezd, ha tudod, hogy mit csinálsz."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr "Ha engedélyezve van, új játékosok nem csatlakozhatnak jelszó nélkül."
+
+#: 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 ""
+"Ha engedélyezve van, elhelyezhetsz blokkokat oda, ahol állsz (láb + "
+"szemmagasság).\n"
+"Ez segít, ha kis területen dolgozol."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+"Ha be van állítva, a játékosok mindig a megadott pozícióban élednek újra (és "
+"jelennek meg új csatlakozáskor)."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Világ hibák figyelmen kívül hagyása"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Játékon belül"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Játékon belüli csevegő konzol hátterének alfája (átlátszatlanság, 0 és 255 "
+"között)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console 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
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Fontos változások mentésének időköze a világban, másodpercekben megadva."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "Eszköztár elemek animációi"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Eszköztár gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Egér invertálása"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Függőleges egérmozgás invertálása."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Ugrás gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Ugrás sebessége"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a látóterület csökkentéséhez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb az éppen kijelölt tárgy eldobásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a látóterület növeléséhez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Ugrás gombja.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a gyors mozgáshoz gyors (fast) módban.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a játékos hátrafelé mozgásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a játékos előre mozgásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a játékos balra mozgatásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a játékos jobbra mozgatásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a csevegő konzol megnyitásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"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
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a csevegő ablak megnyitásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb az Eszköztár megnyitásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a lopakodáshoz (sneak).\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."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Gomb a belső és külső nézetű kamera váltáshoz.\n"
+"Lásd: 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 ""
+"Gomb képernyőfelvétel készítéshez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a \"cinematic\" mód (filmkészítés) bekapcsolásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a minitérkép megjelenítéséhez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a gyors (fast) módra váltáshoz.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a repülés (fly) módra váltáshoz.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a noclip módra váltáshoz.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a kamerafrissítés bekapcsolásához. Csak fejlesztők számára.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Gomb a hibakeresési infók megjelenítéséhez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Gomb a HUD megjelenítéséhez/kikapcsolásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a csevegő megjelenítéséhez.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Gomb a köd megjelenítésének ki/bekapcsolásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Gomb a végtelen látóterület bekapcsolásához.\n"
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Gomb használat a mászás/ereszkedéshez"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Nyelv"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Nagy barlang mélység"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Láva jellemzők"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Levelek stílusa"
+
+#: 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 ""
+"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"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Bal gomb"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Folyadék folyékonysága"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Folyadék folyékonyságának simítása"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Folyadék süllyedés"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Főmenü játék kezelő"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Főmenü mod kezelő"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Főmenü script"
+
+#: 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."
+
+#: 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 "
+"problémákat okoz."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Térkép mappája"
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Erase OEF"
-msgstr "Erase OEF"
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Térkép generálási jellemzők a Mapgen Valleys esetében.\n"
+"Az 'altitude_chill' a magasabb helyeket hűvösebbé teszi, ami biome "
+"problémákat okozhat.\n"
+"A 'humid_rivers' a folyók környéki páratartalmat módosítja, és ott, ahol "
+"medencék alakulnak ki,\n"
+"ütközhet a finoman beállított biome-okkal.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen flat.\n"
+"Occasional lakes and hills can be added to the flat world.\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."
+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
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Térképgenerálási jellemzők csak a v6 térképgenerátor esetében.\n"
+"When snowbiomes are enabled jungles are enabled and the jungles flag is "
+"ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with \"no\" are used to explicitly disable them."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Térkép generálási korlát"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Térkép mentésének időköze"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Térképblokk korlát"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Valleys térképgenerátor"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
-#: src/keycode.cpp:248
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Térkép generátor hibakereső"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Flat (lapos) térképgenerátor"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr "Flat (lapos) térképgenerátor barlang szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Flat (lapos) térképgenerátor talaj szint"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Flat (lapos) térképgenerátor domb meredekség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Flat (lapos) térképgenerátor domb küszöb"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Flat (lapos) térképgenerátor tó meredekség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Flat (lapos) térképgenerátor tó küszöb"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr "Flat (lapos) térképgenerátor nagy barlang mélység"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Fractal térképgenerátor"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr "Fractal térképgenerátor barlang szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Térkép generátor neve"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Térkép generátor v5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr "v5 térképgenerátor barlang szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Térkép generátor v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "V6 térképgenerátor tengerpart gyakoriság"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "V6 térképgenerátor sivatag gyakoriság"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Térkép generátor v7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr "v7 térképgenerátor barlang szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "Masszív barlang mélység"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr "Masszív barlangok innentől."
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr "Max blokk generálási távolság"
+
+#: 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 "Maximum FPS (képkocka/mp)"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "Maximum FPS a játék szüneteltetésekor."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Maximum hotbar szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr "Maximum blokkok száma, amik sorban állhatnak betöltésre."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"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
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"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."
+
+#: 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 ""
+"Maximum térképblokkok száma, amit a kliens memóriában tárolhat.\n"
+"Ãllítsd -1-re végtelen mennyiségért."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "Az egy időben csatlakozó játékosok maximális száma."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "Statikusan tárolt objektumok maximális száma egy térképblokkban."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+"Az aktuális ablak maximum hányada a hotbar számára.\n"
+"Hasznos, ha valamit el kell helyezni a hotbar jobb, vagy bal oldalán."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Az egyidejűleg a kliensenként küldött térképblokkok maximális száma"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Egyidejűleg küldött térképblokkok maximális száma összesen"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Egy fájl letöltésének maximum ideje (milliszekundumban), amíg eltarthat (pl. "
+"mod letöltés)."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Maximum felhasználók"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Maximum objektum térképblokkonként"
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Menük"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Napi üzenet"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "Napi üzenet a csatlakozó játékosoknak."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr "Kijelölt objektum kiemelésére használt módszer."
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Minitérkép"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Minitérkép gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Minitérkép letapogatási magasság"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "Minimum textúra méret a szűrőknek"
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "ExSel"
-msgstr "ExSel"
+msgid "Mipmapping"
+msgstr "Mip-mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "Mod áruház részletek URL"
-#: src/keycode.cpp:248
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "Mod áruház letöltés URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "Mod áruház mod lista URL"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Monospace betűtípus útvonal"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "Monospace betűtípus méret"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Egér érzékenység"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Egér érzékenység szorzó."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"A használni kívánt térképgenerátor neve új világ létrehozásakor.\n"
+"A főmenüben történő világ létrehozás ezt felülírja."
+
+#: 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 ""
+"A játékos neve.\n"
+"Szerver indításakor ezzel a névvel csatlakozó játékos admin jogú.\n"
+"A főmenüből történő indítás ezt felülírja."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+"A szerver neve, ami megjelenik a szerverlistában, és amikor a játékosok "
+"csatlakoznak."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Hálózat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "Az új felhasználóknak ezt a jelszót kell megadniuk."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Noclip gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "Blokk kiemelés"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "OEM Clear"
-msgstr "OEM Clear"
+msgid "Parallax occlusion"
+msgstr "Parallax Occlusion"
-#: src/keycode.cpp:248
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "PA1"
-msgstr "PA1"
+msgid "Parallax occlusion Scale"
+msgstr "Parallax Occlusion skála"
-#: src/keycode.cpp:248
-msgid "Zoom"
-msgstr "Nagyítás"
+#: 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
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Játék"
+msgid "Parallax occlusion mode"
+msgstr "Parallax Occlusion mód"
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Games"
-#~ msgstr "Játék"
+msgid "Parallax occlusion strength"
+msgstr "Parallax Occlusion ereje"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "A TrueType betűtípus (ttf) vagy bitmap útvonala."
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Képernyőmentések mappája."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr "Textúra mappa útvonala. Először minden textúrát itt keres a játék."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Fizika"
+
+#: 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 ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Játékos neve"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "Játékos játékos ellen (PvP)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+"Port a csatlakozáshoz (UDP).\n"
+"A főmenü port mezője ezt a beállítást felülírja."
+
+#: 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. "
+"shell parancsok."
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr "Jogosultságok, amiket a basic_privs adhat a játékosoknak"
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül"
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Látóterület választása gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Távoli média"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Távoli port"
+
+#: 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
+msgid "Right key"
+msgstr "Jobb gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Jobb kattintás ismétlés időköz"
+
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr "Folyó mélység"
+
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River Size"
+msgstr "Folyó méret"
+
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Kör alakú minitérkép"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "A kliens által fogadott térkép mentése lemezre."
+
+#: 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
+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 ""
+"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 "
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Képernyő magasság"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Képernyő szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Képernyőkép"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Képernyőkép mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr "Képernyőkép formátum"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr "Képernyőkép minőség"
+
+#: 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 ""
+"Képernyőkép minőség. Csak a JPEG formátumnál használatos.\n"
+"1 jelenti a legrosszabb minőséget; 100 jelenti a legjobb minőséget.\n"
+"Használd a 0-t az alapértelmezett minőséghez."
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr "Biztonság"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Lásd: http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "Kijelölő doboz keret színe (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "Kijelölő doboz színe"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "Kijelölő doboz szélesség"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Szerver / Egyjátékos"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "Szerver URL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Szerver címe"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Szerver leírása"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Szerver neve"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Szerver port"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "Szerverlista URL"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Szerverlista fájl"
+
+#: 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 ""
+"Nyelv beállítása. Hagyd üresen a rendszer nyelvének használatához.\n"
+"A változtatás után a játék újraindítása szükséges."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables 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á."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables 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á."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving 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á."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"A shaderek 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
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+"A minité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"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr "Entitások kijelölő dobozának mutatása"
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "Leállítási üzenet"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Az egyszerre generált térképblokkok mérete, térképblokkokban megadva (16 "
+"blokk)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Simított megvilágítás"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Kamera mozgásának simítása mozgáskor és körbenézéskor.\n"
+"Videofelvé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."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Kamera forgás simítása. 0 = letiltás."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Lopakodás gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Hang"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "Statikus feléledési (spawn) pont"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "Generált normálfelületek erőssége."
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr "Régebbi szerverek támogatása"
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
-#~ msgid "Favorites:"
-#~ msgstr "Kedvencek:"
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+msgstr "Terep magasság"
+
+#: 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 "Texture path"
+msgstr "Textúrák útvonala"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr "A magasság, ahol a hőmérséklet 20 fokkal csökken"
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+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 ""
+"Jogosultságok, amiket az új játékosok automatikusan megkapnak.\n"
+"A játékban a /privs parancs beírásával láthatod a teljes listát a "
+"szervereden."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a jobb egérgomb "
+"nyomva tartásakor."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "Ezt a betűtípust bizonyos nyelvek használják."
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+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 ""
+"Annak az ideje, hogy mennyi ideig \"élnek\" az eldobott tárgyak.\n"
+"-1-re állítás kikapcsolja ezt a funkciót."
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr "Idő sebessége"
+
+#: 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 ""
+"A lag (késés) csökkentéséért a blokkok 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, "
+"vagy eltávolításakor."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Kamera mód váltó gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "Eszköztipp késleltetés"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Tri-lineáris szűrés"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"Arra használható, hogy simábbá tegye a minitérképet lassabb gépeken."
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "Megbízható modok"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr "A Többjátékos fül alatt megjelenített szerverlista URL-je."
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "3D felhő kinézet használata lapos helyett."
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+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."
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "Bilineáris szűrés a textúrák méretezésekor."
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Használat gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+"Mip mapping használata a textúrák méretezéséhez. Kicsit növelheti a "
+"teljesítményt."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "Trilineáris szűrés a textúrák méretezéséhez."
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Mod fejlesztőknek hasznos."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley Depth"
+msgstr "Völgyek mélysége"
+
+#: 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 "Völgyek meredeksége"
+
+#: src/settings_translation_file.cpp
+msgid "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "Függőleges képernyő szinkronizálás."
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Videó driver"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"Látótávolság blokkokban megadva.\n"
+"Min = 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "Látóterület csökkentés gomb"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "Látóterület növelés gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr "Látóterület"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Hangerő"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Járás sebessége"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Víz jellemzők"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Vízszint"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "A világ vízfelszínének szintje."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "Hullámzó blokkok"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Hullámzó levelek"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Hullámzó növények"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Hullámzó víz"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Hullámzó víz magassága"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Hullámzó víz szélessége"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Hullámzó víz sebessége"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Hol áll meg a térkép generálás.\n"
+"Fontos:\n"
+"- 31000 -re van korlátozva (ha magasabbra állítjuk, nem lesz eredménye).\n"
+"- A térképgenerátor 80x80x80-as csoportokban dolgozik (5x5x5-ös térkép "
+"blokkok).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+"Használatban vannak-e freetype betűtípusok. Szükséges a beépített freetype "
+"támogatás."
+
+#: src/settings_translation_file.cpp
+msgid "Whether 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 "Engedélyezve van-e, hogy a játékosok sebezzék, ill. megöljék egymást."
+
+#: 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 ""
+"Kérjük-e a klienseket, hogy újracsatlakozzanak egy (Lua) összeomlás után.\n"
+"Ãllítsd true-ra, ha a szervered automatikus újraindításra van állítva."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "A látható terület vége el legyen-e ködösítve."
+
+#: 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)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "Kezdeti ablak méret szélessége."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "A kijelölődoboz vonalainak szélessége a blokkok körül."
+
+#: 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."
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 "Item textures..."
+#~ msgstr "Elem textúrák..."
+
+#~ msgid ""
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
+#~ msgstr ""
+#~ "Kicsivel alacsonyabb víz felszín engedélyezése, hogy ne töltse meg "
+#~ "teljesen a blokkot.\n"
+#~ "Megjegyzés: ez nem teljesen optimalizált, és a simított megvilágítás\n"
+#~ "így nem működik a víz felszínén."
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr ""
+#~ "Kijelölés kiemelés (kivilágítás) engedélyezése a blokkoknál (letiltja a "
+#~ "kijelölődobozt)."
+
+#~ msgid ""
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "A látóterület csökkentésének gombja. A minimum látóterületet módosítja.\n"
+#~ "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "A látóterület növelésének gombja. A minimum látótávolságot módosítja.\n"
+#~ "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Maximum distance above water level for player spawn.\n"
+#~ "Larger values result in spawn points closer to (x = 0, z = 0).\n"
+#~ "Smaller values may result in a suitable spawn point not being found,\n"
+#~ "resulting in a spawn at (0, 0, 0) possibly buried underground."
+#~ msgstr ""
+#~ "Maximum távolság a vízszinttől, ahol a játékosok újraéledhetnek/"
+#~ "megjelenhetnek csatlakozáskor (spawn).\n"
+#~ "Magasabb értékek közelebb visznek az (x = 0, z = 0)-hoz.\n"
+#~ "Alacsonyabb értékek azt eredményezhetik, hogy nem lesz megfelelő pont a "
+#~ "feléledéshez,\n"
+#~ "(0,0,0) pozícióban történő feléledést, ami valószínűleg a föld alatt lesz."
#, fuzzy
-#~ msgid "Password"
-#~ msgstr "Régi jelszó"
+#~ msgid ""
+#~ "Minimum wanted FPS.\n"
+#~ "The amount of rendered stuff is dynamically set according to this. and "
+#~ "viewing range min and max."
+#~ msgstr ""
+#~ "Minimum kívánt FPS.\n"
+#~ "A renderelt cuccok mennyisége dinamikusan ez alapján állítódik be (és a "
+#~ "látórerület min és max)."
-#~ msgid "Preload item visuals"
-#~ msgstr "Előretöltött tárgy láthatóság"
+#~ msgid "New style water"
+#~ msgstr "Új stílusú víz"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Eszköztár textúráinak előtöltése"
+
+#~ msgid "Vertical initial window size."
+#~ msgstr "Függőleges kezdeti ablak méret."
+
+#~ msgid "Vertical spawn range"
+#~ msgstr "Az (újra)éledés függőleges irányú területe"
+
+#~ msgid "Viewing range minimum"
+#~ msgstr "Minimum látóterület"
+
+#~ msgid "Wanted FPS"
+#~ msgstr "Kívánt FPS"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Egyjátékos világ visszaállítása"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "A méretarány alkalmazva a menü elemekre: "
#, fuzzy
-#~ msgid "Finite Liquid"
-#~ msgstr "Végtelen folyadék"
+#~ msgid "Touch free target"
+#~ msgstr "Touch free target"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Hiba az összes világ törlése közben"
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Le"
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva"
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat"
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék"
+#~ msgid "is required by:"
+#~ msgstr "kell neki:"
-#~ msgid "Files to be deleted"
-#~ msgstr "A fájl törölve lett"
+#~ msgid "Configuration saved. "
+#~ msgstr "Beállítások mentve. "
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Nem törölhető a világ: Nincs kiválasztva"
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Figyelem: A beállítások nem egyformák. "
-#~ msgid "Address required."
-#~ msgstr "Cím szükséges."
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak"
-#~ msgid "Create world"
-#~ msgstr "Világ létrehozása"
+#~ msgid "Show Public"
+#~ msgstr "Publikus mutatása"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Kedvencek mutatása"
#~ msgid "Leave address blank to start a local server."
#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts."
-#~ msgid "Show Favorites"
-#~ msgstr "Kedvencek mutatása"
+#~ msgid "Create world"
+#~ msgstr "Világ létrehozása"
-#~ msgid "Show Public"
-#~ msgstr "Publikus mutatása"
+#~ msgid "Address required."
+#~ msgstr "Cím szükséges."
-#~ msgid "Advanced"
-#~ msgstr "Haladó"
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Nem törölhető a világ: Nincs kiválasztva"
-#~ msgid "Multiplayer"
-#~ msgstr "Többjátékos mód"
+#~ msgid "Files to be deleted"
+#~ msgstr "A fájl törölve lett"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak"
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Figyelem: A beállítások nem egyformák. "
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva"
-#~ msgid "Configuration saved. "
-#~ msgstr "Beállítások mentve. "
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Hiba az összes világ törlése közben"
-#~ msgid "is required by:"
-#~ msgstr "kell neki:"
+#, fuzzy
+#~ msgid "Finite Liquid"
+#~ msgstr "Végtelen folyadék"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat"
+#~ msgid "Preload item visuals"
+#~ msgstr "Előretöltött tárgy láthatóság"
+
+#, fuzzy
+#~ msgid "Password"
+#~ msgstr "Régi jelszó"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anzisztrópikus szűrés"
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Játék"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-mapping"
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet"
+
+#~ msgid "Rendering:"
+#~ msgstr "Renderelés:"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Le"
+#~ msgid "If enabled, "
+#~ msgstr "Engedélyez"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Csomag letiltás"
+
+#, fuzzy
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Térkép generálási jellemzők csak a Valleys térképgenerátor esetében.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+
+#~ msgid "No!!!"
+#~ msgstr "Nem!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Normálfelületek generálása"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Nyilvános szerverlista"
+
+#~ msgid "No of course not!"
+#~ msgstr "Persze, hogy nem!"
diff --git a/po/id/minetest.po b/po/id/minetest.po
index 1cacddc2e..3505fca58 100644
--- a/po/id/minetest.po
+++ b/po/id/minetest.po
@@ -2,678 +2,793 @@
# Copyright (C) 2014 srifqi
# This file is distributed under the same license as the PACKAGE package.
# Muhammad Rifqi Priyo Susanto <muhammadrifqipriyosusanto@gmail.com>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-03-02 00:21+0700\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-04-12 19:07+0000\n"
"Last-Translator: Muhammad Rifqi Priyo Susanto "
"<muhammadrifqipriyosusanto@gmail.com>\n"
-"Language-Team: Bahasa Indonesia <>\n"
+"Language-Team: Indonesian <https://hosted.weblate.org/projects/minetest/"
+"minetest/id/>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Sebuah kesalahan terjadi di sebuah skrip Lua, seperti sebuah mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Kesalahan muncul:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu utama"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Oke"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Sambung ulang"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Server ini meminta penyambungan ulang:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Memuat..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Versi protokol tidak cocok. "
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Server memberlakukan protokol versi $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Server mendukung protokol antara versi $1 dan versi $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Cobalah mencentang ulang daftar server publik dan cek koneksi internet Anda."
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Dunia:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Kami hanya mendukung protokol versi $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Kami mendukung protokol antara versi $1 dan versi $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Batal"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Bergantung pada:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Nonaktifkan PM"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Aktifkan PM"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Aktifkan semua"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Gagal mengaktifkan mod \"$1\" karena terdapat karakter terlarang. Hanya "
+"karakter [a-z0-9_] yang dibolehkan."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr ""
"Sembunyikan\n"
"permainan"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr ""
"Sembunyikan\n"
"konten pm"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Bergantung pada:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Simpan"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Batal"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Aktifkan PM"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Nonaktifkan PM"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Dunia:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "diaktifkan"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Aktifkan semua"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Dunia bernama \"$1\" telah ada"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Nama dunia"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Buat"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seed"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Generator peta"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Unduh satu dari minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Permainan"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Buat"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generator peta"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "Kamu tidak punya sub-permainan terpasang"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Tidak ada dunia atau permainan yang dipilih"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Unduh satu dari minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "Peringatan: minimal development test ditujukan untuk pengembang."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Dunia bernama \"$1\" telah ada"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nama dunia"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Tidak ada nama atau permainan yang dipilih"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Anda tidak punya sub-permainan terpasang."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Kamu yakin ingin menghapus \"$1\"?"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ya"
+msgstr "Anda yakin ingin menghapus \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Tentu tidak!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Hapus"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Pengelola mod: gagal untuk menghapus \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr "Pengelola mod: jalur mod tidak sah"
+msgstr "Pengelola mod: jalur mod tidak sah \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Hapus Dunia \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Tidak"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Setuju"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Ganti Nama Paket Mod:"
+msgstr "Ganti nama paket mod:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Setuju"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" bukan sebuah flag yang sah."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Pemasangan Mod: berkas: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Tidak ada keterangan dari pengaturan yang diberikan)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Halaman Pengaturan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Jelajahi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Dinonaktifkan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Sunting"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Diaktifkan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"Format adalah 3 angka yang dipisahkan oleh koma dan di dalam tanda kurung."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Permainan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mod"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"lacunarity (celah, opsional) dapat ditambahkan dengan awalan tanda koma."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Silakan masukan daftar flag yang dipisahkan dengan tanda koma."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Mohon masukkan sebuah bilangan bulat yang sah."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Mohon masukkan sebuah angka yang sah."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Nilai yang mungkin adalah: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Atur ke Bawaan"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Pilih jalur"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Tampilkan nama teknis"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Nilai harus lebih besar dari $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Nilai harus lebih kecil dari $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Pemasangan Mod: tipe berkas tidak didukung \"$1\" atau kerusakan arsip"
+"Pemasangan Mod: tipe berkas tidak didukung \"$1\" atau kerusakan pada arsip"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Gagal untuk memasang $1 ke $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Pemasangan Mod: tidak dapat mencari nama folder yang sesuai untuk paket mod "
-"$1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Pemasangan Mod: berkas: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Tidak diurutkan"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Pemasangan Mod: tidak dapat mencari nama folder yang sesuai untuk paket mod "
+"$1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Cari"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Tutup toko"
-#: builtin/mainmenu/store.lua:126
-#, fuzzy
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr "mohon tunggu..."
+msgstr "Mengunduh $1, mohon tunggu..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Berhasil dipasang:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Pasang"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Nama pendek:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Halaman $1 dari $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Peringkat"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Pasang ulang"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Pasang"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Cari"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Tutup toko"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nama pendek:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Halaman $1 dari $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Berhasil dipasang:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Penghargaan"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Tidak diurutkan"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Pengembang Inti"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Pasang ulang"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Kontributor Aktif"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Pengembang Inti"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Penghargaan"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Kontributor Sebelumnya"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Pengembang Inti Sebelumnya"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Mod Terpasang:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Gudang mod daring"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informasi mod:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Tidak ada deskripsi mod tersedia"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Informasi mod:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
-msgstr "Ganti Nama"
-
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Copot pemasangan paket mod terpilih"
+msgstr "Ganti nama"
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Copot pemasangan mod terpilih"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Pilih Berkas Mod:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mod"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Copot pemasangan mod terpilih"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Alamat/Port"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Copot pemasangan paket mod terpilih"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Nama/Kata sandi"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Daftar Server Publik"
+msgid "Address / Port"
+msgstr "Alamat / Port :"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Hapus"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Klien"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Sambung"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
-msgstr "Mode Kreatif"
+msgstr "Mode kreatif"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "diaktifkan"
+msgstr "Kerusakan diaktifkan"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "diaktifkan"
+msgid "Name / Password"
+msgstr "Nama / Kata sandi :"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Klien"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP diaktifkan"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Baru"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Alamat Sambungan"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Konfigurasi"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Mulai Permainan"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Pilih Dunia:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Mode Kreatif"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Aktifkan Kerusakan"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Publik"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nama/Kata sandi"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Baru"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Tidak ada dunia yang dibuat atau dipilih!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Port Server"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Publik"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Tidak ada nama atau permainan yang dipilih"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Pilih Dunia:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Air Buram"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port Server"
-#: builtin/mainmenu/tab_settings.lua:22
-#, fuzzy
-msgid "Simple Leaves"
-msgstr "Daun Melambai"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Mulai Permainan"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Awan 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Pengaturan Lanjutan"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Pohon Indah"
+msgid "Antialiasing:"
+msgstr "Antialiasing:"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Apakah Anda yakin ingin mengatur ulang dunia Anda?"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Bilinear Filter"
-msgstr "Bi-Linear Filtering"
+msgstr "Bilinear Filter"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Tri-Linear Filtering"
+msgid "Bump Mapping"
+msgstr "Bumpmapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Ubah tombol"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Kaca Tersambung"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Daun Megah"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Aniso. Filter"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Yakin ingin mengaturulang dunia anda?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Tidak"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Tidak!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Tanpa Filter"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Pencahayaan Halus"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Tanpa Mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Aktifkan Partikel"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Node Highlighting"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Awan 3D"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Node Highlighting"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Air Buram"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Tidak ada"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Kaca Tersambung"
+msgid "Normal Mapping"
+msgstr "Tone Mapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Daun Opak"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Air Buram"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax Occlusion"
+msgstr "Parallax Occlusion"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Aktifkan Partikel"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Pengaturan"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Shaders"
+msgstr "Shader"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Ubah tombol"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Daun Sederhana"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Atur ulang dunia pemain tunggal"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Pencahayaan Halus"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Skala antarmuka"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Penteksturan:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Faktor skala yang diatur untuk elemen menu: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Bebas sentuhan"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Tone Mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "Batas sentuhan (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Bumpmapping"
-msgstr "Bumpmapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Gunakan Normalmaps"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Air Berombak"
+msgid "Trilinear Filter"
+msgstr "Trilinear Filter"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Daun Melambai"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "Tanaman Berayun"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Pengaturan"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Air Berombak"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Mulai Pemain Tunggal"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ya"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Konfigurasi mod"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Beranda"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Mulai Pemain Tunggal"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Mainkan"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Pemain Tunggal"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Pilih paket tekstur:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Tidak ada informasi tersedia"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Pilih paket tekstur:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Paket Tekstur"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "Tekstur barang..."
-
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
-msgstr ""
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Koneksi kehabisan waktu."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Selesai!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Menginisialisasi node"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Tekstur barang..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Menginisialisasi node..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Menu Utama"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Memuat tekstur..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Nama pemain terlalu panjang."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Membangun ulang shaders..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Koneksi rusak (terlalu lama?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr "Jalur dunia yang diberikan tidak ada: "
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Tidak dapat mencari atau memuat permainan \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "Spesifikasi permainan tidak sah."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menu Utama"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Lanjut"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nama pemain terlalu panjang."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Bangkit"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Jalur dunia yang diberikan tidak ada: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Cek debug.txt untuk detail."
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Ubah Tombol"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Ganti Kata Sandi"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Menghubungkan ke server..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Lanjutkan"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Membuat klien..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Membuat server..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -687,518 +802,3554 @@ msgid ""
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
-
-#: src/game.cpp:1125
-msgid "Continue"
+"Kontrol Bawaan:\n"
+"- WASD: bergerak\n"
+"- Space: lompat/panjat\n"
+"- Shift: merayap/turun\n"
+"- Q: jatuhkan barang\n"
+"- I: inventaris\n"
+"- Mouse: belok/melihat\n"
+"- Mouse kiri: gali/pukul\n"
+"- Mouse kanan: taruh/pakai\n"
+"- Roda mouse: pilih barang\n"
+"- T: obrolan\n"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
msgstr ""
-
-#: src/game.cpp:1129
-#, fuzzy
-msgid "Change Password"
-msgstr "Kata Sandi Baru"
-
-#: src/game.cpp:1134
-#, fuzzy
-msgid "Sound Volume"
-msgstr "Volume Suara: "
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Ubah tombol"
-
-#: src/game.cpp:1139
-#, fuzzy
+"Kontrol Bawaan:\n"
+"Tanpa menu yang tampak:\n"
+"- ketuk sekali: tekan tombol\n"
+"- ketuk ganda: taruh/pakai\n"
+"- geser: melihat sekitar\n"
+"Menu/Inventaris tampak:\n"
+"- ketuk ganda (di luar):\n"
+" -->tutup\n"
+"- tekan tumpukan, tekan wadah:\n"
+" --> pindah tumpukan\n"
+"- tekan&geser, ketuk jari kedua\n"
+" --> taruh barang tunggal ke wadah\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
-msgstr "Right Menu"
+msgstr "Menu Utama"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
-msgstr ""
-
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr ""
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr ""
+msgstr "Tutup Aplikasi"
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr ""
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definisi barang..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr ""
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr ""
+#: src/game.cpp
+msgid "Media..."
+msgstr "Media..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definisi barang..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Definisi node..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Mencari alamat..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Bangkit"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Mematikan..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Cek debug.txt untuk detail."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volume Suara"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Masuk "
+#: src/game.cpp
+msgid "You died."
+msgstr "Anda mati."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "oke"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari "
-"minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Masuk "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Lanjut"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Pakai\" = turun"
-#: src/guiKeyChangeMenu.cpp:180
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Mundur"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Obrolan"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Perintah"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsol"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
"Tekan ganda \"lompat\" untuk\n"
"beralih terbang"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tombol telah terpakai"
-
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "tekan tombol"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Jatuhkan"
-#: src/guiKeyChangeMenu.cpp:399
+#: src/guiKeyChangeMenu.cpp
msgid "Forward"
msgstr "Maju"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Mundur"
-
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Kiri"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Kanan"
-
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Pakai"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventaris"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Lompat"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Menyelinap"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tombol telah terpakai"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Jatuhkan"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari "
+"minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventaris"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Kiri"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Obrolan"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Cetak tumpukan"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Perintah"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Jarak pandang"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsol"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Kanan"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Terbang"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Menyelinap"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Toggle Sinematik"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Gerak cepat"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Gerak cepat"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Terbang"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Tembus blok"
+msgstr "Beralih tembus blok"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Jarak pandang"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Cetak tumpukan"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Pakai"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Kata Sandi Lama"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "tekan tombol"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Kata Sandi Baru"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Ubah"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Konfirmasi Kata Sandi"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Ubah"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Kata Sandi Baru"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Kata Sandi Lama"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Kata sandi tidak cocok!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume Suara: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Keluar"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Klik Kiri"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Klik Tengah"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volume Suara: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Klik Kanan"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Tombol Menu"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Tombol X 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Backspace"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Bersihkan"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Tombol X 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Koma"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Alt"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Turun"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Execute"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Help"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Klik Kiri"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Ctrl Kiri"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Left Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Page Up"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift Kiri"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Page Down"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Start Kiri"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Spasi"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Alt"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Turun"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Klik Tengah"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Execute"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Kurang"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Pergantian Mode"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Select"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Page Up"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Atas"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Help"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Snapshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Start Kiri"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Tombol Menu"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Start Kanan"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sleep"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift Kiri"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift Kanan"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Titik"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Ctrl Kiri"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Tambah"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Left Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Page Down"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Klik Kanan"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Ctrl Kanan"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Right Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Koma"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift Kanan"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Kurang"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Start Kanan"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Titik"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Tambah"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Select"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sleep"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Snapshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spasi"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Atas"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Tombol X 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Tombol X 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid " MB/s"
-#~ msgstr " MB/detik"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid " KB/s"
-#~ msgstr " KB/detik"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = parallax occlusion with slope information (cepat).\n"
+"1 = relief mapping (pelan, lebih akurat)."
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Awan 3D"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Mode 3D"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Dukungan 3D.\n"
+"Didukung saat ini:\n"
+"- none: tidak ada keluaran 3d.\n"
+"- anaglyph: 3d berwarna cyan/magenta.\n"
+"- interlaced: garis ganjil/genap berdasarkan polarisasi dukungan layar.\n"
+"- topbottom: pisahkan layar atas/bawah.\n"
+"- sidebyside: pisahkan layar berdampingan."
+
+#: 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 ""
+"Seed peta terpilih untuk peta baru, kosongkan untuk nilai acak.\n"
+"Akan diganti ketika menciptakan dunia baru dalam 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 server crash."
+
+#: 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 server dimatikan."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Absolute limit of emerge queues"
+msgstr "Batas absolut dari antrian muncul"
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Percepatan di udara"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "Batas blok aktif"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "Batas blok aktif"
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Batas blok aktif"
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Batas pengiriman objek aktif"
+
+#: 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 ""
+"Alamat untuk menghubungkan.\n"
+"Biarkan kosong untuk memulai sebuah server lokal.\n"
+"Perhatikan bahwa bidang alamat dalam menu utama menimpa pengaturan ini."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Atur konfigurasi dpi ke layar Anda (non X11/Android saja) misalkan untuk "
+"layar 4K."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Sesuaikan encoding gamma untuk tabel cahaya. Angka yang lebih rendah lebih "
+"terang.\n"
+"Pengaturan ini untuk klien saja dan diabaikan oleh server."
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Lanjutan"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Dingin di Ketinggian"
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Selalu terbang dan bergerak cepat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Ambient occlusion gamma"
+msgstr "Ambient occlusion gamma"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Amplifies the valleys"
+msgstr "Menguatkan lembah"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Anisotropic filtering"
+msgstr "Anisotropic filtering"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Umumkan server"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Mengumumkan kepada daftar server ini.\n"
+"Jika Anda ingin mengumumkan alamat IPv6 Anda, gunakan serverlist_url = v6."
+"servers.minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Memperkirakan skala (X,Y,Z) dari fraktal pada node."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Minta untuk menyambung ulang setelah crash"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Secara otomatis melaporkan ke daftar server."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "Mundur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Base terrain height"
+msgstr "Air Berombak"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Dasar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Basic Privileges"
+msgstr "Izin bawaan"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "Bilinear filtering"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Alamat sambungan"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bit per piksel (alias kedalaman warna) dalam mode layar penuh."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Bangun di dalam pemain"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bumpmapping"
+msgstr "Bumpmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Penghalusan kamera"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Penghalusan kamera dalam mode sinema"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tombol beralih pembaruan kamera"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Noise #1 gua"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Noise #2 gua"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Gua dan terowongan terbentuk di persimpangan antara dua noise"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tombol obrolan"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tombol beralih obrolan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"18 pilihan fraktal dari 9 rumus.\n"
+"1 = 4D \"Roundy\" mandelbrot set.\n"
+"2 = 4D \"Roundy\" julia set.\n"
+"3 = 4D \"Squarry\" mandelbrot set.\n"
+"4 = 4D \"Squarry\" julia set.\n"
+"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" julia set.\n"
+"7 = 4D \"Variation\" mandelbrot set.\n"
+"8 = 4D \"Variation\" julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
+"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" julia set.\n"
+"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
+"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" julia set."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Besar chunk"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Mode sinema"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tombol mode sinema"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Bersihkan tekstur transparan"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Klien dan Server"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Kecepatan memanjat"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Tinggi awan"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Jari-jari awan"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Awan"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Awan adalah efek dari klien."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Awan dalam menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Kabut berwarna"
+
+#: 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 ""
+"Daftar yang dengan dipisahkan koma dari mod terpercaya yang diperbolehkan\n"
+"untuk mengakses fungsi yang tidak aman bahkan ketika mod security aktif\n"
+"(melalui request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Daftar yang dipisahkan koma dari mod yang dibolehkan untuk mengakses\n"
+"HTTP API, membolehkan mereka untuk mengunggah dan mengunduh data\n"
+"ke/dari internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tombol perintah"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Sambungkan kaca"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Menyambungkan ke server media eksternal"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Sambungkan kaca jika didukung oleh node."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Alpha konsol"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Warna konsol"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tombol konsol"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Maju terus-menerus"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Gerakan maju terus-menerus (hanya digunakan untuk pengujian)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Kontrol"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Mengatur panjang siklus pagi/malam.\n"
+"Contoh: 72 = 20 menit, 360 = 4 menit, 1 = 24 jam, 0 = pagi/malam/lainnya "
+"tidak berubah."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Mengatur ukuran padang gurun dan pantai dalam Mapgen v6.\n"
+"Jika snowbiomes di aktifkan 'mgv6_freq_desert' akan dihiraukan."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Mengatur kecuraman/kedalaman dari lekukan danau."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Mengatur kecuraman/ketinggian dari bukit."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Pesan kerusakan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Membuat lava yang tidak dapat diprediksi di dalam gua.\n"
+"Ini dapat menyebabkan menambang menjadi sulit. Nol menonaktifkannya. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Membuat air yang tidak dapat diprediksi di dalam gua.\n"
+"Ini dapat menyebabkan menambang menjadi sulit. Nol menonaktifkannya. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Keburaman crosshair"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Keburaman crosshair (keopakan, antara 0 sampai 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Warna crosshair"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Warna crosshair (merah,hijau,biru atau R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
-#~ msgid "Fly mode"
-#~ msgstr "Mode terbang"
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anisotropic Filtering"
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Kerusakan"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Tombol beralih info debug"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Tingkat catatan debug"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Percepatan bawaan"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Permainan bawaan"
+
+#: 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 ""
+"Permainan bawaan saat membuat dunia baru.\n"
+"Ini akan diganti saat membuat dunia dari menu utama."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Kata sandi bawaan"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Izin bawaan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Batas waktu bawaan untuk cURL, dalam milidetik.\n"
+"Hanya berefek jika di-compile dengan cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Penanganan Lua API usang"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Kedalaman minimal di mana Anda akan menemukan gua besar."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Kedalaman minimal di mana Anda akan menemukan gua raksasa."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Deskripsi dari server yang akan ditampilkan saat pemain bergabung dan pada "
+"daftar server."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Menentukan bentuk tanah.\n"
+"3 angka dalam kurung mengatur skala dari bentuk\n"
+"tanah, ketiganya harus sama."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Nonaktifkan anticurang (anticheat)"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+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 server yang akan ditampilkan di daftar server."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Tekan ganda \"lompat\" untuk terbang"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Menekan ganda tombol \"lompat\" untuk beralih terbang."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Tombol menjatuhkan barang"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Aktifkan VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Aktifkan mod keamanan"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Membolehkan pemain terkena kerusakan dan mati."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Aktifkan masukan acak dari pengguna (hanya digunakan untuk pengujian)."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Aktifkan pencahayaan halus dengan ambient occlusion sederhana.\n"
+"Nonaktifkan untuk kecepatan atau untuk tampilan lain."
+
+#: 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 ""
+"Membolehkan untuk melarang klien lawas untuk terhubung.\n"
+"Klien-klien lawas dianggap sesuai jika mereka tidak rusak saat "
+"menghubungkan\n"
+"ke server-server baru, tetapi mereka mungkin tidak mendukung semua fitur "
+"baru\n"
+"yang Anda harapkan."
+
+#: 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 ""
+"Membolehkan penggunaan server media asing (jika diberikan oleh server).\n"
+"Server asing menawarkan cara lebih cepat untuk mengunduh media (misal.: "
+"tekstur)\n"
+"saat terhubung ke server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Nyalakan/matikan menjalankan server IPv6. Sebuah server IPv6 mungkin\n"
+"terbatas untuk klien IPv6, tergantung dari konfigurasi sistem.\n"
+"Diabaikan jika bind_address telah diatur."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Nyalakan animasi barang inventaris."
+
+#: 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 ""
+"Nyalakan bumpmapping untuk tekstur. Normalmaps harus disediakan oleh paket\n"
+"tekstur atau harus dihasilkan otomatis.\n"
+"Membutuhkan shader diaktifkan."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Mengaktifkan pemetaan suasana (tone mapping) filmis"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Aktifkan peta mini."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Eksperimental, dapat menyebabkan terlihatnya spasi antara blok\n"
+"saat diatur dengan angka yang lebih besar dari 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS (bingkai per detik) pada menu jeda"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "needs_fallback_font"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Mode akselerasi cepat"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Mode cepat"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use 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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Filtering"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Seed peta yang diatur"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Tombol terbang"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Terbang"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Kabut"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Tombol beralih kabut"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Ukuran font"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "Maju"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Layar penuh"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Mode layar penuh."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Skala antarmuka"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filter skala antarmuka"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Umum"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Generate normalmaps"
+msgstr "Gunakan Normalmaps"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafik"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravitasi"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "Mod HTTP"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Tombol beralih HUD"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Dukungan IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+"Jika FPS (bingkai per detik) lebih tinggi dari ini, akan\n"
+"dibatasi dengan jeda agar tidak menghabiskan tenaga\n"
+"CPU dengan percuma."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Jika dinonaktifkan tombol \"gunakan\" digunakan untuk terbang cepat jika "
+"mode terbang dan cepat diaktifkan."
+
+#: 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 ""
+"Jika diaktifkan dengan mode terbang, pemain mampu terbang melalui node "
+"padat.\n"
+"Hal ini memerlukan hak istimewa \"noclip\" pada server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Abaikan kesalahan pada dunia"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Dalam Permainan"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Inventaris"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Lompat"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak cepat dalam mode cepat.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk menjatuhkan barang yang sedang dipilih.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak cepat dalam mode cepat.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk lompat.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak cepat dalam mode cepat.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak mundur.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak maju.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak ke kiri.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk bergerak ke kanan.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk membuka inventaris.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk mengganti kamera antara orang pertama dan ketiga.\n"
+"Lihat 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 ""
+"Tombol untuk mengambil tangkapan layar.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk beralih mode sinema.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk mennganti tampilan peta mini.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk beralih mode cepat.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk beralih terbang.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tombol untuk beralih mode tembus blok.\n"
+"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Bahasa"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Gaya dedaunan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Left Menu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Pengelola mod menu utama"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Skrip menu utama"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Direktori peta"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Batas generasi peta"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Generator peta Valleys"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Nama generator peta"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Generator peta v5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Generator peta v5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Generator peta v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Frekuensi padang gurun pada generator peta v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Generator peta v7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Generator peta v7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+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 "FPS (bingkai per detik) maksimal"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "FPS (bingkai per detik) maksimal saat permainan dijeda."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "Jumlah maksimal blok yang dipaksa muat (forceloaded)"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Lebar maksimal hotbar"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr "Jumlah maksimal blok yang dapat diantrikan 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."
+msgstr ""
+"Jumlah maksimal blok yang akan diantrikan yang akan dihasilkan.\n"
+"Atur ke kosong untuk diatur secara otomatis."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Jumlah maksimal blok yang akan diantrikan yang akan dimuat dari berkas.\n"
+"Atur ke kosong untuk diatur secara otomatis."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "Jumlah maksimal blok peta (mapblock) yang dipaksa muat (forceloaded)."
+
+#: 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 ""
+"Jumlah maksimal blok peta (mapblock) yang disimpan di memori klien.\n"
+"Atur ke -1 untuk tak terhingga."
+
+#: 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 ""
+"Jumlah maksimal paket dikirim tiap langkah mengirim (send step), jika Anda\n"
+"memiliki koneksi lambat, cobalah untuk menguranginya, tetapi jangan "
+"mengurangi\n"
+"di bawah dua kalinya jumlah klien yang ditargetkan."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "Jumlah maksimal pemain yang dapat terhubung serentak."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "Jumlah maksimal objek yang disimpan secara statis dalam satu blok."
+
+#: 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 ""
+"Proporsi maksimal jendela saat ini yang digunakan untuk hotbar.\n"
+"Berguna jika ada sesuatu yang akan ditampilkan di kanan atau kiri hotbar."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Jumlah maksimal blok yang dikirim serentak tiap klien"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Jumlah maksimal total blok yang dikirim"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Waktu maksimal dalam milidetik saat mengunduh berkas (misal.: mengunduh mod)."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Jumlah pengguna maksimal"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Jumlah objek maksimal tiap blok"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Alt"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Pesan hari ini"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "Pesan hari ini yang ditampilkan ke pemain yang terhubung."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Peta mini"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Tombol peta mini"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mipmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Tembus blok"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Tombol tembus blok"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Parallax occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion Scale"
+msgstr "Skala parallax occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion bias"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion iterations"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Mode parallax occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion strength"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Nama pemain"
+
+#: 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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "Jarak pandang"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Right Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Tangkapan layar"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Tangkapan layar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Tangkapan layar"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Server / Pemain Tunggal"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL Server"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Alamat server"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Deskripsi server"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nama server"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Port server"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL Daftar server"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Berkas Daftar server"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Pencahayaan halus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr "Menghaluskan rotasi kamera dalam modus sinema. 0 untuk menonaktifkan."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Menyelinap"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of generated normalmaps."
+msgstr "Gunakan Normalmaps"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Paket Tekstur"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Tombol beralih mode kamera"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Trilinear filtering"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "tekan tombol"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Berguna untuk pengembang mod."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volume Suara"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Kecepatan berjalan"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Tekstur barang..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Ketinggian air"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Daun Melambai"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Daun melambai"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Tanaman berayun"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Air berombak"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Ketinggian ombak"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Panjang ombak"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Kecepatan ombak"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "Batas waktu cURL mengunduh berkas"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "Batas cURL paralel"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "Batas waktu cURL"
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Memuat tekstur..."
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Atur ulang dunia pemain tunggal"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Faktor skala yang diatur untuk elemen menu: "
+
+#~ msgid "Touch free target"
+#~ msgstr "Bebas sentuhan"
#~ msgid "Downloading"
#~ msgstr "Mengunduh"
+
+#~ msgid " KB/s"
+#~ msgstr " KB/detik"
+
+#~ msgid " MB/s"
+#~ msgstr " MB/detik"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih"
+
+#~ msgid "Rendering:"
+#~ msgstr "Rendering:"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "diaktifkan"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Nonaktifkan PM"
+
+#~ msgid "\""
+#~ msgstr "\""
+
+#~ msgid "No!!!"
+#~ msgstr "Tidak!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Hasilkan Normalmaps"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Daftar Server Publik"
+
+#~ msgid "No of course not!"
+#~ msgstr "Tentu tidak!"
diff --git a/po/it/minetest.po b/po/it/minetest.po
index ae9614944..83ff7c1ab 100644
--- a/po/it/minetest.po
+++ b/po/it/minetest.po
@@ -1,682 +1,775 @@
-# Italian translation for Minetest.
-# Copyright (C) 2011 Perttu Ahola "celeron55"
+# Minetest's Italian localization.
+# Copyright (C) 2011-2016 Perttu Ahola
# This file is distributed under the same license as the Minetest package.
-# Giuseppe Bilotta <giuseppe.bilotta@gmail.com>, 2011.
-#
+# Emon <emon@openmailbox.org>, 2016.
msgid ""
msgstr ""
"Project-Id-Version: Minetest 0.4.9\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-07-07 14:43+0200\n"
-"Last-Translator: Michal ÄŒihaÅ™ <michal@cihar.com>\n"
-"Language-Team: Italian <https://hosted.weblate.org/projects/minetest/"
-"minetest/it/>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-08 17:01+0000\n"
+"Last-Translator: Emon Omen <emon@openmailbox.org>\n"
+"Language-Team: Italian "
+"<https://hosted.weblate.org/projects/minetest/minetest/it/>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.4-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "E' avvenuto un errore in uno script Lua, come un mod.:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "E' avvenuto un errore:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu principale"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
-msgstr "Ok"
+msgstr "Va bene"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Riconnettere"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Il server ha richiesto una riconnessione:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Caricamento..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Versione del protocollo non corrispondente. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Il server impone la versione di protocollo $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Il server supporta versioni di protocollo comprese tra $1 e $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Provate a riabilitare l'elenco dei server pubblici e controllate la vostra "
+"connessione internet."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Supportiamo solo il protocollo versione $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Supportiamo versioni di protocollo comprese tra $1 e $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Annullare"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Mondo:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dipendenze:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Disabilitare p.m."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Abilitare p.m."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Abilitarli tutti"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Abilitazione del mod. \"$1\" fallita perché contiene caratteri non ammessi. "
+"Sono ammessi solo i caratteri [a-z0-9_]."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
-msgstr "Nasc. gioco"
+msgstr "Nasc. del gioco"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr "Nasc. cont. pacchetti"
+msgstr "Nasc. il cont. dei pacchetti"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod.:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Dipendenze:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Salvare"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Annullare"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Att. pacch."
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Disatt. pacch."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Mondo:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "attivata"
+msgstr "abilitato"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Attivarli tutti"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Esiste già un mondo chiamato \"$1\""
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Nome del mondo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Creare"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seme casuale"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Scaricare un sottogioco, come minetest_game, da minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Generat. mappe"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Scaricarne uno da minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Gioco"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Creare"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generatore mappa"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
msgstr ""
+"Non è stato dato nessun nome di mondo o non è stato scelto nessun gioco"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seme casuale"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr ""
+msgstr "Avviso: il \"minimal development test\" è inteso per gli sviluppatori."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Esiste già un mondo chiamato \"$1\""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nome del mondo"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr ""
-"Non è stato fornito nessun nome del mondo oppure non è stato selezionato "
-"nessun gioco"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Non avete sottogiochi installati."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Siete certi di volere cancellare \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Sì"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "No, certo che no!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Cancellare"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr "Gestore dei moduli: la cancellazione di \"$1\" è fallita"
+msgstr "Modmgr: cancellazione di \"$1\" fallita"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr "Gestore dei moduli: percorso del modulo \"$1\" non valido"
+msgstr "Modmgr: percorso mod. non valido \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Cancellare il mondo \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "No"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Accettare"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Rinominare il pacchetto moduli:"
+msgstr "Rinominare il pacchetto mod.:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Accettare"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" non è un marcatore valido."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Installare un modulo: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Non è stata fornita nessuna descrizione dell'impostazione)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Pag. delle impostazioni"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Mostrare"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Modificare"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Il formato è tre numeri separati da virgole e dentro parentesi."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formato: <compensazione>, <scala>, (<estensioneX>, <estensioneY>, "
+"<estensioneZ>), <seme>, <ottave>, <persistenza>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Giochi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mod."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Facoltativamente si può aggiungere la lacunarità con una virgola davanti."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Inserite un elenco di valori separati da virgole, prego."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Inserite un numero intero valido, prego."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Inserite un numero valido, prego."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "I valori possibili sono: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Ripristino predefinite"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Scegliere il percorso"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Mostrare i nomi tecnici"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Il valore deve essere maggiore di $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Il valore deve essere minore di $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Installare un modulo: tipo di file non supportato \"$1\""
+"Insallatore mod.: tipo di file non supportato \"$1\" o archivio danneggiato"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "L'installazione di $1 in $2 è fallita"
+msgstr "Installazione di $1 in $2 fallita"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Installare un modulo: impossibile trovare un nome di cartella appropriato "
-"per il pacchetto moduli $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Installatore mod.: file: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
-msgstr ""
-"Installare un modulo: impossibile trovare il vero nome del modulo per: $1"
+msgstr "Installatore mod.: impossibile trovare il vero nome mod per: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Installatore mod.: impossibile trovare un nome cartella adatto per il "
+"pacchetto mod $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Chiudere il negozio"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "Scaricamento di $1, attendere prego..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Installare"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Nome del mondo"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Pagina $1 di $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Valutazione"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Reinstallare"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Installare"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Cercare"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nome abbreviato:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Pagina $1 di $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Installato con successo:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Riconoscimenti"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Non ordinati"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Sviluppatori principali"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "reinstallare"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Contributori attivi"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Sviluppatori principali"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Crediti"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Contributori precedenti"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Sviluppatori principali precedenti"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Moduli installati:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Archivio in linea"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informazioni sul modulo:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Nessuna descrizione disponibile per il modulo"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Informazioni sul modulo:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Rinominare"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Disinstallare il pacchetto moduli selezionato"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Disinstallare il modulo selezionato"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
-msgstr "Selezionare il file modulo:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Moduli"
+msgstr "Scegliere il file mod.:"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Indirizzo/Porta"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Disinstallare il modulo scelto"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-#, fuzzy
-msgid "Name / Password :"
-msgstr "Nome/Password"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Disinstallare il pacchetto mod. scelto"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Elenco dei server pubblici"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Indirizzo / Porta"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Cancellare"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Client"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
-msgstr "Connettere"
+msgstr "Connettersi"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Modalità creativa"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "attivata"
+msgstr "Danno abilitato"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
-#, fuzzy
-msgid "PvP enabled"
-msgstr "attivata"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Canc. prefer."
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Client"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Preferiti:"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nuovo"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Nome / Password"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Configurare"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "GcG abilitato"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Avviare il gioco"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Legare indirizzo"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Selezionare il mondo:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Configurare"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Modalità creativa"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Abilitare il danno"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Pubblico"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nome/Password"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nuovo"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nessun mondo creato o scelto!"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Porta"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Porta del server"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Pubblico"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr ""
-"Non è stato fornito nessun nome del mondo oppure non è stato selezionato "
-"nessun gioco"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Scegliere il mondo:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Acqua opaca"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Porta del server"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Avviare il gioco"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Alberi migliori"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Nuvole in 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Impostazioni avanzate"
-#: builtin/mainmenu/tab_settings.lua:33
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Antialias:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Siete certi di volere azzerare il vostro mondo di giocatore singolo?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Filtro Bi-Lineare"
+msgstr "Filtro bilineare"
-#: builtin/mainmenu/tab_settings.lua:34
-#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Filtro Tri-Lineare"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "Bump Mapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Modificare i tasti"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Vetri uniti"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Foglie decorative"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Filtro aniso."
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "No"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Nessun filtro"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Illuminazione armoniosa"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Niente mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Abilitare le particelle"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Evidenz. nodo"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nuvole 3D"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Bordatura nodo"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Acqua opaca"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Nessuno"
-#: builtin/mainmenu/tab_settings.lua:210
-#, fuzzy
-msgid "Connected Glass"
-msgstr "Connettere"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "Normal Mapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Foglie opache"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Acqua opaca"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Occlusione di parallasse"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Particelle"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Impostazioni"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shader"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Cambiare i tasti"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Foglie semplici"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Giocatore singolo"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Illuminaz. uniforme"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Immagini:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Per abilitare gli shader è necessario usare i driver OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Mappatura toni"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "Mip-Mapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr ""
+msgstr "Soglia di tocco (px)"
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtro trilineare"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Foglie ondeggianti"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "E' necessario usare i driver OpenGL per abilitare gli shader."
+msgstr "Piante ondeggianti"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Impostazioni"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Acqua ondeggiante"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Giocatore singolo"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Sì"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Configurare"
+msgstr "Config. mod."
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "Menù principale"
+msgstr "Principale"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Avviare il giocatore singolo"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Giocare"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Giocatore singolo"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Selezionare un pacchetto di immagini:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Nessuna informazione disponibile"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
-msgid "Texturepacks"
-msgstr "Pacch. immagini"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Scegliere il pacchetto di immagini:"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "Caricamento..."
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Pacch. di imm."
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "Risoluzione dell'indirizzo..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Tempo di connessione scaduto."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Fatto!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Inizializzazione dei nodi"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Immagini degli oggetti..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inizializzazione dei nodi..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Menù principale"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Caricamento delle texture..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Ricostruzione degli shader..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Errore di connessione (scaduta?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
-"Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. "
-"Niente da fare."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Impossibile trovare o caricare il gioco \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Specifica del gioco non valida."
+msgstr "Spec. di gioco non valide."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menu principale"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Procedere"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Nessun mondo scelto e nessun indirizzo fornito. Niente da fare."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Siete morti."
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nome del giocatore troppo lungo."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Riapparire"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Il percorso del mondo fornito non esiste: "
-#: src/game.cpp:1092
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "necessita_font_ripiego"
+
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Controllate debug.txt per i dettagli."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Modificare i tasti"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Modificare la password"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Connessione al server..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Proseguire"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Creazione del client..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Creazione del server..."
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -692,581 +785,3943 @@ msgid ""
msgstr ""
"Controlli predefiniti:\n"
"- WASD: muoversi\n"
-"- Space: saltare/arrampicarsi\n"
-"- Shift: strisciare/scendere\n"
-"- Q: scartare l'oggetto\n"
+"- Spazio: saltare/salire\n"
+"- Maiusc: strisciare/scendere\n"
+"- Q: lasciare cadere l'oggetto\n"
"- I: inventario\n"
"- Mouse: girarsi/guardare\n"
-"- Tasto sinistro del mouse: scavare/colpire\n"
-"- Tasto destro del mouse: posizionare/usare\n"
-"- Rotella del mouse: scegliere l'oggetto\n"
-"- T: chat\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuare"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Cambiare la password"
+"- Mouse sin.: scavare/colpire\n"
+"- Mouse des.: posizionare/usare\n"
+"- Rot. mouse: scegliere l'oggetto\n"
+"- T: messaggistica\n"
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volume del suono"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Cambiare i tasti"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Controlli predefiniti:\n"
+"Menu non visibile:\n"
+"- colpetto: attivare pulsante\n"
+"- doppio colpetto: posizionare/usare\n"
+"- trascinare col dito: guardare attorno\n"
+"Menu/Inventario visibile:\n"
+"- doppio colpetto (fuori):\n"
+" -->chiudere\n"
+"- toccare pila, toccare alloggio:\n"
+" --> muovere pila\n"
+"- tocco&trascina, colpetto 2o dito\n"
+" --> posizionere oggetto singolo nell'alloggio\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
-msgstr "Tornare al menù"
+msgstr "Tornare al menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
-msgstr "Tornare al S.O."
-
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Spegnimento della roba..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Creazione del server..."
+msgstr "Tornare al s.o."
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Creazione del client..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definizioni dell'oggetto..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Risoluzione dell'indirizzo..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Connessione al server..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Multimedia..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definizioni degli oggetti..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
-msgstr "Definizioni dei cubi..."
+msgstr "Definizioni del nodo..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Risoluzione dell'indirizzo..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Ricomparire"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Spegnimento..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Controllare debug.txt per i dettagli."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volume dell'audio"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "Siete morti."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
-msgstr ""
+msgstr "va bene"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Collegamenti dei tasti. (Se questo menù si incasina, rimuovete la roba da "
-"minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Invio "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Procedere"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Usare\" = scendere"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Volare On/Off = due volte \"saltare\""
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Indietro"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tasto già in uso"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Messaggistica"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "premere il tasto"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comando"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Avanti"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Console"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Indietro"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Doppio \"saltare\" per il volo"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Sinistra"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Lasciare cadere"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Destra"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Avanti"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Usare"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventario"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Saltare"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Strisciare"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tasto già in uso"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Scartare"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Collegamenti dei tasti. (Se questo menu si incasina, togliete la roba da "
+"minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventario"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Sinistra"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chat"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Stampare stack"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Comando"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Raggio visivo"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Console"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Destra"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Volare On/Off"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Strisciare"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Attiv. cinematic"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr "Correre On/Off"
+msgstr "Attivare veloce"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Correre On/Off"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Attivare volo"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Fantasma On/Off"
+msgstr "Attivare noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Selez. ad area"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Stampa stack"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Usare"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Vecchia password"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "prem. il tasto"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nuova password"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Cambiare"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Confermare la password"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Cambiare"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nuova password"
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
-msgstr "Le password non coincidono!"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Vecchia password"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume suono: "
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Le password non sono uguali!"
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Uscire"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Tasto sinistro"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Tasto centrale"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volume dell'audio: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Tasto destro"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Applicazioni"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Pulsante X 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attenzione"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
-msgstr "Backspace"
-
-#: src/keycode.cpp:224
-msgid "Clear"
-msgstr "Canc"
-
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Invio"
+msgstr "Indietro"
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Bloc maiusc"
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Pulsante X 2"
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "Pulire"
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Bloc Maiusc"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Virgola"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convertire"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menù"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pausa"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Giù"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Maiusc"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Fine"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Cancellare l'OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Eseguire"
+
+#: src/keycode.cpp
msgid "Final"
-msgstr "Fine"
+msgstr "Finale"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Help"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Inizio"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Ins"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "ì"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Fine"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Pulsante sinistro"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Inizio"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Ctrl sinistro"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Cambio di modalità"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Alt sinistro"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Successivo"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Maiusc sin."
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Precedente"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Super sinistro"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Spazio"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Pag. giù"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Pulsante centrale"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Eseguire"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Meno"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Stamp"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Cambiare modalità"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Selezionare"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Pag giù"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Pag. su"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Aiuto"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Bloc Num"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Ins"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Tast. num. *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Istantanea"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Tast. num. +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Finestre a sinistra"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Tast. num. -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Applicazioni"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Tast. num. /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Tast. num. 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Tast. num. 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Finestre a destra"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sospensione"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Tast. num. 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Tast. num. 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Tast. num. 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Tast. num. 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Tast. num. 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Tast. num. 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Tast. num. *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Tast. num. +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Tast. num. -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Tast. num. /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Tast. num. 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Tast. num. 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Bloc Num"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Pulire l'OEM"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Bloc Scorr"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Maiusc sx"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pausa"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Maiusc dx"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punto"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Ctrl sx"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Più"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Menù a sinistra"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Stamp"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Pag su"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Invio"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Pulsante destro"
+
+#: src/keycode.cpp
msgid "Right Control"
-msgstr "Ctrl dx"
+msgstr "Ctrl destro"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
-msgstr "Menù a destra"
+msgstr "Alt destro"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Virgola"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Maiusc des."
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Meno"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Super destro"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punto"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Bloc"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Più"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Selezionare"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Maiusc"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sospensione"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Stamp"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spazio"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Su"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Pulsante X 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Pulsante X 2"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid "Game Name"
-#~ msgstr "Nome del gioco"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"(X, Y, Z) compensazione del frattale dal centro del mondo in unità di "
+"'scala'.\n"
+"Usata per muovere un'adeguata area di comparsa di terreno basso vicino a (0, "
+"0).\n"
+"La predefinita è adatta alle serie mandelbrot, necessita modifiche per le "
+"serie julia.\n"
+"Spazia pressapoco tra -2 e 2. Moltiplicate per 'scala' per una compensazione "
+"in nodi."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = occlusione di parallasse con informazione di pendenza (più veloce).\n"
+"1 = mappatura di rilievo (più lenta, più accurata)."
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\""
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Nuvole in 3D"
-#~ msgid "GAMES"
-#~ msgstr "GIOCHI"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Modalità 3D"
-#~ msgid "Games"
-#~ msgstr "Giochi"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Supporto 3D.\n"
+"Attualmente supportati:\n"
+"- nessuno: nessun output 3D.\n"
+"- anaglifo: 3D in colori ciano/magenta.\n"
+"- intrecciato: supporto per polarizzazione schermo basata su linea pari/"
+"dispari.\n"
+"- superiore-inferiore: divisione dello schermo in superiore/inferiore.\n"
+"- fianco-a-fianco: divisione dello schermo fianco a fianco.\n"
+"- sfoglia-pagina: 3D basato su buffer quadruplo."
+
+#: 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 seme predefinito per la nuova mappa, lasciate vuoto per uno casuale.\n"
+"Verrà ignorato alla creazione di un nuovo mondo nel menu principale."
-#~ msgid "Mods:"
-#~ msgstr "Moduli:"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "Un messaggio da mostrare a tutti i client quando il server cade."
-#~ msgid "edit game"
-#~ msgstr "modificare il gioco"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "Un messaggio da mostrare a tutti i client quando il server si spegne."
-#~ msgid "new game"
-#~ msgstr "nuovo gioco"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Limite assoluto di code 'emerge'"
-#~ msgid "EDIT GAME"
-#~ msgstr "MODIFICARE IL GIOCO"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Accelerazione in aria"
-#~ msgid "Remove selected mod"
-#~ msgstr "Rimuovere il modulo selezionato"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr "Intervallo del gestore di blocco attivo"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Aggiungere il modulo"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr "Intervallo del modificatore di blocco attivo"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENT"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Portata del blocco attivo"
-#~ msgid "Favorites:"
-#~ msgstr "Preferiti:"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Portata di invio dell'oggetto attivo"
-#~ msgid "START SERVER"
-#~ msgstr "AVVIO SERVER"
+#: 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 ""
+"Indirizzo a cui connettersi.\n"
+"Lasciatelo vuoto per avviare un server locale.\n"
+"Si noti che il campo indirizzo nel menu principale ignora questa "
+"impostazione."
-#~ msgid "Name"
-#~ msgstr "Nome"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Adattate la configurazione dpi al vostro schermo (non X11/solo Android) ad "
+"es. per schermi 4k."
-#~ msgid "Password"
-#~ msgstr "Password"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Adattate la codifica di gamma per le tavole di illuminazione. I numeri più "
+"bassi sono più chiari.\n"
+"Questa impostazione è solo per il client ed è ignorata dal server."
-#~ msgid "SETTINGS"
-#~ msgstr "IMPOSTAZIONI"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avanzate"
-#~ msgid "Preload item visuals"
-#~ msgstr "Precaricare le immagini"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Congelamento da altitudine"
-#~ msgid "Finite Liquid"
-#~ msgstr "Liquido limitato"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Sempre 'volo' e 'veloce'"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "GIOC. SING."
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Gamma di occlusione ambientale"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "PACCH. DI IMM."
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Ingrandisce le vallate"
-#~ msgid "MODS"
-#~ msgstr "MODULI"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtro anisotropico"
-#~ msgid "Add mod:"
-#~ msgstr "Aggiungere un modulo:"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Rendere noto il server"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Rendere noto a questo elenco di server.\n"
+"Se volete rendere noto il vostro indirizzo ipv6, usate serverlist_url = v6."
+"servers.minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Scala (X, Y, Z) approssimativa del frattale in nodi."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Chiedere di riconnettersi dopo un crollo"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Rapporto automatico all'elenco dei server."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Tasto all'indietro"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Altezza base del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Base"
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr "Privilegi di base"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtro bilineare"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Lega indirizzo"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bit per pixel (cioè profondità di colore) in modalità schermo intero."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Costruisci nel giocatore"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bumpmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Camera scorrevole"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Camera scorrevole in modalità cinematic"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tasto di scelta di aggiornamento della camera"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "'Rumore' n°1 della caverna"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "'Rumore' n°2 della caverna"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr "Larghezza delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Caverne e gallerie si formano all'intersezione dei due 'rumori'"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tasto della messaggistica"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tasto di scelta della messaggistica"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Scelta di 18 frattali da 9 formule.\n"
+"1 = 4D \"Arrotondato\" serie mandelbrot.\n"
+"2 = 4D \"Arrotondato\" serie julia.\n"
+"3 = 4D \"Squadrato\" serie mandelbrot.\n"
+"4 = 4D \"Squadrato\" serie julia.\n"
+"5 = 4D \"Cugino Mandy\" serie mandelbrot.\n"
+"6 = 4D \"Cugino Mandy\" serie julia.\n"
+"7 = 4D \"Variazione\" serie mandelbrot.\n"
+"8 = 4D \"Variazione\" serie julia.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" serie mandelbrot.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" serie julia.\n"
+"11 = 3D \"Albero di Natale\" serie mandelbrot.\n"
+"12 = 3D \"Albero di Natale\" serie julia.\n"
+"13 = 3D \"Mandelbulb\" serie mandelbrot.\n"
+"14 = 3D \"Mandelbulb\" serie julia.\n"
+"15 = 3D \"Coseno Mandelbulb\" serie mandelbrot.\n"
+"16 = 3D \"Coseno Mandelbulb\" serie julia.\n"
+"17 = 4D \"Mandelbulb\" serie mandelbrot.\n"
+"18 = 4D \"Mandelbulb\" serie julia."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Dimensione del \"pezzo\""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Modalità cinematic"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tasto della modalità cinematic"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Immagini trasparenti pulite"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Client e server"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Velocità di arrampicata"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Altitudine delle nuvole"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Raggio delle nuvole"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Nuvole"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Le nuvole sono un effetto sul lato client."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Nuvole nel menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Nebbia colorata"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"Lista separata da virgole dei mod affidabili ai quali è permesso accedere a "
+"funzioni non sicure anche quando il valore \"mod security\" è impostato su \""
+"on\" (utilizzando request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Elenco separato da virgole di mod. a cui è permesso l'accesso alle API "
+"HTTP,\n"
+"che gli permettono di caricare e scaricare dati su/da internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tasto di comando"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Unire i vetri"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Connettere a un server di media esterni"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Connettere il vetro se è supportato dal nodo."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Trasparenza della console"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Colore della console"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tasto della console"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Avanti continuo"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Movimento in avanti continuo (usato solo per le prove)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Controlli"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Controlla la durata del ciclo giorno/notte.\n"
+"Esempi: 72 = 20min, 360 = 4min, 1 = 24ore, 0 = giorno/notte/ecc. restano "
+"invariati."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Controlla la dimensione di spiagge e deserti nel Generatore mappa v.6.\n"
+"Quando sono attivati i biomi di neve 'mgv6_freq_desert' viene ignorato."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controlla la ripidità/profondità delle depressioni lacustri."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controlla la ripidità/altezza delle colline."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+"Controlla la larghezza delle gallerie, un valore più piccolo crea gallerie "
+"più larghe."
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Messaggio di crollo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea imprevedibili caratteristiche di lava nelle caverne.\n"
+"Queste possono rendere difficile minare. Zero le disabilita. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Crea imprevedibili caratteristiche di acqua nelle caverne.\n"
+"Queste possono rendere difficile minare. Zero le disabilita. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Trasparenza del mirino"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Trasparenza del mirino (opacità, tra 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Colore del mirino"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Colore del mirino (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Velocità di accovacciamento"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "Punti per pollice"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Danno"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Chiave di attivazione delle info. di debug"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Livello del registro di debug"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Passo del server dedicato"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Accelerazione predefinita"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Gioco predefinito"
+
+#: 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 ""
+"Gioco predefinito quando si crea un nuovo mondo.\n"
+"Questo verrà ignorato quando si crea un mondo dal menu principale."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Password predefinita"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilegi predefiniti"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Scadenza predefinita per cURL, espressa in millisecondi.\n"
+"Ha effetto solo se Minetest è stato compilato con cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Definisce il passo di campionatura dell'immagine.\n"
+"Un valore più alto ha come effetto normal map più uniformi."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Definisce la massima distanza di trasferimento del giocatore espressa in "
+"blocchi (0 = illimitata)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Ritardo nella comparsa dei suggerimenti, espresso in millisecondi."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Gestione delle API Lua deplorate"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Profondità sotto cui troverete caverne grandi."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Profondità sotto cui troverete caverne imponenti."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Velocità di discesa"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Descrizione del server, da mostrarsi nell'elenco dei server e quando i "
+"giocatori accedono."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "De-sincronizza l'animazione del blocco"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+"Dati di profilo del mod. dettagliati. Utile per gli sviluppatori di mod."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Profilo dettagliato del mod."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Stabilisce la forma del terreno.\n"
+"I tre numeri tra parentesi controllano la scala del\n"
+"terreno, i tre numeri dovrebbero essere identici."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Disabilita anti-trucchi"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Rifiutare le password vuote"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Nome di dominio del server, da mostrare nell'elenco dei server."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Doppio colpetto su salta per volare"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+"Colpire brevemente il tasto di salto due volte attiva la modalità di volo."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Tasto per il rilascio di un oggetto"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Pubblica le informazioni di debug del generatore della mappa."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Abilitare VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Abilita la protezione mod."
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Abilitare il ferimento e la morte dei giocatori."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+"Abilita input casuale da parte del giocatore (utilizzato solo per "
+"esperimenti)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Abilita l'illuminazione uniforme con l'occlusione ambientale semplice.\n"
+"Disabilitare per velocizzare o per un aspetto diverso."
+
+#: 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 ""
+"Abilitare per impedire ai client obsoleti di connettersi.\n"
+"I client datati sono compatibili nella misura in cui non vanno in crash "
+"quando si connettono\n"
+"ai server più recenti, ma non supportano tutte le funzioni che ci si "
+"aspetterebbe."
+
+#: 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 ""
+"Abilita l'utilizzo di un server di materiale remoto (se fornito dal server)."
+"\n"
+"I server remoti offrono un modo significativamente più veloce di "
+"scaricamento\n"
+"del materiale (ad es. le immagini) quando ci si collega al server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Abilita/disabilita l'esecuzione di un server IPv6. Un server IPv6 può "
+"essere\n"
+"limitato ai client IPv6, dipendentemente dalla configurazione del sistema.\n"
+"Ignorata se bind_address è impostato."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Abilita l'animazione degli oggetti dell'inventario."
+
+#: 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 ""
+"Abilita il bumpmapping per le immagini. E' necessario che il pacchetto "
+"texture fornisca le normalmap\n"
+"o è necessario che siano generate automaticamente.\n"
+"Richiede l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "Abilita la cache delle mesh ruotate con facedir."
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Abilita il tone mapping filmico"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Abilita il minimap."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"Abilita la generazione al volo delle normalmap (effetto a sbalzo).\n"
+"Richiede l'attivazione del bumpmapping."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Abilita la mappatura dell'occlusione di parallasse.\n"
+"Richiede l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Opzione sperimentale, può determinare la visibilità di spazi tra i blocchi\n"
+"quando impostato ad un numero maggiore di 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS nel menu di pausa"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Ondeggiamento in caduta"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Font di ripiego"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Ombreggiatura del font di ripiego"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Trasparenza del font di ripiego"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Dimensione del font di ripiego"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Tasto 'veloce'"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Accelerazione della modalità veloce"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Velocità della modalità veloce"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Movimento veloce"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Movimento veloce (tramite il tasto usare).\n"
+"Ciò richiede il privilegio \"fast\" sul server."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Campo visivo"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Campo visivo in gradi."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"File in client/serverlist/ contenente i vostri server preferiti mostrati "
+"nella linguetta Giocatori multipli."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr "Profondità dello riempitore"
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Mappatura del tono filmico"
+
+#: 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 ""
+"Le immagini filtrate possono miscelare valori RGB coi vicini completamente "
+"trasparenti,\n"
+"che gli ottimizzatori PNG solitamente scartano, risultando a volte in un "
+"bordo chiaro o\n"
+"scuro verso le immagini trasparenti. Applicate questo filtro per ripulire "
+"quell'effetto\n"
+"al momento del caricamento delle immagini."
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filtraggio"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Seme fisso della mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Tasto di volo"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "In volo"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Nebbia"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Tasto di attivazione della nebbia"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Percorso del font"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Ombreggiatura del font"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Trasparenza dell'ombreggiatura del font"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Trasparenza dell'ombreggiatura del font (opacità, tra 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+"Compensazione dell'ombra del font, se 0 allora l'ombra non verrà disegnata."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Dimensione del font"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr "Formato delle istantanee."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Tasto avanti"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Font freetype"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Da che distanza vengono generati i blocchi per i client, espressa in blocchi "
+"mappa (16 nodi)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Da che distanza i blocchi sono inviati ai client, espressa in blocchi mappa "
+"(16 nodi)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Da che distanza i client sanno degli oggetti, espressa in blocchi mappa (16 "
+"nodi)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Schermo intero"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "BPP schermo intero"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Modalità a schermo intero."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Scala GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filtro di scala GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtro di scala GUI txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Generali"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Generare le normalmap"
+
+#: 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"Attributi globali di generazione della mappa.\n"
+"In Generatore mappa v. 6 l'impostazione 'decorazioni' controlla tutte le "
+"decorazioni\n"
+"eccetto alberi ed erba della giungla, in tutti gli altri gen. di mappe "
+"questa\n"
+"impostazione controlla tutte le decorazioni.\n"
+"Le impostazioni che non vengono specificate nella stringa delle "
+"impostazioni\n"
+"mantengono i valori predefiniti.\n"
+"Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+"esplicitamente."
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafiche"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravità"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "Mod. HTTP"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Tasto di attivazione dello HUD"
+
+#: 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 ""
+"Gestione delle chiamate deplorate alle API Lua:\n"
+"- eredita: (prova a) mimare il vecchio comportamento (predefinita per i "
+"rilasci).\n"
+"- registra: mima e registra la traccia della chiamata deplorata "
+"(predefinita per il debug).\n"
+"- errore: abortire all'uso della chiamata deplorata (suggerita per gli "
+"sviluppatori di mod.)."
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "Componente dell'altezza della dimensione della finestra iniziale."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Altezza alla quale appaiono le nuvole."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "FPU ad alta precisione"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "Sito del server, da mostrare nell'elenco dei server."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Quale profondità di creazione dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Quanto larghe le aree di blocchi sono soggette alle cose del blocco attivo, "
+"espresso in blocchi mappa (16 nodi).\n"
+"Nei blocchi attivi vengono caricati gli oggetti ed eseguiti gli ABM."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr "Quanti blocchi vengono inviati simultaneamente per l'intero server."
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr "Quanti blocchi volano nel cavo simultaneamente per ogni client."
+
+#: 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 ""
+"Quanto il server aspetterà prima di scaricare i blocchi mappa non usati.\n"
+"Un valore alto è più scorrevole, ma userà più RAM."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Larghezza di creazione dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "Server IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Supporto IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+"Se i FPS dovessero superare questo, limitarli con la sospensione\n"
+"per non sprecare la potenza della CPU per nessun beneficio."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Se disabilitata il tasto \"usare\" è utilizzato per volare veloce se "
+"entrambe le\n"
+"modalità 'volo' e 'veloce' sono abilitate."
+
+#: 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 ""
+"Se abilitata assieme alla modalità di volo, il giocatore può volare "
+"attraverso i nodi solidi.\n"
+"Questo richiede il privilegio \"noclip\" sul server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Se abilitata, il tasto \"usare\" viene utilizzato al posto di \"strisciare\" "
+"per scendere."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+"Se abilitata, le azioni sono registrate per il ripristino.\n"
+"Questa opzione viene letta solo all'avvio del server."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr "Se abilitata, disattiva l'impedimento dei trucchi nel gioco multiplo."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+"Se abilitata, i dati mondo non validi non causeranno lo spegnimento del "
+"server.\n"
+"Abilitatela solo se sapete cosa state facendo."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+"Se abilitata, i nuovi giocatori non possono unirsi con una password vuota."
+
+#: 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 ""
+"Se abilitata, potete posizionare blocchi nella posizione (piedi + livello "
+"degli occhi) dove state.\n"
+"Questo è utile quando si lavora con le scatole dei nodi in piccole aree."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+"Se si imposta, i giocatori (ri)compariranno sempre alla posizione data."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Ignorare gli errori del mondo"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "In gioco"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Trasparenza in gioco dello sfondo della console dei messaggi (opacità, tra 0 "
+"e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Colore in gioco dello sfondo della console dei messaggi (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Intervallo di salvataggio dei cambiamenti importanti nel mondo, espresso in "
+"secondi."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr "Intervallo di invio ai client dell'ora del giorno."
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "Animazioni degli oggetti dell'inventario"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Tasto dell'inventario"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Invertire il mouse"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Inverte il movimento verticale del mouse."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Entità TTL (tempo di vita) oggetto"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"Iterazioni della funzione ricorsiva.\n"
+"Controlla l'ammontare del dettaglio fine."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Solo serie julia: componente W della costante iper-complessa determinante la "
+"forma julia.\n"
+"Non ha effetto sui frattali in 3D.\n"
+"Spazia pressapoco tra -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Solo serie julia: componente X della costante iper-complessa determinante la "
+"forma julia.\n"
+"Spazia pressapoco tra -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Solo serie julia: componente Y della costante iper-complessa determinante la "
+"forma julia.\n"
+"Spazia pressapoco tra -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Solo serie julia: componente Z della costante iper-complessa determinante la "
+"forma julia.\n"
+"Spazia pressapoco tra -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Tasto di salto"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Velocità di salto"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per ridurre il raggio visivo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per lasciare a terra l'oggetto attualmente selezionato.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per aumentare il raggio visivo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per saltare.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per muoversi rapidamente nella modalità veloce.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per muovere indietro il giocatore.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per muovere avanti il giocatore.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per muovere a sinistra il giocatore.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per muovere a destra il giocatore.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per aprire la console dei messaggi.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per aprire la finestra dei messaggi per scrivere comandi.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per aprire la finestra dei messaggi.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per aprire l'inventario.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per stampare le stack di debug. Usato per lo sviluppo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per strisciare.\n"
+"Usato anche per scendere dalle scale e scendere in acqua se aux1_descends è "
+"disabilitata.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per passare tra la camera in prima persona a quella in terza "
+"persona..\n"
+"Si veda 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 ""
+"Tasto per scattare istantanee.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la modalità cinematic.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la visualizzatore della minimappa.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la modalità veloce.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare il volo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la modalità noclip.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare l'aggiornamento della camera. Usato solo per lo "
+"sviluppo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per attivare la visualizzazione delle info. di debug.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per attivare la visualizzazione dello HUD.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la visualizzazione della messaggistica.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare la visualizzazione della nebbia.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tasto per attivare la visualizzazione del profilatore. Usato per lo "
+"sviluppo.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tasto per attivare il raggio visivo illimitato.\n"
+"Si veda http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Tasto \"Usare\" per arrampicarsi/scendere"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Linua"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Profondità delle caverne grandi"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Caratteristiche della lava"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Stile delle foglie"
+
+#: 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 ""
+"Stile delle foglie:\n"
+"- Decorative: tutte le facce visibili\n"
+"- Semplici: solo le facce esterne, se impostate special_tiles sono usate\n"
+"- Opache: disattiva la trasparenza"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Tasto sinistro"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+"Lunghezza di uno scatto del server e intervallo per cui gli oggetti sono "
+"aggiornati in generale sulla rete."
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr "Intervallo di tempo tra l'esecuzione dei cicli ABM"
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr "Intervallo di tempo tra l'esecuzione dei cicli del Temporizzatore Nodo"
+
+#: 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 ""
+"Livello di registro da scrivere su debug.txt:\n"
+"- <niente> (nessun registro)\n"
+"- nessuno (messaggi senza livello)\n"
+"- errore\n"
+"- avviso\n"
+"- azione\n"
+"- informazione\n"
+"- verboso"
+
+#: 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"
+
+#: 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 ""
+"Limita il numero di richieste HTTP parallele. Influisce:- Recupero dei "
+"media se il server usa l'impostazione remote_media.\n"
+"- Scaricamento dell'elenco dei server e notifica del server.\n"
+"- Scaricamenti effettuati dal menu principale (ad es.il gestore mod.).\n"
+"Ha effetto solo se compilato con cURL."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Fluidità del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Uniformazione della fluidità del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "Iterazioni massime nel giro di trasformazione del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "Tempo di svuotamento della coda del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Velocità di caduta del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Intervallo di aggiornamento del liquido in secondi."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "Scatto di aggiornamento del liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Menu principale gestore giochi"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Menu principale del gestore mod."
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Script del menu principale"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Far sì che i colori di cielo e nebbia dipendano dall'ora del giorno (alba/"
+"tramonto) e direzione visiva."
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr "Fa lavorare DirectX con LuaJIT. Disabilitare se causa problemi."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Cartella della mappa"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Attributi di generazione della mappa specifici per il Generatore mappa valli."
+"\n"
+"'altitude_chill' rende più fredde le altitudini più elevate, il che potrebbe "
+"causare problemi di bioma.\n"
+"'humid_rivers' modifica l'umidità attorno ai fiumi e in aree dove l'acqua "
+"tenderebbe a stagnare,\n"
+"potrebbe interferire con i biomi finemente regolati.\n"
+"Le impostazioni predefinite impostate nel motore sono: altitude_chill, "
+"humid_rivers\n"
+"La stringa delle impostazioni modifica i valori predefiniti del motore.\n"
+"Le impostazioni che non sono specificate nella stringa mantengono i valori "
+"predefiniti.\n"
+"Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+"esplicitamente."
+
+#: 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.\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."
+msgstr ""
+"Attributi di generazione della mappa specifici per Generatore mappa piatto.\n"
+"Laghi e colline occasionali possono essere aggiunti al mondo piatto.\n"
+"Le impostazioni predefinite impostate nel motore sono: nessuna\n"
+"La stringa delle impostazioni modifica le impostazioni predefinite del "
+"motore.\n"
+"Le impostazioni che non sono specificate nella stringa mantengono i valori "
+"predefiniti.\n"
+"Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+"esplicitamente."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Attributi di generazione della mappa specifici per Generatore mappa v. 6.\n"
+"Quando i biomi di neve sono abilitati le giungle sono abilitate "
+"automaticamente, l'impostazione 'jungles' è ignorata.\n"
+"Le impostazioni predefinite impostate nel motore sono: biomeblend, mudflow\n"
+"La stringa delle impostazioni modifica le impostazioni predefinite del "
+"motore.\n"
+"Le impostazioni che non sono specificate nella stringa mantengono i valori "
+"predefiniti.\n"
+"Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+"esplicitamente."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"Attributi di generazione della mappa specifici per Generatore mappa v. 6.\n"
+"L'impostazione 'ridges' controlla i fiumi.\n"
+"Le impostazioni predefinite impostate nel motore sono: mountains, ridges\n"
+"La stringa delle impostazioni modifica le impostazioni predefinite del "
+"motore.\n"
+"Le impostazioni che non sono specificate nella stringa mantengono i valori "
+"predefiniti.\n"
+"Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+"esplicitamente."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Limite di generazione della mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Intervallo di salvataggio della mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Limite del blocco mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "Tempo di scad. dello scaric. del blocco mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Generatore mappa valli"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Param. del gen. mappa del 'rumore' del calore del bioma"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Param. del gen. mappa di misc. del 'rumore' dell'umidità del bioma"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Param. del gen. mappa del 'rumore' dell'umidità del bioma"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Debug del generatore mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Impostazioni del generatore mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr "Larghezza delle caverne del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr "Gen. mappa piatto, parametri del 1° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr "Gen. mappa piatto, parametri del 2° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+"Gen. mappa piatto, parametri del 'rumore' dello riempitore di profondità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Impostazioni del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Livello del terreno del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Ripidità delle colline del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Limite delle colline del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Ripidità dei laghi del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Limite dei laghi del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr "Profondità delle caverne grandi del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr "Parametri del 'rumore' del terreno del Generatore mappa piatto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Generatore mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr "Gen. mappa frattale, larghezza caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "Gen. mappa frattale, parametri del 1° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "Gen. mappa frattale, parametri del 2° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+"Gen. mappa frattale, parametri del 'rumore' dello riempitore di profondità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "Frattale del Generatore mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "Iterazioni del Generatore mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "Gen. mappa frattale, julia w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "Gen. mappa frattale, julia x"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Gen. mappa frattale, julia y"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Gen. mappa frattale, julia z"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "Compensazione del Generatore mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "Scala del Generatore mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Param. del 'rumore' del fondale marino del Gen. mappa frattale"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "Gen. mappa frattale, fetta w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr "Param. del gen. mappa di miscelazione del 'rumore' del calore"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Nome del gen. mappa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Generatore mappa v. 5."
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr "Gen. mappa v. 5, larghezza caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr "Gen. mappa v. 5, parametri del 1° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr "Gen. mappa v. 5, parametri del 2° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr "Gen. mappa v. 5, parametri del 'rumore' di fabbrica"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr "Gen. mappa v. 5, parametri del 'rumore' dello riempitore di profondità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr "Gen. mappa v. 5, parametri 'rumore' dell'altezza"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Generatore mappa v. 6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' degli alberi"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "Gen. mappa v. 6, frequenza della spiaggia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' della spiaggia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' del bioma"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Gen. mappa v. 6, frequenza del deserto"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "Impostazioni del Generatore mappa v. 6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' della selezione di altezza"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' dell'umidità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' del fango"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' della ripidità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' di altitudine del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' di base del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr "Gen. mappa v. 6, parametri del 'rumore' degli alberi"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Gen. mappa v. 7, parametri del 'rumore'"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr "Gen. mappa v. 7, larghezza delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr "Gen. mappa v. 7, parametri del 1° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr "Gen. mappa v. 7, parametri del 2° 'rumore' delle caverne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' dello riempitore di profondità"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "Impostazioni del Generatore mappa v. 7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' della selezione di altezza"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' di altezza delle montagne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' delle montagne"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' dell'acqua dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' di altitudine del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr "Gen. mappa v. 7, param. del 'rumore' di base del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr "Gen. mappa v. 7, param. del \"rumore\" di continuità del terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "Profondità delle caverne imponenti"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr "'Rumore' delle caverne imponenti"
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr "Caverne imponenti da qui."
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr "Distanza massima di generazione dei blocchi"
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr "Distanza massima di invio dei blocchi"
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr "Numero massimo di liquidi elaborati per passaggio."
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr "Clearobjects massimo per blocchi extra"
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr "Numero massimo di pacchetti per iterazione"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr "FPS massimi"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "FPS massimi quando il gioco è in pausa."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "Numero massimo di blocchi caricati a forza"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Larghezza massima della barra oggetti"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+"Numero massimo di blocchi che possono essere accodati per il caricamento."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Numero massimo di blocchi da generare da accodare.\n"
+"Lasciate vuoto per scegliere automaticamente una quantità adatta."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Numero massimo di blocchi da accodare per essere caricati da file.\n"
+"Lasciate vuoto per scegliere automaticamente una quantità adatta."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "Numero massimo di blocchi mappa caricati a forza."
+
+#: 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 ""
+"Numero massimo di blocchi mappa per client da tenere in memoria.\n"
+"Impostare a -1 per una quantità illimitata."
+
+#: 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 ""
+"Numero massimo di pacchetti inviati per passo di invio, se avete una "
+"connessione lenta\n"
+"provate a ridurlo, ma non riducetelo a un numero inferiore al doppio del "
+"numero\n"
+"dei client interessati."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+"Numero massimo di giocatori che possono connettersi contemporaneamente."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "Numero massimo di oggetti immagazzinati stabilmente in un blocco."
+
+#: 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 ""
+"Proporzione massima della finestra attuale da usarsi per la barra oggetti.\n"
+"Utile se c'è qualcosa da mostrare a destra o sinistra della barra."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Num. mass. di blocchi inviati contemp. per client"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Totale massimo di invio contemporaneo di blocchi"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Tempo massimo in ms che può richiedere lo scaricamento di un file (ad es. un "
+"mod.)."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Utenti massimi"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Oggetti massimi per blocco"
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr "Cache mesh"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Messaggio del giorno"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "Messaggio del giorno mostrato ai giocatori che si connettono."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr "Metodo usato per evidenziare l'oggetto scelto."
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Minimappa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Tasto della minimappa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Altezza di scansione della minimappa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "Dimensione minima dell'immagine per i filtri"
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mipmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr "Creazione del profilo dei mod."
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "URL dei dettagli del deposito mod."
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "URL di scaricamento del deposito mod."
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "URL dell'elenco dei mod. del deposito mod."
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Percorso del font a spaziatura fissa"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "Dimensione del font a spaziatura fissa"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Sensibilità del mouse"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Moltiplicatore della sensibilità del mouse."
+
+#: 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 ""
+"Moltiplicatore per l'ondeggiamento in caduta.\n"
+"Per esempio: 0 per nessun ondeggiamento visivo; 1.0 normale; 2.0 doppio."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"Moltiplicatore per l'ondeggiamento visivo.\n"
+"Per esempio: 0 per nessun ondeggiamento visivo; 1.0 normale; 2.0 doppio."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"Nome del generatore mappa da usare quando si crea un nuovo mondo.\n"
+"Creare un nuovo mondo nel menu principale ignorerà questa impostazione."
+
+#: 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 ""
+"Nome del giocatore.\n"
+"Quando si esegue un server, i client che si connettono con questo nome sono "
+"amministratori.\n"
+"Quando si avvia dal menu principale, questa impostazione viene ignorata."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+"Nome del server, da mostrare quando si uniscono dei giocatori e nell'elenco "
+"dei server."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Rete"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"Porta di rete da ascoltare (UDP).\n"
+"Questo valore verrà ignorato quando si avvia dal menu principale."
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "I nuovi utenti devono inserire questa password."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Movimento libero"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Tasto noclip"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "Evidenziamento nodo"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr "Intervallo del Temporizzatore nodo"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
+"Parametri di 'rumore' per l'API di temperatura del bioma, umidità e fusione "
+"di bioma."
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr "Rumori"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr "Campionamento normalmap"
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr "Intensità normalmap"
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr "Numero di thread emerge"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+"Numero di thread emerge da usare. Lasciate vuoto questo campo, o aumentate "
+"questo numero\n"
+"per usare thread multipli. Su sistemi multiprocessore, questo migliorerà "
+"molto la velocità del\n"
+"generatore mappa al costo di caverne un po' buggate."
+
+#: 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 ""
+"Numero di blocchi extra che possono essere caricati da /clearobjects in una "
+"volta.\n"
+"Questo è un controbilanciare tra spesa di transazione sqlite e\n"
+"consumo di memoria (4096 = 100MB, come regola generale)."
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "Numero di iterazioni di occlusione di parallasse."
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+"Deviazione complessiva dell'effetto di occlusione di parallasse, solitamente "
+"scala fratto 2."
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr "Scala complessiva dell'effetto di occlusione di parallasse."
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Occlusione di parallasse"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "Scala dell'occlusione di parallasse"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Deviazione dell'occlusione di parallasse"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Iterazioni dell'occlusione di parallasse"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Modalità 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 to TrueTypeFont or bitmap."
+msgstr "Percorso per il font TrueType o bitmap."
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Percorso dove salvare le istantanee."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+"Percorso della cartella immagini. Tutte le immagini vengono cercate a "
+"partire da qui."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Fisiche"
+
+#: 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 ""
+"Il giocatore può volare senza essere interessato dalla gravità.\n"
+"Ciò richiede il privilegio \"fly\" sul server."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Nome del giocatore"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr "Distanza di trasferimento del giocatore"
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "Giocatore contro Giocatore"
+
+#: 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 ""
+"Porta a cui connettersi (UDP).\n"
+"Si noti che il campo porta nel menu principale ignora questa impostazione."
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+"Impedisce che i mod. facciano cose non sicure come eseguire comandi della "
+"shell."
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr "Privilegi che possono essere assegnati dai giocatori con basic_privs"
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+"Intervallo di stampa del profilatore. 0 = disabilitato. Utile per gli "
+"sviluppatori."
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "Tasto di attivazione del profilatore"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "Intervallo di stampa del profilamento"
+
+#: 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 ""
+"Raggio dell'area delle nuvole espresso in numero di 64 nodi nuvola "
+"quadrati.\n"
+"Valori maggiori di 26 cominceranno a produrre interruzioni appuntite agli "
+"angoli delle aree nuvola."
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr "Solleva il terreno per creare vallate attorno ai fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Input casuale"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Tasto di selezione del raggio"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Media remoti"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Porta remota"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr "Sostituisce il menu principale predefinito con uno personalizzato."
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Tasto destro"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Intervallo di ripetizione del click destro"
+
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr "Profondità dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr "'Rumore' dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "River Size"
+msgstr "Dimensione dei fiumi"
+
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr "'Rumore' dei fiumi - i fiumi si manifestano vicino a zero"
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "Registrazione di ripristino"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Minimappa rotonda"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "Salvare su disco la mappa ricevuta dal client."
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "Salvataggio della mappa ricevuta dal server"
+
+#: 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 ""
+"Ridimensionare l'interfaccia secondo un valore specificato dall'utente.\n"
+"Usate un filtro anti-alias-vicino-più-vicino per ridimensionare "
+"l'interfaccia.\n"
+"Questo liscerà alcuni degli spigoli vivi, e armonizzerà i pixel al\n"
+"rimpicciolimento, al costo di sfocare alcuni pixel di punta\n"
+"quando le immagini sono ridimensionate per valori frazionari."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Altezza dello schermo"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Larghezza dello schermo"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Istantanea"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Cartella delle istantanee"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr "Formato delle istantanee"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr "Qualità dell'istantanea"
+
+#: 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 ""
+"Qialità dell'istantanea. Usata solo per il formato JPEG.\n"
+"1 significa qualità peggiore; 100 significa qualità migliore.\n"
+"Usate 0 per la qualità predefinita."
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr "Sicurezza"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Si veda http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "Colore del bordo del riquadro di selezione (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "Colore del riquadro di selezione"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "Larghezza del riquadro di selezione"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Server / Giocatore singolo"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL del server"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Indirizzo del server"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Descrizione del server"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nome del server"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Porta del server"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL dell'elenco dei server"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "File dell'elenco dei server"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+"Impostate la lingua. Lasciate vuoto per usare la lingua di sistema.\n"
+"E' necessario il riavvio dopo avere modificato questa impostazione."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Impostata a true abilita le foglie ondeggianti.\n"
+"Necessita l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Impostata su true abilita le piante ondeggianti.\n"
+"Necessita l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Impostata su true abilita l'acqua ondeggiante.\n"
+"Necessita l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"Gli shader permettono effetti visivi avanzati e potrebbero aumentare il "
+"rendimento su certe\n"
+"schede video. Funzionano solo col supporto OpenGL."
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr "Forma del minimap. Abilitata = rotonda, disabilitata = quadrata."
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Mostrare le info. di debug"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr "Mostrare i riquadri di selezione delle entità"
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "Messaggio di spegnimento"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Dimensione dei \"pezzi\" da generare immediatamente dal generatore mappa, "
+"espressa in blocchi mappa (16 nodi)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr "Pendenza e riempimento lavorano assieme per modificare le altezze"
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Illuminazione uniforme"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Rende fluida la camera quando ci si muove e si guarda attorno.\n"
+"Utile per registrare video."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+"Rende fluida la rotazione della camera in modalità cinematic. 0 per "
+"disabilitare."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Rende fluida la rotazione della camera. 0 per disabilitare."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Tasto per strisciare"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Suono"
+
+#: 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 ""
+"Specifica l'URL da cui il client recupera i media al posto di usare UDP.\n"
+"$filename dovrebbe essere accessibile da $remote_media$filename tramite "
+"cURL\n"
+"(ovviamente, remote_media dovrebbe finire con una barra).\n"
+"I file che non sono presenti saranno recuperati nel solito modo."
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "Punto stabile di comparsa"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "Intensità delle normalmap generate."
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr "Intensità di parallasse."
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "Controllo stretto del protocollo"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr "Supporto dei server più vecchi"
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "SQLite simultaneo"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+msgstr "Altezza terreno"
+
+#: 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 ""
+"Limite di 'rumore' del terreno per le colline.\n"
+"Controlla la porzione d'area del mondo coperta da colline.\n"
+"Sistemare verso 0.0 per una porzione più ampia."
+
+#: 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 ""
+"Limite di 'rumore' del terreno per i laghi.\n"
+"Controlla la porzione d'area del mondo coperta da laghi.\n"
+"Sistemare verso 0.0 per una porzione più ampia."
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr "Percorso delle immagini"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr "L'altitudine a cui le temperature crollano di 20°C"
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr "La profondità della terra o altri riempitori"
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr "L'interfaccia di rete ascoltata dal server."
+
+#: 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 ""
+"I privilegi ricevuti automaticamente dai nuovi utenti.\n"
+"Si veda /privs in gioco per un elenco completo sul vostro server e la "
+"configurazione dei mod."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Il supporto di rendering per Irrlicht."
+
+#: 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 ""
+"L'intensità (oscurità) dell'ombreggiatura di occlusione ambientale dei "
+"nodi.\n"
+"Minore è più scuro, maggiore è più chiaro. L'intervallo di valori validi "
+"per\n"
+"questa impostazione è tra 0.25 e 4.0 inclusi. Se il valore è fuori "
+"intervallo\n"
+"verrà impostato sul valore valido più vicino."
+
+#: 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 ""
+"Il tempo (in secondi) in cui la coda dei liquidi può crescere oltre alla "
+"capacità\n"
+"di elaborazione finché viene fatto un tentativo di diminuirne la dimensione\n"
+"scaricando gli oggetti della vecchia coda. Un valore 0 disattiva questa "
+"funzionalità."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"Il tempo in secondi richiesto tra click destri ripetuti quando si tiene il "
+"pulsante mouse destro."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "Questo font sarà usato per certe lingue."
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr "Tempo tra i cicli di gestione del 'blocco'"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+"Tempo in secondi di vita per le entità oggetto (oggetti lasciati a terra).\n"
+"Impostandola a 0 si disattiva la caratteristica."
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr "Intervallo del tempo di invio"
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr "Velocità del tempo"
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+"Tempo di scadenza per i client per rimuovere dati mappa inutilizzati dalla "
+"memoria."
+
+#: 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 ""
+"Per ridurre il ritardo, i trasferimenti di blocchi sono rallentati quando un "
+"giocatore sta\n"
+"costruendo qualcosa. Questo stabilisce per quanto a lungo sono rallentati "
+"dopo avere\n"
+"posizionato o rimosso un nodo."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Chiave di impostazione della modalità camera"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "Ritardo dei suggerimenti"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Filtro trilineare"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"Vero = 256\n"
+"Falso = 128\n"
+"Utilizzabile per rendere più fluida la minimappa su macchine più lente."
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "Mod. fidati"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr "URL dell'elenco server mostrato nella linguetta Giocatori multipli."
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "Distanza di trasferimento illimitata"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "Scaricare i dati server inutilizzati"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "Usare le nuvole in 3D invece delle piatte."
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr "Usare un'animazione con le nuvole per lo sfondo del menu principale."
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+"Usare il filtro anisotropico quando si vedono le immagini da un angolo."
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "Usare il filtro bilineare quando si ridimensionano le immagini."
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Tasto 'usare'"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+"Usare il mipmapping per ridimensionare le immagini. Potrebbe aumentare "
+"leggermente la resa."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "Usare il filtro trilineare quando si ridimensionano le immagini."
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Utile per gli sviluppatori di mod."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "Sincronia verticale"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr "VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Depth"
+msgstr "Profondità valli"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Fill"
+msgstr "Riempimento valli"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Profile"
+msgstr "Profilo valli"
+
+#: src/settings_translation_file.cpp
+msgid "Valley Slope"
+msgstr "Pendenza valli"
+
+#: src/settings_translation_file.cpp
+msgid "Valleys C Flags"
+msgstr "Impostazioni C delle valli"
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "Sincronizzazione verticale dello schermo."
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Driver video"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "Ondeggiamento visuale"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"Distanza visiva in nodi.\n"
+"Min = 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "Tasto di riduzione del raggio visivo"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "Tasto di aumento del raggio visivo"
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr "Raggio visivo"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volume"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Coordinata W della fetta in 3D generata di un frattale in 4D.\n"
+"Determina quale fetta in 3D viene generata della forma in 4D.\n"
+"Non ha effetto su frattali in 3D.\n"
+"Spazia pressapoco tra -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Velocità di camminata"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Caratteristiche dell'acqua"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Livello dell'acqua"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "Livello di superficie dell'acqua del mondo."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "Nodi ondeggianti"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Foglie ondeggianti"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Piante ondeggianti"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Acqua ondeggiante"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Altezza dell'acqua ondeggiante"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Durata di ondeggiamento dell'acqua"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Velocità di ondeggiamento dell'acqua"
+
+#: 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 ""
+"Quando gui_scaling_filter è vero, tutte le immagini dell'interfaccia\n"
+"necessitano il filtraggio software, ma alcune immagini sono generate\n"
+"direttamente dall'hardware (ad es.. render-to-texture per i nodi "
+"nell'inventario)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+"Quando si usano i filtri bilineare/trilineare/anisotropico, le immagini a "
+"bassa\n"
+"risoluzione possono essere sfocate, perciò ingranditele automaticamente\n"
+"con l'interpolazione vicino-più-vicino per conservare pixel vivaci. Questa\n"
+"imposta la dimensione minima dell'immagine per le immagini ingrandite;\n"
+"valori maggiori risultano più a fuoco, ma richiedono più memoria. Sono\n"
+"raccomandate le potenze di 2. Impostare questa a un valore maggiore di\n"
+"1 potrebbe non avere un effetto visibile a meno che non sia attivato\n"
+"il filtro bilineare/trilineare/anisotropico."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Dove si ferma il generatore mappa.\n"
+"Si noti prego:\n"
+"- Limitato a 31.000 (impostazioni superiori non hanno effetto)\n"
+"- Il generatore mappa lavora in gruppi di 80x80x80 nodi (5x5x5 nodi "
+"mappa).\n"
+"- Quei gruppi hanno una compensazione di -32, -32 nodi dall'origine.\n"
+"- Solo i gruppi che rientrano nel map_generation_limit vengono generati."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+"Se si usano font freetype, richiede la compilazione col supporto freetype."
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+"Se le animazioni delle immagini dei nodi dovrebbero essere asincrone per "
+"blocco mappa."
+
+#: 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 ""
+"Se i giocatori sono mostrati ai client senza alcun limite di raggio.\n"
+"Deplorata, usate invece l'impostazione player_transfer_distance."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr "Se permettere ai giocatori di danneggiarsi e uccidersi l'un l'altro."
+
+#: 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 ""
+"Se chiedere ai client di riconnettersi dopo un crollo (Lua).\n"
+"Impostatela a vero se il vostro server è impostato per ripartire "
+"automaticamente."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "Se annebbiare la fine dell'area visibile."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+"Se mostrare le info. di debug del client (ha lo stesso effetto di premere "
+"F5)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+"Se supportare o meno i server più vecchi precedenti al protocollo versione "
+"25.\n"
+"Abilitatela se volete connettervi a server 0.4.12 e precedenti.\n"
+"I server a partire da 0.4.13 funzioneranno, i server 0.4.12-dev potrebbero "
+"funzionare.\n"
+"Disabilitare questa opzione proteggerà meglio la vostra password."
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "Componente larghezza della dimensione iniziale della finestra."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Larghezza delle linee del riquadro di selezione attorno ai nodi."
+
+#: 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 ""
+"Cartella del mondo (ogni cosa nel mondo viene depositata qui).\n"
+"Non necessaria se si avvia dal menu principale."
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr "Y del terreno piatto."
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr "Y del limite superiore delle caverne pseudocasuali grandi."
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "Tempo di scadenza cURL dello scaricamento dei file"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "Limite cURL parallelo"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "Tempo di scadenza cURL"
+
+#~ msgid "Item textures..."
+#~ msgstr "Immagini degli oggetti..."
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Precaricamento delle textures dell'inventario"
+
+#~ msgid "Viewing range minimum"
+#~ msgstr "Distanza minima di visibilità"
+
+#~ msgid "Wanted FPS"
+#~ msgstr "FPS desiderati"
#~ msgid "Local install"
#~ msgstr "Installazione locale"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtro anisotropico"
+#~ msgid "Add mod:"
+#~ msgstr "Aggiungere un modulo:"
+
+#~ msgid "MODS"
+#~ msgstr "MODULI"
+
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "PACCH. DI IMM."
+
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "GIOC. SING."
+
+#~ msgid "Finite Liquid"
+#~ msgstr "Liquido limitato"
+
+#~ msgid "Preload item visuals"
+#~ msgstr "Precaricare le immagini"
+
+#~ msgid "SETTINGS"
+#~ msgstr "IMPOSTAZIONI"
+
+#~ msgid "Password"
+#~ msgstr "Password"
+
+#~ msgid "Name"
+#~ msgstr "Nome"
+
+#~ msgid "START SERVER"
+#~ msgstr "AVVIO SERVER"
+
+#~ msgid "CLIENT"
+#~ msgstr "CLIENT"
+
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Aggiungere il modulo"
+
+#~ msgid "Remove selected mod"
+#~ msgstr "Rimuovere il modulo selezionato"
+
+#~ msgid "EDIT GAME"
+#~ msgstr "MODIFICARE IL GIOCO"
+
+#~ msgid "new game"
+#~ msgstr "nuovo gioco"
+
+#~ msgid "Mods:"
+#~ msgstr "Moduli:"
+
+#~ msgid "GAMES"
+#~ msgstr "GIOCHI"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Nome del gioco"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Riavviare minetest per rendere effettive le modifiche"
+
+#~ msgid "If enabled, "
+#~ msgstr "attivata"
+
+#~ msgid "If disabled "
+#~ msgstr "Disatt. pacch."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "Attributi di generazione della mappa specifici per Generatore mappa v. "
+#~ "7.\n"
+#~ "'ridges' sono i fiumi.\n"
+#~ "Le impostazioni che non sono specificate nella stringa mantengono i "
+#~ "valori predefiniti.\n"
+#~ "Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+#~ "esplicitamente."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Attributi di generazione della mappa specifici per Generatore mappa "
+#~ "valli.\n"
+#~ "Le impostazioni che non sono specificate nella stringa mantengono i "
+#~ "valori predefiniti.\n"
+#~ "Le impostazioni che iniziano con \"no\" sono usate per disabilitarle "
+#~ "esplicitamente.\n"
+#~ "\"altitude_chill\" rende più fredde le elevazioni maggiori, il che "
+#~ "potrebbe causare problemi ai biomi.\n"
+#~ "\"humid_rivers\" modifica l'umidità attorno ai fiumi e nelle aree in cui "
+#~ "l'acqua tenderebbe a stagnare. Potrebbe interferire con biomi"
+
+#~ msgid "No!!!"
+#~ msgstr "No!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generare normalmap"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Elenco dei server pubblici"
+
+#~ msgid "No of course not!"
+#~ msgstr "No, certo che no!"
diff --git a/po/ja/minetest.po b/po/ja/minetest.po
index fb68d7304..c6bc38d74 100644
--- a/po/ja/minetest.po
+++ b/po/ja/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-07-17 14:33+0200\n"
-"Last-Translator: Rui <mrrst0914@gmail.com>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-07 16:10+0000\n"
+"Last-Translator: BreadW <toshiharu.uno@gmail.com>\n"
"Language-Team: Japanese "
"<https://hosted.weblate.org/projects/minetest/minetest/ja/>\n"
"Language: ja\n"
@@ -12,165 +12,281 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.4-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr "以下ã®Modã®Luaスクリプト内ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "メインメニュー"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "決定"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "å†æŽ¥ç¶š"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "サーãƒãŒå†æŽ¥ç¶šã‚’è¦æ±‚ã—ã¾ã—ãŸ:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "読ã¿è¾¼ã¿ä¸­..."
-#: builtin/mainmenu/common.lua:240
+#: 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 "インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å…¬é–‹ã‚µãƒ¼ãƒãƒ¼ãƒªã‚¹ãƒˆã‚’å†æœ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。"
+msgstr "インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å…¬é–‹ã‚µãƒ¼ãƒä¸€è¦§ã‚’å†æœ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-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:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "ä¾å­˜Mod:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "無効化"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "有効化"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "å…¨ã¦æœ‰åŠ¹åŒ–"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"許å¯ã•ã‚Œã¦ã„ãªã„文字ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚Mod \"$1\"を有効化ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+"文字ã¯[a-z0-9_]ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "ゲームをéžè¡¨ç¤º"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Modパックをéžè¡¨ç¤º"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Modå:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "ä¾å­˜Mod:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "ä¿å­˜"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "キャンセル"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "有効化"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "無効化"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "ワールド:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "有効化"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "ã™ã¹ã¦æœ‰åŠ¹åŒ–"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "ワールドå\"$1\"ã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "ワールドå"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "作æˆ"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seed値"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr ""
+"minetest.netã‹ã‚‰ã€minetest_gameãªã©ã®ã‚µãƒ–ゲームをダウンロードã—ã¦ãã ã•ã„"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "ワールドタイプ"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "minetest.netã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "ゲーム"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "作æˆ"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "ワールドタイプ"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "ゲームãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "ワールドåãŒå…¥åŠ›ã•ã‚Œã¦ã„ãªã„ã‹ã€ã‚²ãƒ¼ãƒ ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "minetest.netã‹ã‚‰å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed値"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr "警告: Minimal development testã¯é–‹ç™ºè€…ã®ãŸã‚ã®ã‚²ãƒ¼ãƒ ã§ã™ã€‚"
-
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "minetest.netã‹ã‚‰minetest_gameã®ã‚²ãƒ¼ãƒ ã‚’ダウンロードã—ã¦ãã ã•ã„"
+msgstr "警告: Minimal development testã¯é–‹ç™ºè€…用ã§ã™ã€‚"
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "ワールドå\"$1\"ã¯ã™ã§ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "ワールドå"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "ワールドåãŒå…¥åŠ›ã•ã‚Œã¦ã„ãªã„ã‹ã€ã‚²ãƒ¼ãƒ ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "サブゲームãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "本当ã«\"$1\"を削除ã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "ã¯ã„"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "ã„ã„ãˆï¼"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "削除"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr "Modマãƒãƒ¼ã‚¸ãƒ£: \"$1\"ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ"
+msgstr "Modマãƒãƒ¼ã‚¸ãƒ£ãƒ¼: \"$1\"ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr "Modマãƒãƒ¼ã‚¸ãƒ£: Mod\"$1\"ã®å ´æ‰€ãŒä¸æ˜Žã§ã™"
+msgstr "Modマãƒãƒ¼ã‚¸ãƒ£ãƒ¼: Mod\"$1\"ã®å ´æ‰€ãŒä¸æ˜Žã§ã™"
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "ワールド\"$1\"を削除ã—ã¾ã™ã‹ï¼Ÿ"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "ã„ã„ãˆ"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "決定"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "åå‰ã‚’変更:"
+msgstr "Modパックåを変更:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "決定"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\"ã¯æœ‰åŠ¹ãªãƒ•ãƒ©ã‚°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Modインストール: ファイル: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(設定ã®èª¬æ˜Žã¯ã‚ã‚Šã¾ã›ã‚“)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< 設定ページã«æˆ»ã‚‹"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "å‚ç…§"
-#: builtin/mainmenu/modmgr.lua:345
+#: 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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr "括弧内ã«3ã¤ã®æ•°å­—をカンマã§åŒºåˆ‡ã£ã¦å…¥åŠ›ã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"書å¼: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "ゲーム"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mod"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "空隙性ã®å€¤ã«ã¯ã€ä»»æ„ã§ã‚«ãƒ³ãƒžã‚’付ã‘ã¦èª­ã¿ã‚„ã™ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "フラグ一覧ã¯ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦å…¥åŠ›ã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "有効ãªæ•´æ•°ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "有効ãªæ•°å­—を入力ã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "使用å¯èƒ½ãªå€¤: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "åˆæœŸè¨­å®šã«æˆ»ã™"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "ファイルã®å ´æ‰€ã‚’é¸æŠž"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "パラメータåを表示"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "$1より大ãã„値ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "$1よりå°ã•ã„値ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。"
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -178,453 +294,501 @@ msgstr ""
"\n"
"Modインストール: ファイル\"$1\"ã¯éžå¯¾å¿œã®å½¢å¼ã‹ã€å£Šã‚Œã¦ã„ã¾ã™"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "$2ã¸$1をインストールã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr "Modインストール: Modパック$1ã«é©ã—ãŸãƒ•ã‚©ãƒ«ãƒ€åを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Modインストール: ファイル: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Modインストール: $1ã®æœ¬æ¥ã®ModåãŒä¸æ˜Žã§ã™"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "未分類"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+"Modインストール: Modパック$1ã«é©ã—ãŸãƒ•ã‚©ãƒ«ãƒ€åを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—"
+"ãŸ"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "検索"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "ストアを閉ã˜ã‚‹"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr "$1をダウンロードã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸ:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "インストール"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "çœç•¥å:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "ページ $1 / $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "評価"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "検索"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "インストール"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "çœç•¥å:"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "é–‰ã˜ã‚‹"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸ:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "ページ $1 / $2"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "未分類"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "クレジット"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
-#: builtin/mainmenu/tab_credits.lua:31
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "活動中ã®é–‹ç™ºå”力者"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
msgstr "開発者"
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
-msgstr "開発å”力者"
-
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr "以å‰ã®é–‹ç™ºè€…"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "クレジット"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "以å‰ã®é–‹ç™ºå”力者"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "以å‰ã®é–‹ç™ºè€…"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "インストール済ã¿ã®Mod:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "オンラインã§Modを検索"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Modã®æƒ…å ±:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Modã®èª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Modã®æƒ…å ±:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "åå‰ã‚’変更"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "é¸æŠžã—ãŸModパックを削除"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "é¸æŠžã—ãŸModを削除"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Modファイルをé¸æŠž:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mod"
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
-msgstr "アドレスã¨ãƒãƒ¼ãƒˆ:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "é¸æŠžã—ãŸModを削除"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "åå‰ã¨ãƒ‘スワード:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "é¸æŠžã—ãŸModパックを削除"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "公開サーãƒãƒ¼ãƒªã‚¹ãƒˆ"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "アドレスã¨ãƒãƒ¼ãƒˆ"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "削除"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "クライアント"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "接続"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "クリエイティブモード"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "ダメージ有効"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’削除"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "ãŠæ°—ã«å…¥ã‚Š"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "åå‰ã¨ãƒ‘スワード"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP有効"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "クライアント"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "作æˆ"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "設定"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "ゲームスタート"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "ワールドをé¸æŠž:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "クリエイティブモード"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "ダメージ有効"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "公開サーãƒãƒ¼"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "åå‰ã¨ãƒ‘スワード"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "作æˆ"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "ワールドãŒä½œæˆã¾ãŸã¯é¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "ãƒãƒ¼ãƒˆ"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "サーãƒãƒ¼ã®ãƒãƒ¼ãƒˆ"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "公開サーãƒ"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "ワールドãŒä½œæˆã¾ãŸã¯é¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "ワールドをé¸æŠž:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
-msgstr "サーãƒãƒ¼"
+msgstr "サーãƒ"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "ä¸é€æ˜Žãªè‘‰"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "サーãƒã®ãƒãƒ¼ãƒˆ"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "シンプルãªè‘‰"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "ゲームスタート"
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
-msgstr "綺麗ãªè‘‰"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2å€"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "フィルタ無ã—"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "立体ãªé›²"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4å€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8å€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced 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:33
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "ãƒã‚¤ãƒªãƒ‹ã‚¢ãƒ•ã‚£ãƒ«ã‚¿"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "トリリニアフィルタ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "ãƒãƒ³ãƒ—マッピング"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "ミップマップ無ã—"
+#: builtin/mainmenu/tab_settings.lua
+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:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "ミップマップ"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "異方性フィルタ"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "シングルプレイヤーã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’リセットã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "ã„ã„ãˆ"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "ã„ã„ãˆï¼ï¼ï¼"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "フィルタ無ã—"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "滑らã‹ãªå…‰"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "ミップマップ無ã—"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "パーティクル有効化"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "ノードã®ãƒã‚¤ãƒ©ã‚¤ãƒˆ"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3Dã®é›²"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "ノードã®è¼ªéƒ­ç·šæç”»"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "ä¸é€æ˜Žãªæ°´"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "ç„¡ã—"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "ガラスを繋ã’ã‚‹"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "法線マッピング"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "ノードをãƒã‚¤ãƒ©ã‚¤ãƒˆ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "ä¸é€æ˜Žãªè‘‰"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-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:222
-msgid "Rendering:"
-msgstr "レンダリング:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "パーティクル有効化"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "ドライãƒãƒ¼ã‚’変更ã™ã‚‹ãŸã‚Minetestã‚’å†èµ·å‹•ã—ã¾ã™"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "設定"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "シェーダー"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "æ“作変更"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "シンプルãªè‘‰"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "シングルプレイヤーã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’リセット"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "滑らã‹ãªå…‰"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "メニューã®å¤§ãã•"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "テクスãƒãƒ£ãƒªãƒ³ã‚°:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "メニューã®å¤§ãã•ã¨ã—ã¦è¨­å®šã™ã‚‹æ•°å€¤: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "シェーダーを有効ã«ã™ã‚‹ã«ã¯OpenGLを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "タッãƒä½ç½®ã‚’自由ã«ã™ã‚‹"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "ミップマッピング"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "タッãƒã®ã—ãã„値(ピクセル)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "ãƒãƒ³ãƒ—マッピング"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "ノーマルマップã®ç”Ÿæˆ"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "æºã‚Œã‚‹æ°´"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "トリリニアフィルタ"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "æºã‚Œã‚‹è‘‰"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "æºã‚Œã‚‹è‰èŠ±"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "シェーダーを有効ã«ã™ã‚‹ã«ã¯OpenGLを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "設定"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "æºã‚Œã‚‹æ°´"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "シングルプレイ開始"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "ã¯ã„"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Mod設定"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "メイン"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "シングルプレイ開始"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "プレイ"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "シングルプレイヤー"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "テクスãƒãƒ£ãƒ‘ックをé¸æŠž:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "情報ãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "テクスãƒãƒ£ãƒ‘ックをé¸æŠž:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
-msgstr "テクスãƒãƒ£ãƒ‘ック"
+msgstr "テクスãƒãƒ£"
-#: src/client.cpp:1721
-msgid "Loading textures..."
-msgstr "テクスãƒãƒ£èª­ã¿è¾¼ã¿ä¸­..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "接続ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚"
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
-msgstr "シェーダー構築中..."
+#: src/client.cpp
+msgid "Done!"
+msgstr "完了ï¼"
-#: src/client.cpp:1743
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "ノードをåˆæœŸåŒ–中"
+
+#: src/client.cpp
msgid "Initializing nodes..."
-msgstr "ノードã®è¨­å®šä¸­..."
+msgstr "ノードをåˆæœŸåŒ–中..."
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr "ノードを設定中"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "テクスãƒãƒ£ã‚’読ã¿è¾¼ã¿ä¸­..."
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "テクスãƒãƒ£ã‚’設定中..."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "シェーダーをå†æ§‹ç¯‰ä¸­..."
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "完了ï¼"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "接続エラー (タイムアウト?)"
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "メインメニュー"
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "以下ã®ã‚²ãƒ¼ãƒ ãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹èª­ã¿è¾¼ã‚ã¾ã›ã‚“ \""
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "åå‰ãŒé•·éŽãŽã¾ã™ã€‚"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "無効ãªã‚²ãƒ¼ãƒ æƒ…å ±ã§ã™ã€‚"
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "接続失敗(ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆï¼‰"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "メインメニュー"
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "ワールドãŒé¸æŠžã•ã‚Œã¦ã„ãªã„アドレスã§ã™ã€‚続行ã§ãã¾ã›ã‚“。"
+msgstr "ワールドãŒé¸æŠžã•ã‚Œã¦ã„ãªã„ã‹å­˜åœ¨ã—ãªã„アドレスã§ã™ã€‚続行ã§ãã¾ã›ã‚“。"
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "プレイヤーåãŒé•·éŽãŽã¾ã™ã€‚"
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "ワールドãŒå­˜åœ¨ã—ã¾ã›ã‚“: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "ゲーム\"ã®èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“"
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "無効ãªgamespecã§ã™ã€‚"
-
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "決定"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"詳細ã¯debug.txtを確èªã—ã¦ãã ã•ã„。"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "æ­»ã«ã¾ã—ãŸã€‚"
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "æ“作変更"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "リスãƒãƒ¼ãƒ³"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "パスワード変更"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "サーãƒã«æŽ¥ç¶šä¸­..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "å†é–‹"
-#: src/game.cpp:1092
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "クライアントを起動中..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "サーãƒã‚’起動中..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"デフォルトã®æ“作:\n"
+"- WASD: 移動\n"
+"- スペース: ジャンプ/登る\n"
+"- Shift: スニーク/é™ã‚Šã‚‹\n"
+"- Q: アイテムをè½ã¨ã™\n"
+"- I: インベントリ\n"
+"- マウス: 見回ã™\n"
+"- 左クリック: 破壊/パンãƒ\n"
+"- å³ã‚¯ãƒªãƒƒã‚¯: 設置/使用\n"
+"- マウスホイール: アイテムé¸æŠž\n"
+"- T: ãƒãƒ£ãƒƒãƒˆ\n"
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -639,12 +803,12 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
-"基本æ“作:\n"
+"デフォルトã®æ“作:\n"
"タッãƒæ“作:\n"
"- シングルタップ: ブロックã®ç ´å£Š\n"
-"- ダブルタップ: 設置ã€ä½¿ç”¨\n"
+"- ダブルタップ: 設置/使用\n"
"- スライド: 見回ã™\n"
-"メニューã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªã®æ“作:\n"
+"メニュー/インベントリã®æ“作:\n"
"- メニューã®å¤–をダブルタップ:\n"
" --> é–‰ã˜ã‚‹\n"
"- アイテムをタッãƒ:\n"
@@ -652,525 +816,3514 @@ msgstr ""
"- タッãƒã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã€äºŒæœ¬æŒ‡ã‚¿ãƒƒãƒ—:\n"
" --> アイテムを一ã¤ã‚¹ãƒ­ãƒƒãƒˆã«ç½®ã\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"基本æ“作:\n"
-"- WASD: 移動\n"
-"- スペース: ジャンプ、登る\n"
-"- Shift: スニーク、é™ã‚Šã‚‹\n"
-"- Q: アイテムをè½ã¨ã™\n"
-"- I: インベントリ\n"
-"- マウス: 見回ã™\n"
-"- 左クリック: 破壊ã€ãƒ‘ンãƒ\n"
-"- å³ã‚¯ãƒªãƒƒã‚¯: 設置ã€ä½¿ç”¨\n"
-"- ホイール: アイテムé¸æŠž\n"
-"- T: ãƒãƒ£ãƒƒãƒˆç”»é¢\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "å†é–‹"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "パスワード変更"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "音é‡"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "æ“作変更"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "タイトル"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "終了"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "終了中..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "アイテムを定義中..."
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "サーãƒãƒ¼èµ·å‹•ä¸­..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KB/秒"
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "クライアント起動中..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "通信中..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "アドレス解決中..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MB/秒"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "サーãƒãƒ¼æŽ¥ç¶šä¸­..."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "ノードを定義中..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "アイテム定義中..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "アドレスを解決中..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr "ノード定義中..."
+#: src/game.cpp
+msgid "Respawn"
+msgstr "リスãƒãƒ¼ãƒ³"
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "通信中..."
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "終了中..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr "KB/秒"
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "音é‡"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr "MB/秒"
+#: src/game.cpp
+msgid "You died."
+msgstr "æ­»ã«ã¾ã—ãŸã€‚"
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"詳細ã¯debug.txtã‚’ã”覧ãã ã•ã„。"
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "決定"
-#: src/guiFormSpecMenu.cpp:2855
+#: src/guiFormSpecMenu.cpp
msgid "Enter "
msgstr "エンター "
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
msgstr "決定"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "æ“作ã®è¨­å®šã§ã™ã€‚(変更ã«å¤±æ•—ã—ãŸå ´åˆã€minetest.confã‹ã‚‰è©²å½“ã™ã‚‹è¨­å®šã‚’削除ã—ã¦ãã ã•ã„)"
-
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
-msgstr "「使用ã€ã§é™ã‚Šã‚‹"
+msgstr "「使用ã€ã‚­ãƒ¼ã§é™ã‚Šã‚‹"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "「ジャンプã€äºŒå›žæŠ¼ã—ã§é£›è¡Œãƒ¢ãƒ¼ãƒ‰"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "後退"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "キーãŒé‡è¤‡ã—ã¦ã„ã¾ã™"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "ãƒãƒ£ãƒƒãƒˆ"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "キー入力待ã¡"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "コマンド"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "å‰é€²"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "コンソール"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "後退"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "「ジャンプã€ã‚­ãƒ¼äºŒå›žæŠ¼ã—ã§é£›è¡Œãƒ¢ãƒ¼ãƒ‰"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "å·¦"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "è½ã¨ã™"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "å³"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "å‰é€²"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "使用"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "インベントリ"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "ジャンプ"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "スニーク"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "キーãŒé‡è¤‡ã—ã¦ã„ã¾ã™"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "è½ã¨ã™"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"æ“作設定ã§ã™ã€‚ (変更ã«å¤±æ•—ã—ãŸå ´åˆã€minetest.confã‹ã‚‰è©²å½“ã™ã‚‹è¨­å®šã‚’削除ã—ã¦ã"
+"ã ã•ã„)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "インベントリ"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "å·¦"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "ãƒãƒ£ãƒƒãƒˆ"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "スタックã®è¡¨ç¤º"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "コマンド"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "視野範囲変更"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "コンソール"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "å³"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "飛行モード"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "スニーク"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "映画風カメラ"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "高速移動モード"
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
-msgstr "映画風カメラ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "飛行モード"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "ã™ã‚ŠæŠœã‘モード"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "視野範囲変更"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "スタックã®è¡¨ç¤º"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "使用"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "å¤ã„パスワード"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "キー入力待ã¡"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "æ–°ã—ã„パスワード"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "変更"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "パスワードã®ç¢ºèª"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "変更"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "æ–°ã—ã„パスワード"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "å¤ã„パスワード"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“ï¼"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "音é‡: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "é–‰ã˜ã‚‹"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "左ボタン"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "中ボタン"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "音é‡: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "å³ãƒœã‚¿ãƒ³"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "アプリ"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Xボタン1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr ":"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "戻るキー"
-#: src/keycode.cpp:224
-msgid "Clear"
-msgstr "消ã™"
-
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "エンター"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "タブ"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Xボタン2"
-
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Capital"
msgstr "Caps Lock"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "クリア"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr ","
+
+#: src/keycode.cpp
msgid "Control"
-msgstr "コントロール"
+msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "ã‹ãª"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "変æ›"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "メニュー"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "ãƒãƒ¼ã‚º"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "下"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "エンド"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "変æ›"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "実行キー"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Finalキー"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "ヘルプ"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junjaキー"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "ã‹ãª"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "åŠè§’/全角"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "無変æ›"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "終了"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "左ボタン"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "å·¦Ctrl"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "モード変更"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "左メニュー"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Page Down"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "å·¦Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Page Up"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "å·¦Windows"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "スペース"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "メニュー"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "下"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "中ボタン"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "実行キー"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "-"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "å°åˆ·ã‚­ãƒ¼"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "モード変更"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "é¸æŠžã‚­ãƒ¼"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Page Down"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "上"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "無変æ›"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "ヘルプ"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "テンキー *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Snapshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "テンキー +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "å·¦Windows"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "テンキー -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "アプリ"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "テンキー /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "テンキー 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "テンキー 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "å³Windows"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "スリープ"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "テンキー 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "テンキー 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "テンキー 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "テンキー 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "テンキー 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "テンキー 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "テンキー *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "テンキー +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "テンキー -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "テンキー /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "テンキー 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "テンキー 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEMクリア"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "å·¦Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "ãƒãƒ¼ã‚º"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "å³Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "."
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "å·¦Ctrl"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "プラス"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "左メニュー"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "å°åˆ·ã‚­ãƒ¼"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Page Up"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "エンター"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "å³ãƒœã‚¿ãƒ³"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "å³Ctrl"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "å³ãƒ¡ãƒ‹ãƒ¥ãƒ¼"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "読点"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "å³Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "-"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "å³Windows"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "."
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "プラス"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "é¸æŠžã‚­ãƒ¼"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr ":"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "スリープ"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Snapshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "スペース"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "タブ"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "上"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Xボタン1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Xボタン2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "ズーム"
-#~ msgid " MB/s"
-#~ msgstr " MB/秒"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"(X,Y,Z)『スケールã€ã®å˜ä½ã®ä¸–界センターã‹ã‚‰ã®ãƒ•ãƒ©ã‚¯ã‚¿ãƒ«ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã€‚\n"
+"å‹•ãã«ä½Žã„土地ã®é©å½“ãªåµåŒºåŸŸã‚’使ã‚ã‚Œã¾ã™ï¼ˆ0ã€0)。\n"
+"デフォルトã¯mandelbrotセットã«é©ã—ã¦ã„ã¾ã™ã€ãã‚Œã¯juliaセットã®ãŸã‚ã«ç·¨é›†ã•ã‚Œ"
+"ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚\n"
+"ãŠã‚ˆã-2~2変動ã—ã¦ãã ã•ã„。ノードã§ã‚ªãƒ•ã‚»ãƒƒãƒˆã®ãŸã‚ã«ã€Žã‚¹ã‚±ãƒ¼ãƒ«ã€ã«ã‚ˆã£ã¦å¢—"
+"ãˆã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = æ–œé¢æƒ…報付ãã®è¦–å·®é®è”½ãƒžãƒƒãƒ”ング(高速)。\n"
+"1 = リリーフマッピング(正確ã ãŒä½Žé€Ÿ)。"
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "立体ãªé›²"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3Dモード"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3Dサãƒãƒ¼ãƒˆ\n"
+"サãƒãƒ¼ãƒˆã—ã¦ã„る出力:\n"
+"- none: 3D出力を行ã„ã¾ã›ã‚“。\n"
+"- anaglyph: 赤/é’ã®è‰²ã«ã‚ˆã‚‹3Dã§ã™ã€‚\n"
+"- interlaced: å¶æ•°/奇数ã®ãƒ©ã‚¤ãƒ³ã‚’ベースã§åå…‰å¼ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã«å¯¾å¿œã—ã¦ã„ã¾"
+"ã™ã€‚\n"
+"- topbottom: ç”»é¢ã‚’上下ã§åˆ†å‰²ã—ã¾ã™ã€‚\n"
+"- sidebyside: ç”»é¢ã‚’å·¦å³ã§åˆ†å‰²ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"æ–°è¦ãƒžãƒƒãƒ—を作æˆã™ã‚‹éš›ã®åˆæœŸã‚·ãƒ¼ãƒ‰å€¤ã§ã™ã€‚空ã«ã™ã‚‹ã¨ãƒ©ãƒ³ãƒ€ãƒ ã«è¨­å®šã•ã‚Œã¾"
+"ã™ã€‚\n"
+"ワールドを新è¦ä½œæˆã™ã‚‹éš›ã«ã‚·ãƒ¼ãƒ‰å€¤ã‚’入力ã™ã‚‹ã¨ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "サーãƒã‚¯ãƒ©ãƒƒã‚·ãƒ¥æ™‚ã«å…¨ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "サーãƒçµ‚了時ã«å…¨ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "エマージキューã®çµ¶å¯¾çš„ãªåˆ¶é™å€¤"
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "空中ã§ã®åŠ é€Ÿ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "アクティブãªãƒ–ロックã®ç¯„囲"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier 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 ""
+"接続先ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚\n"
+"ローカルサーãƒã‚’èµ·å‹•ã™ã‚‹éš›ã¯ç©ºç™½ã«è¨­å®šã—ã¦ãã ã•ã„。\n"
+"メインメニューã®ã‚¢ãƒ‰ãƒ¬ã‚¹æ¬„ã¯ã€ã“ã®è¨­å®šã‚’上書ãã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"4kスクリーンãªã©ã®ãŸã‚ã®ã€ç”»é¢ã®è§£åƒåº¦ã®è¨­å®šã§ã™ (éžX11/Android環境ã®ã¿)。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"å…‰ã®ãƒ†ãƒ¼ãƒ–ルã®ã‚¬ãƒ³ãƒžè£œæ­£ã‚’調整ã—ã¾ã™ã€‚数値ãŒä½Žããªã‚‹ã»ã©æ˜Žã‚‹ããªã‚Šã¾ã™ã€‚\n"
+"ã“ã®è¨­å®šã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”¨ã§ã‚ã‚Šã€ã‚µãƒ¼ãƒã®è¨­å®šã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "詳細"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude Chill"
+msgstr "高所ã®å¯’ã•"
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "飛行時ã«åŠ é€Ÿã™ã‚‹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Ambient occlusion gamma"
+msgstr "アンビエントオクルージョンガンマ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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
+#, fuzzy
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"公開サーãƒã®é€šçŸ¥å…ˆã®ã‚µãƒ¼ãƒä¸€è¦§ã§ã™ã€‚\n"
+"IPv6アドレスを通知ã—ãŸã„å ´åˆã¯ã€serverlist_url = v6.servers.minetest.netを使"
+"用ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "ノードã«ãŠã‘るフラクタルã®ãŠãŠã‚ˆãã®(X,Y,Z)ã®å¤§ãã•ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "クラッシュ後ã«å†æŽ¥ç¶šã‚’促ã™"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Automaticaly report to the serverlist."
+msgstr "自動的ã«ã‚µãƒ¼ãƒä¸€è¦§ã«å ±å‘Šã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "後キー"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+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 "Bilinear filtering"
+msgstr "ãƒã‚¤ãƒªãƒ‹ã‚¢ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "フルスクリーンモードã§ã®1ピクセル(色深度)ã‚ãŸã‚Šã®ãƒ“ット数。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Build inside player"
+msgstr "プレイヤーã®ä½ç½®ã«è¨­ç½®"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "ãƒãƒ³ãƒ—マッピング"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera smoothing"
+msgstr "滑らã‹ãªã‚«ãƒ¡ãƒ©"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera smoothing in cinematic mode"
+msgstr "映画風モードã§ã®ã‚«ãƒ¡ãƒ©ã®æ»‘らã‹ã•"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Camera update toggle key"
+msgstr "カメラ更新切り替ãˆã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave noise #1"
+msgstr "洞窟ノイズ#1"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave noise #2"
+msgstr "洞窟ノイズ#2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "洞窟やトンãƒãƒ«ã¯2ã¤ã®ãƒŽã‚¤ã‚ºã®äº¤å·®éƒ¨åˆ†ã«å½¢æˆã•ã‚Œã¾ã™"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "ãƒãƒ£ãƒƒãƒˆã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "ãƒãƒ£ãƒƒãƒˆãƒˆã‚°ãƒ«ã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"9ã¤ã®å½¢å¼ã‹ã‚‰ãªã‚‹18ã®ãƒ•ãƒ©ã‚¯ã‚¿ãƒ«ã®é¸æŠžã€‚\n"
+"1 = 4D 「Roundy〠マンデルブロ集åˆã€‚\n"
+"2 = 4D 「Roundy〠ジュリア集åˆã€‚\n"
+"3 = 4D \"Squarry\" マンデルブロ集åˆã€‚\n"
+"4 = 4D \"Squarry\" julia set.\n"
+"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" julia set.\n"
+"7 = 4D \"Variation\" mandelbrot set.\n"
+"8 = 4D \"Variation\" julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
+"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" julia set.\n"
+"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
+"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" julia set."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "ãƒãƒ£ãƒ³ã‚¯ã‚µã‚¤ã‚º"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "映画風モード"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "映画風モード切り替ãˆã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "テクスãƒãƒ£ã®é€éŽã‚’削除"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "クライアントã¨ã‚µãƒ¼ãƒ"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "上る速度"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "雲ã®é«˜ã•"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "雲ã®åŠå¾„"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "雲"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "雲ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã§æç”»ã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "メニューã«é›²"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "色ã¤ãã®éœ§"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"æµè¡Œã®æœ€å…ˆç«¯ã®å®‰å…¨å¯¾ç­–ãŒã‚ªãƒ³ã®ï¼ˆrequest_insecure_environment()を通ã—ã¦ï¼‰ã¨"
+"ãã§ã‚‚ã€ä¸å®‰å®šãªæ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã‚‚よã„信用ã•ã‚ŒãŸãƒ¢ãƒƒã‚ºã®ã‚³ãƒ³ãƒžã§åŒºåˆ‡ã‚‰ã‚ŒãŸ"
+"リスト。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Comma-seperated 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(彼らãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«å‡ºå…¥ã‚Šã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’アップロードã—ã¦ã€ãƒ€ã‚¦ãƒ³"
+"ロードã™ã‚‹ã®ã‚’許ã—ã¾ã™ï¼‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã‚‚よã„モッズã®ã‚³ãƒ³ãƒžseperatedã•ã‚ŒãŸãƒªã‚¹"
+"ト。"
+
+#: 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
+#, fuzzy
+msgid "Connects glass if supported by node."
+msgstr "ノードãŒå¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¬ãƒ©ã‚¹ã‚’繋ãŽã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "コンソールアルファ"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "コンソール色"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "コンソールキー"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Continuous forward"
+msgstr "オートラン"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Continuous forward movement (only used for testing)."
+msgstr "オートラン (テスト用)。"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "æ“作"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"昼夜交代ã®é•·ã•ã‚’制御ã—ã¾ã™ã€‚\n"
+"例: 72 = 20分ã€360 = 4分ã€1 = 24時間ã€0 = 時間ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"ç ‚æ¼ ã®è¦åˆ¶ã‚µã‚¤ã‚ºã¨Mapgen v6ã®ãƒ“ーãƒã€‚\n"
+"snowbiomesãŒè¨±å¯ã•ã‚Œã‚‹ã¨ãã€ã€Žmgv6_freq_desertã€ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls steepness/depth of lake depressions."
+msgstr "湖底ã®é™ºã—ã•/æ·±ã•ã®è¨­å®šã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls steepness/height of hills."
+msgstr "丘ã®é™ºã—ã•/高ã•ã®è¨­å®šã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "クラッシュメッセージ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"洞窟ã«äºˆæ¸¬ä¸å¯èƒ½ãªæº¶å²©ã‚’生æˆã—ã¾ã™ã€‚\n"
+"ã“ã‚Œã«ã‚ˆã£ã¦æŽ¡æŽ˜ã‚’難ã—ãã§ãã¾ã™ã€‚ゼロを指定ã™ã‚‹ã¨ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚(0-10)"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"洞窟ã«äºˆæ¸¬ä¸å¯èƒ½ãªæ°´ã‚’生æˆã—ã¾ã™ã€‚\n"
+"ã“ã‚Œã«ã‚ˆã£ã¦æŽ¡æŽ˜ã‚’難ã—ãã§ãã¾ã™ã€‚ゼロを指定ã™ã‚‹ã¨ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚(0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "照準ã®é€éŽåº¦"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "照準線ã®é€éŽ (ä¸é€æ˜Žæ€§ã€0ã‹ã‚‰255)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "照準線ã®è‰²"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Crosshair color (R,G,B)."
+msgstr "照準線ã®è‰² (Rã€Gã€B)。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Crouch speed"
+msgstr "ã—ゃãŒã¿çŠ¶æ…‹ã®é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "ダメージ"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "デãƒãƒƒã‚°æƒ…報切り替ãˆã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "デãƒãƒƒã‚°ãƒ­ã‚°ã®ãƒ¬ãƒ™ãƒ«"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dedicated server step"
+msgstr "サーãƒã®ã‚¹ãƒ†ãƒƒãƒ—"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default acceleration"
+msgstr "標準ã®åŠ é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "標準ゲーム"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+"æ–°ã—ã„ワールドを作æˆã™ã‚‹éš›ã®æ¨™æº–ã®ã‚²ãƒ¼ãƒ ã§ã™ã€‚\n"
+"メインメニューã§ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’作æˆã™ã‚‹éš›ã«ä¸Šæ›¸ãã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "既定パスワード"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "標準権é™"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"cURL(ミリ秒ã«è¿°ã¹ã‚‰ã‚Œã‚‹ï¼‰ã®ãŸã‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚\n"
+"cURLã§ç·¨é›†ã•ã‚Œã‚‹ãªã‚‰ã°ã€å½±éŸ¿ã‚’æŒã£ã¦ã„ã‚‹ã ã‘ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr "ブロック(0無制é™ã®=)ã§ã€æœ€å¤§é™ã®ãƒ—レーヤー移転è·é›¢ã‚’定ã‚ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "ツールãƒãƒƒãƒ—を表示ã™ã‚‹ã¾ã§ã®é…延ã§ã™ã€‚ミリ秒ã§æŒ‡å®šã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Deprecated Lua API handling"
+msgstr "廃止予定ã®Lua APIã®å‡¦ç†"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Depth below which you'll find large caves."
+msgstr "ã‚ãªãŸãŒå¤§ããªæ´žç©´ã‚’見ã¤ã‘ã‚‹æ·±ã•ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Depth below which you'll find massive caves."
+msgstr "ã‚ãªãŸãŒå¤§ãã„洞穴を見ã¤ã‘ã‚‹æ·±ã•ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Descending speed"
+msgstr "é™ã‚Šã‚‹é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr "サーãƒã®èª¬æ˜Žã§ã™ã€‚プレイヤーãŒã‚µãƒ¼ãƒä¸€è¦§ã‹ã‚‰æŽ¥ç¶šã™ã‚‹éš›ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Desynchronize block animation"
+msgstr "ブロックã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®éžåŒæœŸåŒ–"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "詳細ãªModã®ãƒ—ロファイルデータã§ã™ã€‚Mod開発者ã«ä¾¿åˆ©ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Detailed mod profiling"
+msgstr "詳細ãªModã®ãƒ—ロファイル化"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"地形形を決定ã—ã¾ã™ã€‚\n"
+"ブラケットã®3番å·ã¯åœ°å½¢ã®ç›®ç››ã‚Šã‚’制御ã—ã¾ã™ã€\n"
+"3番å·ã¯åŒä¸€ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "対ãƒãƒ¼ãƒˆæ©Ÿé–¢ç„¡åŠ¹åŒ–"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disallow empty passwords"
+msgstr "空ã®ãƒ‘スワードを無効化"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "「ジャンプã€ã‚­ãƒ¼äºŒå›žæŠ¼ã—ã§é£›è¡Œãƒ¢ãƒ¼ãƒ‰ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Drop item key"
+msgstr "アイテムをæ¨ã¦ã‚‹ã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dump the mapgen debug infos."
+msgstr "マップ生æˆã®ãƒ‡ãƒãƒƒã‚°æƒ…報を出力ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "有効化"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Modã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’有効化"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable players getting damage and dying."
+msgstr "æ害を得ã¦ã„ã¦ã€æ­»ã‚“ã§ã„るプレーヤーを使用å¯èƒ½ã«ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+"入力ã•ã‚Œã‚‹ï¼ˆãƒ†ã‚¹ãƒˆã®ãŸã‚ã«ä½¿ã‚れるã ã‘ã®ï¼‰ãƒ©ãƒ³ãƒ€ãƒ ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¨±å¯ã‚’与ãˆã¦ã"
+"ã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"å˜ç´”ãªå‘¨å›²ã®é–‰å¡žã§ã‚¹ãƒ ãƒ¼ã‚ºãªç…§æ˜Žã‚’使用å¯èƒ½ã«ã—ã¦ãã ã•ã„。\n"
+"速度ã®ãŸã‚ã«ã€ã¾ãŸã¯ã€ç•°ãªã‚‹ãƒ«ãƒƒã‚¯ã‚¹ã®ãŸã‚ã«åƒã‹ãªãã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"ã¤ãªãŒã‚‹ã“ã¨ã‹ã‚‰å¤ã„クライアントをèªã‚ãªã„ã®ã‚’å¯èƒ½ã«ã—ã¦ãã ã•ã„。\n"
+"æ–°ã—ã„サーãƒãƒ¼ã«æŽ¥ç¶šã™ã‚‹ã¨ã彼らãŒå®Œæ•—ã—ãªã„ã¨ã„ã†ç‚¹ã§ã€å¹´ä¸Šã®ä¾é ¼äººã¯äº’æ›æ€§"
+"ã‚’æŒã¡ã¾ã™ã€ã—ã‹ã—ã€å½¼ã‚‰ãŒã‚ãªãŸãŒæœŸå¾…ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®æ–°æ©Ÿèƒ½ã‚’支ãˆã‚‹ã¨ã„ã†ã‚"
+"ã‘ã§ã¯ãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"é éš”メディア・サーãƒãƒ¼ï¼ˆã‚µãƒ¼ãƒãƒ¼ã§æä¾›ã•ã‚Œã‚‹ãªã‚‰ã°ï¼‰ã®ä½¿ç”¨æ³•ã‚’イãƒãƒ¼ãƒ–ルã—ã¦"
+"ãã ã•ã„。\n"
+"サーãƒãƒ¼ã«æŽ¥ç¶šã™ã‚‹ã¨ãã€é éš”サーãƒãƒ¼ã¯ãƒ¡ãƒ‡ã‚£ã‚¢ï¼ˆä¾‹ãˆã°ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ï¼‰ã‚’ダウン"
+"ロードã™ã‚‹ã‹ãªã‚Šã‚ˆã‚Šé«˜é€Ÿé“ã‚’æä¾›ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"IPv6サーãƒãƒ¼ã‚’å‹•ã‹ã™ã“ã¨ã‚’å¯èƒ½ã«ã—ã¦/åƒã‹ãªãã—ã¦ãã ã•ã„。システム構æˆã«å¾“"
+"ã„ã€IPv6サーãƒãƒ¼ã¯ã€IPv6クライアントã«åˆ¶é™ã•ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。\n"
+"bind_addressãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ãªã‚‰ã°ã€ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables animation of inventory items."
+msgstr "インベントリã®ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’有効ã«ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"テクスãƒãƒ£ãƒ¼ã®ãŸã‚ã«bumpmappingã™ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚ノル悪地図ã¯ãƒ†ã‚¯ã‚¹"
+"ãƒãƒ£ãƒ¼ãƒ»ãƒ‘ックã§ä¾›çµ¦ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã€è‡ªå‹•ç™ºç”Ÿã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚\n"
+"許å¯ã•ã‚Œã‚‹ã“ã¨ã‚’é®å…‰ç‰©ã«è¦æ±‚ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables caching of facedir rotated meshes."
+msgstr "facedir回転ã™ã‚‹ãƒ¡ãƒƒã‚·ãƒ¥ã®ã‚­ãƒ£ãƒƒã‚·ãƒ³ã‚°ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "ミニマップを有効ã«ã™ã‚‹ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "ミニマップを有効ã«ã™ã‚‹ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"自動的ã«ãã®å ´ã§ã€ãƒŽãƒ«æ‚ªåœ°å›³ç”Ÿæˆï¼ˆå½±éŸ¿ã«æµ®å½«ã‚Šã—ã¾ã™ï¼‰ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚\n"
+"許å¯ã•ã‚Œã‚‹ãŸã‚ã«bumpmappingã™ã‚‹ã“ã¨ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"視差オクルージョンマッピングを有効ã«ã—ã¾ã™ã€‚\n"
+"シェーダーãŒæœ‰åŠ¹ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"0より高ã„æ•°ã«è¨­å®šã•ã‚Œã‚‹ã¨ãã€å®Ÿé¨“çš„ãªã‚ªãƒ—ションã¯ãƒ–ロックã®é–“ã®è¦‹ãˆã‚‹éš™é–“を引"
+"ãèµ·ã“ã™ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "FPS in pause menu"
+msgstr "ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®FPS"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "FSAA"
+msgstr "アンãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fall bobbing"
+msgstr "è½ä¸‹ã«ã‚ˆã‚‹ä¸Šä¸‹ã®æºã‚Œ"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ã‚©ãƒ³ãƒˆ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font shadow"
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ã‚©ãƒ³ãƒˆã®å½±"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font shadow alpha"
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ã‚©ãƒ³ãƒˆã®å½±ã®é€éŽ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font size"
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ã‚©ãƒ³ãƒˆã®å¤§ãã•"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fast key"
+msgstr "高速移動キー"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fast mode acceleration"
+msgstr "高速モードã®åŠ é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fast mode speed"
+msgstr "高速モードã®é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fast movement"
+msgstr "高速移動"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"高速移動 (使用キー)。\n"
+"サーãƒã«ã‚ˆã‚‹ã€Œfastã€æ¨©é™ãŒå¿…è¦ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Field of view"
+msgstr "視野"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Field of view in degrees."
+msgstr "視野角。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"マルãƒãƒ—レーヤー・タブã§ç¤ºã•ã‚Œã‚‹ã‚ãªãŸã®å¤§å¥½ããªã‚µãƒ¼ãƒãƒ¼ã‚’å«ã‚€client/"
+"serverlist/ã§ãƒ•ã‚¡ã‚¤ãƒ«ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Filler Depth"
+msgstr "è©°ã‚物深ã•"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Filmic tone mapping"
+msgstr "映画トーン・マッピング"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+"フィルタ処ç†ã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã¯ã€é€æ˜Žãªãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã«æš—ã„ã‹æ˜Žã‚‹ã„端ã«çµ‚ã‚ã£"
+"ã¦ã€RGBã®ä¾¡å€¤ã¨å®Œå…¨ã«é€æ˜Žãªéš£äººï¼ˆãれをPNGオプティマイザーã¯é€šå¸¸æ¨ã¦ã¾ã™ï¼‰"
+"ã‚’ã€æ™‚々混ãœåˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚テクスãƒãƒ£ãƒ¼è·æ™‚é–“ã«ãれをãã‚Œã„ã«ã™ã‚‹ãŸ"
+"ã‚ã«ã€ã“ã®ãƒ•ã‚£ãƒ«ã‚¿ã‚’使用ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "フィルタリング"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fixed map seed"
+msgstr "固定マップシード値"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "飛行キー"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Flying"
+msgstr "飛行"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fog"
+msgstr "霧"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fog toggle key"
+msgstr "霧切り替ãˆã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font path"
+msgstr "フォントパス"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font shadow"
+msgstr "フォントã®å½±"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Font shadow alpha"
+msgstr "フォントã®å½±ã®é€éŽ"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "å‰ã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "全画é¢è¡¨ç¤º"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "メニューã®å¤§ãã•"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "グラフィック"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "Mod"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Mapblock (16ノード) æ•°ã§ã‚ªãƒ–ジェクトã®ãƒ­ãƒ¼ãƒ‰ã‚„ABMã®å®ŸåŠ¹ç­‰ã®æœ‰åŠ¹ã‚¨ãƒªã‚¢ã‚’指定。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "ゲーム"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "左キー"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "メインメニューMod管ç†"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "メインメニュースクリプト"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "マップ生æˆå"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "マップ生æˆã®ãƒ‡ãƒã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "マップ生æˆãƒ•ãƒ©ã‚°"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "マップ生æˆå"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "ワールドタイプ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "ワールドタイプ"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "ワールドタイプ"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "ワールドタイプ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "ワールドタイプ"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr "ファイルダウンロード (例: Modã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰)ã®æœ€å¤§çµŒéŽæ™‚間。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "メニュー"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "ミップマッピング"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ングモード"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "視差é®è”½ãƒžãƒƒãƒ”ング"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "プレイヤå"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "å³ã‚­ãƒ¼"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "ç”»é¢é«˜"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "ç”»é¢å¹…"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "スクリーンショット"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "スクリーンショット"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 "Security"
+msgstr "セキュリティ"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "ノードé¸æŠžç·šã®è‰²"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "ノードé¸æŠžç·šã®å¹…"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "サーム/ シングルプレイヤー"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "サーãƒURL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "サーãƒã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "サーãƒãƒãƒ¼ãƒˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "サーãƒå"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "サーãƒãƒãƒ¼ãƒˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "サーãƒä¸€è¦§URL"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "サーãƒä¸€è¦§ãƒ•ã‚¡ã‚¤ãƒ«"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "滑らã‹ãªç…§æ˜Ž"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "スニークキー"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "サウンド"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "ノーマルマップã®ç”Ÿæˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "テクスãƒãƒ£ãƒ‘ス"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "トリリニアフィルタリング"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "使用キー"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Mod開発ã«ä¾¿åˆ©ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "ビデオドライãƒ"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "音é‡"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "æ­©ã速度"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "テクスãƒãƒ£ã‚’設定中..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "æ°´ä½"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "ワールドã®æ°´é¢ã®é«˜ã•ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "æºã‚Œã‚‹ãƒŽãƒ¼ãƒ‰"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "æºã‚Œã‚‹è‘‰"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "æºã‚Œã‚‹è‰èŠ±"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "æºã‚Œã‚‹æ°´"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "æ°´ã®æºã‚Œã‚‹é«˜ã•"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "æ°´ã®æºã‚Œã‚‹ä¸ˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "æ°´ã®æºã‚Œã‚‹é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"ã©ã“ã§ãƒžãƒƒãƒ—生æˆã‚’åœæ­¢ã™ã‚‹ã‹ã®è¨­å®šã§ã™ã€‚\n"
+"注æ„:\n"
+"- 最大ã§31000ã§ã™(ã“れ以上ã«è¨­å®šã—ã¦ã‚‚効果ã¯ã‚ã‚Šã¾ã›ã‚“)。\n"
+"- マップ生æˆã¯80x80x80ノードã®ã‚°ãƒ«ãƒ¼ãƒ—ã§å‹•ä½œã—ã¾ã™ (5x5x5マップブロッ"
+"ク)。\n"
+"- ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯åŽŸç‚¹ã‹ã‚‰-32ã€-32ノードã®ã‚ªãƒ•ã‚»ãƒƒãƒˆãŒã‚ã‚Šã¾ã™ã€‚\n"
+"- グループã¯map_generation_limit内ã§ç”Ÿæˆã•ã‚ŒãŸã‚‚ã®ã«é™ã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+"Freetypeフォントを利用ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™ã€‚Freetypeをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ“ルドã§"
+"ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: 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 ""
+"視界ã®ç¯„囲ã«é–¢ã‚らãšã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒ—レイヤーを表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™ã€‚\n"
+"éžæŽ¨å¥¨ã§ã™ã€‚player_transfer_distance instead設定を利用ã—ã¦ãã ã•ã„。"
+
+#: 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 ""
+"(LuaãŒ)クラッシュã—ãŸéš›ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å†æŽ¥ç¶šã‚’è¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™ã€‚\n"
+"サーãƒãŒè‡ªå‹•ã§å†èµ·å‹•ã•ã‚Œã‚‹ã‚ˆã†ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹ãªã‚‰ã°trueã«è¨­å®šã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "å¯è¦–領域ã®ç«¯ã«éœ§ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+"クライアントã®ãƒ‡ãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™(F5を押ã™ã®ã¨åŒã˜åŠ¹"
+"果)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "ウィンドウ幅ã®åˆæœŸå€¤ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "ノードをé¸æŠžã—ãŸéš›ã«è¡¨ç¤ºã•ã‚Œã‚‹ç·šã®å¹…ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+"ワールドをä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™(å…¨ã¦ã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã¯ã“ã“ã«ä¿å­˜ã•ã‚Œã¾ã™)。\n"
+"メインメニューã‹ã‚‰é–‹å§‹ã™ã‚‹å ´åˆå¿…è¦ã‚ã‚Šã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Y of flat ground."
+msgstr "フラットマップã®åœ°é¢ã®é«˜ã•"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr "大ãã„擬似ランダム洞窟ã®é«˜ã•(Y)ã®ä¸Šé™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "cURLファイルダウンロードタイムアウト"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "cURLパラレル制é™"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURLタイムアウト"
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "テクスãƒãƒ£èª­ã¿è¾¼ã¿ä¸­..."
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "シングルプレイヤーã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’リセット"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "メニューã®å¤§ãã•ã¨ã—ã¦è¨­å®šã•ã‚Œã¦ã„る数値: "
+
+#~ msgid "Touch free target"
+#~ msgstr "タッãƒä½ç½®ã‚’自由ã«ã™ã‚‹"
#~ msgid " KB/s"
#~ msgstr " KB/秒"
-#~ msgid "Fly mode"
-#~ msgstr "飛行モード"
+#~ msgid " MB/s"
+#~ msgstr " MB/秒"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "ドライãƒãƒ¼ã‚’変更ã™ã‚‹ãŸã‚Minetestã‚’å†èµ·å‹•ã—ã¾ã™"
+
+#~ msgid "Rendering:"
+#~ msgstr "レンダリング:"
+
+#~ msgid "If enabled, "
+#~ msgstr "有効化ã®å ´åˆ "
+
+#~ msgid "If disabled "
+#~ msgstr "無効化ã®å ´åˆ "
+
+#~ msgid "No!!!"
+#~ msgstr "ã„ã„ãˆï¼ï¼ï¼"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "ノーマルマップã®ç”Ÿæˆ"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "公開サーãƒä¸€è¦§"
+
+#~ msgid "No of course not!"
+#~ msgstr "ã„ã„ãˆï¼"
diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po
new file mode 100644
index 000000000..522433c1a
--- /dev/null
+++ b/po/jbo/minetest.po
@@ -0,0 +1,4120 @@
+# Language jbo translations for minetest package.
+# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# Automatically generated, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-08 17:39+0000\n"
+"Last-Translator: senpi <saikos@openmailbox.org>\n"
+"Language-Team: Lojban "
+"<https://hosted.weblate.org/projects/minetest/minetest/jbo/>\n"
+"Language: jbo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.7-dev\n"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured in a Lua script, such as a mod:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occured:"
+msgstr "lo selsrera cu pu fasnu:"
+
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "Main menu"
+msgstr "lo ralju"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
+msgid "Ok"
+msgstr "je'e"
+
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "Reconnect"
+msgstr "samjongau"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "le samse'u cu pu cpedu lo nu samjongau"
+
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
+msgstr ".i ca'o samymo'i"
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "le ve judrnporte favatcini na mapti"
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "le samci'ejudri cu jitro lo du'u ve judrnporte favytcini li $1"
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "fitytoltu'i"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+#, fuzzy
+msgid "Depends:"
+msgstr "nitcu"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "rejgau"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "selpli"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ".i lo munje me'e la'o gy.$1.gy. cu zasti"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "zbasu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "le munje ke cunso namcu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ".i .e'unai la'o gy.Minimal Development Test.gy. cu tutci le finti"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "munje cmene"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ".i xu do je'u djica lo nu vimcu la'o gy.$1.gy."
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "vimcu"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ".i xu do djica lo nu vimcu lo munje be me'e zoi gy.$1.gy."
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "fitytu'i"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
+#, fuzzy
+msgid "Disabled"
+msgstr "selpli"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "selpli"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "$1 moi le'i papri poi ke'a $1 mei"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "sisku"
+
+#: builtin/mainmenu/store.lua
+#, fuzzy
+msgid "Shortname:"
+msgstr "tordu cmene"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "kalsa"
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "lo finti liste"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr ""
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
+msgstr "lo samjudri jo'u judrnporte"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "lo samtciselse'u"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "samjongau"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "le nu finti kelci"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "lo cmene .e lo lerpoijaspu"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "le nu finti kelci"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "lo cmene .e lo lerpoijaspu"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "cnino"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr ".i lo no munje cu puzi zbasu gi'a cuxna"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
+msgstr "lo judrnporte"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "gubni"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#, fuzzy
+msgid "Select World:"
+msgstr "cuxna lo munje"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "lo samtcise'u"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "lo samtcise'u judrnporte"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "cfari fa lo nu kelci"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "3D Clouds"
+msgstr "le bliku dilnu"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced 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 ".i xu do je'u djica lo nu kraga'igau le do za'e pavykelci munje"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bilinear Filter"
+msgstr "lo puvyrelyli'iju'e"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "lo puvrmipmepi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "lo jorne blaci"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "lo tolkli pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Mipmap"
+msgstr "lo puvrmipmepi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "na go'i"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Mipmap"
+msgstr "lo puvrmipmepi"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "lo xutla se gusni"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "lo xutla se gusni"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "lo puvrmipmepi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "lo tolkli pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "lo tolkli djacu"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "lo kantu"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "lo ti'orkemsamtci"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "lo sampu pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "lo xutla se gusni"
+
+#: 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 ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tone Mapping"
+msgstr "lo puvrmipmepi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "lo puvycibli'iju'e"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Leaves"
+msgstr "lo melbi pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Plants"
+msgstr "lo melbi pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Water"
+msgstr "lo melbi pezli"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "go'i"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "lo ralju"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "pa kelci"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr ""
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr ""
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr ""
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr ".i ca'o samymo'i le tengu datnyvei"
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "gafygau lo lerpoijaspu"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr ".i ca'o troci lo za'i samjo'e lo samse'u"
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "ranji"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ".i lo samtciselse'u cu se zbasu"
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr ".i lo samtcise'u cu se zbasu"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "tolcfagau"
+
+#: src/game.cpp
+#, fuzzy
+msgid "Item definitions..."
+msgstr ".i ca'o samymo'i tu'a le dacti"
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/game.cpp
+#, fuzzy
+msgid "Node definitions..."
+msgstr ".i ca'o samymo'i tu'a lo me la'o gy.node.gy."
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr ".i ca'o troci lo nu facki lo samjudri"
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "gasnu lo nu mi tolcanci"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/game.cpp
+msgid "You died."
+msgstr ".i do pu morsi"
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+#, fuzzy
+msgid "ok"
+msgstr "je'e"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "za'i ti'a muvdu"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "samta'a"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "minde"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "mu'e falcru"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "za'i ca'u muvdu"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "lo dacti uidje"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "mu'e plipe"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "za'i zu'e muvdu"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "mu'e cuxna fi le'i se kuspe"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "za'i ri'u muvdu"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "za'i masno cadzu"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "mu'e co'a jonai mo'u sutra"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "mu'e co'a jonai mo'u vofli"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "mu'e pilno"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "ko da'ergau le batke"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "gafygau"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "le rapli lerpoijaspu"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "lo cnino lerpoijaspu"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "lo slabu lerpoijaspu"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ".i lo lerpoijaspu na mintu"
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "lo ni sance "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "la'o gy.Attn.gy."
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "slaka bu"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "la'o gy.CrSel.gy."
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "la'o gy.Erase OEF.gy."
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "la'o gy.ExSel.gy."
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "lo zulselpevysmacu"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "lo mijyselpevysmacu"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "vu'u bu"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "la'o gy.Mode Change.gy."
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "la'o gy.OEM Clear.gy."
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "la'o gy.PA1.gy."
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "denpa bu"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "su'i bu"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "lo prityselpevysmacu"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "la'o gy.X Button 1.gy."
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "la'o gy.X Button 2.gy."
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "le bliku dilnu"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "za'i ti'a muvdu"
+
+#: src/settings_translation_file.cpp
+msgid "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
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "lo puvyrelyli'iju'e"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr ".i ca'o troci lo nu facki lo samjudri"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "samta'a"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "le nu finti kelci"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "le nu finti kelci"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "le bliku dilnu"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "lo ralju"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "minde"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "lo jorne blaci"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr ".i ca'o troci lo za'i samjo'e lo samse'u"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "lo cnino lerpoijaspu"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "lo kantu"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "selpli"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "no"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "za'i ca'u muvdu"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "lo dacti uidje"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "mu'e plipe"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "za'i zu'e muvdu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "lo ralju"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "lo ralju"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "lo puvrmipmepi"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "mu'e cuxna fi le'i se kuspe"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "za'i ri'u muvdu"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "pa kelci"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "lo samtcise'u"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "lo samtcise'u judrnporte"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "lo samtcise'u judrnporte"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "lo samtcise'u"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "lo samtcise'u judrnporte"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "lo samtcise'u"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "lo xutla se gusni"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "za'i masno cadzu"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "lo puvycibli'iju'e"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "ko da'ergau le batke"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "lo ni sance "
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr ".i ca'o samymo'i le dacti ke tengu datnyvei"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "lo melbi pezli"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr ".i ca'o samymo'i le tengu datnyvei"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "kraga'igau le za'e pavykelci munje"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "selpli"
+
+#~ msgid "No!!!"
+#~ msgstr "nasai go'i"
+
+#~ msgid "No of course not!"
+#~ msgstr "nasai go'i"
diff --git a/po/ko/minetest.po b/po/ko/minetest.po
index 9cb920bd0..bf5ba3da9 100644
--- a/po/ko/minetest.po
+++ b/po/ko/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
"PO-Revision-Date: 2015-07-08 23:30+0200\n"
"Last-Translator: Tae Lim Kook <tkook11@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -19,615 +19,759 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2.4-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr ""
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "확ì¸"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
-msgid "Loading..."
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
msgstr ""
-#: builtin/mainmenu/common.lua:240
-msgid "Try reenabling public serverlist and check your internet connection."
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-msgid "Hide Game"
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
-msgid "Save"
-msgstr "저장"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr "취소"
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "저장"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:116
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No worldname given or no game selected"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
msgstr ""
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
msgstr ""
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: builtin/mainmenu/store.lua
+msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
msgstr ""
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:30
-msgid "Installed Mods:"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:78
-msgid "No mod description available"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
-msgid "Connect"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-msgid "Creative mode"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-msgid "Damage enabled"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
-msgid "Creative Mode"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
-msgid "Enable Damage"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
-msgid "Name/Password"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
-msgid "Port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
+#: builtin/mainmenu/tab_server.lua
msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
-msgid "Bilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:44
-msgid "Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
-msgid "Mipmap + Aniso. Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:212
+#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
-msgid "Shaders"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
-msgid "Waving Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
-msgid "Waving Plants"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr ""
-#: src/client.cpp:1721
-msgid "Loading textures..."
+#: src/client.cpp
+msgid "Connection timed out."
msgstr ""
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
+#: src/client.cpp
+msgid "Done!"
msgstr ""
-#: src/client.cpp:1743
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client.cpp
msgid "Initializing nodes..."
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/client.cpp
+msgid "Loading textures..."
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
msgstr ""
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
msgstr ""
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
msgstr ""
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
+#: src/game.cpp
+msgid "Change Keys"
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "yes"
+#: src/game.cpp
+msgid "Change Password"
+msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Connecting to server..."
msgstr ""
-#: src/game.cpp:1072
-msgid "You died."
+#: src/game.cpp
+msgid "Continue"
msgstr ""
-#: src/game.cpp:1073
-msgid "Respawn"
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
msgstr ""
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -643,503 +787,3249 @@ msgid ""
" --> place single item to slot\n"
msgstr ""
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
+#: src/game.cpp
+msgid "Exit to Menu"
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
+#: src/game.cpp
+msgid "Exit to OS"
msgstr ""
-#: src/game.cpp:1129
-msgid "Change Password"
+#: src/game.cpp
+msgid "Item definitions..."
msgstr ""
-#: src/game.cpp:1134
-msgid "Sound Volume"
+#: src/game.cpp
+msgid "KiB/s"
msgstr ""
-#: src/game.cpp:1136
-msgid "Change Keys"
+#: src/game.cpp
+msgid "Media..."
msgstr ""
-#: src/game.cpp:1139
-msgid "Exit to Menu"
+#: src/game.cpp
+msgid "MiB/s"
msgstr ""
-#: src/game.cpp:1141
-msgid "Exit to OS"
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/game.cpp
+msgid "Respawn"
msgstr ""
-#: src/game.cpp:1841
+#: src/game.cpp
msgid "Shutting down..."
msgstr ""
-#: src/game.cpp:1948
-msgid "Creating server..."
+#: src/game.cpp
+msgid "Sound Volume"
msgstr ""
-#: src/game.cpp:1984
-msgid "Creating client..."
+#: src/game.cpp
+msgid "You died."
msgstr ""
-#: src/game.cpp:2159
-msgid "Resolving address..."
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
msgstr ""
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
msgstr ""
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
+#: src/guiKeyChangeMenu.cpp
msgid "Key already in use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
msgid "Right"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
msgid "Use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
+#: src/guiPasswordChange.cpp
+msgid "Change"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
+#: src/guiVolumeChange.cpp
+msgid "Exit"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
+#: src/keycode.cpp
+msgid "Apps"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
+#: src/keycode.cpp
+msgid "Attn"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
+#: src/keycode.cpp
+msgid "Back"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
+#: src/keycode.cpp
+msgid "Capital"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
+#: src/keycode.cpp
+msgid "Clear"
msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
+#: src/keycode.cpp
+msgid "Comma"
msgstr ""
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
+#: src/keycode.cpp
+msgid "Control"
msgstr ""
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
+#: src/keycode.cpp
+msgid "Convert"
msgstr ""
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
+#: src/keycode.cpp
+msgid "CrSel"
msgstr ""
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
+#: src/keycode.cpp
+msgid "Down"
msgstr ""
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
+#: src/keycode.cpp
+msgid "End"
msgstr ""
-#: src/guiVolumeChange.cpp:119
-msgid "Exit"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Escape"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Left Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Middle Button"
msgstr ""
-#: src/keycode.cpp:223
-msgid "Right Button"
+#: src/keycode.cpp
+msgid "Minus"
msgstr ""
-#: src/keycode.cpp:223
-msgid "X Button 1"
+#: src/keycode.cpp
+msgid "Mode Change"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Back"
+#: src/keycode.cpp
+msgid "Next"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Clear"
+#: src/keycode.cpp
+msgid "Nonconvert"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Return"
+#: src/keycode.cpp
+msgid "Num Lock"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Tab"
+#: src/keycode.cpp
+msgid "Numpad *"
msgstr ""
-#: src/keycode.cpp:224
-msgid "X Button 2"
+#: src/keycode.cpp
+msgid "Numpad +"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Capital"
+#: src/keycode.cpp
+msgid "Numpad -"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Control"
+#: src/keycode.cpp
+msgid "Numpad /"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Kana"
+#: src/keycode.cpp
+msgid "Numpad 0"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Menu"
+#: src/keycode.cpp
+msgid "Numpad 1"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
+#: src/keycode.cpp
+msgid "Numpad 2"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Shift"
+#: src/keycode.cpp
+msgid "Numpad 3"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Convert"
+#: src/keycode.cpp
+msgid "Numpad 4"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Escape"
+#: src/keycode.cpp
+msgid "Numpad 5"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Final"
+#: src/keycode.cpp
+msgid "Numpad 6"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Junja"
+#: src/keycode.cpp
+msgid "Numpad 7"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
+#: src/keycode.cpp
+msgid "Numpad 8"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Nonconvert"
+#: src/keycode.cpp
+msgid "Numpad 9"
msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
+#: src/keycode.cpp
+msgid "OEM Clear"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Home"
+#: src/keycode.cpp
+msgid "PA1"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Mode Change"
+#: src/keycode.cpp
+msgid "Pause"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Next"
+#: src/keycode.cpp
+msgid "Period"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
+msgid "Plus"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Prior"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Space"
+#: src/keycode.cpp
+msgid "Return"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Down"
+#: src/keycode.cpp
+msgid "Right Button"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Execute"
+#: src/keycode.cpp
+msgid "Right Control"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Print"
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Windows"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Select"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Up"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
+#: src/keycode.cpp
+msgid "X Button 1"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Insert"
+#: src/keycode.cpp
+msgid "X Button 2"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Snapshot"
+#: src/keycode.cpp
+msgid "Zoom"
msgstr ""
-#: src/keycode.cpp:232
-msgid "Left Windows"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Apps"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 0"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 1"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Right Windows"
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Sleep"
+#: 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/keycode.cpp:234
-msgid "Numpad 2"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 3"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 5"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 6"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 7"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad *"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad +"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad -"
+#: 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/keycode.cpp:235
-msgid "Numpad /"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 8"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 9"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Num Lock"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Right Shift"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Control"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Menu"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Control"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Menu"
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Comma"
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Minus"
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Period"
+#: src/settings_translation_file.cpp
+msgid "Backward key"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Plus"
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
msgstr ""
-#: src/keycode.cpp:247
-msgid "Attn"
+#: src/settings_translation_file.cpp
+msgid "Basic"
msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Erase OEF"
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
+#: src/settings_translation_file.cpp
+msgid "Bind address"
msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Zoom"
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "yes"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
msgstr ""
diff --git a/po/ky/minetest.po b/po/ky/minetest.po
index 7eb4ec2c3..01a5910be 100644
--- a/po/ky/minetest.po
+++ b/po/ky/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
"PO-Revision-Date: 2013-06-01 18:09+0200\n"
"Last-Translator: Chynggyz Jumaliev <translatorky@lavabit.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,661 +18,801 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.4-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr ""
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "Main menu"
+msgstr "Башкы меню"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr ""
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "Reconnect"
+msgstr "Туташуу"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Жүктөлүүдө..."
-#: builtin/mainmenu/common.lua:240
-msgid "Try reenabling public serverlist and check your internet connection."
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
-#, fuzzy
-msgid "World:"
-msgstr "Дүйнөнү тандаңыз:"
-
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-#, fuzzy
-msgid "Hide Game"
-msgstr "Оюн"
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-#, fuzzy
-msgid "Depends:"
-msgstr "көз карандылыктары:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
-msgid "Save"
-msgstr "Сактоо"
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr "Жокко чыгаруу"
-#: builtin/mainmenu/dlg_config_world.lua:71
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
#, fuzzy
-msgid "Enable MP"
-msgstr "Баарын күйгүзүү"
+msgid "Depends:"
+msgstr "көз карандылыктары:"
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
msgid "Disable MP"
msgstr "Баарын өчүрүү"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
-msgstr "күйгүзүлгөн"
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "Enable MP"
+msgstr "Баарын күйгүзүү"
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
msgid "Enable all"
msgstr "Баарын күйгүзүү"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Дүйнө аты"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "Hide Game"
+msgstr "Оюн"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
-msgstr "Оюн"
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Сактоо"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "World:"
+msgstr "Дүйнөнү тандаңыз:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "күйгүзүлгөн"
-#: builtin/mainmenu/dlg_create_world.lua:63
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Жаратуу"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Оюн"
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ооба"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Дүйнө аты"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Өчүрүү"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
#, fuzzy
msgid "Delete World \"$1\"?"
msgstr "Дүйнөнү өчүрүү"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Жок"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Кабыл алуу"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Кабыл алуу"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
+#, fuzzy
+msgid "Disabled"
+msgstr "Баарын өчүрүү"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "күйгүзүлгөн"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Games"
+msgstr "Оюн"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Select path"
+msgstr "Тандоо"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
#, fuzzy
msgid "Failed to install $1 to $2"
msgstr "Дүйнөнү инициалдаштыруу катаÑÑ‹"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:162
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
#, fuzzy
msgid "Shortname:"
msgstr "Дүйнө аты"
-#: builtin/mainmenu/store.lua:472
-msgid "Rating"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
msgstr ""
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
msgstr ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
+#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "Ðлкыштар"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
#, fuzzy
msgid "Select Mod File:"
msgstr "Дүйнөнү тандаңыз:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Дареги/порту"
-
-#: builtin/mainmenu/tab_multiplayer.lua:24
-#, fuzzy
-msgid "Name / Password :"
-msgstr "ÐÑ‚Ñ‹/ÑÑ‹Ñ€Ñөзү"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Public Serverlist"
-msgstr "Жалпылык Ñерверлердин тизмеÑи:"
+msgid "Address / Port"
+msgstr "Дареги/порту"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Өчүрүү"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Туташуу"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Creative mode"
msgstr "Жаратуу режими"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Damage enabled"
msgstr "күйгүзүлгөн"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Тандалмалар:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Тандалмалар:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "ÐÑ‚Ñ‹/ÑÑ‹Ñ€Ñөзү"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "PvP enabled"
msgstr "күйгүзүлгөн"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Жаңы"
-
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "ЫраÑтоо"
-#: builtin/mainmenu/tab_server.lua:29
-#, fuzzy
-msgid "Start Game"
-msgstr "Оюнду баштоо/туташуу"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Дүйнөнү тандаңыз:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Жаратуу режими"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Убалды күйгүзүү"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Жалпылык"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "ÐÑ‚Ñ‹/ÑÑ‹Ñ€Ñөзү"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Жаңы"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Жалпылык"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Дүйнөнү тандаңыз:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: builtin/mainmenu/tab_server.lua
+#, fuzzy
+msgid "Start Game"
+msgstr "Оюнду баштоо/туташуу"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Күңүрт Ñуу"
+msgid "3D Clouds"
+msgstr "3D-булуттар"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Кооз бактар"
+msgid "Advanced Settings"
+msgstr "ЫраÑтоолор"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Бир кишилик"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Bilinear Filter"
msgstr "ЭкиÑызык чыпкалооÑу"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "ҮчÑызык чыпкалооÑу"
+msgid "Bump Mapping"
+msgstr "Mip-текÑтуралоо"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "БаÑкычтарды өзгөртүү"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Туташуу"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Күңүрт Ñуу"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap"
-msgstr ""
+msgstr "Mip-текÑтуралоо"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Жок"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Filter"
+msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Mipmap"
+msgstr "Mip-текÑтуралоо"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
msgstr "Тегиз жарык"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Бөлүкчөлөрдү күйгүзүү"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Тегиз жарык"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D-булуттар"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Water"
-msgstr "Күңүрт Ñуу"
+msgid "Normal Mapping"
+msgstr "Mip-текÑтуралоо"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Туташуу"
+msgid "Opaque Leaves"
+msgstr "Күңүрт Ñуу"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Opaque Water"
+msgstr "Күңүрт Ñуу"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Баарын күйгүзүү"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "ЫраÑтоолор"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Көлөкөлөгүчтөр"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "БаÑкычтарды өзгөртүү"
-
-#: builtin/mainmenu/tab_settings.lua:236
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Бир кишилик"
-
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+msgid "Simple Leaves"
+msgstr "Күңүрт Ñуу"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Тегиз жарык"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
-msgid "Bumpmapping"
+msgid "Tone Mapping"
msgstr "Mip-текÑтуралоо"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "ҮчÑызык чыпкалооÑу"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
-msgstr ""
+msgstr "Кооз бактар"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "ЫраÑтоолор"
+msgstr "Кооз бактар"
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Бир кишилик"
+msgid "Waving Water"
+msgstr "Кооз бактар"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ооба"
+
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Config mods"
msgstr "ЫраÑтоо"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Main"
msgstr "Башкы меню"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Start Singleplayer"
+msgstr "Бир кишилик"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Ойноо"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Бир кишилик"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr ""
-#: src/client.cpp:1721
+#: src/client.cpp
+#, fuzzy
+msgid "Connection timed out."
+msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
+
+#: src/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client.cpp
#, fuzzy
msgid "Loading textures..."
msgstr "Жүктөлүүдө..."
-#: src/client.cpp:1736
+#: src/client.cpp
#, fuzzy
msgid "Rebuilding shaders..."
msgstr "Дареги чечилүүдө..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
-
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Буюм текÑтуралары..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Оюнду табуу же жүктөө мүмкүн ÑÐ¼ÐµÑ \""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
msgstr ""
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Башкы меню"
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
-
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
-
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга Ñч нерÑе жок."
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Оюнду табуу же жүктөө мүмкүн ÑÐ¼ÐµÑ \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
msgid "needs_fallback_font"
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Улантуу"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Толугураак маалымат үчүн, debug.txt'ти текшериңиз."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Сиз өлдүңүз."
+#: src/game.cpp
+#, fuzzy
+msgid "Change Keys"
+msgstr "БаÑкычтарды өзгөртүү"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Кайтадан жаралуу"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "СырÑөздү өзгөртүү"
-#: src/game.cpp:1092
-msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
-msgstr ""
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Серверге туташтырылууда..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Улантуу"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Клиент жаратылууда..."
-#: src/game.cpp:1106
+#: src/game.cpp
+#, fuzzy
+msgid "Creating server..."
+msgstr "Сервер жаратылууда...."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -698,517 +838,3370 @@ msgstr ""
"- Чычкан дөңгөлөгү: буюмду тандоо\n"
"- T: маек\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Улантуу"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "СырÑөздү өзгөртүү"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Үн көлөмү"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "БаÑкычтарды өзгөртүү"
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Менюга чыгуу"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Оюндан чыгуу"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Оюн өчүрүлүүдө..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Сервер жаратылууда...."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Клиент жаратылууда..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Дареги чечилүүдө..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Серверге туташтырылууда..."
-
-#: src/game.cpp:2317
+#: src/game.cpp
#, fuzzy
msgid "Item definitions..."
msgstr "Буюм текÑтуралары..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/game.cpp
+msgid "KiB/s"
msgstr ""
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
+#: src/game.cpp
+msgid "Node definitions..."
msgstr ""
-"\n"
-"Толугураак маалымат үчүн, debug.txt'ти текшериңиз."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Дареги чечилүүдө..."
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Кайтадан жаралуу"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
+#: src/game.cpp
+#, fuzzy
+msgid "Shutting down..."
+msgstr "Оюн өчүрүлүүдө..."
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
-msgstr ""
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Үн көлөмү"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/game.cpp
+msgid "You died."
+msgstr "Сиз өлдүңүз."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "баÑкычты баÑыңыз"
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Улантуу"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Ðлга"
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðртка"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Солго"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Оңго"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Маек"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Колдонуу"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Команда"
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Секирүү"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "КонÑоль"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Уурданып баÑуу"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr "Ыргытуу"
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Ðлга"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr "Мүлк-шайман"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Маек"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Секирүү"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Команда"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "КонÑоль"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Учууга которуу"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Солго"
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Тез баÑууга которуу"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Оңго"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Уурданып баÑуу"
+
+#: src/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle Cinematic"
msgstr "Тез баÑууга которуу"
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
-msgstr ""
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Тез баÑууга которуу"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr ""
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Учууга которуу"
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "ЭÑки ÑÑ‹Ñ€Ñөз"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Колдонуу"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Жаңы ÑÑ‹Ñ€Ñөз"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "баÑкычты баÑыңыз"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Өзгөртүү"
+
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "СырÑөздү аныктоо"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Өзгөртүү"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Жаңы ÑÑ‹Ñ€Ñөз"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "ЭÑки ÑÑ‹Ñ€Ñөз"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "СырÑөздөр дал келген жок!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Үн көлөмү: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Чыгуу"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Сол баÑкыч"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Ортоңку баÑкыч"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Үн көлөмү: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Оң баÑкыч"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Тиркемелер"
-#: src/keycode.cpp:223
-msgid "X Button 1"
+#: src/keycode.cpp
+msgid "Attn"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Ðртка"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Тазалоо"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr ""
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr ""
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Үтүр"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Кана"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr ""
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Меню"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Пауза"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Ылдый"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Ðткаруу"
+
+#: src/keycode.cpp
msgid "Final"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Жардам"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Кана"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Кандзи"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr ""
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Сол баÑкыч"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Сол Ctrl"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Режимди өзгөртүү"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Сол меню"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Кийинки"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Сол Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr ""
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Сол Windows"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Боштук"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Меню"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Ылдый"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Ортоңку баÑкыч"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Ðткаруу"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Кемитүү белгиÑи"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "БаÑма"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Режимди өзгөртүү"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Тандоо"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Кийинки"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Өйдө"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Жардам"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Кош. клав. *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Тез Ñүрөт"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Кош. клав. +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Сол Windows"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Кош. клав. -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Тиркемелер"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Кош. клав. /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Кош. клав. 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Кош. клав. 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Оң Windows"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Уйку"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Кош. клав. 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Кош. клав. 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Кош. клав. 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Кош. клав. 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Кош. клав. 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Кош. клав. 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Кош. клав. *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Кош. клав. +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Кош. клав. -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Кош. клав. /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Кош. клав. 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Кош. клав. 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Сол Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Пауза"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Оң Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Ðйланма Ñан"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Сол Ctrl"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Кошуу белгиÑи"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Сол меню"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "БаÑма"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Оң баÑкыч"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Оң Ctrl"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Оң меню"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Үтүр"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Оң Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Кемитүү белгиÑи"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Оң Windows"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Ðйланма Ñан"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Кошуу белгиÑи"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Тандоо"
-#: src/keycode.cpp:247
-msgid "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Уйку"
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Тез Ñүрөт"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Боштук"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Өйдө"
+
+#: src/keycode.cpp
+msgid "X Button 1"
msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
+#: src/keycode.cpp
+msgid "X Button 2"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Erase OEF"
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "МаÑштаб"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "3D-булуттар"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: src/keycode.cpp:248
-msgid "Zoom"
-msgstr "МаÑштаб"
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Кошумча"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "Amplifies the valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Оюн"
+msgid "Anisotropic filtering"
+msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Games"
-#~ msgstr "Оюн"
+msgid "Backward key"
+msgstr "Ðртка"
-#~ msgid "Favorites:"
-#~ 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
#, fuzzy
-#~ msgid "Password"
-#~ msgstr "ЭÑки ÑÑ‹Ñ€Ñөз"
+msgid "Bilinear filtering"
+msgstr "ЭкиÑызык чыпкалооÑу"
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Finite Liquid"
-#~ msgstr "Чектүү Ñуюктук"
+msgid "Bind address"
+msgstr "Дареги чечилүүдө..."
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Build inside player"
+msgstr "Көп кишилик"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bumpmapping"
+msgstr "Mip-текÑтуралоо"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "БаÑкычтарды өзгөртүү"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "БаÑкычтарды өзгөртүү"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Жаратуу режими"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Жаратуу режими"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "3D-булуттар"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Башкы меню"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Команда"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Туташуу"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "Серверге туташтырылууда..."
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "КонÑоль"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "КонÑоль"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "КонÑоль"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Ctrl"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Убалды күйгүзүү"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Жаңы ÑÑ‹Ñ€Ñөз"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "Бөлүкчөлөрдү күйгүзүү"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Баарын күйгүзүү"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Убалды күйгүзүү"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Убалды күйгүзүү"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "Ðлга"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Оюн"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Мүлк-шайман"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Секирүү"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Сол меню"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Башкы меню"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Башкы меню"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Меню"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip-текÑтуралоо"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Оң меню"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Тез Ñүрөт"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Тез Ñүрөт"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Бир кишилик"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Жалпылык Ñерверлердин тизмеÑи:"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Жалпылык Ñерверлердин тизмеÑи:"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Тегиз жарык"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Уурданып баÑуу"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "ҮчÑызык чыпкалооÑу"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "баÑкычты баÑыңыз"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Үн көлөмү"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Буюм текÑтуралары..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Кооз бактар"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Жүктөлүүдө..."
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Ылдый"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Сол баÑкычы: Бардык буюмдарды ташуу, Оң баÑкычы: Бир буюмду ташуу"
+
+#~ msgid "is required by:"
+#~ msgstr "талап кылынганы:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñакталды. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "ЭÑкертүү: Туура ÑÐ¼ÐµÑ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ. "
+
+#~ msgid "Show Public"
+#~ msgstr "Жалпылыкты көрÑÓ©Ñ‚Ò¯Ò¯"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Тандалмаларды көрÑÓ©Ñ‚Ò¯Ò¯"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Жергиликтүү Ñерверди жүргүзүү үчүн даректи бош калтырыңыз."
+
+#~ msgid "Create world"
+#~ msgstr "Дүйнөнү жаратуу"
+
+#~ msgid "Address required."
+#~ msgstr "Дареги талап кылынат."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Дүнөнү жаратуу мүмкүн ÑмеÑ: Эч нерÑе тандалган жок"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Өчүрүлө турган файлдар"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Дүйнөнү жаратуу мүмкүн ÑмеÑ: Оюндар табылган жок"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Дүйнөнү ыраÑтоо мүмкүн ÑмеÑ: Эч нерÑе тандалган жок"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1235,60 +4228,26 @@ msgstr "МаÑштаб"
#~ "- ESC: бул меню\n"
#~ "- T: маек\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок"
-
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Дүйнөнү ыраÑтоо мүмкүн ÑмеÑ: Эч нерÑе тандалган жок"
-
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Дүйнөнү жаратуу мүмкүн ÑмеÑ: Оюндар табылган жок"
-
-#~ msgid "Files to be deleted"
-#~ msgstr "Өчүрүлө турган файлдар"
-
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Дүнөнү жаратуу мүмкүн ÑмеÑ: Эч нерÑе тандалган жок"
-
-#~ msgid "Address required."
-#~ msgstr "Дареги талап кылынат."
-
-#~ msgid "Create world"
-#~ msgstr "Дүйнөнү жаратуу"
-
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Жергиликтүү Ñерверди жүргүзүү үчүн даректи бош калтырыңыз."
-
-#~ msgid "Show Favorites"
-#~ msgstr "Тандалмаларды көрÑÓ©Ñ‚Ò¯Ò¯"
-
-#~ msgid "Show Public"
-#~ msgstr "Жалпылыкты көрÑÓ©Ñ‚Ò¯Ò¯"
-
-#~ msgid "Advanced"
-#~ msgstr "Кошумча"
-
-#~ msgid "Multiplayer"
-#~ msgstr "Көп кишилик"
-
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "ЭÑкертүү: Туура ÑÐ¼ÐµÑ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ. "
-
-#~ msgid "Configuration saved. "
-#~ msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñакталды. "
+#, fuzzy
+#~ msgid "Finite Liquid"
+#~ msgstr "Чектүү Ñуюктук"
-#~ msgid "is required by:"
-#~ msgstr "талап кылынганы:"
+#, fuzzy
+#~ msgid "Password"
+#~ msgstr "ЭÑки ÑÑ‹Ñ€Ñөз"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Сол баÑкычы: Бардык буюмдарды ташуу, Оң баÑкычы: Бир буюмду ташуу"
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Оюн"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "ÐÐ½Ð¸Ð·Ð°Ñ‚Ñ€Ð¾Ð¿Ð¸Ñ Ñ‡Ñ‹Ð¿ÐºÐ°Ð»Ð¾Ð¾Ñу"
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "күйгүзүлгөн"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-текÑтуралоо"
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Баарын өчүрүү"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Ылдый"
+#~ msgid "Public Serverlist"
+#~ msgstr "Жалпылык Ñерверлердин тизмеÑи:"
diff --git a/po/lt/minetest.po b/po/lt/minetest.po
index bd68c5840..9818d29d0 100644
--- a/po/lt/minetest.po
+++ b/po/lt/minetest.po
@@ -7,1219 +7,4192 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-12-11 19:23+0200\n"
-"Last-Translator: Jonas KriauÄiÅ«nas <jonukas@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2015-11-19 05:14+0000\n"
+"Last-Translator: Liudas Ališauskas <liudas@akmc.lt>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/minetest/"
+"minetest/lt/>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
"%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.5-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Klaida įvyko Lua scenarijuje, tokiame kaip papildinys:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Įvyko klaida:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Pagrindinis meniu"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Gerai"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Prisijungti iš naujo"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Serveris paprašė prisijungti iš naujo:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Įkeliama..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Neatitinka protokolo versija. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Serveris reikalauja naudoti versijos $1 protokolÄ…. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Pabandykite dar kart įjungti viešą serverių sąrašą ir patikrinkite savo "
+"interneto ryšį."
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Pasaulis:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Atsisakyti"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Priklauso:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Išjungti papildinį"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Įjungti papildinį"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Įjungti visus"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Nepavyko įjungti papildinio „$1“, nes jis turi neleistų rašmenų. Tik "
+"rašmenys [a-z0-9_] yra leidžiami."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "SlÄ—pti vidinius"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Slėpti papild. pakų turinį"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Papildinys:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Priklauso:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Įrašyti"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Atsisakyti"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Įjungti papildinį"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Išjungti papildinį"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Pasaulis:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "įjungtas"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Įjungti visus"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Pasaulis, pavadintas „$1“ jau yra"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Pasaulio pavadinimas"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Sukurti"
-#: builtin/mainmenu/dlg_create_world.lua:53
-#, fuzzy
-msgid "Seed"
-msgstr "SÄ—kla"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Atsisiųsti vieną iš minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Žaidimas"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Sukurti"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Žemėlapių generavimas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Nepateiktas joks pasaulio pavadinimas, arba nepasirinktas žaidimas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "SÄ—kla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Pasaulio pavadinimas"
-#: builtin/mainmenu/dlg_create_world.lua:68
+#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no subgames installed."
+msgstr "Neturite įdiegę sub žaidimų."
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Ar tikrai norite ištrinti „$1“?"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "IÅ¡trinti"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr "Papildtvrk: nepavyko ištrinti „$1“"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr "Papildtvrk: netinkamas papildinio kelias „$1“"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Ištrinti pasaulį „$1“?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Priimti"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Pervadinti papildinių paką:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Pasaulis, pavadintas „$1“ jau yra"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Disabled"
+msgstr "Išjungti papildinį"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "įjungtas"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Taip"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Žaidimai"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Papildiniai"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
-msgid "Modmgr: failed to delete \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
-msgid "Modmgr: invalid modpath \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
-msgid "Delete World \"$1\"?"
-msgstr "Ištrinti pasaulį „$1“?"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Ne"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
-msgid "Rename Modpack:"
-msgstr "Pervadinti papildinių paką:"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-#, fuzzy
-msgid "Accept"
-msgstr "Priimti"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
+"\n"
+"Papildinio diegimas: nepalaikomas failo tipas „$1“, arba sugadintas archyvas"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Nepavyko įdiegti $1 į $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Įdiegti papildinį: failas: „$1“"
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
-msgstr ""
+msgstr "Papildinio diegimas: nepavyksta rasti tikro pavadinimo skirto: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Papildinio diegimas: nepavyksta rasti tinkamo aplanko pavadinimo papildinio "
+"paketui $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Užverti parduotuvę"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "AtsiunÄiama $1, praÅ¡ome palaukti..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Įdiegti"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Pasaulio pavadinimas"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Puslapis $1 iš $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
-msgstr ""
-
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Įdiegti iš naujo"
+msgstr "Įvertinimas"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Įdiegti"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Ieškoti"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Trumpas pavadinimas:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Sėkmingai įdiegta:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "PadÄ—kos"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Nerikiuota"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Pagrindiniai kūrėjai"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Įdiegti iš naujo"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Aktyvūs pagalbininkai"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Pagrindiniai kūrėjai"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "PadÄ—kos"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "Ankstesni bendradarbiai"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Ankstesni pagrindiniai kūrėjai"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Įdiegti papildiniai:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Papildiniai internete"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Papildinio informacija:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Papildinio aprašymas nepateiktas"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Papildinio informacija:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Pervadinti"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Pašalinti pasirinktą papildinį"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Pašalinti pasirinktą papildinį"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Pasirinkite papildinio failÄ…:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Papildiniai"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Pašalinti pasirinktą papildinį"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Adresas/Prievadas"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Pašalinti pasirinktą papildinį"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Vardas/slaptažodis"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Viešų serverių sąrašas"
+msgid "Address / Port"
+msgstr "Adresas / Prievadas :"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "IÅ¡trinti"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Žaisti tinkle(klientas)"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Jungtis"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "KÅ«rybinÄ— veiksena"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "įjungtas"
+msgstr "Žalojimas įjungtas"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "įjungtas"
+msgid "Del. Favorite"
+msgstr "MÄ—giami:"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Žaisti tinkle(klientas)"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "MÄ—giami:"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Naujas"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Vardas / Slaptažodis :"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Konfigūruoti"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP įjungtas"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Pradėti žaidimą"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Susieti adresÄ…"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Pasirinkite pasaulį:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Konfigūruoti"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
-#, fuzzy
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "KÅ«rybinÄ— veiksena"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Leisti sužeidimus"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Viešas"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Vardas/slaptažodis"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Naujas"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nesukurtas ar pasirinktas joks pasaulis!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Prievadas"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Serverio prievadas"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Viešas"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Pasirinkite pasaulį:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Serveris"
-#: builtin/mainmenu/tab_settings.lua:21
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Serverio prievadas"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Pradėti žaidimą"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Nepermatomas vanduo"
+msgid "3D Clouds"
+msgstr "TrimaÄiai debesys"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Advanced Settings"
+msgstr "Nustatymai"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Atstatyti vieno žaidėjo pasaulį"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Nustatyti klavišus"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Jungtis"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Nepermatomi lapai"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Ne"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Smooth Lighting"
+msgid "Node Highlighting"
msgstr "Apšvietimo efektai"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Apšvietimo efektai"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Joks"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "TrimaÄiai debesys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Nepermatomi lapai"
-#: builtin/mainmenu/tab_settings.lua:208
+#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
msgstr "Nepermatomas vanduo"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "ParalaksinÄ— okliuzija"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Jungtis"
+msgid "Particles"
+msgstr "Įjungti visus"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "Šešėliavimai"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Simple Leaves"
+msgstr "Nepermatomi lapai"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Apšvietimo efektai"
-#: builtin/mainmenu/tab_settings.lua:217
+#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Shaders"
-msgstr "Šešėliai"
+msgid "Waving Leaves"
+msgstr "Nepermatomi lapai"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Taip"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "Konfigūruoti papildinius"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "Pagrindinis"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Atstatyti vieno žaidėjo pasaulį"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "Žaisti"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "Žaisti vienam"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "NÄ—ra pasiekiamos informacijos"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Pasirinkite tekstūros paketą:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Tekstūrų paketai"
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "BaigÄ—si prijungimo laikas."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Atlikta!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Inicijuojami mazgai"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicijuojami mazgai..."
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Įkeliamos tekstūros..."
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Perstatomi šešėliavimai..."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Ryšio klaida (baigėsi prijungimo laikas?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Nepavyko rasti ar įkelti žaidimo „"
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Klaidingi žaidimo nustatymai."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Pagrindinis meniu"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+"Nepasirinktas joks pasaulis ir nepateiktas joks adresas. NÄ—ra kÄ… daryti."
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Žaidėjo vardas per ilgas."
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Pateiktas pasaulio kelias neegzistuoja: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "reikia_atsarginio_Å¡rifto"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"Patikrinkite debug.txt dÄ—l papildomos informacijos."
+
+#: src/game.cpp
+msgid "Change Keys"
msgstr "Nustatyti klavišus"
-#: builtin/mainmenu/tab_settings.lua:236
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Keisti slaptažodį"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Jungiamasi prie serverio..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Tęsti"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Kuriamas klientas..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Kuriamas serveris...."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Numatytas valdymas:\n"
+"- WASD: judÄ—ti\n"
+"- Tarpas: Å¡okti/lipti\n"
+"- Lyg2: leistis/eiti žemyn\n"
+"- Q: išmesti elementą\n"
+"- I: inventorius\n"
+"- Pelė: sukti/žiūrėti\n"
+"- PelÄ—s kairys: kasti/smugiuoti\n"
+"- Pelės dešinys: padėti/naudoti\n"
+"- PelÄ—s ratukas: pasirinkti elementÄ…\n"
+"- T: kalbÄ—tis\n"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Numatytas valdymas:\n"
+"Nematomi meniu:\n"
+"- vienas palietimas: mygtukas aktyvuoti\n"
+"- dvigubas palietimas: padÄ—ti/naudoti\n"
+"- slinkti pirštu: žvalgytis aplink\n"
+"Meniu/Inventorius matomi:\n"
+"- dvigubas palietimas (išorėje):\n"
+" -->uždaryti\n"
+"- liesti rietuvÄ™, liesti angÄ…:\n"
+" --> judinti rietuvÄ™\n"
+"- liesti&tempti, liesti antru pirštu\n"
+" --> padėti vieną elementą į angą\n"
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr "Grįžti į meniu"
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "Išeiti iš žaidimo"
+
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Elemento apibrėžimai..."
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/game.cpp
+msgid "Media..."
+msgstr "Medija..."
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Mazgo apibrėžimai..."
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Ieškoma adreso..."
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Prisikelti"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "IÅ¡jungiama..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Garso lygis"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "JÅ«s numirÄ—te."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "gerai"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Įvesti"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Vykdyti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "„Naudoti“ = kopti žemyn"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Atgal"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Susirašinėti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Komanda"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Pultas"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Du kart paliesti „šokti“, kad įjungti skrydį"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Mesti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Pirmyn"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventorius"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Pašokti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Klavišas jau naudojamas"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "Klavišai. (Jei šis meniu sugenda, pašalinkite įrašus iš minetest.conf)"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "KairÄ—n"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Spausdinti rietuves"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Intervalo pasirinkimas"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Dešinėn"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "SÄ—linti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Įjungti kinematografinį"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Įjungti greitą"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Įjungti skrydį"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "Įjungti noclip"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Naudoti"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "paspauskite klavišą"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Pakeisti"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "Patvirtinti slaptažodį"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Naujas slaptažodis"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Senas slaptažodis"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Slaptažodžiai nesutampa!"
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "IÅ¡eiti"
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Garso lygis: "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Programos"
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr "Atgal"
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "SostinÄ—"
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "IÅ¡valyti"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Kablelis"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr "Valdymas"
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Konvertuoti"
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Žemyn"
+
+#: src/keycode.cpp
+msgid "End"
+msgstr "Baigti"
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "IÅ¡trinti OEF"
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr "Atšaukti"
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Vykdyti"
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr "Galutinis"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Pagalba"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Pradžia"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Įterpti"
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr "Junja"
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "Kanji"
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Kairysis mygtukas"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Kairysis Control"
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Kairysis meniu"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Kairysis Shift"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Kairieji langai"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Meniu"
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Vidurinis mygtukas"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minus"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "BÅ«senos keitimas"
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Kitas"
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "SkaitKlav *"
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "SkaitKlav +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "SkaitKlav -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "SkaitKlav /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "SkaitKlav 0"
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "SkaitKlav 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "SkaitKlav 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "SkaitKlav 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "SkaitKlav 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "SkaitKlav 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "SkaitKlav 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "SkaitKlav 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "SkaitKlav 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "SkaitKlav 9"
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM valymas"
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Periodas"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plius"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Spausdinti"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Ankstesnis"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Grįžti"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Dešinysis mygtukas"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "Dešinysis Control"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "Dešinysis meniu"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Dešinysis Shift"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Dešinieji langai"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Pasirinkti"
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift (Lyg2)"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Užmigdyti"
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Užlaikymas"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Tarpas"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabuliacija"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Aukštyn"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X mygtukas 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X mygtukas 2"
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "Pritraukti"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Žaisti vienam"
+msgid "3D clouds"
+msgstr "TrimaÄiai debesys"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: 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 ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "Atgal"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr "Ieškoma adreso..."
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Bumpmapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
-msgid "Waving Leaves"
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
-msgid "Waving Plants"
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
+#: src/settings_translation_file.cpp
+msgid "Cave width"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Nustatymai"
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Žaisti vienam"
+msgid "Chat key"
+msgstr "Nustatyti klavišus"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Config mods"
-msgstr "Konfigūruoti"
+msgid "Chat toggle key"
+msgstr "Nustatyti klavišus"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Main"
+msgid "Cinematic mode"
+msgstr "KÅ«rybinÄ— veiksena"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "KÅ«rybinÄ— veiksena"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "TrimaÄiai debesys"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
msgstr "Pagrindinis meniu"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
-msgid "Play"
-msgstr "Žaisti"
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:246
-msgid "Singleplayer"
-msgstr "Žaisti vienam"
+#: 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 ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Command key"
+msgstr "Komanda"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Jungtis"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "Jungiamasi prie serverio..."
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
-msgid "Texturepacks"
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
msgstr ""
-#: src/client.cpp:1721
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Loading textures..."
-msgstr "Įkeliama..."
+msgid "Console key"
+msgstr "Nustatyti klavišus"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
-#: src/client.cpp:1736
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "Ieškoma adreso..."
+msgid "Controls"
+msgstr "Kairysis Control"
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
msgstr ""
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Pagrindinis meniu"
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
+#: src/settings_translation_file.cpp
+msgid "Crash message"
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
msgstr ""
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
msgstr ""
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
msgstr ""
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Proceed"
-msgstr "Tęsti"
+msgid "Damage"
+msgstr "Leisti sužeidimus"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "JÅ«s numirÄ—te."
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Prisikelti"
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default game"
+msgstr "keisti žaidimą"
-#: src/game.cpp:1092
+#: src/settings_translation_file.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"
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Naujas slaptažodis"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
msgstr ""
-#: src/game.cpp:1106
+#: src/settings_translation_file.cpp
msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Tęsti"
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Keisti slaptažodį"
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
-#: src/game.cpp:1134
-msgid "Sound Volume"
+#: 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 large caves."
msgstr ""
-#: src/game.cpp:1136
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Change Keys"
-msgstr "Nustatyti klavišus"
+msgid "Enable VBO"
+msgstr "Įjungti papildinį"
-#: src/game.cpp:1139
-msgid "Exit to Menu"
-msgstr "Grįžti į meniu"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable mod security"
+msgstr "Papildiniai internete"
-#: src/game.cpp:1141
-msgid "Exit to OS"
-msgstr "Išeiti iš žaidimo"
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
-#: src/game.cpp:1841
-msgid "Shutting down..."
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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/game.cpp:1948
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Creating server..."
-msgstr "Kuriamas serveris...."
+msgid "Enables filmic tone mapping"
+msgstr "Leisti sužeidimus"
-#: src/game.cpp:1984
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Creating client..."
-msgstr "Kuriamas klientas..."
+msgid "Enables minimap."
+msgstr "Leisti sužeidimus"
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Ieškoma adreso..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Jungiamasi prie serverio..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
msgstr ""
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/settings_translation_file.cpp
+msgid "FSAA"
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
msgstr ""
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
msgstr ""
-#: src/game.cpp:4363
+#: 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 ""
-"\n"
-"Check debug.txt for details."
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
msgstr ""
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/settings_translation_file.cpp
+msgid "Field of view"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Klavišas jau naudojamas"
+#: 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/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "paspauskite klavišą"
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
msgstr "Pirmyn"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Atgal"
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "KairÄ—n"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Dešinėn"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Naudoti"
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Pašokti"
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Mesti"
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Papildiniai"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Žaidimas"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
msgstr "Inventorius"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Susirašinėti"
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Komanda"
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
msgstr ""
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Pašokti"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Senas slaptažodis"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Naujas slaptažodis"
+#: 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/guiPasswordChange.cpp:139
-msgid "Confirm Password"
-msgstr "Patvirtinti slaptažodį"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Pakeisti"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
-msgstr "Slaptažodžiai nesutampa!"
+#: 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/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/guiVolumeChange.cpp:119
-msgid "Exit"
-msgstr "IÅ¡eiti"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Kairysis mygtukas"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Vidurinis mygtukas"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Dešinysis mygtukas"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
-#: src/keycode.cpp:223
-msgid "X Button 1"
+#: 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/keycode.cpp:224
-msgid "Back"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Clear"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Return"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Tab"
+#: 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/keycode.cpp:224
-msgid "X Button 2"
+#: 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/keycode.cpp:225
-msgid "Capital"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Control"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Kana"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Menu"
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "KairÄ—n"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Pagrindinis meniu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Pagrindinis meniu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Žemėlapių generavimas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Žemėlapių generavimas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Žemėlapių generavimas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Žemėlapių generavimas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
msgstr "Meniu"
-#: src/keycode.cpp:225
-msgid "Pause"
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift (Lyg2)"
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Convert"
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
msgstr ""
-#: src/keycode.cpp:226
-msgid "Escape"
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
msgstr ""
-#: src/keycode.cpp:226
-msgid "Final"
+#: src/settings_translation_file.cpp
+msgid "Minimap"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Junja"
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Nonconvert"
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Home"
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Mode Change"
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Next"
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Prior"
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Tarpas"
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Žemyn"
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Vykdyti"
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Print"
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
msgstr ""
-#: src/keycode.cpp:228
-msgid "Select"
+#: 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/keycode.cpp:228
-msgid "Up"
-msgstr "Aukštyn"
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Pagalba"
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Įterpti"
+#: 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/keycode.cpp:229
-msgid "Snapshot"
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
-#: src/keycode.cpp:232
-msgid "Left Windows"
+#: src/settings_translation_file.cpp
+msgid "Network"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Apps"
+#: 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/keycode.cpp:233
-msgid "Numpad 0"
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 1"
+#: src/settings_translation_file.cpp
+msgid "Noclip"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Right Windows"
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Sleep"
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 2"
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 3"
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
+#: src/settings_translation_file.cpp
+msgid "Noises"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 5"
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 6"
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 7"
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad *"
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad +"
+#: 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/keycode.cpp:235
-msgid "Numpad -"
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad /"
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 8"
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 9"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Num Lock"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Kairysis Shift"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Dešinysis Shift"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Kairysis Control"
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Menu"
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Control"
-msgstr "Dešinysis Control"
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Menu"
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Kablelis"
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
-#: src/keycode.cpp:243
-msgid "Minus"
+#: 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/keycode.cpp:243
-msgid "Period"
+#: src/settings_translation_file.cpp
+msgid "Player name"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plius"
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
-#: src/keycode.cpp:247
-msgid "Attn"
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
+#: 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/keycode.cpp:248
-msgid "Erase OEF"
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
msgstr ""
-#: src/keycode.cpp:248
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Zoom"
-msgstr "Pritraukti"
+msgid "Right key"
+msgstr "Dešinėn"
-#~ msgid "Game Name"
-#~ msgstr "Žaidimo pavadinimas"
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
-#~ msgid "GAMES"
-#~ msgstr "ŽAIDIMAI"
+#: src/settings_translation_file.cpp
+msgid "River Depth"
+msgstr ""
-#~ msgid "Games"
-#~ msgstr "Žaidimai"
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr ""
-#~ msgid "Mods:"
-#~ msgstr "Papildiniai:"
+#: src/settings_translation_file.cpp
+msgid "River Size"
+msgstr ""
-#~ msgid "edit game"
-#~ msgstr "keisti žaidimą"
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+msgstr ""
-#~ msgid "new game"
-#~ msgstr "naujas žaidimas"
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "EDIT GAME"
-#~ msgstr "KEISTI ŽAIDIMĄ"
+msgid "Server / Singleplayer"
+msgstr "Žaisti vienam"
-#~ msgid "Remove selected mod"
-#~ msgstr "Pašalinti pasirinktą papildinį"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "Serveris"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Pridėti papildinį"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "Serverio prievadas"
-#~ msgid "CLIENT"
-#~ msgstr "ŽAISTI TINKLE"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "Serverio prievadas"
-#~ msgid "Favorites:"
-#~ msgstr "MÄ—giami:"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "Serveris"
-#~ msgid "START SERVER"
-#~ msgstr "PALEISTI SERVERÄ®"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "Serverio prievadas"
-#~ msgid "Name"
-#~ msgstr "Vardas"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Viešų serverių sąrašas"
-#~ msgid "Password"
-#~ msgstr "Slaptažodis"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Viešų serverių sąrašas"
-#~ msgid "SETTINGS"
-#~ msgstr "NUSTATYMAI"
+#: 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 ""
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "VIENAS ŽAIDĖJAS"
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
-#~ msgid "MODS"
-#~ msgstr "PAPILDINIAI"
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Apšvietimo efektai"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Nustatyti klavišus"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "paspauskite klavišą"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Pagrindiniai kūrėjai"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Elemento tekstūros..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Įkeliama..."
#~ msgid "Add mod:"
#~ msgstr "Pridėti papildinį:"
+
+#~ msgid "MODS"
+#~ msgstr "PAPILDINIAI"
+
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "VIENAS ŽAIDĖJAS"
+
+#~ msgid "SETTINGS"
+#~ msgstr "NUSTATYMAI"
+
+#~ msgid "Password"
+#~ msgstr "Slaptažodis"
+
+#~ msgid "Name"
+#~ msgstr "Vardas"
+
+#~ msgid "START SERVER"
+#~ msgstr "PALEISTI SERVERÄ®"
+
+#~ msgid "CLIENT"
+#~ msgstr "ŽAISTI TINKLE"
+
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Pridėti papildinį"
+
+#~ msgid "Remove selected mod"
+#~ msgstr "Pašalinti pasirinktą papildinį"
+
+#, fuzzy
+#~ msgid "EDIT GAME"
+#~ msgstr "KEISTI ŽAIDIMĄ"
+
+#~ msgid "new game"
+#~ msgstr "naujas žaidimas"
+
+#~ msgid "Mods:"
+#~ msgstr "Papildiniai:"
+
+#~ msgid "GAMES"
+#~ msgstr "ŽAIDIMAI"
+
+#~ msgid "Game Name"
+#~ msgstr "Žaidimo pavadinimas"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "įjungtas"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Išjungti papildinį"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Viešų serverių sąrašas"
+
+#~ msgid "No of course not!"
+#~ msgstr "Ne, tikrai ne!"
diff --git a/po/minetest.pot b/po/minetest.pot
index 2fd0ba1be..ed014c01f 100644
--- a/po/minetest.pot
+++ b/po/minetest.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
+"POT-Creation-Date: 2016-05-05 16:13+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"
@@ -17,615 +17,722 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr ""
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr ""
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr ""
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
msgid "Depends:"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:71
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable MP"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:50
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Seed"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:63
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:68
+#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no subgames installed."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
+#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:116
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No worldname given or no game selected"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr ""
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr ""
-
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
msgid "Accept"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+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
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+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/modmgr.lua
msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:368
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
+#: builtin/mainmenu/store.lua
msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
+#: builtin/mainmenu/store.lua
msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
+#: builtin/mainmenu/store.lua
msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:162
+#: builtin/mainmenu/store.lua
msgid "Shortname:"
msgstr ""
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:497
+#: builtin/mainmenu/store.lua
msgid "re-Install"
msgstr ""
-#: builtin/mainmenu/store.lua:499
+#: builtin/mainmenu/store.lua
msgid "Install"
msgstr ""
-#: builtin/mainmenu/store.lua:518
+#: builtin/mainmenu/store.lua
msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:526
+#: builtin/mainmenu/store.lua
msgid "Page $1 of $2"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
+#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:31
+#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
+#: builtin/mainmenu/tab_mods.lua
msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected modpack"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr ""
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
-msgid "Connect"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:257
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
msgid "Client"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "New"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:29
+#: builtin/mainmenu/tab_server.lua
msgid "Start Game"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Select World:"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:35
+#: builtin/mainmenu/tab_server.lua
msgid "Public"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:45
+#: builtin/mainmenu/tab_server.lua
msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
+#: builtin/mainmenu/tab_server.lua
msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
+#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:22
+#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:32
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:43
+#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
-msgid "Shaders"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
+#: 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:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
+#: builtin/mainmenu/tab_settings.lua
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
+#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Start Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr ""
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr ""
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr ""
-#: src/client.cpp:1743
+#: src/client.cpp
msgid "Initializing nodes..."
msgstr ""
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr ""
-
-#: src/client.cpp:1793
+#: src/client.cpp
msgid "Done!"
msgstr ""
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr ""
-#: src/client/clientlauncher.cpp:223
+#: src/client/clientlauncher.cpp
msgid "Player name too long."
msgstr ""
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr ""
-#: src/client/clientlauncher.cpp:425
+#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr ""
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr ""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
msgid "needs_fallback_font"
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr ""
-
-#: src/game.cpp:1072
+#: src/game.cpp
msgid "You died."
msgstr ""
-#: src/game.cpp:1073
+#: src/game.cpp
msgid "Respawn"
msgstr ""
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -641,7 +748,7 @@ msgid ""
" --> place single item to slot\n"
msgstr ""
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -656,488 +763,3270 @@ msgid ""
"- T: chat\n"
msgstr ""
-#: src/game.cpp:1125
+#: src/game.cpp
msgid "Continue"
msgstr ""
-#: src/game.cpp:1129
+#: src/game.cpp
msgid "Change Password"
msgstr ""
-#: src/game.cpp:1134
+#: src/game.cpp
msgid "Sound Volume"
msgstr ""
-#: src/game.cpp:1136
+#: src/game.cpp
msgid "Change Keys"
msgstr ""
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr ""
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr ""
-#: src/game.cpp:1841
+#: src/game.cpp
msgid "Shutting down..."
msgstr ""
-#: src/game.cpp:1948
+#: src/game.cpp
msgid "Creating server..."
msgstr ""
-#: src/game.cpp:1984
+#: src/game.cpp
msgid "Creating client..."
msgstr ""
-#: src/game.cpp:2159
+#: src/game.cpp
msgid "Resolving address..."
msgstr ""
-#: src/game.cpp:2261
+#: src/game.cpp
msgid "Connecting to server..."
msgstr ""
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr ""
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr ""
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr ""
-#: src/game.cpp:2334
+#: src/game.cpp
msgid "KiB/s"
msgstr ""
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr ""
-#: src/game.cpp:4363
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr ""
+
+#: src/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
+#: src/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
+#: src/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
+#: src/guiKeyChangeMenu.cpp
msgid "Key already in use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:373
+#: src/guiKeyChangeMenu.cpp
msgid "press key"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
+#: src/guiKeyChangeMenu.cpp
msgid "Forward"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
msgid "Left"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
msgid "Right"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
+#: src/guiKeyChangeMenu.cpp
msgid "Use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
+#: src/guiKeyChangeMenu.cpp
msgid "Sneak"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:408
+#: src/guiKeyChangeMenu.cpp
msgid "Chat"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
+#: src/guiKeyChangeMenu.cpp
msgid "Command"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
+#: src/guiKeyChangeMenu.cpp
msgid "Console"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fly"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle Cinematic"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
+#: src/guiKeyChangeMenu.cpp
msgid "Range select"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:416
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Print stacks"
msgstr ""
-#: src/guiPasswordChange.cpp:108
+#: src/guiPasswordChange.cpp
msgid "Old Password"
msgstr ""
-#: src/guiPasswordChange.cpp:124
+#: src/guiPasswordChange.cpp
msgid "New Password"
msgstr ""
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr ""
-#: src/guiPasswordChange.cpp:155
+#: src/guiPasswordChange.cpp
msgid "Change"
msgstr ""
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
-#: src/guiVolumeChange.cpp:105
+#: src/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr ""
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
msgid "Left Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
msgid "Middle Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
msgid "Right Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
msgid "X Button 1"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Clear"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Return"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Tab"
msgstr ""
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "X Button 2"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Capital"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Kana"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Menu"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Pause"
msgstr ""
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Shift"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Convert"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Final"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Junja"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Kanji"
msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Nonconvert"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "End"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Home"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Mode Change"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Next"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Prior"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
msgid "Space"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
msgid "Down"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
msgid "Execute"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
msgid "Print"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
msgid "Select"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
msgid "Up"
msgstr ""
-#: src/keycode.cpp:229
+#: src/keycode.cpp
msgid "Help"
msgstr ""
-#: src/keycode.cpp:229
+#: src/keycode.cpp
msgid "Insert"
msgstr ""
-#: src/keycode.cpp:229
+#: src/keycode.cpp
msgid "Snapshot"
msgstr ""
-#: src/keycode.cpp:232
+#: src/keycode.cpp
msgid "Left Windows"
msgstr ""
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Apps"
msgstr ""
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr ""
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr ""
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Right Windows"
msgstr ""
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Sleep"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr ""
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad *"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad +"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad -"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad /"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr ""
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr ""
-#: src/keycode.cpp:239
+#: src/keycode.cpp
msgid "Num Lock"
msgstr ""
-#: src/keycode.cpp:239
+#: src/keycode.cpp
msgid "Scroll Lock"
msgstr ""
-#: src/keycode.cpp:240
+#: src/keycode.cpp
msgid "Left Shift"
msgstr ""
-#: src/keycode.cpp:240
+#: src/keycode.cpp
msgid "Right Shift"
msgstr ""
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Left Control"
msgstr ""
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Left Menu"
msgstr ""
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Control"
msgstr ""
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr ""
-#: src/keycode.cpp:243
+#: src/keycode.cpp
msgid "Comma"
msgstr ""
-#: src/keycode.cpp:243
+#: src/keycode.cpp
msgid "Minus"
msgstr ""
-#: src/keycode.cpp:243
+#: src/keycode.cpp
msgid "Period"
msgstr ""
-#: src/keycode.cpp:243
+#: src/keycode.cpp
msgid "Plus"
msgstr ""
-#: src/keycode.cpp:247
+#: src/keycode.cpp
msgid "Attn"
msgstr ""
-#: src/keycode.cpp:247
+#: src/keycode.cpp
msgid "CrSel"
msgstr ""
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Erase OEF"
msgstr ""
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "ExSel"
msgstr ""
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "OEM Clear"
msgstr ""
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "PA1"
msgstr ""
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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 \"use\" key is used to fly fast if both fly and fast mode are "
+"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 mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\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 ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+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 "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+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 strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+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 "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between 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 "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat 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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat 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 "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat 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 "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+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 "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+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 filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River Noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise -- rivers occur close to zero"
+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 "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-seperated 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 "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 "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
diff --git a/po/nb/minetest.po b/po/nb/minetest.po
index 7dc7361c4..7ae1156e2 100644
--- a/po/nb/minetest.po
+++ b/po/nb/minetest.po
@@ -7,636 +7,785 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-06-21 15:48+0200\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2015-09-20 17:15+0200\n"
+"Last-Translator: Christian Haug <christian@metaboks.org>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
+"minetest/minetest/nb/>\n"
"Language: nb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 1.4-dev\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.4-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr ""
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
+msgstr "Ok"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
msgstr ""
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
-msgid "Loading..."
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
msgstr ""
-#: builtin/mainmenu/common.lua:240
-msgid "Try reenabling public serverlist and check your internet connection."
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
-#, fuzzy
-msgid "World:"
-msgstr "Navnet på verdenen"
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-#, fuzzy
-msgid "Hide Game"
-msgstr "Spill"
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-#, fuzzy
-msgid "Depends:"
-msgstr "Avhenger av:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
-msgid "Save"
-msgstr "Lagre"
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr "Avbryt"
-#: builtin/mainmenu/dlg_config_world.lua:71
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
#, fuzzy
-msgid "Enable MP"
-msgstr "Aktiver Alle"
+msgid "Depends:"
+msgstr "Avhenger av:"
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
msgid "Disable MP"
msgstr "Deaktiver Alle"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
-msgstr "aktivert"
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "Enable MP"
+msgstr "Aktiver Alle"
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
msgid "Enable all"
msgstr "Aktiver Alle"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Navnet på verdenen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "Hide Game"
+msgstr "Spill"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
-msgstr "Spill"
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Lagre"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#, fuzzy
+msgid "World:"
+msgstr "Navnet på verdenen"
-#: builtin/mainmenu/dlg_create_world.lua:63
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "aktivert"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Opprett"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Spill"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:26
-msgid "Are you sure you want to delete \"$1\"?"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Navnet på verdenen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ja"
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr ""
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nei"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
+#, fuzzy
+msgid "Disabled"
+msgstr "Deaktiver Alle"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "aktivert"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Games"
+msgstr "Spill"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr ""
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
msgstr ""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
msgstr ""
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Navnet på verdenen"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr ""
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr ""
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
+#: builtin/mainmenu/store.lua
+msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
+#: builtin/mainmenu/store.lua
+#, fuzzy
+msgid "Shortname:"
+msgstr "Navnet på verdenen"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
msgstr ""
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
msgstr ""
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:31
+#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr ""
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr ""
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr ""
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Creative mode"
msgstr "Opprett"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Damage enabled"
msgstr "aktivert"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "PvP enabled"
msgstr "aktivert"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
-msgid "Creative Mode"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
-msgid "Enable Damage"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
-msgid "Name/Password"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:47
-msgid "Port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
+#: builtin/mainmenu/tab_server.lua
msgid "Server Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:191
-msgid "Server"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: 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 "Bilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
+#: builtin/mainmenu/tab_settings.lua
+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:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nei"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Aktiver Alle"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Water"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
-msgid "Waving Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ja"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
-msgid "Waving Plants"
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:83
-msgid "Config mods"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
msgstr ""
-#: builtin/mainmenu/tab_simple_main.lua:201
-msgid "Main"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
-msgid "Play"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
msgstr ""
-#: builtin/mainmenu/tab_singleplayer.lua:246
-msgid "Singleplayer"
+#: src/client.cpp
+msgid "Connection timed out."
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
+#: src/client.cpp
+msgid "Done!"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
+#: src/client.cpp
+msgid "Initializing nodes"
msgstr ""
-#: builtin/mainmenu/tab_texturepacks.lua:114
-msgid "Texturepacks"
+#: src/client.cpp
+msgid "Initializing nodes..."
msgstr ""
-#: src/client.cpp:1721
+#: src/client.cpp
msgid "Loading textures..."
msgstr ""
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr ""
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
msgstr ""
-#: src/client.cpp:1760
-msgid "Initializing nodes"
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
msgstr ""
-#: src/client.cpp:1768
-msgid "Item textures..."
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
msgstr ""
-#: src/client.cpp:1793
-msgid "Done!"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
msgstr ""
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
msgstr ""
-#: src/client/clientlauncher.cpp:223
+#: src/client/clientlauncher.cpp
msgid "Player name too long."
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
msgstr ""
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
msgstr ""
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
+#: src/game.cpp
+msgid "Change Keys"
msgstr ""
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
+#: src/game.cpp
+msgid "Change Password"
msgstr ""
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/game.cpp
+msgid "Connecting to server..."
msgstr ""
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Continue"
msgstr ""
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Du døde."
+#: src/game.cpp
+msgid "Creating client..."
+msgstr ""
-#: src/game.cpp:1073
-msgid "Respawn"
+#: src/game.cpp
+msgid "Creating server..."
msgstr ""
-#: src/game.cpp:1092
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -652,521 +801,3264 @@ msgid ""
" --> place single item to slot\n"
msgstr ""
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
+#: src/game.cpp
+msgid "Exit to Menu"
msgstr ""
-#: src/game.cpp:1125
-msgid "Continue"
+#: src/game.cpp
+msgid "Exit to OS"
msgstr ""
-#: src/game.cpp:1129
-msgid "Change Password"
+#: src/game.cpp
+msgid "Item definitions..."
msgstr ""
-#: src/game.cpp:1134
-msgid "Sound Volume"
+#: src/game.cpp
+msgid "KiB/s"
msgstr ""
-#: src/game.cpp:1136
-msgid "Change Keys"
+#: src/game.cpp
+msgid "Media..."
msgstr ""
-#: src/game.cpp:1139
-msgid "Exit to Menu"
+#: src/game.cpp
+msgid "MiB/s"
msgstr ""
-#: src/game.cpp:1141
-msgid "Exit to OS"
+#: src/game.cpp
+msgid "Node definitions..."
msgstr ""
-#: src/game.cpp:1841
-msgid "Shutting down..."
+#: src/game.cpp
+msgid "Resolving address..."
msgstr ""
-#: src/game.cpp:1948
-msgid "Creating server..."
+#: src/game.cpp
+msgid "Respawn"
msgstr ""
-#: src/game.cpp:1984
-msgid "Creating client..."
+#: src/game.cpp
+msgid "Shutting down..."
msgstr ""
-#: src/game.cpp:2159
-msgid "Resolving address..."
+#: src/game.cpp
+msgid "Sound Volume"
msgstr ""
-#: src/game.cpp:2261
-msgid "Connecting to server..."
+#: src/game.cpp
+msgid "You died."
+msgstr "Du døde."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
msgstr ""
-#: src/game.cpp:2317
-msgid "Item definitions..."
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-#: src/game.cpp:2322
-msgid "Node definitions..."
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
msgstr ""
-#: src/game.cpp:2329
-msgid "Media..."
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
msgstr ""
-#: src/game.cpp:2334
-msgid "KiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
msgstr ""
-#: src/game.cpp:2338
-msgid "MiB/s"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
msgstr ""
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:295
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
msgid "Key already in use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
msgid "Right"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:403
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/guiKeyChangeMenu.cpp
msgid "Use"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
+#: src/guiPasswordChange.cpp
+msgid "Change"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
+#: src/guiVolumeChange.cpp
+msgid "Exit"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
msgstr ""
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
+#: src/keycode.cpp
+msgid "Apps"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
+#: src/keycode.cpp
+msgid "Attn"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:414
-msgid "Toggle noclip"
+#: src/keycode.cpp
+msgid "Back"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
+#: src/keycode.cpp
+msgid "Capital"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
+#: src/keycode.cpp
+msgid "Clear"
msgstr ""
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
+#: src/keycode.cpp
+msgid "Comma"
msgstr ""
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
+#: src/keycode.cpp
+msgid "Control"
msgstr ""
-#: src/guiPasswordChange.cpp:139
-msgid "Confirm Password"
+#: src/keycode.cpp
+msgid "Convert"
msgstr ""
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
+#: src/keycode.cpp
+msgid "CrSel"
msgstr ""
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
+#: src/keycode.cpp
+msgid "Down"
msgstr ""
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
+#: src/keycode.cpp
+msgid "End"
msgstr ""
-#: src/guiVolumeChange.cpp:119
-msgid "Exit"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Help"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Left Button"
msgstr ""
-#: src/keycode.cpp:223
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Middle Button"
msgstr ""
-#: src/keycode.cpp:223
-msgid "Right Button"
+#: src/keycode.cpp
+msgid "Minus"
msgstr ""
-#: src/keycode.cpp:223
-msgid "X Button 1"
+#: src/keycode.cpp
+msgid "Mode Change"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Back"
+#: src/keycode.cpp
+msgid "Next"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Clear"
+#: src/keycode.cpp
+msgid "Nonconvert"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Return"
+#: src/keycode.cpp
+msgid "Num Lock"
msgstr ""
-#: src/keycode.cpp:224
-msgid "Tab"
+#: src/keycode.cpp
+msgid "Numpad *"
msgstr ""
-#: src/keycode.cpp:224
-msgid "X Button 2"
+#: src/keycode.cpp
+msgid "Numpad +"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Capital"
+#: src/keycode.cpp
+msgid "Numpad -"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Control"
+#: src/keycode.cpp
+msgid "Numpad /"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Kana"
+#: src/keycode.cpp
+msgid "Numpad 0"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Menu"
+#: src/keycode.cpp
+msgid "Numpad 1"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
+#: src/keycode.cpp
+msgid "Numpad 2"
msgstr ""
-#: src/keycode.cpp:225
-msgid "Shift"
+#: src/keycode.cpp
+msgid "Numpad 3"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Convert"
+#: src/keycode.cpp
+msgid "Numpad 4"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Escape"
+#: src/keycode.cpp
+msgid "Numpad 5"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Final"
+#: src/keycode.cpp
+msgid "Numpad 6"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Junja"
+#: src/keycode.cpp
+msgid "Numpad 7"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
+#: src/keycode.cpp
+msgid "Numpad 8"
msgstr ""
-#: src/keycode.cpp:226
-msgid "Nonconvert"
+#: src/keycode.cpp
+msgid "Numpad 9"
msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
+#: src/keycode.cpp
+msgid "OEM Clear"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Home"
+#: src/keycode.cpp
+msgid "PA1"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Mode Change"
+#: src/keycode.cpp
+msgid "Pause"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Next"
+#: src/keycode.cpp
+msgid "Period"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Plus"
msgstr ""
-#: src/keycode.cpp:227
+#: src/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Prior"
msgstr ""
-#: src/keycode.cpp:227
-msgid "Space"
+#: src/keycode.cpp
+msgid "Return"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Down"
+#: src/keycode.cpp
+msgid "Right Button"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Execute"
+#: src/keycode.cpp
+msgid "Right Control"
msgstr ""
-#: src/keycode.cpp:228
-msgid "Print"
+#: src/keycode.cpp
+msgid "Right Menu"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Select"
msgstr ""
-#: src/keycode.cpp:228
+#: src/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/keycode.cpp
msgid "Up"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Help"
+#: src/keycode.cpp
+msgid "X Button 1"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Insert"
+#: src/keycode.cpp
+msgid "X Button 2"
msgstr ""
-#: src/keycode.cpp:229
-msgid "Snapshot"
+#: src/keycode.cpp
+msgid "Zoom"
msgstr ""
-#: src/keycode.cpp:232
-msgid "Left Windows"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Apps"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 0"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Numpad 1"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
msgstr ""
-#: src/keycode.cpp:233
-msgid "Right Windows"
+#: 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"
+"- pageflip: quadbuffer based 3d."
msgstr ""
-#: src/keycode.cpp:233
-msgid "Sleep"
+#: 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/keycode.cpp:234
-msgid "Numpad 2"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 3"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 4"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 5"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 6"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
msgstr ""
-#: src/keycode.cpp:234
-msgid "Numpad 7"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad *"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad +"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad -"
+#: 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/keycode.cpp:235
-msgid "Numpad /"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 8"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
msgstr ""
-#: src/keycode.cpp:235
-msgid "Numpad 9"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Num Lock"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Left Shift"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
msgstr ""
-#: src/keycode.cpp:240
-msgid "Right Shift"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Control"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Left Menu"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Control"
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
msgstr ""
-#: src/keycode.cpp:241
-msgid "Right Menu"
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Comma"
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Minus"
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
msgstr ""
-#: src/keycode.cpp:243
-msgid "Period"
+#: src/settings_translation_file.cpp
+msgid "Backward key"
msgstr ""
-#: src/keycode.cpp:243
-msgid "Plus"
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
msgstr ""
-#: src/keycode.cpp:247
-msgid "Attn"
+#: src/settings_translation_file.cpp
+msgid "Basic"
msgstr ""
-#: src/keycode.cpp:247
-msgid "CrSel"
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Erase OEF"
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
msgstr ""
-#: src/keycode.cpp:248
-msgid "ExSel"
+#: src/settings_translation_file.cpp
+msgid "Bind address"
msgstr ""
-#: src/keycode.cpp:248
-msgid "OEM Clear"
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
msgstr ""
-#: src/keycode.cpp:248
-msgid "PA1"
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
msgstr ""
-#: src/keycode.cpp:248
-msgid "Zoom"
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
msgstr ""
+#: src/settings_translation_file.cpp
+msgid "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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Spill"
+msgid "Cinematic mode"
+msgstr "Opprett"
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Games"
-#~ msgstr "Spill"
+msgid "Cinematic mode key"
+msgstr "Opprett"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n"
-#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen."
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "aktivert"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Aktiver Alle"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Aktiver Alle"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Aktiver Alle"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Spill"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 "is required by:"
+#~ msgstr "trengs av:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Konfigurasjon lagret. "
#~ msgid ""
#~ "Warning: Some configured mods are missing.\n"
@@ -1175,8 +4067,21 @@ msgstr ""
#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n"
#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen."
-#~ msgid "Configuration saved. "
-#~ msgstr "Konfigurasjon lagret. "
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n"
+#~ "De vil bli aktivert som standard når du lagrer konfigurasjonen."
-#~ msgid "is required by:"
-#~ msgstr "trengs av:"
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Spill"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "aktivert"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Deaktiver Alle"
diff --git a/po/nl/minetest.po b/po/nl/minetest.po
index 9efaf95fc..533917153 100644
--- a/po/nl/minetest.po
+++ b/po/nl/minetest.po
@@ -2,671 +2,778 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2014-01-05 11:31+0200\n"
-"Last-Translator: b p <bp.atlarge@gmail.com>\n"
-"Language-Team: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-07 00:58+0000\n"
+"Last-Translator: Auke Kok <sofar+github@foo-projects.org>\n"
+"Language-Team: Dutch "
+"<https://hosted.weblate.org/projects/minetest/minetest/nl/>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr ""
+"Er is een fout opgetreden in een Lua script (bijvoorbeeld van een mod):"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Er is een fout opgetreden:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Hoofdmenu"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Ok"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Opnieuw verbinding maken"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "De server heeft gevraagd opnieuw verbinding te maken:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Bezig met laden..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protocol versie stemt niet overeen. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "De server vereist protocol versie $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "De server ondersteunt protocol versies $1 tot en met $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Probeer de publieke serverlijst opnieuw in te schakelen en controleer de "
+"internet verbinding."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Wij ondersteunen enkel protocol versie $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Wij ondersteunen protocol versies $1 tot en met $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Annuleer"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Wereld:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Afhankelijkheden:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "MV uitzetten"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "MV aanzetten"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Alles aanzetten"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Mod \"$1\" kan niet gebruikt worden: de naam bevat ongeldige karakters. "
+"Enkel [a-z0-9_] zijn toegestaan."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
-msgstr "Geen std"
+msgstr "Verberg std. mods"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr "Verberg mp mods"
+msgstr "Verberg MV mods"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Afhankelijkheden:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Bewaar"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Annuleer"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "MP inschakelen"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "MP uitschakelen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Wereld:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "ingeschakeld"
+msgstr "aangeschakeld"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Alles aan"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Wereld \"$1\" bestaat al"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Naam wereld"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Maak aan"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "kiemgetal"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Download een sub-spel, zoals minetest_game, van minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Kaartgenerator"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Download er een van minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spel"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Maak aan"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Wereldgenerator"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Kiemgetal"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
+"Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor "
+"ontwikkelaars."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Wereld \"$1\" bestaat al"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Naam wereld"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Er zijn geen spellen geïnstalleerd."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Weet je zeker dat je \"$1\" wilt verwijderen?"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Ja"
+msgstr "Weet je zeker dat je mod \"$1\" wilt verwijderen?"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Natuurlijk niet!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Verwijderen"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr "Modmgr: kan \"$1\" niet verwijderen"
+msgstr "Modmgr: kan mod \"$1\" niet verwijderen"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr "Modmgr: onjuist pad \"$1\""
+msgstr "Modbeheer: onjuist pad \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Verwijder wereld \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nee"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Accepteren"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Modverzameling hernoemen:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Accepteren"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" is geen geldige vlag."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Mod installeren: bestand: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Er is geen beschrijving van deze instelling beschikbaar)"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Terug naar instellingen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Bladeren"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Uitgeschakeld"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Aanpassen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Ingeschakeld"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+"Formaat is 3 getallen, gescheiden door komma's en tussen vierkante haken."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formaat: <basiswaarde>, <schaal>, (<X-spreiding>, <Y-spreiding>, "
+"<Z-spreiding>), <kiemgetal>, <octaven>, <persistentie>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Spellen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Optioneel: de lacunaritie (uit de fractal-meetkunde: een maat voor\n"
+"hoeveelheid en grootte van 'gaten') kan aan het einde toegevoegd worden,\n"
+"voorafgegaan door een komma."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Geef een lijst van vlaggen, door komma's gescheiden."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Voer een geldig geheel getal in."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Voer een geldig getal in."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Mogelijke waarden zijn: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Standaardwaarde herstellen"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Pad selecteren"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Technische namen weergeven"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "De waarde moet groter zijn dan $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "De waarde moet lager zijn dan $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Mod installeren: niet ondersteund bestandstype \"$1\""
+"Mod installeren: niet ondersteund bestandstype \"$1\" of defect archief"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Installeren van $1 in $2 is mislukt"
+msgstr "Installeren van mod $1 in $2 is mislukt"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Mod installeren: bestand: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
-msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1"
+msgstr "Mod installeren: kan de echte modnaam niet vinden voor: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Mod installeren: kan geen geschikte map-naam vinden voor modverzameling $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Winkel sluiten"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "$1 wordt gedownload, een ogenblik geduld..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Installeren"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Naam wereld"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Pagina $1 van $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
-msgstr "Rang"
-
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "opnieuw installeren"
+msgstr "Waardering"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Installeren"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Zoeken"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Korte naam:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Pagina $1 van $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Succesvol geïnstalleerd:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Credits"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Ongesorteerd"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Hoofdontwikkelaars"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Opnieuw installeren"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr "Actieve bijdragers"
+msgstr "Andere actieve ontwikkelaars"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Hoofdontwikkelaars"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Credits"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr "Vroegere bijdragers"
+msgstr "Vroegere ontwikkelaars"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Vroegere hoofdontwikkelaars"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Geïnstalleerde Mods:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Online mod opslagplaats"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Mod-beschrijving:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
-msgstr "Geen mod beschrijving aanwezig"
+msgstr "Geen mod-beschrijving aanwezig"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Mod beschrijving:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Hernoemen"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Geselecteerde modpack deinstalleren"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Geselecteerde mod deinstalleren"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Selecteer Modbestand:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mods"
-
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "IP-Adres/Poort"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Geselecteerde mod deïnstalleren"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-#, fuzzy
-msgid "Name / Password :"
-msgstr "Naam/Wachtwoord"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Geselecteerde modverzameling deïnstalleren"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Publieke Serverlijst"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "Server adres / Poort"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Verwijderen"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Cliënt"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Verbinden"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
-msgstr "Creatieve Modus"
+msgstr "Creatieve modus"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "ingeschakeld"
+msgstr "Verwondingen aangeschakeld"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
-#, fuzzy
-msgid "PvP enabled"
-msgstr "ingeschakeld"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Verwijder Favoriete"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Client"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Favorieten"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nieuw"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Naam / Wachtwoord"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Instellingen"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "Spelergevechten aangeschakeld"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Start Server"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Lokaal server-adres"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Selecteer Wereld:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Instellingen"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
-msgstr "Creatieve Modus"
+msgstr "Creatieve modus"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
-msgstr "Schade inschakelen"
-
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Publiek"
+msgstr "Verwondingen inschakelen"
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
-msgstr "Naam/Wachtwoord"
+msgstr "Naam / Wachtwoord"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nieuw"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Poort"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Serverpoort"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Publiek"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Selecteer Wereld:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Ondoorzichtig water"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Serverpoort"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Start spel"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Mooie bomen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D wolken"
-#: builtin/mainmenu/tab_settings.lua:33
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Geavanceerde Instellingen"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Antialiasing:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Weet je zeker dat je je wereld wilt resetten?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Bi-Lineaire Filtering"
+msgstr "Bilineaire Filtering"
-#: builtin/mainmenu/tab_settings.lua:34
-#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Tri-Lineare Filtering"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "Bumpmapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Toetsen aanpassen"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Verbonden Glas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Mooie bladeren"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Anisotropisch filteren"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nee"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Geen Filter"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Mooie verlichting"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Geen Mipmap"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Deeltjes aanzetten"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Node Oplichten"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D wolken"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Node omstrepen"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Ondoorzichtig water"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Geen"
-#: builtin/mainmenu/tab_settings.lua:210
-#, fuzzy
-msgid "Connected Glass"
-msgstr "Verbinden"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "Normaal Mappen"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Ondoorzichtige bladeren"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Ondoorzichtig water"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Parallax occlusie"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Effectdeeltjes"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Instellingen"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shaders"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Toetsen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Eenvoudige bladeren"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Singleplayer"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Vloeiende verlichting"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Textuur:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Toon Mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "Mip-Mapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr ""
+msgstr "Toetsgrenswaarde (px)"
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Tri-Lineare Filtering"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Bewegende bladeren"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt."
+msgstr "Bewegende planten"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Instellingen"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Golvend water"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Singleplayer"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Ja"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Instellingen"
+msgstr "Mods configureren"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Hoofdmenu"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Start Singleplayer"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
-msgstr "Speel"
+msgstr "Spelen"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Singleplayer"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Selecteer textuurverzameling:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Geen informatie aanwezig"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selecteer textuurverzameling:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Texturen"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "Bezig met laden..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Time-out bij opzetten verbinding."
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "IP-adres opzoeken..."
+#: src/client.cpp
+msgid "Done!"
+msgstr "Klaar!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Nodes initialiseren"
-#: src/client.cpp:1743
+#: src/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Nodes initialiseren..."
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr ""
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Bezig met texturen te laden..."
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Voorwerp texturen..."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Texturen herbouwen..."
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Fout bij verbinden (time out?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Kan het spel niet laden of niet vinden \""
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Onjuiste spel-spec."
+
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Hoofdmenu"
-#: src/client/clientlauncher.cpp:223
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Geen wereld geselecteerd en adres opgegeven. Niets te doen."
+
+#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Spelernaam is te lang."
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Fout bij verbinden (time out?)"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Het gespecificeerde wereld-pad bestaat niet: "
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Geen wereld en adres geselecteerd. Niks te doen."
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "needs_fallback_font"
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Kijk in debug.txt voor details."
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Kan niet de game laden of vinden \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Onjuiste gamespec."
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Toetsen aanpassen"
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Verander wachtwoord"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Doorgaan"
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Verbinding met de server wordt gemaakt..."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Je bent gestorven."
+#: src/game.cpp
+msgid "Continue"
+msgstr "Verder spelen"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Herspawnen"
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Bezig cliënt te maken..."
-#: src/game.cpp:1092
-msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
-msgstr ""
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Bezig server te maken..."
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -687,588 +794,3924 @@ msgstr ""
"- Q: weggooien\n"
"- I: rugzak\n"
"- Muis: draaien/kijken\n"
-"- L.muisknop: graaf/sla\n"
-"- R.muisknop: plaats/gebruik\n"
-"- Muiswiel: selecteer\n"
-"- T: chat\n"
+"- L-muisknop: graaf/sla\n"
+"- R-muisknop: plaats/gebruik\n"
+"- Muiswiel: selecteer vak\n"
+"- T: chatten\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Verder spelen"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Verander wachtwoord"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volume"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Toetsen"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Standaardbesturing:\n"
+"Geen menu getoond:\n"
+"- enkele tik: activeren\n"
+"- dubbele tik: plaats / gebruik\n"
+"- vinger schuiven: rondkijken\n"
+"Menu of inventaris getoond:\n"
+"- dubbele tik buiten menu:\n"
+" --> sluiten\n"
+"- aanraken stapel of vak:\n"
+" --> stapel verplaatsen\n"
+"- aanraken & slepen, tik met tweede vinger\n"
+" --> plaats enkel object in vak\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Terug naar menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Afsluiten"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Stopzetten..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Bezig server te maken..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Bezig client te maken..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Voorwerpdefinities..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "IP-adres opzoeken..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Verbinding met de server wordt gemaakt..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Media..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Voorwerpdefinities..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Node definities..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Server-adres opzoeken..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Respawn"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Uitschakelen..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Lees debug.txt voor details."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Geluidsvolume"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "Je bent dood."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
-msgstr ""
+msgstr "oké"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit "
-"minetest.conf)."
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Enter "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Doorgaan"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Gebruiken\" = Omlaag"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "2x \"springen\" om te vliegen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Achteruit"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Toets is al in gebruik"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chatten"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "druk op"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Opdracht"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Vooruit"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Console"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Achteruit"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "2x \"springen\" schakelt vliegen aan/uit"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Links"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Weggooien"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Rechts"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Vooruit"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Gebruiken"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "inventaris"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Springen"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Kruipen"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Toets is al in gebruik"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Weggooien"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit "
+"minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Rugzak"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Links"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chatten"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Print debug-stacks"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Opdracht"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Zichtbereik"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Console"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Rechts"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Vliegen aan/uit"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "sluipen"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Cinematic modus aan/uit"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Snel bewegen aan/uit"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Snel bewegen aan/uit"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Vliegen aan/uit"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Noclip aan/uit"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Range instellen"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Print stacks"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Gebruiken"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Huidig wachtwoord"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "druk op toets"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nieuw wachtwoord"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Veranderen"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Herhaal wachtwoord"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Veranderen"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nieuw wachtwoord"
-#: src/guiPasswordChange.cpp:164
-msgid "Passwords do not match!"
-msgstr "Wachtwoorden zijn niet gelijk!"
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Huidig wachtwoord"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume: "
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "De wachtwoorden zijn niet gelijk!"
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Terug"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Linkermuisknop"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Muiswielknop"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Geluidsvolume: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Rechtmuisknop"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Menu"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X knop 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "SAK"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Terug"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Hoofdletter"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Wissen"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Terug"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X knop 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Kapitaal"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Komma"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Converteren"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pauze"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Omlaag"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Einde"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Converteren"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase EOF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Uitvoeren"
+
+#: src/keycode.cpp
msgid "Final"
-msgstr "Final"
+msgstr "Laatste"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Help"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Linkermuisknop"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Linker Ctrl"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Modus veranderen"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Linker Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Volgende"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Linker Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Eerste"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Linker Windowstoets"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Spatie"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Omlaag"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Muiswielknop"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Uitvoeren"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Min"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Modus verandering"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Selecteren"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Volgende"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Omhoog"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Help"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Screenshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Linker Windowstoets"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Rechter Windowstoets"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Slaapknop"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Linker Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pauze"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Rechter Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punt"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Linker Ctrl"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Linker Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Eerste"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Rechtmuisknop"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Rechter Ctrl"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Rechter Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Komma"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Rechter Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Min"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Rechter Windowstoets"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punt"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Selecteren"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "SAK"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Slaapknop"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase EOF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Screenshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spatie"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Omhoog"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X knop 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X knop 2"
+
+#: src/keycode.cpp
msgid "Zoom"
-msgstr "Zoom"
+msgstr "Zoomen"
-#~ msgid "Game Name"
-#~ msgstr "Spel"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = parallax occlusie met helling-informatie (sneller).\n"
+"1 = 'reliëf mapping' (lanzamer, nauwkeuriger)."
-#~ msgid "GAMES"
-#~ msgstr "SPELLEN"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D wolken"
-#~ msgid "Games"
-#~ msgstr "Spellen"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D modus"
-#~ msgid "Mods:"
-#~ msgstr "Mods:"
+#: src/settings_translation_file.cpp
+#, fuzzy
+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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3D ondersteuning.\n"
+"Op dit moment ondersteund:\n"
+"- none: geen 3D.\n"
+"- 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)."
+
+#: 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 "
+"waarde gekozen.\n"
+"Wanneer vanuit het hoofdmenu een nieuwe wereld gecreëerd wordt, kan een "
+"ander kiemgetal gekozen worden."
-#~ msgid "edit game"
-#~ msgstr "spel aanpassen"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Een bericht dat wordt getoond aan alle verbonden spelers als de server "
+"crasht."
-#~ msgid "new game"
-#~ msgstr "nieuw spel"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Een bericht dat wordt getoond aan alle verbonden spelers als de server "
+"afgesloten wordt."
-#~ msgid "EDIT GAME"
-#~ msgstr "SPEL AANPASSEN"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Maximaal aantal 'emerge' blokken in de wachtrij"
-#~ msgid "Remove selected mod"
-#~ msgstr "Geselecteerde mod verwijderen"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Versnelling in lucht"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Mod toevoegen"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr "Bereik waarbinnen blokken actief zijn"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENT"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr "Bereik waarbinnen blok wijzigers actief zijn"
-#~ msgid "Favorites:"
-#~ msgstr "Favorieten:"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Bereik waarbinnen blokken actief zijn"
-#~ msgid "START SERVER"
-#~ msgstr "START SERVER"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Bereik waarbinnen actieve objecten gestuurd worden"
-#~ msgid "Name"
-#~ msgstr "Naam"
+#: 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 ""
+"Standaard serveradres waarmee verbinding gemaakt moet worden.\n"
+"Indien leeg, wordt een lokale server gestart.\n"
+"In het hoofdmenu kan een ander adres opgegeven worden."
-#~ msgid "Password"
-#~ msgstr "Wachtwoord"
+#: src/settings_translation_file.cpp
+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, bijv. voor 4k "
+"schermen (niet voor X11 of Android)."
-#~ msgid "SETTINGS"
-#~ msgstr "INSTELLINGEN"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"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 "Preload item visuals"
-#~ msgstr "Voorwerpen vooraf laden"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Geavanceerd"
-#~ msgid "Finite Liquid"
-#~ msgstr "Eindige vloeistoffen"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Hoogte Koudheid"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "SINGLEPLAYER"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Zet 'snel' altijd aan bij 'vliegen'"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "TEXTUREN"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Ambient occlusion gamma"
-#~ msgid "MODS"
-#~ msgstr "MODS"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Vergroot de valleien"
-#~ msgid "Add mod:"
-#~ msgstr "Mod toevoegen:"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Anisotropische filtering"
-#~ msgid "Local install"
-#~ msgstr "Plaatselijk installeren"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Meldt server aan bij de server-lijst"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"URL van de serverlijst om aan te melden.\n"
+"Voor het aanmelden van een ipv6 adres bij de minetest serverlijst, gebruik "
+"'v6.servers.minetest.net'."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Ingeschatte (X,Y,Z) schaal van fractal in nodes."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Vraag om de verbinding te herstellen na een server-crash"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Meldt de server automatisch aan bij de serverlijst."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Achteruit"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Basishoogte van terrein"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Basis"
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr "Standaardvoorrechten"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Bi-Lineaire filtering"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Lokaal server-adres"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Bouwen op de plaats van de speler"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bumpmapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Vloeiender maken van de camerabeweging"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Vloeiender maken van de camerabeweging (in cinematic modus)"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Toets voor cameraverversing aan/uit"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Grot noise patroon #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Grot noise patroon #2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr "Grot breedte"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Grotten en tunnels vormen bij het kruispunt van twee noise patronen"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Chat-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Toets voor tonen/verbergen chat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr "Chunk-grootte"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Cinematic modus"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Cinematic modus aan/uit toets"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Schoonmaken Transparante texturen"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Cliënt en server"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Klimsnelheid"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Hoogte van de wolken"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Diameter van de wolken"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Wolken"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Wolken bestaan enkel op de cliënt."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Wolken in het menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Gekleurde mist"
+
+#: 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 ""
+"Lijst, door komma's gescheiden, van vertrouwde mods die onveilige functies "
+"mogen gebruiken,\n"
+"zelfs wanneer mod-beveiliging aan staat (via request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr "Opdracht-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Verbind glas"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+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)."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Console-alphawaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Console-kleur"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Console-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Continu vooruit lopen"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Speler loopt continu vooruit (wordt enkel gebruikt voor testen)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Besturing"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Bepaalt de lengte van de dag/nacht cyclus\n"
+"Voorbeeld: 72 = 20min, 360 = 4min, 1 = 24 uur, 0 = de kloktijd (dag, nacht, "
+"schemering) verandert niet."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Bepaalt de grootte van woestijnen en stranden in de wereld-generator "
+"(mapgen) v6.\n"
+"Als 'snowbiomes' aan staat, wordt deze instelling genegeerd."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controleert steilheid/diepte van meer depressies."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controleert steilheid/hoogte van heuvels."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+"Controleert breedte van tunnels, een kleinere waarde maakt bredere tunnels."
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Crash boodschap"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Draadkruis-alphawaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Draadkruis-alphawaarde. (ondoorzichtigheid; tussen 0 en 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Draadkruis-kleur"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Draadkruis-kleur (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Snelheid bij hurken"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "Scherm DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Verwondingen"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Toets voor aan/uitzetten debug informatie"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Debug logniveau"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Tijdsstaplengte van de server"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Standaardversnelling"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Standaardspel"
+
+#: 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 ""
+"Standaardspel bij het maken een nieuwe wereld.\n"
+"In het hoofdmenu kan een ander spel geselecteerd worden."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Standaardwachtwoord"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Standaardvoorrechten"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Standaard time-out voor cURL, in milliseconden.\n"
+"Wordt alleen gebruikt indien gecompileerd met cURL ingebouwd."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Maximale afstand (in blokken van 16 nodes) waarbinnen andere spelers "
+"zichtbaar zijn (0 = oneindig ver)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Vertraging bij het tonen van tooltips, in milliseconden."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Gedrag bij gebruik van verouderde Lua API functies"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Diepte waaronder je grote grotten vind."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Diepte waaronder je hele grote grotten vind."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Daalsnelheid"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Beschrijving van de server. Wordt getoond in de server-lijst, en wanneer "
+"spelers inloggen."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Textuur-animaties niet synchroniseren"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+"Gedetailleerde profiling-data voor mods. Nuttig voor mod-ontwikkelaars."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Gedetailleerde profiling van mods"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Valsspeelbescherming uitschakelen"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Lege wachtwoorden niet toestaan"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Domeinnaam van de server; wordt getoond in de serverlijst."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "2x \"springen\" om te vliegen"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "2x \"springen\" schakelt vlieg-modus aan/uit."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Weggooi-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Print wereldgenerator debug informatie."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "VBO aanzetten"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Veilige modus voor mods aanzetten"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Schakel verwondingen en sterven van spelers aan."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Schakel willkeurige invoer aan (enkel voor testen)."
+
+#: 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 ""
+"Zet dit aan om verbindingen van oudere cliënten te weigeren.\n"
+"Oudere cliënten zijn compatibel, in de zin dat ze niet crashen als ze "
+"verbinding \n"
+"maken met nieuwere servers, maar ze ondersteunen wellicht niet alle nieuwere "
+"mogelijkheden."
+
+#: 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 ""
+"Sta het gebruik van een externe media-server toe (indien opgegeven door de "
+"server).\n"
+"Het gebruik van externe media-servers versnelt het downloaden van media "
+"(bijv. texturen) aanzienlijk\n"
+"bij het maken van een verbinding met een server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"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."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Schakelt animatie van inventaris items aan."
+
+#: 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 ""
+"bumpmapping aanzetten voor texturen. Normalmaps moeten al in de texture pack "
+"zitten\n"
+"of ze moeten automatisch gegenereerd worden.\n"
+"Schaduwen moeten aanstaan."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "Schakelt caching van facedir geroteerde meshes."
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Schakelt Filmisch Toon Mapping in"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Schakelt de mini-kaart in."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Experimentele optie. Kan bij een waarde groter dan 0 zichtbare\n"
+"ruimtes tussen blokken tot gevolg hebben."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS in het pauze-menu"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Loopbeweging bij vallen"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Terugval-font"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Terugval-font schaduw"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Terugval-font schaduw alphawaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Terugval-fontgrootte"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Snel toets"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Versnelling in snelle modus"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Snelheid in snelle modus"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Snelle modus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use 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."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Zichthoek"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Zichthoek in graden."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Bestand in de map 'client/serverlist/' met favoriete servers die getoond "
+"worden in de multiplayer tab."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr "Filler Diepte"
+
+#: 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 "Filters"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Vast kiemgetal"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Vliegen toets"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Vliegen"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Mist"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Mist aan/uitschakelen toets"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Font pad"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Fontschaduw"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Fontschaduw alphawaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Fontschaduw alphawaarde (ondoorzichtigheid, tussen 0 en 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "Fontschaduw afstand. Indien 0, dan wordt geen schaduw getekend."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Lettergrootte"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr "Formaat van screenshots."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Vooruit toets"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Freetype fonts"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Tot welke afstand blokken gegenereerd worden voor cliënten. In mapblokken "
+"(16 nodes)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Tot welke afstand blokken naar cliënten gestuurd worden. In mapblokken (16 "
+"nodes)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Volledig scherm"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "BPP bij volledig scherm"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Volledig scherm modus."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "GUI schaalfactor"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "GUI schalingsfilter"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "GUI schalingsfilter: txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Generiek"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Genereer normaalmappen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"Wereldgenerator instellingen specified voor generator v6.\n"
+"Indien sneeuwgebieden aanstaan, dan worden oerwouden ook aangezet, en wordt "
+"de \"jungles\" vlag genegeerd.\n"
+"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+"waarde.\n"
+"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Grafisch"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Zwaartekracht"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP Modules"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "HUD aan/uitschakelen toets"
+
+#: 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 ""
+"Behandeling van verouderde lua api aanroepen:\n"
+"- legacy: (probeer) het oude gedrag na te bootsen (standaard voor een "
+"'release' versie).\n"
+"- log: boots het oude gedrag na, en log een backtrace van de aanroep "
+"(standaard voor een 'debug' versie).\n"
+"- error: stop de server bij gebruik van een verouderde aanroep "
+"(aanbevolen voor mod ontwikkelaars)."
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "Vertikale aanvangsgroote van het openingsvenster."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Hoogte waarop wolken voorbijdrijven."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "Hoge-nauwkeurigheid FPU"
+
+#: src/settings_translation_file.cpp
+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
+msgid "How deep to make rivers"
+msgstr "Hoe diep rivieren te maken"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Tot op welke afstand van actieve spelers blokken 'actief' zijn. In blokken "
+"(van 16 nodes).\n"
+"In actieve blokken worden objecten geladen (bijv. dieren die rondlopen) en "
+"ABMs uitgevoerd (bijv. groeien van planten)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+"Het aantal blokken dat totaal tegelijk onderweg kan zijn, voor de hele "
+"server."
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr "Het aantal blokken dat per cliënt tegelijk onderweg kan zijn."
+
+#: 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 ""
+"De tijd die de server wacht voordat een ongebruikt mapblok vergeten wordt.\n"
+"Een hogere waarde zorgt voor een vloeiender spelervaring, maar kost meer "
+"geheugen."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Hoe breed rivieren te maken"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 server"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6 ondersteuning."
+
+#: 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 ""
+"Beperk de FPS tot maximaal deze waarde, zodat geen processor-\n"
+"kracht verspild wordt zonder dat het toegevoegde waarde heeft."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Indien uitgeschakeld, dan wordt met de \"gebruiken\" toets snel gevlogen "
+"wanneer de \"vliegen\" en de \"snel\" modus aanstaan."
+
+#: 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 ""
+"Indien deze optie aanstaat, in combinatie met \"vliegen\" modus, dan kan de "
+"speler door vaste objecten heenvliegen.\n"
+"Dit vereist het \"noclip\" voorrecht op de server."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Indien aangeschakeld, dan wordt de \"gebruiken\" toets gebruikt voor "
+"omlaagklimmen en dalen i.p.v. de \"kruipen\" toets."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+"Indien aangeschakeld worden speleracties opgeslagen zodat ze teruggerold "
+"kunnen worden.\n"
+"Deze instelling wordt alleen bij het starten van de server gelezen."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr "Valsspeelbescherming uitschakelen in multiplayer modus."
+
+#: 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 ""
+"Zorg dat de server niet stopt in geval van ongeldige wereld-data.\n"
+"Alleen aan te schakelen indien bekend is wat de consequenties zijn."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+"Spelers kunnen zich niet aanmelden zonder wachtwoord indien aangeschakeld."
+
+#: 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 ""
+"Indien aangeschakeld, kan een speler blokken plaatsen op de eigen positie "
+"(het niveau van de voeten en van de ogen).\n"
+"Dit vergemakkelijkt het werken in nauwe ruimtes."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+"Indien aangeschakeld, dan worden spelers altijd op deze locatie geboren."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Wereldfouten negeren"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "Spel"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Chat console achtergrond alphawaarde (ondoorzichtigheid, tussen 0 en 255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Chat console achtergrondkleur (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Interval voor het opslaan van belangrijke veranderingen in de wereld. In "
+"seconden."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr "Interval voor het sturen van de kloktijd naar cliënten."
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "inventaris items animaties"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Rugzak toets"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Muibeweging omkeren"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Vertikale muisbeweging omkeren."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Bestaansduur van objecten"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"Juliaverzameling: Aantal iteraties van de recursieve functie.\n"
+"Bepaalt de schaal van de kleinste details."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Juliaverzameling: X-waarde van de 4D vorm.\n"
+"Bereik is ongeveer -2 tot 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Juliaverzameling: Y-waarde van de 4D vorm.\n"
+"Bereik is ongeveer -2 tot 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Juliaverzameling: Z-waarde van de 4D-vorm.\n"
+"Bereik is ongeveer -2 tot 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Springen toets"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Sprinsnelheid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om oneindige zichtastand aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets voor het weggooien van het geselecteerde object.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om oneindige zichtastand aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets voor springen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om snel te bewegen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de speler achteruit te bewegen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de speler vooruit te bewegen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de speler naar links te bewegen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de speler naar rechts te bewegen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de chat-console te openen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om het chat-window te openen om commando's te typen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om het chat-window te openen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om het rugzak-window te openen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om debug-stapels te printen. Gebruikt voor ontwikkeling.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om te kruipen.\n"
+"Wordt ook gebruikt om naar beneden te klimmen en te dalen indien "
+"aux1_descends uitstaat.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om tussen 1e-persoon camera en 3e-persoon camera te schakelen.\n"
+"Zie 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 ""
+"Toets om screenshot te maken.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om cinematic modus aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om de mini-kaart aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om snelle modus aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om vliegen aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om 'noclip' modus aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om camera-verversing aan/uit te schakelen. Enkel gebruikt voor "
+"ontwikkeling.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om debug informatie aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om de HUD aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om het tonen van chatberichten aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om mist aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Toets om het tonen van de code-profiler aan/uit te schakelen. Gebruikt voor "
+"ontwikkeling.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Toets om oneindige zichtastand aan/uit te schakelen.\n"
+"Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Gebruik de 'gebruiken'-toets voor klimmen en dalen"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Taal"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Grote grotten diepte"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Lava Kenmerken"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Type van bladeren"
+
+#: 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 ""
+"Type bladeren:\n"
+"- Fancy: alle zijden zichtbaar\n"
+"- Simple: enkel buitenzijden zichtbaar; special_tiles worden gebruikt "
+"indien gedefiniëerd\n"
+"- Opaque: geen doorzichtige bladeren"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Toets voor links"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+"Lengte van server stap, en interval waarin objecten via het netwerk ververst "
+"worden."
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr "Tijd tussen ABM executie cycli"
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr "Tijd tussen NodeTimer executie cycli"
+
+#: 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 ""
+"Hoeveelheid logging die geschreven wordt naar debug.txt:\n"
+"- <leeg> (geen logging)\n"
+"- none (enkel berichten zonder gedefiniëerd niveau)\n"
+"- error (alles van minstens fout-niveau)- warning (alles van minstens "
+"waarschuwings-niveau)- action (alles van minstens actie-niveau)- info "
+"(alles van minstens informatie-niveau)- verbose (alles)"
+
+#: 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"
+
+#: 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 ""
+"Beperking van aantal parallele HTTP verzoeken. Van toepassing op:\n"
+"- Laden van media indien een externe media-server gebruikt wordt.\n"
+"- Laden van de serverlijst en server-aankondigingen.\n"
+"- Downloads vanuit het hoofdmens (bijv. mods).\n"
+"(Alleen van toepassing indien cURL meegecompileerd is)."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Vloeibaarheid van vloeistoffen"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Vloeistof viscositeit gladmaakfactor"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "Vloeistof-verspreiding per stap"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "Inkortingstijd vloeistof-wachtrij"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Zinksnelheid in vloeistof"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Vloeistof verspreidingssnelheid in seconden."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "Vloeistof verspreidingssnelheid"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Hoofdmenu spelbeheer"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Hoofdmenu modbeheer"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Hoofdmenu script"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Mist en hemelkleur afhankelijk van tijd van de dag (zonsopkomst/ondergang) "
+"en kijkrichting."
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+"Maakt dat DirectX werkt met LuaJIT. Schakel dit uit als het problemen geeft."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Wereld map"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Wereldgenerator instellingen specified voor generator v6.\n"
+"Indien sneeuwgebieden aanstaan, dan worden oerwouden ook aangezet, en wordt "
+"de \"jungles\" vlag genegeerd.\n"
+"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+"waarde.\n"
+"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#: 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.\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."
+msgstr ""
+"Wereldgenerator instellingen specified voor generator v7.\n"
+"\"ridges\" zijn rivieren.\n"
+"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+"waarde.\n"
+"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Wereldgenerator instellingen specified voor generator v6.\n"
+"Indien sneeuwgebieden aanstaan, dan worden oerwouden ook aangezet, en wordt "
+"de \"jungles\" vlag genegeerd.\n"
+"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+"waarde.\n"
+"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"Wereldgenerator instellingen specified voor generator v6.\n"
+"Indien sneeuwgebieden aanstaan, dan worden oerwouden ook aangezet, en wordt "
+"de \"jungles\" vlag genegeerd.\n"
+"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+"waarde.\n"
+"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Wereld-grens"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Interval voor opslaan wereld"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Max aantal wereldblokken"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "Wereldblok vergeet-tijd"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Valleien Wereldgenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Wereldgenerator landschapstemperatuur ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Wereldgenerator landschapsvochtigheidsovergangen ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Wereldgenerator landschapsvochtigheid ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Wereldgenerator debug"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Wereldgenerator vlaggen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Vlakke Wereldgenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr "Vlakke wereldgenerator grot breedte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr "Vlakke wereldgenerator grotten (1) ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr "Vlakke wereldgenerator grotten (2) ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr "Fractal wereldgenerator vuldiepte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Vlakke wereldgenerator vlaggen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Vlakke wereldgenerator grondniveau"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Vlakke wereldgenerator heuvel steilheid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Vlakke wereldgenerator heuvel grenswaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Vlakke wereldgenerator meer steilheid"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Vlakke wereldgenerator meer grenswaarde"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr "Vlakke wereldgenerator grote grotten diepte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr "Vlakke Wereldgenerator basisterrein ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Fractal wereldgenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr "Fractal wereldgenerator grot breedte"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "Fractal wereldgenerator grotten (1) ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "Fractal wereldgenerator grotten (2) ruisparameters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr "Fractal wereldgenerator vuldiepte ruisparameters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Fractal wereldgenerator vlaggen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Fractal wereldgenerator julia iteraties"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "Fractal wereldgenerator julia w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "Fractal wereldgenerator julia x"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Fractal wereldgenerator julia y"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Fractal wereldgenerator julia z"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Fractal wereldgenerator julia centrum-afstand"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Fractal wereldgenerator julia schaal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Fractal wereldgenerator zeebodem parameters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Fractal wereldgenerator julia w-doorsnede"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr "Wereldgenerator landschapstemperatuurovergangen ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Wereldgenerator"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Wereldgenerator v5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Fractal wereldgenerator julia schaal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr "Wereldgenerator v5 grot 1 ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr "Wereldgenerator v5 grot 2 ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr "Wereldgenerator v5 ruisparameters factor"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr "Wereldgenerator v5 vuldiepte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr "Wereldgenerator v5 hoogte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Wereldgenerator v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr "Wereldgenerator v6 appelbomen ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "Wereldgenerator v6 strand frequentie"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr "Wereldgenerator v6 strand ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr "Wereldgenerator v6 landschap ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr "Wereldgenerator v6 grotten ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Wereldgenerator v6 woestijn ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "Wereldgenerator v6 vlaggen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr "Wereldgenerator v6 hoogte-selectie ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr "Wereldgenerator v6 vochtigheid ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr "Wereldgenerator v6 modder ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr "Wereldgenerator v6 steilheid ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr "Wereldgenerator v6 terrein-hoogte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr "Wereldgenerator v6 basisterrein ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr "Wereldgenerator v6 bomen ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Wereldgenerator v7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Fractal wereldgenerator julia schaal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr "Wereldgenerator v7 grotten (1) ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr "Wereldgenerator v7 grotten (2) ruisparameters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr "Wereldgenerator v7 vuldiepte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "Wereldgenerator v7 vlaggen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr "Wereldgenerator v7 hoogte-selectie ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr "Wereldgenerator v7 heuvel-hoogte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr "Wereldgenerator v7 bergen ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr "Wereldgenerator v7 richel ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr "Wereldgenerator richel-water ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr "Wereldgenerator v7 terrein-hoogte ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr "Wereldgenerator v7 terrein basis ruisparameters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr "Wereldgenerator v7 terrein-'persist' ruisparameters"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr "Maximale afstand van te genereren blokken"
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr "Maximale afstand voor te versturen blokken"
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+"Maximaal aantal vloeistof-nodes te verwerken (dwz verspreiden) per server-"
+"stap."
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr "Maximaal extra aantal blokken voor clearobjects"
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr "Maximaal aantal pakketten per iteratie"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr "Maximum FPS"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "Maximum FPS als het spel gepauzeerd is."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "Maximaal aantal geforceerd geladen blokken"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Maximum hotbar width"
+msgstr "Maximale breedte van de 'hotbar'"
+
+#: 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
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"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
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"Maximaal aantal blokken in de wachtrij om van disk geladen te worden.\n"
+"Laat leeg om een geschikt aantal automatisch te laten berekenen."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "Maximaal aantal geforceerd geladen blokken."
+
+#: 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 ""
+"Maximaal aantal wereldblokken dat door de cliënt in het geheugen gehouden "
+"wordt.\n"
+"Gebruik -1 voor een onbeperkt aantal."
+
+#: 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 ""
+"Maximaal aantal pakketen dat per server-stap verzonden wordt. Verminder dit "
+"aantal\n"
+"bij een langzame verbinding, maar niet lager dan het gewenste aantal "
+"cliënten\n"
+"dat gelijk verbonden kan zijn."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "Maximaal aantal spelers dat tegelijk verbonden kan zijn."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "Maximaal aantal objecten per block."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+"Maximaal gedeelte van het window dat gebruikt mag worden voor de hotbar.\n"
+"Dit is nuttig als er iets links of rechts ervan getoond moet worden."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "Maximaal aantal tegelijk te verzenden blokken per cliënt"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "Maximaal aantal tegelijk te verzenden blokken (totaal)"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+"Maximale duur voor een download van een bestand (bijv. een mod). In "
+"milliseconden."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Maximaal aantal gebruikers"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "Maximaal aantal objecten per blok"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "Bericht van de dag"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "Toon bericht aan spelers die verbinding maken."
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Mini-kaart"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Mini-kaart toets"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Mini-kaart scan-hoogte"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "Minimale textuur-grootte voor filters"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip-Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "Mod-winkel details URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "Mod-winkel download URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "Mod-winkel mod-lijst URL"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Vaste-breedte font pad"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "Vaste-breedte font grootte"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "Muis-gevoeligheid"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Muis-gevoeligheidsfactor."
+
+#: 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 ""
+"Vermenigvuldigingsfactor van loopbeweging bij vallen.\n"
+"Bijvoorbeeld: 0 voor geen loopbeweging; 1.0 voor normale loopbeweging; 2.0 "
+"voor twee keer grotere loopbeweging."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"Vermenigvuldigingsfactor van loopbeweging.\n"
+"Bijvoorbeeld: 0 voor geen loopbeweging; 1.0 voor normale loopbeweging; 2.0 "
+"voor twee keer grotere loopbeweging."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"Wereldgenerator te gebruiken wanneer een nieuwe wereld gecreëerd wordt.\n"
+"Bij het maken van een nieuwe wereld vanuit het hoofdmenu kan een andere "
+"generator gekozen worden."
+
+#: 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 ""
+"Naam van de speler.\n"
+"Voor servers: spelers met deze naam krijgen beheerdersrechten.\n"
+"Voor cliënten: standaardspelernaam voor verbindingen met een server\n"
+"(in het hoofdmenu kan een andere naam gekozen worden)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+"Naam van de server. Wordt getoond in de serverlijst, en wanneer spelers "
+"inloggen."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Netwerk"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"Netwerkpoort van de server (UDP).\n"
+"Bij starten vanuit het hoofdmenu kan een andere poort opgegeven worden."
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "Nieuwe spelers dienen dit wachtwoord op te geven."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Noclip"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Noclip key"
+msgstr "Noclip-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "Oplichtende node"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "NodeTimer interval"
+msgstr "Kloktijd verstuur-interval"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr ""
+"Ruisparameters voor landschapstemperaturen, -vochtigheid en -overgangen."
+
+#: 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 "Aantal 'emerge' threads"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+"Aantal 'emerge' threads. Laat dit leeg, of verhoog dit aantal om meerdere "
+"threads te\n"
+"gebruiken. Dit versnelt de wereldgeneratie op meer-processorsystemen "
+"aanzienlijk\n"
+"maar het kan de vorm van sommige grotten enigszins verstoren."
+
+#: 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 ""
+"Aantal extra blokken (van 16x16x16 nodes) dat door het commando '/"
+"clearobjects' tegelijk\n"
+"geladen mag worden.\n"
+"Dit aantal is een compromis tussen snelheid enerzijds (vanwege de overhead "
+"van een sqlite\n"
+"transactie), en geheugengebruik anderzijds (4096 = ca. 100MB)."
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "Aantal parallax occlusie iteraties."
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Parallax occlusie"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "Parallax occlusie schaal"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion bias"
+msgstr "Parallax occlusie"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Parallax occlusie iteraties"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Parallax occlusie modus"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion strength"
+msgstr "Parallax occlusie"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "Pad van TrueType font of bitmap."
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Pad waar screenshots bewaard worden."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+"Pad van de texturen-map. Naar texturen wordt gezocht beginnend bij deze map."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Fysica"
+
+#: 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 ""
+"Speler kan vliegen, zonder invloed van de zwaartekracht.\n"
+"De speler moet wel in het bezit zijn van het \"vliegen\" voorrecht."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Spelernaam"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr "Speler verplaatsingsafstand"
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "Speler-gevechten"
+
+#: 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 ""
+"Netwerk-poort (UDP) waarmee verbinding gemaakt moet worden.In het hoofdmenu "
+"kan een andere waarde opgegeven worden."
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+"Voorkom dat mods onveilige commando's uitvoeren, zoals shell commando's."
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+"Interval waarmee profiler-gegevens geprint worden. 0 = uitzetten. Dit is "
+"nuttig voor ontwikkelaars."
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "Profiler aan/uit toets"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "Profilergegevens print interval"
+
+#: 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 ""
+"Straal van wolken, in 64-node eenheden.\n"
+"Waarden groter dan 26 hebben scherpe wolkenranden tot gevolg."
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "Willekeurige invoer"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Zichtafstand toets"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr "Externe media"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Poort van externe server"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr "Vervangt het standaard hoofdmenu door een ander."
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Toets voor rechts"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "Rechts-klik herhalingsinterval"
+
+#: 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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "Opnemen terugrolgegevens"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Ronde mini-kaart"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "Bewaar de ontvangen wereld lokaal (op de cliënt)."
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "Lokaal bewaren van de server-wereld"
+
+#: 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 ""
+"Schaal de GUI met een bepaalde factor.\n"
+"Er wordt een dichtste-buur-anti-alias filter gebruikt om de GUI te schalen.\n"
+"Bij verkleinen worden sommige randen minder duidelijk, en worden\n"
+"pixels samengevoegd. Pixels bij randen kunnen vager worden als\n"
+"een niet-gehele schaalfactor gebruikt wordt."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Schermhoogte"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Schermbreedte"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Screenshot"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Map voor screenshots"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Map voor screenshots"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Screenshot"
+
+#: 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 "Security"
+msgstr "Veiligheid"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Zie http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "Kleur van selectie-randen (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "Kleur van selectie-randen"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "Breedte van selectie-randen"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Server / Singleplayer"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "Server URL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Adres van de server"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Omschrijving van de server"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Naam van de server"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Netwerkpoort van de server"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL van de publieke serverlijst"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Bestand met publieke serverlijst"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+"Stel de taal in. De systeem-taal wordt gebruikt indien leeg.\n"
+"Een herstart is noodzakelijk om de nieuwe taal te activeren."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Bewegende bladeren staan aan indien 'true'.Dit vereist dat 'shaders' ook "
+"aanstaan."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Bewegende planten staan aan indien 'true'Dit vereist dat 'shaders' ook "
+"aanstaan."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Golvend water staat aan indien 'true'Dit vereist dat 'shaders' ook aanstaan."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"Shaders maken bijzondere visuele effecten mogelijk, en kunnen op sommige "
+"videokaarten ook de snelheid verhogen.\n"
+"Alleen mogelijk met OpenGL."
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr "Vorm van de mini-kaart. Aan = rond, uit = vierkant."
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Toon debug informatie"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "Afsluitbericht van server"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Grootte van chunks die per keer gegenereerd worden door de wereldgenerator "
+"in mapblokken (16 nodes)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Vloeiende verlichting"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Maakt camerabewegingen vloeiender bij het rondkijken.\n"
+"Nuttig bij het opnemen van videos."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+"Maakt camera-rotatie vloeiender in cintematic modus. 0 om uit te zetten."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Maakt camera-rotatie vloeiender. O om uit te zetten."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Kruipen toets"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "Geluid"
+
+#: 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 ""
+"URL waar de cliënt media kan ophalen, in plaats van deze over UDP\n"
+"van de server te ontvangen.\n"
+"$filenaam moet via cURL beschikbaar zijn met adres $remote_media$filename\n"
+"(remote_media moet dus eindigen in een slash ('/')).\n"
+"Bestanden die niet gevonden worden, worden op de normale manier opgehaald."
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "Vast geboortepunt"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "Stricte protocolcontrole"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "Sqlite synchrone modus"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "Pad van texturen"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr "Het netwerk-adres waar de server op verbindingen wacht."
+
+#: 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 ""
+"De voorrechten standaard gegund aan nieuwe spelers.\n"
+"Gebruik het server-commando '/privs' in het spel voor een volledige lijst\n"
+"van beschikbare voorrechten op de server."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Het Irrlicht backend voor renderen."
+
+#: 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 ""
+"Het aantal seconden dat de vloeistof-verspreidingswachtrij mag groeien\n"
+"terwijl die al te lang is. Bij overschrijding van deze tijd worden oude "
+"items\n"
+"uit de rij verwijderd. Gebruik 0 om dit uit te zetten."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+"De tijd in seconden tussen herhaalde rechts-klikken als de rechter muisknop "
+"ingedrukt gehouden wordt."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "Dit font wordt gebruikt voor bepaalde talen."
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+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 ""
+"De tijd in seconden dat weggegooide of gevallen objecten bestaan.\n"
+"Gebruik -1 voor een onbeperkte bestaansduur."
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr "Kloktijd verstuur-interval"
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr "Tijdsnelheid"
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+"Tijdsduur waarna de cliënt ongebruikte wereldgegevens uit het geheugen "
+"verwijdert."
+
+#: 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 ""
+"Om vertraging te verminderen worden blokken minder snel verstuurd als een "
+"speler aan het bouwen is.\n"
+"Deze instelling bepaalt hoelang ze achtergehouden worden nadat een speler "
+"een node geplaatst of verwijderd heeft."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "Camera-modus veranderen toets"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "Tooltip tijdsduur"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Tri-Lineare Filtering"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"Aan = 256\n"
+"Uit = 128\n"
+"Gebruik dit om de mini-kaart sneller te maken op langzamere machines."
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "Vertrouwde mods"
+
+#: src/settings_translation_file.cpp
+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
+msgid "Unlimited player transfer distance"
+msgstr "Onbeperkte speler zichtbaarheidsafstand"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "Vergeet ongebruikte server gegevens"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "Toon 3D wolken in plaats van platte wolken."
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr "Toon wolken in de achtergrond van het hoofdmenu."
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr "Gebruik anisotropische filtering voor texturen getoond onder een hoek."
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "Gebruik bi-lineaire filtering bij het schalen van texturen."
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Gebruiken toets"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+"Gebruik mip-mapping om texturen te schalen. Kan een snelheidsverbetering "
+"geven."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "Gebruik tri-lineaire filtering om texturen te schalen."
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Nuttig voor mod-ontwikkelaars."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "V-Sync"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "Vertikale scherm-synchronisatie."
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Video driver"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "Loopbeweging"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "Toets voor verkleinen zichtafstand"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "Toets voor vergroten zichtafstand"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Viewing range"
+msgstr "Maximale zichtafstand"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Geluidsniveau"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Juliaverzameling: W-coördinaat van de 3D doorsnede van de 4D vorm.\n"
+"Bereik is ongeveer -2 tot 2."
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "Loopsnelheid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Waterniveau"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Waterniveau"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "Waterniveau van de wereld."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "Bewegende nodes"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Bewegende bladeren"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "Bewegende planten"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Golvend water"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Golfhoogte van water"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Golflengte van water"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "Golfsnelheid van water"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+"Als gui_scaling_filter aan staat worden alle GUI-plaatjes\n"
+"softwarematig gefilterd. Sommige plaatjes worden wel direct\n"
+"in hardware gegenereerd (bijv. render-to-texture voor nodes\n"
+"in de rugzak)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+"Als bi-lineaire, tri-lineaire of anisotropische filters gebruikt worden, "
+"dan\n"
+"kunnen lage-resolutie texturen vaag worden. Verhoog hun resolutie dmv\n"
+"naaste-buur-interpolatie zodat de scherpte behouden blijft. Deze optie\n"
+"bepaalt de minimale textuurgroote na het verhogen van de resolutie. Hogere\n"
+"waarden geven een scherper beeld, maar kosten meer geheugen. Het is "
+"aanbevolen\n"
+"machten van 2 te gebruiken. Een waarde groter dan 1 heeft wellicht geen "
+"zichtbaar\n"
+"effect indien bi-lineaire, tri-lineaire of anisotropische niet aan staan."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Grenzen van de wereldgenerator.\n"
+"- Maximale waarde: 31000 (hogere waarden worden niet gehonoreerd).\n"
+"- De wereld wordt gegenereerd per gebied van 80x80x80 nodes (5x5x5 "
+"mapblokken).\n"
+"- Het centrum-gebied begint op coördinaten (-32, -32, -32).\n"
+"- Enkel groepen die vallen binnen map_generation_limit worden gegenereerd"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr "Gebruik freetype fonts. Dit vereist dat freetype ingecompileerd is."
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr "Node-animaties in wereldblokken niet synchroniseren."
+
+#: 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 ""
+"Geef de locatie van spelers door aan cliënten ongeacht de afstand.\n"
+"Verouderd. Gebruik 'player_transfer_distance'."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr "Maak het mogelijk dat spelers elkaar kunnen verwonden en doden."
+
+#: 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 ""
+"Verzoek de cliënten om na een servercrash automatisch opnieuw te verbinden.\n"
+"Zet dit aan als de server na een crash automatisch herstart."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+"Maak het einde van het zichtbereik mistig, zodat het einde niet opvalt."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+"Laat debug informatie zien in de cliënt (heeft hetzelfde effect als de F5 "
+"toets)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Width component of the initial window size."
+msgstr "Horizontale aanvangsgroote van het window."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Breedte van de lijnen om een geselecteerde node."
+
+#: 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 ""
+"Wereld-map (alle informatie over de wereld staat in deze map).\n"
+"Deze instelling is niet nodig als de server vanuit het hoofdmenu wordt "
+"gestart."
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "timeout voor cURL download"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "Maximaal parallellisme in cURL"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL timeout"
+
+#~ msgid "Item textures..."
+#~ msgstr "Voorwerp-texturen..."
#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
#~ msgstr ""
-#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n"
-#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie "
-#~ "bewaard. "
+#~ "Maak de wateroppervlakte iets lager, zodat het niet de hele node vult.\n"
+#~ "Dit is niet echt geoptimaliseerd, en vloeiende belichting van de\n"
+#~ "wateroppervlakte werkt niet als dit is aangeschakeld."
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr "Laat geselecteerde nodes oplichten (schakelt selectie-randen uit)."
#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#~ "Julia set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by j_scale for offsets in nodes."
#~ msgstr ""
-#~ "LEt op: Sommige ingestelde mods zijn vermist.\n"
-#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. "
+#~ "Juliaverzameling: (X,Y,X) afstanden van wereld-centrum.\n"
+#~ "Bereik is ongeveer -2 tot 2. Vermenigvuldig met j_scale voor de afstand "
+#~ "in nodes."
+
+#~ msgid ""
+#~ "Julia set: W value determining the 4D shape.\n"
+#~ "Range roughly -2 to 2."
+#~ msgstr ""
+#~ "Juliaverzameling: W-waarde van de 4D vorm.\n"
+#~ "Bereik is ongeveer -2 tot 2."
+
+#~ msgid ""
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Toets voor het verkleinen van de zichtafstand. Dit verandert de minimale "
+#~ "zichtafstand.\n"
+#~ "Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Toets voor het vergroten van de zichtafstand. Dit verandert de minimale "
+#~ "zichtafstand.\n"
+#~ "Zie http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Mandelbrot set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by m_scale for offsets in nodes."
+#~ msgstr ""
+#~ "Mandelbrot verzameling: (X,Y,Z) afstanden vanaf wereld-centrum.\n"
+#~ " Bereik is ongeveer -2 tot 2. Vermenigvuldig met m_scale voor de afstand "
+#~ "in nodes."
+
+#~ msgid "Mandelbrot set: Approximate (X,Y,Z) scales in nodes."
+#~ msgstr "Mandelbrot verzameling: (X,Y,Z) schaal, in nodes (bij benadering)."
+
+#~ msgid ""
+#~ "Mandelbrot set: Iterations of the recursive function.\n"
+#~ "Controls scale of finest detail."
+#~ msgstr ""
+#~ "Mandelbrot verzameling: Aantal iteraties van de recursieve functie.\n"
+#~ "Bepaalt de schaal van de kleinste details."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen fractal.\n"
+#~ "'julia' selects a julia set to be generated instead of a mandelbrot set.\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."
+#~ msgstr ""
+#~ "Wereldgeneratie instellingen voor de fractal generator.\n"
+#~ "'julia' selecterd een julia-verzameling in plaats van een mandebrot-"
+#~ "verzameling.\n"
+#~ "Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+#~ "waarde.\n"
+#~ "Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#~ msgid "Mapgen fractal mandelbrot iterations"
+#~ msgstr "Fractal wereldgenerator mandelbrot iteraties"
+
+#~ msgid "Mapgen fractal mandelbrot offset"
+#~ msgstr "Fractal wereldgenerator mandelbrot centrum-afstand"
+
+#~ msgid "Mapgen fractal mandelbrot scale"
+#~ msgstr "Fractal wereldgenerator mandelbrot schaal"
+
+#~ msgid "Mapgen fractal mandelbrot slice w"
+#~ msgstr "Fractal wereldgenerator mandelbrot w-doorsnede"
+
+#~ msgid ""
+#~ "Maximum distance above water level for player spawn.\n"
+#~ "Larger values result in spawn points closer to (x = 0, z = 0).\n"
+#~ "Smaller values may result in a suitable spawn point not being found,\n"
+#~ "resulting in a spawn at (0, 0, 0) possibly buried underground."
+#~ msgstr ""
+#~ "Maximum hoogte boven waterniveau waar een speler geboren wordt.\n"
+#~ "Bij hogere waarden zullen de plaatsen dichter bij (x = 0, z = 0) liggen.\n"
+#~ "Bij lagere waarden kan het zijn dat een geschikte plek niet gevonden "
+#~ "wordt,\n"
+#~ "in dat geval wordt de speler geboren op (0, 0, 0), mogelijk onder de "
+#~ "grond."
+
+#~ msgid ""
+#~ "Minimum wanted FPS.\n"
+#~ "The amount of rendered stuff is dynamically set according to this. and "
+#~ "viewing range min and max."
+#~ msgstr ""
+#~ "Minimaal gewenste FPS.\n"
+#~ "De hoeveelheid gerenderd materiaal wordt aangepast afhankelijk van deze "
+#~ "waarde, en van de min en max zichtafstanden."
+
+#~ msgid "New style water"
+#~ msgstr "Nieuw water"
+
+#~ msgid ""
+#~ "Pre-generate all item visuals used in the inventory.\n"
+#~ "This increases startup time, but runs smoother in-game.\n"
+#~ "The generated textures can easily exceed your VRAM, causing artifacts in "
+#~ "the inventory."
+#~ msgstr ""
+#~ "Genereer beelden van objecten in de rugzak vooraf.\n"
+#~ "De start-tijd wordt hierdoor langer, maar het spel wordt vloeiender.\n"
+#~ "Dit kost veel geheugen op de videokaart. Als die onvoldoende geheugen "
+#~ "heeft kan dit resulteren in vreemde effecten."
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Laad rugzak-texturen vooraf"
+
+#~ msgid "Vertical initial window size."
+#~ msgstr "Aanvangshoogte van het window."
+
+#~ msgid "Vertical spawn range"
+#~ msgstr "Vertikaal geboortegebied"
+
+#~ msgid "Viewing range minimum"
+#~ msgstr "Minimale zichtafstand"
+
+#~ msgid "Wanted FPS"
+#~ msgstr "Gewenste FPS"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Reset Singleplayer wereld"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Schaal-factor toegepast op menu elementen: "
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Downloaden"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr ""
+#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item"
+
+#~ msgid "is required by:"
+#~ msgstr "is benodigd voor:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Instellingen bewaard. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Waarschuwing: Instellingen niet consistent. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens"
+
+#~ msgid "Show Public"
+#~ msgstr "Publieke server"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Favourieten"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Laat het adres leeg om een lokale server te starten."
+
+#~ msgid "Create world"
+#~ msgstr "Maak wereld aan"
+
+#~ msgid "Address required."
+#~ msgstr "IP-adres nodig."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Deze bestanden worden verwijderd"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Niet alle bestanden zijn verwijderd"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1295,64 +4738,131 @@ msgstr "Zoom"
#~ "- ESC: Menu\n"
#~ "- T: Chat\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Niet alle bestanden zijn verwijderd"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "LEt op: Sommige ingestelde mods zijn vermist.\n"
+#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. "
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n"
+#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie "
+#~ "bewaard. "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden"
+#~ msgid "Local install"
+#~ msgstr "Plaatselijk installeren"
-#~ msgid "Files to be deleted"
-#~ msgstr "Deze bestanden worden verwijderd"
+#~ msgid "Add mod:"
+#~ msgstr "Mod toevoegen:"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd"
+#~ msgid "MODS"
+#~ msgstr "MODS"
-#~ msgid "Address required."
-#~ msgstr "IP-adres nodig."
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "TEXTUREN"
-#~ msgid "Create world"
-#~ msgstr "Maak wereld aan"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "SINGLEPLAYER"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Laat het adres leeg om een lokale server te starten."
+#~ msgid "Finite Liquid"
+#~ msgstr "Eindige vloeistoffen"
-#~ msgid "Show Favorites"
-#~ msgstr "Favourieten"
+#~ msgid "Preload item visuals"
+#~ msgstr "Voorwerpen vooraf laden"
-#~ msgid "Show Public"
-#~ msgstr "Publieke server"
+#~ msgid "SETTINGS"
+#~ msgstr "INSTELLINGEN"
-#~ msgid "Advanced"
-#~ msgstr "Geavanceerd"
+#~ msgid "Password"
+#~ msgstr "Wachtwoord"
-#~ msgid "Multiplayer"
-#~ msgstr "Multiplayer"
+#~ msgid "Name"
+#~ msgstr "Naam"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens"
+#~ msgid "START SERVER"
+#~ msgstr "START SERVER"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Waarschuwing: Instellingen niet consistent. "
+#~ msgid "CLIENT"
+#~ msgstr "CLIENT"
-#~ msgid "Configuration saved. "
-#~ msgstr "Instellingen bewaard. "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Mod toevoegen"
-#~ msgid "is required by:"
-#~ msgstr "is benodigd voor:"
+#~ msgid "Remove selected mod"
+#~ msgstr "Geselecteerde mod verwijderen"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr ""
-#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item"
+#~ msgid "EDIT GAME"
+#~ msgstr "SPEL AANPASSEN"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Anisotrope Filtering"
+#~ msgid "new game"
+#~ msgstr "nieuw spel"
+
+#~ msgid "Mods:"
+#~ msgstr "Mods:"
+
+#~ msgid "GAMES"
+#~ msgstr "SPELLEN"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren"
+
+#~ msgid "Game Name"
+#~ msgstr "Spel"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Herstart minetest om de driver te activeren"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#~ msgid "Rendering:"
+#~ msgstr "Rendering:"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Downloaden"
+#~ msgid "If enabled, "
+#~ msgstr "ingeschakeld"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "MP uitschakelen"
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "Wereldgenerator instellingen specified voor generator v7.\n"
+#~ "\"ridges\" zijn rivieren.\n"
+#~ "Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+#~ "waarde.\n"
+#~ "Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+
+#, fuzzy
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Algemene wereldgenerator instellingen.\n"
+#~ "Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
+#~ "waarde.\n"
+#~ "Zet \"no\" voor een vlag om hem expliciet uit te zetten.\n"
+#~ "'trees' en 'flat' zijn enkel van toepassing in mgv6."
+
+#~ msgid "No!!!"
+#~ msgstr "Nee!!!"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Publieke Serverlijst"
+
+#~ msgid "No of course not!"
+#~ msgstr "Nee, natuurlijk niet!"
diff --git a/po/pl/minetest.po b/po/pl/minetest.po
index 23d1f83c8..ea404e32b 100644
--- a/po/pl/minetest.po
+++ b/po/pl/minetest.po
@@ -7,673 +7,781 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-10-08 21:22+0200\n"
-"Last-Translator: Maciej Kasatkin <maciej.kasatkin@yahoo.com>\n"
-"Language-Team: Polish <>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-03-24 19:38+0000\n"
+"Last-Translator: red-001 <red-001@openmailbox.org>\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/minetest/minetest/"
+"pl/>\n"
"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Wystąpił błąd w skrypcie modyfikacji:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Wystąpił błąd:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu główne"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Połącz ponownie"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Serwer zażądał ponownego połączenia:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Åadowanie..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Niezgodne wersje protokołów. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Serwer narzuca wersję protokołu $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Serwer wspiera wersje protokołu od $1 do $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Spróbuj włączyć ponownie publiczną listę serwerów i sprawdź połączenie."
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Åšwiat:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Wspieramy tylko protokół w wersji $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Wspieramy protokół w wersji od $1 do $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Zależy od:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Wyłącz MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "WÅ‚Ä…cz MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "WÅ‚Ä…cz wszystkie"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Nie można włączyć moda \"$1\" gdyż nazwa zawiera niedozwolone znaki. "
+"Dozwolone sÄ… znaki [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Ukryj GrÄ™"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr ""
+msgstr "Ukryj zawartość MP"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Zależy od:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Zapisz"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Anuluj"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-#, fuzzy
-msgid "Enable MP"
-msgstr "WÅ‚Ä…cz wszystkie"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-#, fuzzy
-msgid "Disable MP"
-msgstr "Wyłącz wszystkie"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Åšwiat:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "włączone"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "WÅ‚Ä…cz wszystkie"
+#: 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:50
-msgid "World name"
-msgstr "Nazwa świata"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Utwórz"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "ÅšciÄ…gnij podgrÄ™, takÄ… jak minetest_game, z minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Generator mapy"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "ÅšciÄ…gninj z minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Gra"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Utwórz"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generator mapy"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Nie podano nazwy świata lub nie wybrano gry"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Ziarno"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr ""
+msgstr "Ostrzeżenie: Gra minimalna jest przeznaczona dla dewelperów."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Istnieje już świat o nazwie \"$1\""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nazwa świata"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Nie podano nazwy świata lub nie wybrano gry"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Nie masz zainstalowanych żadnych podgier."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Na pewno usunąć \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Tak"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Oczywiście, że nie!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Usuń"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: nie można usunąć \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: nieprawidłowy katalog \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Usunąć świat \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nie"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Zaakceptuj"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Zmień nazwe Paczki Modów:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Accept"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" nie jest poprawnÄ… flagÄ…."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Zainstaluj mod: plik: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Brak opisu ustawienia)"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Wróć do ekranu ustawień"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "PrzeglÄ…daj"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Wyłączone"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Edytuj"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "WÅ‚Ä…czone"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Składnia to 3 liczby oddzielone przecinkami i w nawiasach."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Składnia: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Gry"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mody"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Wprowadź listę flag oddzielonych przecinkami."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Wprowadź poprawną liczbę całkowitą."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Wprowadź poprawną liczbę."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Możliwe wartości: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Przywróć domyślne"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Wybierz ścieżkę"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Pokaż nazwy ustawień"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Wartość musi być większa od $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Wartość musi być mniejsza od $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Instalacja moda: nieznany typ pliku \"$1\""
+"Instalacja moda: nieznany typ pliku \"$1\" lub archiwum uszkodzone"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Instalacja $1 do $2 nie powiodła się"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Zainstaluj mod: plik: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Instalacja moda: nie można znaleźć nazwy moda $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Zamknij sklep"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "ÅšciÄ…ganie $1, czekaj..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instaluj"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Nazwa świata"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Strona $1 z $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Ocena"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "Ponowna instalacja"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instaluj"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Szukaj"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nazwa świata:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Strona $1 z $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Udana instalacja:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Autorzy"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Nieposortowane"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Twórcy"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "Ponowna instalacja"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Aktywni współautorzy"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Twórcy"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Autorzy"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Byli współautorzy"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Poprzedni Główni Twórcy"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Zainstalowane Mody:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr ""
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informacje o modzie:"
-#: builtin/mainmenu/tab_mods.lua:78
-#, fuzzy
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
-msgstr "Brak informacjii"
-
-#: builtin/mainmenu/tab_mods.lua:82
-#, fuzzy
-msgid "Mod information:"
-msgstr "Brak informacjii"
+msgstr "Brak informacji o modzie"
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Zmień nazwę"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:106
-#, fuzzy
-msgid "Uninstall selected mod"
-msgstr "Usuń zaznaczony mod"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Wybierz plik moda:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Mody"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Usuń zaznaczony modyfikację"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Adres/Port"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Usuń zaznaczony modpack"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Nazwa gracza/Hasło"
+msgid "Address / Port"
+msgstr "Adres / Port :"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Lista publicznych serwerów"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Usuń"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Klient"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Połącz"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Tryb kreatywny"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "włączone"
+msgstr "Obrażenia włączone"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "włączone"
+msgid "Del. Favorite"
+msgstr "Ulubione:"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Klient"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Ulubione:"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nowy"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nazwa gracza / Hasło :"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Ustaw"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP włączone"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Rozpocznij grę/Połącz"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Przypisz Adres"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Wybierz świat:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Ustaw"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Tryb kreatywny"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Włącz obrażenia"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Publiczne"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nazwa gracza/Hasło"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nowy"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nie stworzono lub nie wybrano świata!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Port Serwera"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Publiczne"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Nie podano nazwy świata lub nie wybrano gry"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Wybierz świat:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Serwer"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Nieprzeźroczysta woda"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port Serwera"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Rozpocznij grę/Połącz"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Ozdobne drzewa"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Chmury 3D"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Ustawienia zaawansowane"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Antyaliasing:"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Pojedynczy gracz"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Filtrowanie dwuliniowe"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Filtrowanie trójliniowe"
+msgid "Bump Mapping"
+msgstr "Mapowanie wypukłości"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Zmień klawisze"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Szkło połączone"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Ozdobne liście"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmapy"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmapy i Filtr anizotropowe"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nie"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Filtrowanie wyłączone"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Płynne oświetlenie"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Mip-Mappowanie wyłączone"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "WÅ‚Ä…cz czÄ…stki"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Płynne oświetlenie"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Chmury 3D"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Płynne oświetlenie"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Nieprzeźroczysta woda"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Brak"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Połącz"
+msgid "Normal Mapping"
+msgstr "Mip-Mappowanie"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Nieprzejrzyste liście"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Nieprzejrzysta Woda"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Mapowanie paralaksy"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "WÅ‚Ä…cz Efekty CzÄ…steczkowe"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shadery"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Zmień klawisze"
-
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Pojedynczy gracz"
-
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Proste Liście"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Płynne oświetlenie"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Teksturowanie:"
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
-msgid "Bumpmapping"
+msgid "Tone Mapping"
msgstr "Mip-Mappowanie"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtrowanie trójliniowe"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
-msgstr ""
+msgstr "Ozdobne drzewa"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Ustawienia"
+msgstr "Ozdobne drzewa"
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Pojedynczy gracz"
+msgid "Waving Water"
+msgstr "Ozdobne drzewa"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Tak"
+
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Ustaw"
+msgstr "Skonfiguruj mody"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Menu główne"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Tryb jednoosobowy"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Graj"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Pojedynczy gracz"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Wybierz paczkÄ™ tekstur:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Brak informacjii"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Wybierz paczkÄ™ tekstur:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Paczki tekstur"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "Åadowanie..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Przekroczono limit czasu połączenia."
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "Sprawdzanie adresu..."
-
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Zrobione!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
-
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Tekstury przedmiotów..."
+msgstr "Initializownie nod"
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Initializowanie nod..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Menu główne"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Åadowanie tekstur..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Kompilowanie shaderów..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Błąd połączenia (brak odpowiedzi?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Nie wybrano świata ani adresu."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Nie można znaleźć lub wczytać trybu gry \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "Nieprawidłowa specyfikacja trybu gry."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menu główne"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Kontynuuj"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Nie wybrano świata ani adresu."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "ZginÄ…Å‚eÅ›."
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nazwa gracza zbyt długa."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Wróć do gry"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Podana ścieżka do świata nie istnieje: "
-#: src/game.cpp:1092
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
+
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Sprawdź plik debug.txt by uzyskać więcej informacji."
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Zmień klawisze"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Zmień hasło"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "ÅÄ…czenie z serwerem..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Dalej"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Tworzenie klienta..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Tworzenie serwera...."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -699,584 +807,3420 @@ msgstr ""
"- Rolka myszy: wybór przedmiotu↵\n"
"- T: chat\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Dalej"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Zmień hasło"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Głośność"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Zmień klawisze"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Domyślne sterowanie:\n"
+"Brak widocznego menu:\n"
+"- pojedyncze dotknięcie: aktywacja\n"
+"- podwójne dotknięcie: postaw/użyj\n"
+"- przejechanie palcem: rozglÄ…danie siÄ™\n"
+"Menu/Ekwipunek widoczny:\n"
+"- potwójne dotknięcie poza menu:\n"
+" -->zamknij\n"
+"- dotknięcie stacka, dotknięcie slota:\n"
+" --> przenieÅ› stack\n"
+"- dotknięcie i przeciągnięcie, dotknięcie drugim palcem\n"
+" --> umieść pojedynczy item w slocie\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Wyjście do menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Wyjście z gry"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Wyłączanie..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Tworzenie serwera...."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Tworzenie klienta..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Definicje przedmiotów..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Sprawdzanie adresu..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "ÅÄ…czenie z serwerem..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Media..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definicje przedmiotów..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "Definicje nod..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Media..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Sprawdzanie adresu..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Wróć do gry"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Wyłączanie..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Sprawdź plik debug.txt by uzyskać więcej informacji."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Głośność"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "ZginÄ…Å‚eÅ›."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
-msgstr ""
+msgstr "ok"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane "
-"klawisze z pliku minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Enter "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Kontynuuj"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Użyj\" = wspinaj się"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Tył"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Klawisz już zdefiniowany"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Czat"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "naciśnij klawisz"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Komenda"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Przód"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsola"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Tył"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Lewo"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Upuść"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Prawo"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Przód"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Użyj"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Ekwipunek"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Skok"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Skradanie"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Klawisz już zdefiniowany"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Upuść"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane "
+"klawisze z pliku minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Ekwipunek"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Lewo"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Czat"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Drukuj stosy"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Komenda"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Zasięg widzenia"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsola"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Prawo"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Przełącz tryb latania"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Skradanie"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Włącz/Wyłącz tryb Cinematic"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Przełącz tryb szybki"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Przełącz tryb szybki"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Przełącz tryb latania"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Przełącz tryb noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Zasięg widzenia"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Drukuj stosy"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Użyj"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Stare hasło"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "naciśnij klawisz"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nowe hasło"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Zmień"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Potwierdź hasło"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Zmień"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nowe hasło"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Stare hasło"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Hasła nie są jednakowe!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Głośność: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Wyjście"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Lewy przycisk myszy"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Åšrodkowy przycisk myszy"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Głośność: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Prawy przycisk myszy"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Menu"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X Button 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Backspace"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Delete"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Button 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Przecinek"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Dół"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+#, fuzzy
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Execute"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Pomoc"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Lewy przycisk myszy"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Lewy Control"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Lewy Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Next"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Lewy Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Prior"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Lewy Windows"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Spacja"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Dół"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Åšrodkowy przycisk myszy"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Execute"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minus"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Mode Change"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Select"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Next"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Góra"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Pomoc"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Snapshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Lewy Windows"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Apps"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Prawy Windows"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sleep"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Lewy Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Prawy Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Kropka"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Lewy Control"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Lewy Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Prior"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Prawy przycisk myszy"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Prawy Control"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Prawy Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Przecinek"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Prawy Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Minus"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Prawy Windows"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Kropka"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Select"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sleep"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Snapshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spacja"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clear"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Góra"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Button 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Button 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid "Game Name"
-#~ msgstr "Nazwa Gry"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
-#~ msgid "GAMES"
-#~ msgstr "GRY"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Chmury 3D"
-#~ msgid "Games"
-#~ msgstr "Gry"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Modele 3D"
-#~ msgid "Mods:"
-#~ msgstr "Mody:"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
-#~ msgid "edit game"
-#~ msgstr "edytuj grÄ™"
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
-#~ msgid "new game"
-#~ msgstr "nowa gra"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
-#~ msgid "EDIT GAME"
-#~ msgstr "EDYTUJ GRĘ"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
-#~ msgid "Remove selected mod"
-#~ msgstr "Usuń zaznaczony mod"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<--Dodaj mod"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
-#~ msgid "CLIENT"
-#~ msgstr "KLIENT"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
-#~ msgid "Favorites:"
-#~ msgstr "Ulubione:"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr ""
-#~ msgid "START SERVER"
-#~ msgstr "URUCHOM SERWER"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
-#~ msgid "Name"
-#~ msgstr "Nazwa"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
-#~ msgid "Password"
-#~ msgstr "Hasło"
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
-#~ msgid "SETTINGS"
-#~ msgstr "USTAWIENIA"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
-#~ msgid "Preload item visuals"
-#~ msgstr "Åaduj obrazy przedmiotów"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
-#~ msgid "Finite Liquid"
-#~ msgstr "Realistyczne ciecze"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Zaawansowane"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "TRYB JEDNOOSOBOWY"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "PACZKI TEKSTUR"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr ""
-#~ msgid "MODS"
-#~ msgstr "MODY"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr ""
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Add mod:"
-#~ msgstr "<<--Dodaj mod"
+msgid "Anisotropic filtering"
+msgstr "Filtrowanie anizotropowe"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Local install"
-#~ msgstr "Instaluj"
+msgid "Backward key"
+msgstr "Tył"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n"
-#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. "
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr ""
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "Filtrowanie dwuliniowe"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr "Sprawdzanie adresu..."
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Build inside player"
+msgstr "Gra wieloosobowa"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Mapowanie wypukłości"
+
+#: 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 #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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "Zmień klawisze"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "Zmień klawisze"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Tryb kreatywny"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Tryb kreatywny"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "Chmury 3D"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Menu główne"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Komenda"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Połącz"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "ÅÄ…czenie z serwerem..."
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Konsola"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Konsola"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Konsola"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Control"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Włącz obrażenia"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default game"
+msgstr "edytuj grÄ™"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Nowe hasło"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "WÅ‚Ä…cz czÄ…stki"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double tap jump for fly"
+msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "WÅ‚Ä…cz MP"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Włącz obrażenia"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Włącz obrażenia"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Filtrowanie anizotropowe"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "Przód"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Mody"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Gra"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Ekwipunek"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Skok"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Lewy Menu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Menu główne"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Menu główne"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Generator mapy"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip-Mappowanie"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "Zasięg widzenia"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Prawy Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Snapshot"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Snapshot"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Snapshot"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Pojedynczy gracz"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "Serwer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "Port Serwera"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "Port Serwera"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "Serwer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "Port Serwera"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Lista publicznych serwerów"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Lista publicznych serwerów"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Płynne oświetlenie"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Skradanie"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Paczki tekstur"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Filtrowanie trójliniowe"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "naciśnij klawisz"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Twórcy"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Głośność"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Tekstury przedmiotów..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Ozdobne drzewa"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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
+#, fuzzy
+msgid "cURL timeout"
+msgstr "Limit czasu cURL"
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Åadowanie..."
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "ÅšciÄ…gnij"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
-#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n"
-#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. "
+#~ "Lewy przycisk myszy: przenieÅ› wszystkie przedmioty, Prawy przycisk myszy: "
+#~ "przenieÅ› pojedynczy przedmiot"
+
+#~ msgid "is required by:"
+#~ msgstr "wymagane przez:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Konfiguracja zapisana. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki"
+
+#~ msgid "Show Public"
+#~ msgstr "Pokaż publiczne"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Pokaż ulubione"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny."
+
+#~ msgid "Create world"
+#~ msgstr "Stwórz świat"
+
+#~ msgid "Address required."
+#~ msgstr "Wymagany adres."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Nie można skasować świata: nic nie zaznaczono"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Pliki do skasowania"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Nie udało się skasować wszystkich plików świata"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1303,65 +4247,98 @@ msgstr "Zoom"
#~ "- ESC: to menu\n"
#~ "- T: czat\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Nie udało się skasować wszystkich plików świata"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n"
+#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. "
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n"
+#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry"
+#, fuzzy
+#~ msgid "Local install"
+#~ msgstr "Instaluj"
-#~ msgid "Files to be deleted"
-#~ msgstr "Pliki do skasowania"
+#, fuzzy
+#~ msgid "Add mod:"
+#~ msgstr "<<--Dodaj mod"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Nie można skasować świata: nic nie zaznaczono"
+#~ msgid "MODS"
+#~ msgstr "MODY"
-#~ msgid "Address required."
-#~ msgstr "Wymagany adres."
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "PACZKI TEKSTUR"
-#~ msgid "Create world"
-#~ msgstr "Stwórz świat"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "TRYB JEDNOOSOBOWY"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny."
+#~ msgid "Finite Liquid"
+#~ msgstr "Realistyczne ciecze"
-#~ msgid "Show Favorites"
-#~ msgstr "Pokaż ulubione"
+#~ msgid "Preload item visuals"
+#~ msgstr "Åaduj obrazy przedmiotów"
-#~ msgid "Show Public"
-#~ msgstr "Pokaż publiczne"
+#~ msgid "SETTINGS"
+#~ msgstr "USTAWIENIA"
-#~ msgid "Advanced"
-#~ msgstr "Zaawansowane"
+#~ msgid "Password"
+#~ msgstr "Hasło"
-#~ msgid "Multiplayer"
-#~ msgstr "Gra wieloosobowa"
+#~ msgid "Name"
+#~ msgstr "Nazwa"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki"
+#~ msgid "START SERVER"
+#~ msgstr "URUCHOM SERWER"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. "
+#~ msgid "CLIENT"
+#~ msgstr "KLIENT"
-#~ msgid "Configuration saved. "
-#~ msgstr "Konfiguracja zapisana. "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<--Dodaj mod"
-#~ msgid "is required by:"
-#~ msgstr "wymagane przez:"
+#~ msgid "Remove selected mod"
+#~ msgstr "Usuń zaznaczony mod"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr ""
-#~ "Lewy przycisk myszy: przenieÅ› wszystkie przedmioty, Prawy przycisk myszy: "
-#~ "przenieÅ› pojedynczy przedmiot"
+#~ msgid "EDIT GAME"
+#~ msgstr "EDYTUJ GRĘ"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtrowanie anizotropowe"
+#~ msgid "new game"
+#~ msgstr "nowa gra"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mappowanie"
+#~ msgid "Mods:"
+#~ msgstr "Mody:"
+
+#~ msgid "GAMES"
+#~ msgstr "GRY"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się"
+
+#~ msgid "Game Name"
+#~ msgstr "Nazwa Gry"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "ÅšciÄ…gnij"
+#~ msgid "If enabled, "
+#~ msgstr "włączone"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Wyłącz wszystkie"
+
+#~ msgid "No!!!"
+#~ msgstr "Nie!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Generuj mapy normalnych"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Lista publicznych serwerów"
+
+#~ msgid "No of course not!"
+#~ msgstr "Oczywiście, że nie!"
diff --git a/po/pt/minetest.po b/po/pt/minetest.po
index b433ef245..4bdd22ee1 100644
--- a/po/pt/minetest.po
+++ b/po/pt/minetest.po
@@ -7,673 +7,781 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2014-01-06 01:45+0200\n"
-"Last-Translator: João Farias <jgfd@cin.ufpe.br>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-04-01 00:21+0000\n"
+"Last-Translator: Fernando Reis <fernando.reis@pt.lu>\n"
+"Language-Team: Portuguese <https://hosted.weblate.org/projects/minetest/"
+"minetest/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Ocorreu um erro num script Lua, como por exemplo num extra:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Ocorreu um erro:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu principal"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Ok"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Reconectar"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "O servidor solicitou uma reconexão:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "A carregar..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Versão do protocolo não coincide. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "O servidor requere o protocolo versão $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Servidor suporta versões de protocolo entre $1 e $2. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Tente recarregar a lista de servidores públicos e verificar a sua ligação à "
+"internet."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Nós suportamos apenas o protocolo versão $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Nós suportamos as versões de protocolo entre $1 e $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Cancelar"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Mundo:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Depende de:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Desativar MP (mod pack)"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Ativar MP (mod pack)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Ativar tudo"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Falha ao ativar mod \"$1\" porque contém caracteres inválidos. Apenas "
+"caracteres de \"a\" até \"z\" e algarismos de 0 até 9 são permitidos."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Esconder Jogo"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
-msgstr ""
+msgstr "Ocultar conteúdo do pacote"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Extra:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Depende de:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Guardar"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-#, fuzzy
-msgid "Enable MP"
-msgstr "Ativar Tudo"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-#, fuzzy
-msgid "Disable MP"
-msgstr "Desativar Tudo"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Mundo:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "ativo"
-#: builtin/mainmenu/dlg_config_world.lua:85
-#, fuzzy
-msgid "Enable all"
-msgstr "Ativar Tudo"
+#: 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:50
-msgid "World name"
-msgstr "Nome do Mundo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Criar"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Descarregue um jogo, como o minetest_game, do sítio minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Geração de Mapa"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Descarregue um do sítio minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jogo"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Criar"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Geração de Mapa"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Mundo sem nome ou nenhum jogo selecionado"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Semente aleatória"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
+"Aviso: O jogo \"minimal development test\" destina-se apenas a "
+"desenvolvedores."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "O mundo com o nome \"$1\" já existe"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nome do Mundo"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Mundo sem nome ou nenhum jogo selecionado"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Você não tem nenhum jogo instalado."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Tem a certeza que pertende eliminar \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Sim"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Não, é claro que não!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Eliminar"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Mensagem de Extra: falhou a eliminação de \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Mensagem de extra: caminho inválido \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Eliminar Mundo \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Não"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Aceitar"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Renomear Pacote de Extras:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Aceitar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" não é uma flag válida."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Instalar Extra: ficheiro: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Descrição de configuração não fornecida)"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Voltar para as configurações"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Navegar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Desativado"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Editar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Ativado"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "O formato é de 3 números separados por vírgulas dentro de paréntesis."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formato: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Jogos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Extras"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Opcionalmente a lacunaridade pode ser adicionada com uma vírgula na frente."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Por favor, introduza uma lista de flags separadas por vírgulas."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Por favor insira um inteiro válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Por favor, insira um número válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Os valores possíveis são: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Restaurar valores por defeito"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Selecionar diretório"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Mostrar nomes técnicos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "O valor deve ser maior do que $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "O valor deve ser menor do que $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Instalar Extra: tipo de ficheiro desconhecido \"$1\""
+"Instalação de extra: o tipo de arquivo \"$1\" não é suportado ou o arquivo "
+"está corrompido"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Falha ao instalar de $1 ao $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instalar Extra: ficheiro: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
-msgstr ""
+msgstr "Instalação de extra: nome real de extra não encontrado para: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Instalação de extra: não foi possível encontrar o nome adequado da pasta "
+"para o pacote de extras $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Fechar repositório de extras"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "Descarregando $1, por favor aguarde..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instalar"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Nome do Mundo"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Página $1 de $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Classificação"
-#: builtin/mainmenu/store.lua:497
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Procurar"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nome curto:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Instalado com sucesso:"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Não ordenado"
+
+#: builtin/mainmenu/store.lua
msgid "re-Install"
msgstr "re-Instalar"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instalar"
-
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Contribuidores Ativos"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Página $1 de $2"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Desenvolvedores Principais"
-#: builtin/mainmenu/tab_credits.lua:22
+#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "Créditos"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Desenvolvedores Chave"
-
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
-msgstr "Contribuintes Ativos"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Antigos Contribuidores"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
-msgstr "Desenvolvedores Chave"
-
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
-msgstr "Antigos Contribuintes"
+msgstr "Desenvolvedores Chave Antigos"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Extras Instalados:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Repositório Online de Mods"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informação do extra:"
-#: builtin/mainmenu/tab_mods.lua:78
-#, fuzzy
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
-msgstr "Sem informação"
-
-#: builtin/mainmenu/tab_mods.lua:82
-#, fuzzy
-msgid "Mod information:"
-msgstr "Sem informação"
+msgstr "Nenhuma descrição disponível do extra"
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Renomear"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Desinstalar mode selecionado"
-
-#: builtin/mainmenu/tab_mods.lua:106
-#, fuzzy
-msgid "Uninstall selected mod"
-msgstr "Remover extra selecionado"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Seleccionar ficheiro de Extra:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Extras"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Desinstalar extra selecionado"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Endereço/Porta"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Desinstalar pacote de extras selecionado"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Nome/Senha"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Lista de Servidores Públicos"
+msgid "Address / Port"
+msgstr "Endereço / Porta :"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Eliminar"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Cliente"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Ligar"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Modo Criativo"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "ativo"
+msgstr "Dano ativado"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "ativo"
+msgid "Del. Favorite"
+msgstr "Favoritos:"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Cliente"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Favoritos:"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Novo"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nome / Senha :"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Configurar"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP activado"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Jogar"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Endereço Bind"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Seleccionar Mundo:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Configurar"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Modo Criativo"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Ativar Dano"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Público"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nome/Senha"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Novo"
-#: builtin/mainmenu/tab_server.lua:47
-msgid "Port"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nenhum mundo criado ou selecionado!"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
msgstr "Porta"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Mundo sem nome ou nenhum jogo selecionado"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Público"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Seleccionar Mundo:"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Servidor"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Ãgua Opaca"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Porta"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Jogar"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Ãrvores Melhoradas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Nuvens 3D"
-#: builtin/mainmenu/tab_settings.lua:33
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Configurações Avançadas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Antisserrilhamento:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Tem a certeza que deseja reiniciar o seu mundo?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Filtro Bi-Linear"
+msgstr "Filtro bi-linear"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Filtro Tri-Linear"
+msgid "Bump Mapping"
+msgstr "Bump mapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Mudar teclas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Vidro conectado"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Folhas detalhadas"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mapa MIP"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mapa MIP + Filtro Anisotrópico"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Não"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Sem Filtro"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Iluminação Suave"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Sem mapa MIP"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Ativar Partículas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Destaque dos Cubos"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nuvens 3D"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Destaque dos Cubos"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Ãgua Opaca"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Nenhum"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Ligar"
+msgid "Normal Mapping"
+msgstr "Mapeamento de tons"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Folhas Opacas"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Ãgua Opaca"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Oclusão de paralaxe"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Ativar Partículas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Definições"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Sombras"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Mudar teclas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Folhas simples"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Um Jogador"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Iluminação Suave"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturização:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Para ativar os sombreadores é necessário usar o driver OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Mapeamento de tons"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "Mip-Mapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
+msgstr "Nível de sensibilidade ao toque (px)"
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtro tri-linear"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Folhas ondulantes"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Plantas ondulantes"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Definições"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Ãgua ondulante"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Um Jogador"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Sim"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Configurar"
+msgstr "Configurar extras"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "Menu Principal"
+msgstr "Principal"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Iniciar jogo solo"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Jogar"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Um Jogador"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Selecione um pacote de texturas:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Sem informação"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
-msgid "Texturepacks"
-msgstr "Pacotes de Texturas"
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selecione um pacote de texturas:"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "A carregar..."
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Pacotes texturas"
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "A resolver endereço..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Erro de ligação (tempo excedido)."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Terminado!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
-
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Texturas dos items..."
+msgstr "Inicializando cubos"
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicializando cubos..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Menu Principal"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "A carregar texturas..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Reconstruindo sombreadores..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Erro de conexão (excedeu tempo?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
-"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Não foi possível encontrar ou carregar jogo \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "gamespec inválido."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menu Principal"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
msgstr ""
+"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer."
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Continuar"
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Nome de jogador demasiado longo."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Morreste."
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "O caminho fornecido não existe: "
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Reaparecer"
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Consulte debug.txt para mais detalhes."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Mudar teclas"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Mudar Senha"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "A conectar ao servidor..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Continuar"
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "A criar cliente..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "A criar servidor..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -699,584 +807,3537 @@ msgstr ""
"- Roda do rato: seleccionar item\n"
"- T: conversação\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuar"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Mudar Senha"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volume do som"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Mudar teclas"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Controles por defeito:\n"
+"Se não há nenhum menu visível:\n"
+"- Um toque: ativa botão\n"
+"- Duplo toque: colocar/usar\n"
+"- Deslizar dedo: Olhar em redor\n"
+"Se menu/inventário visível:\n"
+"- Duplo toque: (fora do menu/inventário):\n"
+" -->fechar\n"
+"- Tocar Item e depois tocar num compartimento:\n"
+" --> mover item\n"
+"- Tocar e arrastar, e depois tocar com o 2º dedo\n"
+" --> Coloca apenas um item no compartimento\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Sair para Menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Sair para o sistema"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "A desligar..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "A criar servidor..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "A criar cliente..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "A resolver endereço..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "A conectar ao servidor..."
-
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr "Definições dos Itens..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr ""
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KB/s"
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr "Dados..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "MiB/s"
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Consulte debug.txt para mais detalhes."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Definindo cubos..."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "A resolver endereço..."
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Reaparecer"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)"
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "A desligar..."
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
-msgstr "\"Use\" = descer"
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volume do som"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo"
+#: src/game.cpp
+msgid "You died."
+msgstr "Morreste."
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tecla já em uso"
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "ok"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "pressione a tecla"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Enter "
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Avançar"
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Continuar"
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "\"Use\" = descer"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Recuar"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Esquerda"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Direita"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Conversa"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Usar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comando"
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Saltar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Consola"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Agachar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo"
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr "Largar"
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Avançar"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr "Inventário"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Conversa"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Saltar"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Comando"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tecla já em uso"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Consola"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Ativar/Desativar vôo"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Esquerda"
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Ativar/Desativar correr"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Imprimir stacks"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Seleccionar Distância"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Direita"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Agachar"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle Cinematic"
+msgstr "Ativar/Desativar câmera cinemática"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
msgstr "Ativar/Desativar correr"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Ativar/Desativar vôo"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Ativar/Desativar noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Seleccionar Distância"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Imprimir stacks"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Usar"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Senha antiga"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "pressione a tecla"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Senha Nova"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Mudar"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Confirmar Senha"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Mudar"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Senha Nova"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Senha antiga"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Senhas não correspondem!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume do som: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Sair"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Botão Esquerdo"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Roda do Rato"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volume do som: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Botão Direito"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "App"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Botão X 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attm"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Voltar"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Limpar"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabulação"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Botão X 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Capital"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Virgula"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Converter"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "Tecla CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pausa"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Baixo"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Tecla End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Converter"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Apagar OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "ESC"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "Tecla ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Executar"
+
+#: src/keycode.cpp
msgid "Final"
-msgstr "Final"
+msgstr "Tecla Final"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Junja"
-msgstr "Junja"
+msgstr "Tecla Junja"
-#: src/keycode.cpp:226
-msgid "Kanji"
-msgstr "Kanji"
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Tecla Kana"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nãoconverter"
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "Tecla Kanji"
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Botão Esquerdo"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Control Esquerdo"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menu Esquerdo"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Próximo"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift Esquerdo"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Prévio"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Tecla WINDOWS esquerda"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Espaço"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Baixo"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Botão Central do Rato"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Executar"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Menos"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Tecla Mode Change"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Seleccionar"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Próximo"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Cima"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nãoconverter"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Ajuda"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Tecla numérica *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Screenshot"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Tecla numérica +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "WINDOWS Esq."
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Tecla numérica -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "App"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Tecla numérica /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
-msgstr "Numpad 0"
+msgstr "Tecla numérica 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
-msgstr "Numpad 1"
-
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "WINDOWS Dir."
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Suspender"
+msgstr "Tecla numérica 1"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
-msgstr "Numpad 2"
+msgstr "Tecla numérica 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
-msgstr "Numpad 3"
+msgstr "Tecla numérica 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
-msgstr "Numpad 4"
+msgstr "Tecla numérica 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
-msgstr "Numpad 5"
+msgstr "Tecla numérica 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
-msgstr "Numpad 6"
+msgstr "Tecla numérica 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
-msgstr "Numpad 7"
-
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
+msgstr "Tecla numérica 7"
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "Tecla numérica 8"
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "Tecla numérica 9"
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Limpar OEM"
-#: src/keycode.cpp:235
-msgid "Numpad 8"
-msgstr "Numpad 8"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:235
-msgid "Numpad 9"
-msgstr "Numpad 9"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pausa"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Período"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Mais"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift Esquerdo"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Tecla Print Screen"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift Direito"
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Prévio"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Control Esq"
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Menu Esquerdo"
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Botão Direito"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Control Direito"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Menu Direito"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Virgula"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift Direito"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Menos"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Tecla WINDOWS direita"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Período"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Mais"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Seleccionar"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attm"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Suspender"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Apagar OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Screenshot"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Espaço"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "Limpar OEM"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabulação"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PAL"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Cima"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Botão X 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Botão X 2"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid "Game Name"
-#~ msgstr "Nome do Jogo"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"Deslocamento (X,Y,Z) do fractal a partir do centro do mundo em unidades "
+"'escala'.\n"
+"Usado para obter uma área de nascimento apropriada, próxima de (0, 0).\n"
+"Valores por defeito apropriados para conjunto de Mandelbrot, necessitam ser "
+"adaptados para conjunto de Julia.\n"
+"Intervalos aproximadamente entre -2 e 2. Multiplicar por 'escala' para "
+"deslocamento em cubos."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = oclusão paralaxe com dados de inclinação (mais rápido).\n"
+"1 = mapeamento de relevo (mais lento, mais preciso)."
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr ""
-#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo "
-#~ "\"$2\""
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Nuvens 3D"
-#~ msgid "GAMES"
-#~ msgstr "JOGOS"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "Modo 3D"
-#~ msgid "Games"
-#~ msgstr "Jogos"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Suporte 3D.\n"
+"Modos atualmente suportados:\n"
+"- none: Nenhum efeito 3D.\n"
+"- anaglyph: Sistema de cor Ciano/Magenta (Óculos 3D azul vermelho).\n"
+"- interlaced: Sistema interlaçado (Óculos com lentes polarizadas).\n"
+"- topbottom: Ecrã dividido em dois: uma em cima e outro em baixo.\n"
+"- sidebyside: Ecrã dividido em dois: lado a lado."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"Semente aleatória para gerar um novo mundo (em branco para deixar o "
+"computador escolher).\n"
+"Será anulada quando for criado um outro novo mundo no menu principal."
-#~ msgid "Mods:"
-#~ msgstr "Extras:"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Mensagem a ser mostrada a todos os clientes do servidor quando ele bloqueia."
-#~ msgid "edit game"
-#~ msgstr "editar jogo"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Uma mensagem para ser mostrada a todos os clientes quando o servidor se "
+"desliga."
-#~ msgid "new game"
-#~ msgstr "novo jogo"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Limite absoluto da fila de espera emergente"
-#~ msgid "EDIT GAME"
-#~ msgstr "EDITAR JOGO"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Aceleração no ar"
-#~ msgid "Remove selected mod"
-#~ msgstr "Remover extra selecionado"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "Distância de ativação de blocos"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Adicionar extra"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "Distância de ativação de blocos"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENTE"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Distância de ativação de blocos"
-#~ msgid "Favorites:"
-#~ msgstr "Favoritos:"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Distância de ativação de objectos"
-#~ msgid "START SERVER"
-#~ msgstr "INICIAR SERVIDOR"
+#: 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 ""
+"Endereço para conexão.\n"
+"Deixe em branco para iniciar um servidor local.\n"
+"Note que o campo de endereço no menu principal sobrescreve esta configuração."
-#~ msgid "Name"
-#~ msgstr "Nome"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Ajustar configuração de dpi ao seu ecrã (não aplicável a X11/Android) e.g. "
+"para ecrãs 4K."
-#~ msgid "Password"
-#~ msgstr "Senha"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Ajusta a correção gama nas tabelas de luminosidade. Valores mais baixos "
+"resultam \n"
+"em imagem mais clara. Configuração somente para o cliente e ignorada pelo "
+"servidor."
-#~ msgid "SETTINGS"
-#~ msgstr "DEFINIÇÕES"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avançado"
-#~ msgid "Preload item visuals"
-#~ msgstr "Pré-carregamento dos itens"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Altitude de frio extremo"
-#~ msgid "Finite Liquid"
-#~ msgstr "Líquido Finito"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Sempre voar e correr"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "Um Jogador"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Gama de oclusão de ambiente"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "PACOTES DE TEXTURAS"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Amplia os vales"
-#~ msgid "MODS"
-#~ msgstr "EXTRAS"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtro anisotrópico"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Anunciar servidor"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Anunciar a esta lista de servidores.\n"
+"Se quiser anunciar o seu endereço IPv6, use serverlist_url = v6.servers."
+"minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Aproxima escala (X,Y,Z) do fractal em cubos."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Pedir para reconectar após de bloqueio de sistema"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Informar automáticamente a lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Tecla para andar para trás"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+msgstr "Altura base do terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Básico"
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Add mod:"
-#~ msgstr "<<-- Adicionar extra"
+msgid "Basic Privileges"
+msgstr "Privilégios por defeito"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtro bi-linear"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Endereço de bind"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Bits por pixel (profundidade de cor) no modo de ecrã inteiro."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Construir com o jogador dentro do cubo"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bump mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Suavização da camera"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Suavização da câmera no modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tecla para ativar/desativar atualização da câmera"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Ruído para cavernas #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Ruído para cavernas #2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Cavernas e túneis formam-se na interseção entre os dois ruídos"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tecla de conversação"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tecla mostra/esconde conversação"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Escolha entre 18 fractais resultantes de 9 fórmulas\n"
+"1 = Conjunto de mandelbrot \"Roundy\" 4D.\n"
+"2 = Conjunto de julia \"Roundy\" 4D.\n"
+"3 = Conjunto de mandelbrot \"Squarry\" 4D.\n"
+"4 = Conjunto de julia \"Squarry\" 4D.\n"
+"5 = Conjunto de mandelbrot \"Mandy Cousin\" 4D.\n"
+"6 = Conjunto de julia \"Mandy Cousin\" 4D.\n"
+"7 = Conjunto de mandelbrot \"Variation\" 4D.\n"
+"8 = Conjunto de julia \"Variation\" 4D.\n"
+"9 = Conjunto de mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
+"10 = Conjunto de julia \"Mandelbrot/Mandelbar\" 3D.\n"
+"11 = Conjunto de mandelbrot \"Ãrvore de natal\" 3D.\n"
+"12 = Conjunto de julia \"Ãrvore de natal\" 3D..\n"
+"13 = Conjunto de mandelbrot \"Bulbo de Mandelbrot\" 3D.\n"
+"14 = Conjunto de julia \"Bulbo de Mandelbrot\" 3D.\n"
+"15 = Conjunto de mandelbrot \"Bulbo de Mandelbrot Cosseno\" 3D.\n"
+"16 = Conjunto de julia \"Bulbo de Mandelbrot Cosseno\" 3D.\n"
+"17 = Conjunto de mandelbrot \"Bulbo de Mandelbrot\" 4D.\n"
+"18 = Conjunto de julia \"Bulbo de Mandelbrot\" 4D."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Dimensão das parcelas"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tecla para modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Limpar texturas transparentes"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Cliente e servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Velocidade de escalada"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Altura das nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Raio das nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "As nuvens são um efeito do lado do cliente."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Nuvens no menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Névoa colorida"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"Lista separada por vírgulas de extras de confiança que podem utilizar "
+"funções inseguras \n"
+"mesmo quando a segurança de extras está ativada (via "
+"request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Lista separada por vírgulas de extras que podem usar APIs de requisição "
+"HTTP, \n"
+"que lhes permitem enviar e descarregar dados para/da internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tecla de comando"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Vidro conectado"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Conectar a servidor media externo"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Conecta o vidro se suportado pelo cubo."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Opacidade da consola"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Cor da consola"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tecla da consola"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Avançar continuamente"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Avanço contínuo (apenas usado para testes)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Controles"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Controla a duração do ciclo dia/noite.\n"
+"Exemplos: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = O tempo pára e permanece "
+"inalterado."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Controla o tamanho dos desertos e das praias no gerador de mapa v6.\n"
+"Quando o bioma de neve está ativado 'mgv6_freq_desert' é ignorado."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controla a inclinação/profundidade dos lagos."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controla a inclinação/altura das colinas."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Mensagem de erro"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Cria lagos de lava imprevisíveis nas cavernas, o que pode \n"
+"dificultar a mineração. Zero desativa-os por completo. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Cria lagos de água imprevisíveis nas cavernas, o que pode \n"
+"dificultar a mineração. Zero desativa-os por completo. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Opacidade do cursor"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Opacidade do cursor (entre 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Cor do cursor"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Cor do cursor (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Velocidade a agachar"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Ativar dano"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Tecla para alternar modo de depuração"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Nível de log de depuração"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Intervalo de atualização do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Aceleração por defeito"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Jogo por defeito"
+
+#: 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 ""
+"Jogo por defeito aquando da criação de um mundo novo.\n"
+"É anulado quando o mundo é criado através do menu principal."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Senha por defeito"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilégios por defeito"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Tempo limite por defeito para cURL, em milissegundos.\n"
+"Só tem efeito se compilado com cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Define nível de amostragem de textura.\n"
+"Um valor mais alto resulta em mapas normais mais suaves."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Define distância máxima de transferência de jogadores em blocos (0 = "
+"ilimitado)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Latência de apresentação de dicas de ferramentas, em milissegundos."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Tratamento de API Lua obsoleto"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Profundidade a partir da qual você encontrará grandes cavernas."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Profundidade a partir da qual você encontrará caves massivas."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Velocidade de descida"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Descrição do servidor, a ser exibida quando jogadores se conectam e na lista "
+"de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Dessincroniza animação de blocos"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+"Dados de perfil detalhados do extra. Útil para desenvolvedores de extras."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Dados de perfil detalhados do extra"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Determina a forma do terreno\n"
+"Os 3 números entre '[' e ']' controlam a escala do\n"
+"terreno, os 3 números devem ser idênticos."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Desativar anti-batota"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Não permitir senhas vazias"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Nome de domínio do servidor, para ser mostrado na lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Carregue duas vezes em saltar para voar"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Carregar duas vezes em saltar ativa/desativa o vôo."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Tecla para largar item"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Mostrar informações de depuração do gerador de mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Ativar VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Ativar segurança de extras"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Ativar dano e morte dos jogadores."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Ativa a entrada de comandos aleatória (apenas usado para testes)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable 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 ""
+"Ativar para impedir a conexão de clientes antigos.\n"
+"Clientes antigos são compatíveis no sentido em que não bloquearão quando "
+"conectam \n"
+"a servidores recentes, mas poderão não suportar todos as funcionalidades "
+"esperadas."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Ativar/desativar a execução de um servidor IPv6. Um servidor IPv6 pode \n"
+"estar restringido a clientes com IPv6, dependendo da configuração do "
+"sistema.\n"
+"Ignorado se bind_address estiver definido."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Ativa animação de itens no inventário."
+
+#: 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 filmic tone mapping"
+msgstr "Ativa mapeamento de tons fílmico"
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Ativa mini-mapa."
+
+#: 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 ""
+"Ativa mapeamento de oclusão de paralaxe.\n"
+"Requer sombreadores ativados."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Opção experimental, pode causar espaços visíveis entre blocos\n"
+"quando definido com num úmero superior a 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS em menu de pausa"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA (Antialiasing de ecrã inteiro)"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Cair balançando"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Sombra da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Canal de opacidade sombra da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Tamanho da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Tecla de correr"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Aceleração no modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Velocidade no modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Campo de visão"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Campo de visão em graus."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Ficheiro na pasta client/serverlist/ que contém os seus servidores favoritos "
+"mostrados na separador Multi-jogador."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Mapeamento de tom fílmico"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filtros"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Semente aleatória do mapa fixa"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Tecla de voar"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Voar"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Nevoeiro"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Tecla de ativar/desativar nevoeiro"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Caminho para ficheiro fonte"
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Sombra da fonte"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Opacidade da sombra da fonte"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Opacidade da sombra da fonte (entre 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Tamanho da fonte"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Tecla para avançar"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Fontes FreeType"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Distância máxima de geração de blocos para clientes, em mapblocks (16^3 "
+"cubos)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"Distância máxima de envio de blocos para clientes, em mapblocks (16^3 cubos)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"Distância máxima de envio de dados sobre objectos para clientes, em "
+"mapblocks (16^3 cubos)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Ecrã inteiro"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "BPP em ecrã inteiro"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Modo de ecrã inteiro."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Escala do interface gráfico"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filtro de redimensionamento do interface gráfico"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtro txr2img de redimensionamento do interface gráfico"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gama"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Geral"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravidade"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "Extras HTTP"
+
+#: 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 ""
+"Tratamento de chamadas ao API Lua obsoletas:\n"
+"- legacy: (tenta) imitar o comportamento antigo (por defeito em versão de "
+"lançamento).\n"
+"- log: imita e regista no log (por defeito em versão de depuração).\n"
+"- error: aborta (sugerido para desenvolvedores de extras)."
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "Altura da janela inicial."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Altitude das nuvens."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "FPU de alta precisão"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "Página web do servidor, a ser exibido na lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Quão profundos são os rios"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Dimensão da área de blocos mantida ativa, em mapblocks (16^3 cubos).\n"
+"Em blocos ativos objetos são carregados e ABMs são executados."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Quão largos são os rios"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "Servidor IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Suporte IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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 ""
+"Se ativado com o modo de vôo, o jogador é capaz de voar através de cubos "
+"sólidos.\n"
+"Isto requer o privilégio \"noclip\" no servidor."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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 "Se ativado, desativa prevenção de fraude no modo mult-ijogador."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr "Se ativado, novos jogadores não podem entrar com uma senha vazia."
+
+#: 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 ""
+"Se ativado, você pode colocar blocos na posição (pés + nível dos olhos) onde "
+"você está.\n"
+"Isto é útil quando se trabalha com nodeboxes em pequenas áreas."
+
+#: 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 "Ignorar erros do mundo"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "No jogo"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Côr de fundo da consola de conversação (R,G,B)."
+
+#: 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 "Animações dos itens do inventário"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Tecla de inventário"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Inverter rato"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Inverte o movimento vertical do rato."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Tempo de vida de itens largados"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas fractal Julia: Componente W da constante hypercomplexa que determina "
+"a forma.\n"
+"Não tem efeito em fractais 3D.\n"
+"Valor varia sensivelmente entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas fractal Julia: Componente X da constante hypercomplexa que determina "
+"a forma.\n"
+"Valor varia sensivelmente entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas fractal Julia: Componente Y da constante hypercomplexa que determina "
+"a forma.\n"
+"Valor varia sensivelmente entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas fractal Julia: Componente Z da constante hypercomplexa que determina "
+"a forma.\n"
+"Valor varia sensivelmente entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Tecla de saltar"
+
+#: 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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador para a frente.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador para a esquerda.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para imprimir pilhas de depuração. Usado para o desenvolvimento.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar a exibição do mini-mapa.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar a exibição de informações de depuração.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Características da lava"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Estilo de folhas"
+
+#: 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 ""
+"Estilo de folhas:\n"
+"- Fancy: todas as faces visíveis\n"
+"- Simple: apenas faces externas, se definidos special_tiles são usados\n"
+"- Opaque: desativa transparência"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Tecla para a esquerda"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 ""
+"Nível de registo log a ser guardado em debug.txt:\n"
+"- <nothing> (nada registado)\n"
+"- none (mensagens sem nível de log)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Menu principal do gestor de extras"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Menu principal de scripts"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Vales do mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "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 flat"
+msgstr "Gerador de mapa plano"
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Local install"
-#~ msgstr "Instalar"
+msgid "Mapgen flat cave width"
+msgstr "Limite de lagos no gerador de mapa plano"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "Atenção: Alguns mods ainda não estão configurados.\n"
-#~ "Eles vão ser ativados por predefinição quando guardar a configuração. "
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
-#~ msgstr ""
-#~ "Atenção: Alguns mods configurados estão em falta.\n"
-#~ "As suas definições vão ser removidas quando gravar a configuração. "
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Flags do gerador de mapa plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Nível do terreno para o gerador de mapa plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Inclinação dos lagos no gerador de mapa plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Limite de lagos no gerador de mapa plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "W do corte do gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "Parâmetros de ruído caverna1 no gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "Parâmetros de ruído caverna2 no gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+"Parâmetros de ruído da profundidade de enchimento no gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "Fractal do gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "Iterações no gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "W do gerador de mapa fractal Julia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "X do gerador de mapa fractal Julia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Y do gerador de mapa fractal Julia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Z do gerador de mapa fractal Julia"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "Deslocamento do gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "Escala do gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Parâmetros de ruído do fundo do mar no gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "W do corte do gerador de mapa fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Nome do gerador de mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Gerador de mapa V5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Gerador de mapa V5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Gerador de mapa V6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Gerador de mapa V7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Gerador de mapa V7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Opções para menus"
+
+#: 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 "Minimap"
+msgstr "Mini-mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Tecla mini-mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "Altura de varredura do mini-mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mapeamento MIP"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "Novos jogadores precisam de introduzir esta senha."
+
+#: 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 "Destacando cubos"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "Número de iterações de oclusão de paralaxe."
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr "Enviesamento do efeito de oclusão de paralaxe, normalmente escala/2."
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr "Escala do efeito de oclusão de paralaxe."
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Oclusão de paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "Escala de oclusão paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Enviesamento de oclusão paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Iterações de oclusão paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Modo de oclusão paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "Força da oclusão paralaxe"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+"Raio da área de nuvens indicado em número de 64 cubos de nuvem.\n"
+"Valores superiores a 26 produzem arestas acentuadas nos cantos das nuvens."
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr "Eleva o terreno para fazer vales em torno dos rios"
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Tecla para modo de visão ilimitado"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Tecla para a direita"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+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 noise -- rivers occur close to zero"
+msgstr "Ruído para rios -- rios ocorrem em valores próximos de zero"
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "Mini-map redondo"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+"Redimensiona interface gráfico por um valor especificado pelo \n"
+"utilizador. Usa um filtro antisserrilhamento através de interpolação \n"
+"por vizinho mais próximo. Isto vai alisar algumas das arestas e \n"
+"misturar pixels quando reduzir a dimensão, com o custo de borrar \n"
+"alguns pixels das arestas quando o valor não é inteiro."
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Captura de ecrã"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Captura de ecrã"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Captura de ecrã"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Servidor / Um jogador"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Endereço do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Descrição do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nome do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Porta do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL da lista de servidores"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Ficheiro da lista de servidores"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Com o valor TRUE, folhas ondulantes são ativadas.\n"
+"Necessita de shaders para estar ativo."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr "Formato do mini-mapa. Ativado = redondo, desativado = quadrado."
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "Mostrar informação de depuração"
+
+#: 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 chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Dimensão da parcela a ser gerada por mapgen, em mapblocks (16^3 cubos)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Iluminação suave"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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 "Tecla para agachar"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "Caminho para a pasta de texturas"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+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 ""
+"Durabilidade em segundos de objectos largados.\n"
+"Definir como -1 para desativar funcionalidade."
+
+#: 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 ""
+"Para reduzir a latência, a transferência de blocos é abrandada quando um "
+"jogador está \n"
+"a construir. Isto determina o quanto é abrandado após a colocação de um cubo."
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Filtro tri-linear"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"Útil para fazer o mini-mapa mais fluido em computadores mais lentos."
+
+#: 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 "URL da lista de servidores exibida no separador multi-jogador."
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "Tecla de usar"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr "Usa mapeamento MIP para escalar texturas. Pode melhorar performance."
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Útil para desenvolvedores de extras."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"Distância de visualização, em cubos.\n"
+"Mínimo é 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volume do som"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Características da água"
+
+#: 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 "Cubos Ondulantes"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Folhas ondulantes"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+"Quando gui_scaling_filter está ativado, todas as imagens do interface \n"
+"gráfico são filtradas por software, mas algumas imagens são geradas \n"
+"directamente para o hardware (e.g. texturas de cubos no inventário)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"Limite da geração do mapa.\n"
+"Note:\n"
+"- Limitado a 31000 (valor superior não tem efeito)\n"
+"- O gerador funciona em grupos de 80x80x80 cubos (5x5x5 MapBlocks).\n"
+"- Esses grupos têm um deslocamento de -32, -32 cubos em relação à "
+"origem.\n"
+"- Apenas grupos dentro do limite definido por map_generation_limit são "
+"gerados"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+"Determina se animações das texturas dos cubos devem ser dessincronizadas "
+"entre mapblocks."
+
+#: 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 ""
+"Se deverá pedir ao cliente para se reconectar após um bloqueio de sistema "
+"(Lua).\n"
+"Defina como TRUE se o seu servidor está configurado para recomeçar "
+"automaticamente."
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+"Se deve mostrar ao cliente informação de depuração (tem o mesmo efeito que "
+"premir F5)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Grossura das linhas de selecção à volta dos cubos."
+
+#: 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 "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "A carregar..."
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Descarregar"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item"
+
+#~ msgid "is required by:"
+#~ msgstr "é necessário pelo:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "Configuração gravada. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Atenção: Configuração não compatível. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos"
+
+#~ msgid "Show Public"
+#~ msgstr "Mostrar Públicos"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Mostrar Favoritos"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Deixe endereço em branco para iniciar servidor local."
+
+#~ msgid "Create world"
+#~ msgstr "Criar mundo"
+
+#~ msgid "Address required."
+#~ msgstr "Endereço necessário."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Ficheiros para eliminar"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Não foi possível configurar mundo: Nada seleccionado"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1303,63 +4364,100 @@ msgstr "Zoom"
#~ "- ESC: Este menu\n"
#~ "- T: Chat\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Atenção: Alguns mods configurados estão em falta.\n"
+#~ "As suas definições vão ser removidas quando gravar a configuração. "
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Não foi possível configurar mundo: Nada seleccionado"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Atenção: Alguns mods ainda não estão configurados.\n"
+#~ "Eles vão ser ativados por predefinição quando guardar a configuração. "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos"
+#, fuzzy
+#~ msgid "Local install"
+#~ msgstr "Instalar"
-#~ msgid "Files to be deleted"
-#~ msgstr "Ficheiros para eliminar"
+#, fuzzy
+#~ msgid "Add mod:"
+#~ msgstr "<<-- Adicionar extra"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado"
+#~ msgid "MODS"
+#~ msgstr "EXTRAS"
-#~ msgid "Address required."
-#~ msgstr "Endereço necessário."
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "PACOTES DE TEXTURAS"
-#~ msgid "Create world"
-#~ msgstr "Criar mundo"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "Um Jogador"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Deixe endereço em branco para iniciar servidor local."
+#~ msgid "Finite Liquid"
+#~ msgstr "Líquido Finito"
-#~ msgid "Show Favorites"
-#~ msgstr "Mostrar Favoritos"
+#~ msgid "Preload item visuals"
+#~ msgstr "Pré-carregamento dos itens"
-#~ msgid "Show Public"
-#~ msgstr "Mostrar Públicos"
+#~ msgid "SETTINGS"
+#~ msgstr "DEFINIÇÕES"
-#~ msgid "Advanced"
-#~ msgstr "Avançado"
+#~ msgid "Password"
+#~ msgstr "Senha"
-#~ msgid "Multiplayer"
-#~ msgstr "Vários jogadores"
+#~ msgid "Name"
+#~ msgstr "Nome"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos"
+#~ msgid "START SERVER"
+#~ msgstr "INICIAR SERVIDOR"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Atenção: Configuração não compatível. "
+#~ msgid "CLIENT"
+#~ msgstr "CLIENTE"
-#~ msgid "Configuration saved. "
-#~ msgstr "Configuração gravada. "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Adicionar extra"
-#~ msgid "is required by:"
-#~ msgstr "é necessário pelo:"
+#~ msgid "Remove selected mod"
+#~ msgstr "Remover extra selecionado"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item"
+#~ msgid "EDIT GAME"
+#~ msgstr "EDITAR JOGO"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtro Anisotrópico"
+#~ msgid "new game"
+#~ msgstr "novo jogo"
+
+#~ msgid "Mods:"
+#~ msgstr "Extras:"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#~ msgid "GAMES"
+#~ msgstr "JOGOS"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr ""
+#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo "
+#~ "\"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Nome do Jogo"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Descarregar"
+#~ msgid "If enabled, "
+#~ msgstr "ativo"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Desativar Tudo"
+
+#~ msgid "No!!!"
+#~ msgstr "Não!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Gerar Normalmaps"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Lista de Servidores Públicos"
+
+#~ msgid "No of course not!"
+#~ msgstr "Não, é claro que não!"
diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po
index 830bd5e82..3b345226b 100644
--- a/po/pt_BR/minetest.po
+++ b/po/pt_BR/minetest.po
@@ -7,673 +7,784 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-11-25 02:13+0200\n"
-"Last-Translator: Frederico Guimarães <frederico@teia.bio.br>\n"
-"Language-Team: LANGUAGE <contato@ejweb.com.br>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-03-31 13:45+0000\n"
+"Last-Translator: Ian giestas pauli <iangiestaspauli@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
+"minetest/minetest/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Ocorreu um erro no script Lua, assim como em um mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Ocorreu um erro:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu principal"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Ok"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Reconectar"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "O servidor requisitou uma reconexão:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Carregando..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Versão do protocolo incompatível. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "O servidor suporta o protocolo versão $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "O servidor suporta entre as versões $1 e $2 do protocolo. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Tente reabilitar a lista de servidores públicos e checar sua conexão de "
+"internet."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Nós apenas suportamos a versão $1 do protocolo."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Nós suportamos entre as versões $1 e $2 do protocolo."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Cancelar"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Mundo:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dependências:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Desabilitar PMs"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Habilitar MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Habilitar todos"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Falha ao carregar mod \"$1\" devido ao fato de seu nome possuir caracteres "
+"inválidos. Apenas caracteres de \"a\" até \"z\" e algarísmos de 0 até 9 são "
+"permitidos."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Ocultar jogos"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Ocultar conteúdo PMs"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Depende de:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Salvar"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Habilitar PMs"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Desabilitar PMs"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Mundo:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "habilitado"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Habilitar todos"
+#: 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:50
-msgid "World name"
-msgstr "Nome do mundo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Criar"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seed"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Baixe um subgame, como o minetest_game, do site minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Baixe um do site minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jogo"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Criar"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Gerador de mapa"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
msgstr ""
+"Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seed"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr ""
+"Aviso: O game \"minimal development test\" apenas serve para desenvolvedores."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Já existe um mundo com o nome \"$1\""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Nome do mundo"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr ""
-"Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Você não possui nenhum subgame instalado."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Tem certeza que deseja excluir \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Sim"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Claro que não!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Excluir"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: não foi possível excluir \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: caminho inválido do módulo \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Excluir o mundo \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Não"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Aceitar"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Renomear pacote de módulos:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Aceitar"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" não é uma flag válida."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Instalação de módulo: arquivo: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Descrição de configuração não fornecida)"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Voltar para as configurações"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Navegar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Editar"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr "O formato é de 3 números separados por vírgulas dentro de colchetes."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Formato: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Jogos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Módulos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+"Opcionalmente essas lacunas podem ser colocados com a vírgula na frente."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Por favor, digite uma lista de flags separadas por vírgulas."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Por favor insira um inteiro válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Por favor, insira um número válido."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Os possíveis valores são: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Restaurar para o padrão"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Selecionar diretório"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Mostrar nomes técnicos"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "O valor deve ser maior que $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "O valor deve ser menor que $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"Instalação de módulo: o tipo de arquivo \"$1\" não é suportado"
+"Instalação de módulo: o tipo de arquivo \"$1\" não é suportado ou o arquivo "
+"está corrompido"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Não foi possível instalar $1 em $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Instalação de módulo: não foi possível encontrar o nome adequado da pasta "
-"para o pacote de módulos $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instalação de módulo: arquivo: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Instalação de módulo: não foi possível encontrar o nome adequado da pasta "
+"para o pacote de módulos $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Fechar Mod Store"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "Baixando $1, por favor aguarde..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instalar"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Nome do mundo"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Página $1 de $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Classificação"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "reinstalar"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instalar"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Procurar"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Nome curto:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Página $1 de $2"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Instalado com sucesso:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Créditos"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Desorganizado"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Desenvolvedores principais"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "reinstalar"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Colaboradores ativos"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Desenvolvedores principais"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Créditos"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Colaboradores anteriores"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Desenvolvedores principais anteriores"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Módulos instalados:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Repositório de módulos online"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informação do módulo:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Nenhuma descrição disponível do módulo"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Informação do módulo:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Renomear"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Desinstalar o pacote de módulos selecionado"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "Desinstalar o módulo selecionado"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "Selecione o arquivo do módulo:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Módulos"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Desinstalar o módulo selecionado"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "Endereço/Porta"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Desinstalar o pacote de módulos selecionado"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "Nome/Senha"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Servidores públicos"
+msgid "Address / Port"
+msgstr "Endereço / Porta :"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Excluir"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Cliente"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Conectar"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Modo criativo"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "habilitado"
+msgstr "Habilitar dano"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "habilitado"
+msgid "Del. Favorite"
+msgstr "Favoritos:"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Cliente"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Favoritos:"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Novo"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nome / Senha :"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Configurar"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP habilitado"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Iniciar o jogo"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Endereço de Bind"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Selecione um mundo:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Configurar"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Modo criativo"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Habilitar dano"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Público"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
-msgstr "Nome/Senha"
+msgstr "Nome / Senha"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Novo"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Nenhum mundo criado ou selecionado!"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Porta"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Porta do servidor"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Público"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr ""
-"Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Selecione um mundo:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Servidor"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Ãgua opaca"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Porta do servidor"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Iniciar o jogo"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Ãrvores melhores"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Nuvens 3D"
-#: builtin/mainmenu/tab_settings.lua:33
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Configurações Avançadas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Antialiasing:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Você tem certeza que deseja resetar seu mundo?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Filtragem bi-linear"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Filtragem tri-linear"
+msgid "Bump Mapping"
+msgstr "Bump mapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Mudar teclas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Vidro conectado"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Folhas com transparência"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap (filtro)"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Filtro Anisotrópico"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Não"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Sem filtros"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Iluminação suave"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Sem Mipmapping"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Habilitar partículas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Destaque nos Blocos"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nuvens 3D"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Destaque nos Blocos"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Ãgua opaca"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Nenhum"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Conectar"
+msgid "Normal Mapping"
+msgstr "Tone mapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Folhas Opacas"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Ãgua opaca"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Oclusão de paralaxe"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Habilitar partículas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Configurações"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Sombreadores"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Mudar teclas"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Folhas Simples"
-#: builtin/mainmenu/tab_settings.lua:236
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Um jogador"
+msgid "Smooth Lighting"
+msgstr "Iluminação suave"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Texturização:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Tone mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "Mipmapping"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr ""
+msgstr "Nível de sensibilidade ao toque (px)"
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Filtragem tri-linear"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Folhas Balançam"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Plantas balançam"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Configurações"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Ondas na água"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Um jogador"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Sim"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Configurar"
+msgstr "Configurar Mods"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "Menu principal"
+msgstr "Principal"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Iniciar Um jogador"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Jogar"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Um jogador"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Selecione o pacote de texturas:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Nenhuma informação disponível"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selecione o pacote de texturas:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Pacotes de texturas"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "Carregando..."
-
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "Resolvendo os endereços..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Erro de conexão (tempo excedido)."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Pronto!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
-
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Texturas dos itens..."
+msgstr "Inicializando nodes"
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicializando nodes..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Menu principal"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Carregando texturas..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Recompilando shaders..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Erro de conexão (tempo excedido?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
-"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a "
-"ser feito."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Não foi possível localizar ou carregar jogo \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "Especificação do jogo inválida."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Menu principal"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Continuar"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+"Nenhum mundo foi selecionado e nenhum endereço fornecido. Nada a ser feito."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Você morreu."
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Seu nome de jogador é muito longo."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Reviver"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "O caminho fornecido não existe: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "necessita_fonte_alternativa"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Verifique o debug.txt para mais detalhes."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Mudar teclas"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Alterar a senha"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Conectando ao servidor..."
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Continue"
+msgstr "Continuar"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Criando o cliente..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Criando o servidor..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -699,582 +810,3711 @@ msgstr ""
"- Roda: selecionar item\n"
"- T: bate-papo\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuar"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Alterar a senha"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volume do som"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Mudar teclas"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Controles:\n"
+"Se não há nenhum menu visível:\n"
+"- Um toque: ativa botão\n"
+"- Duplo toque: place/use\n"
+"- Deslizar dedo: Olhar ao redor\n"
+"Menu/Inventário visível:\n"
+"- Duplo toque: (Fora do menu):\n"
+" -->Fechar\n"
+"- Tocar Item e depois tocar em um slot:\n"
+" --> move item\n"
+"- Tocar e arrastar, e depois tocar com o 2º dedo\n"
+" --> Coloca apenas um item no slot\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Sair para o menu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Sair do Minetest"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Desligando tudo..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Criando o servidor..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Criando o cliente..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Carregando itens..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Resolvendo os endereços..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Conectando ao servidor..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "Mídia..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "Definições dos itens..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
-msgstr "Definições dos nós..."
+msgstr "Carregando blocos..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "Mídia..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Resolvendo os endereços..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Reviver"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Desligando tudo..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Verifique o debug.txt para mais detalhes."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volume do som"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "Você morreu."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
-msgstr ""
+msgstr "Ok"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Teclas (se este menu estiver com problema, remova itens do arquivo minetest."
-"conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Entrar "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Continuar"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Usar\" = descer"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "\"Pular\" duas vezes ativa o voo"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Voltar"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Essa tecla já está em uso"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Bate-papo"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "press. uma tecla"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comando"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Avançar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Console"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Voltar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "\"Pular\" duas vezes ativa o voo"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Esquerda"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Soltar"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Direita"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Avançar"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Usar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Inventário"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Pular"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Esgueirar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Essa tecla já está em uso"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Soltar"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Teclas (se este menu estiver com problema, remova itens do arquivo minetest."
+"conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Inventário"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Esquerda"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Bate-papo"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Impr. pilha (log)"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Comando"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Sel. distância"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Console"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Direita"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Alternar voo"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Esgueirar"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Alternar modo de câmera cinemática"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Alternar corrida"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Alternar corrida"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Alternar voo"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Alternar noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Sel. distância"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Impr. pilha (log)"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Usar"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Senha antiga"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "press. uma tecla"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Nova senha"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Alterar"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Confirmar a senha"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Alterar"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Nova senha"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Senha antiga"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "As senhas não correspondem!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volume do som: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Sair"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Botão esquerdo"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Roda do mouse"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volume do som: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Botão direito"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplicativos"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Botão X 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "ATTN"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Backspace"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Limpar"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Botão X 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Vírgula"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert (tecla)"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel (tecla)"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pause"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Abaixo"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Tecla End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Apagar OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel (tecla)"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Executar"
+
+#: src/keycode.cpp
msgid "Final"
-msgstr "Final"
+msgstr "Final (tecla)"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Junja"
-msgstr "Junja"
+msgstr "Tecla Junja"
-#: src/keycode.cpp:226
-msgid "Kanji"
-msgstr "Kanji"
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Tecla Kana"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "Tecla Kanji"
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Botão esquerdo"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Ctrl esquerdo"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Menu esquerdo"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Page Down"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift esquerdo"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Page Up"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Windows esquerdo"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Espaço"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Abaixo"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Roda do mouse"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Executar"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Menos"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print Screen"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Mode Change (tecla)"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Select"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Page Down"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Acima"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert (tecla)"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Ajuda"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Tecl.num.*"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Captura de tela"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Tecl.num.+"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Windows esq."
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Tecl.num.-"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Apps"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Tecl.num./"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Tecl.num.0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Tecl.num.1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Windows dir."
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sleep"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Tecl.num.2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Tecl.num.3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Tecl.num.4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Tecl.num.5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Tecl.num.6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Tecl.num.7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Tecl.num.*"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Tecl.num.+"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Tecl.num.-"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Tecl.num./"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Tecl.num.8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Tecl.num.9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Limpar OEM"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift esq."
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift dir."
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Ponto"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Ctrl esq."
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Mais"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Menu esq."
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print Screen"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Page Up"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Botão direito"
+
+#: src/keycode.cpp
msgid "Right Control"
-msgstr "Ctrl dir."
+msgstr "Ctrl direito"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
-msgstr "Menu dir."
+msgstr "Menu direito"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Vírgula"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift direito"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Menos"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Windows direito"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Ponto"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Mais"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Tecla Select"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Tecla Sleep"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Apagar OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Captura de tela"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Espaço"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "Limpar OEM"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Acima"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Botão X 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Botão X 2"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Zoom"
-#~ msgid "Game Name"
-#~ msgstr "Nome do jogo"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\""
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = oclusão paralaxe com dados de inclinação (mais rápido).\n"
+"1 = mapeamento de relevo (mais lento, mais preciso)."
-#~ msgid "GAMES"
-#~ msgstr "JOGOS"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Nuvens 3D"
-#~ msgid "Games"
-#~ msgstr "Jogos"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "modo 3D"
-#~ msgid "Mods:"
-#~ msgstr "Módulos:"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Suporte 3D.\n"
+"Modos atualmente suportados:\n"
+"- none: Nenhum efeito 3D.\n"
+"- anaglyph: Sistema de cor Ciano/Magenta (Óculos 3D azul vermelho).\n"
+"- interlaced: Sistema interlaçado (Óculos com lentes polarizadas).\n"
+"- topbottom: Divide a tela em duas: uma em cima e outra em baixo.\n"
+"- sidebyside: Divide a tela em duas: lado a lado."
+
+#: 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 ""
+"Seed do mundo (deixe em branco para uma seed aleatória).\n"
+"Será sobrescrita quando for criada um novo mundo no menu principal."
-#~ msgid "edit game"
-#~ msgstr "editar o jogo"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+"Uma mensagem para ser mostrada a todos os clientes do seu servidor quando "
+"ele travar."
-#~ msgid "new game"
-#~ msgstr "novo jogo"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+"Uma mensagem para ser mostrada a todos os clientes quando o servidor "
+"desligar."
-#~ msgid "EDIT GAME"
-#~ msgstr "EDITAR JOGO"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "Limite absoluto de emergir filas"
-#~ msgid "Remove selected mod"
-#~ msgstr "Remover o módulo selecionado"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "Aceleração no ar"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Adicionar módulo"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "Limite para blocos ativos"
-#~ msgid "CLIENT"
-#~ msgstr "CLIENTE"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "Limite para blocos ativos"
-#~ msgid "Favorites:"
-#~ msgstr "Favoritos:"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "Limite para blocos ativos"
-#~ msgid "START SERVER"
-#~ msgstr "SERVIDOR"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "Alcance para envio de objetos ativos"
-#~ msgid "Name"
-#~ msgstr "Nome"
+#: 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 ""
+"Endereço para conexão.\n"
+"Deixe em branco para iniciar um servidor local.\n"
+"Note que o campo de endereço no menu principal sobrescreve essa configuração."
-#~ msgid "Password"
-#~ msgstr "Senha"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"Ajustar configuração de dpi (profundidade de cor) para sua tela (apenas para "
+"quem não usa X11/Android) Ex para telas 4K."
-#~ msgid "SETTINGS"
-#~ msgstr "CONFIGURAÇÕES"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Ajustar a gama de codificação para a tabela de claridade. Os números mais "
+"baixos são mais brilhantes.\n"
+"Esta configuração é somente para o cliente e é ignorada pelo servidor."
-#~ msgid "Preload item visuals"
-#~ msgstr "Precarga de elementos visuais"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avançado"
-#~ msgid "Finite Liquid"
-#~ msgstr "Líquido finito"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "Frio nas alturas"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "UM JOGADOR"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Sempre voar e correr"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "TEXTURAS"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Gama de oclusão de ambiente"
-#~ msgid "MODS"
-#~ msgstr "MÓDULOS"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "Amplia os vales"
-#~ msgid "Add mod:"
-#~ msgstr "Adicionar módulo:"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "Filtragem anisotrópica"
-#~ msgid "Local install"
-#~ msgstr "Instalação local"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Anunciar servidor"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"Anunciar a esta lista de servidores.\n"
+"Se você quiser anunciar seu endereço IPv6, use serverlist_url = v6.servers."
+"minetest.net."
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Aproxima os valores (X, Y, Z) de escala do fractal em blocos."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Peça para reconectar depois de queda"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "Informar lista de servidores automaticamente."
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "Tecla para andar para trás"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Base terrain height"
+msgstr "Altura da base do terreno"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr "Básico"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Basic Privileges"
+msgstr "Privilégios por padrão"
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr "Filtragem bi-linear"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Endereço de bind"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+"Bits por pixel (Também conhecido como profundidade de cor) no modo de tela "
+"cheia."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Construir com o jogador dentro do bloco"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Bump mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Suavização da camera"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Suavização da câmera no modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "Tecla para alternar atualização da câmera"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "Ruído nas cavernas #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Ruído nas cavernas #2"
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+"Formação de cavernas e túneis na interseção entre dois ruídos diferentes"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Tecla de Chat"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Tecla comutadora de chat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"Escolha entre 18 fractais com 9 fórmulas\n"
+"1 = Conjunto de mandelbrot \"Roundy\" 4D.\n"
+"2 = Conjunto de julia \"Roundy\" 4D.\n"
+"3 = Conjunto de mandelbrot \"Squarry\" 4D.\n"
+"4 = Conjunto de julia \"Squarry\" 4D.\n"
+"5 = Conjunto de mandelbrot \"Mandy Cousin\" 4D.\n"
+"6 = Conjunto de julia \"Mandy Cousin\" 4D.\n"
+"7 = Conjunto de mandelbrot \"Variation\" 4D.\n"
+"8 = Conjunto de julia \"Variation\" 4D.\n"
+"9 = Conjunto de mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
+"10 = Conjunto de julia \"Mandelbrot/Mandelbar\" 3D.\n"
+"11 = Conjunto de mandelbrot \"Ãrvore de natal\" 3D.\n"
+"12 = Conjunto de julia \"Ãrvore de natal\" 3D..\n"
+"13 = Conjunto de mandelbrot \"Bulbo de Mandelbrot\" 3D.\n"
+"14 = Conjunto de julia \"Bulbo de Mandelbrot\" 3D.\n"
+"15 = Conjunto de mandelbrot \"Bulbo de Mandelbrot Cosseno\" 3D.\n"
+"16 = Conjunto de julia \"Bulbo de Mandelbrot Cosseno\" 3D.\n"
+"17 = Conjunto de mandelbrot \"Bulbo de Mandelbrot\" 4D.\n"
+"18 = Conjunto de julia \"Bulbo de Mandelbrot\" 4D."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Tamanho do chunk"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Tecla para modo cinematográfico"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "Texturas transparentes limpas"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Cliente e servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "Velocidade de subida (em escadas e outros)"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Altura das nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Espessura das nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Nuvens"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Conf. das nuvens apenas afetam seu jogo local."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Nuvens no menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Névoa colorida"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"Lista separada por vírgulas dos mods confiáveis que podem utilizar funções "
+"inseguras mesmo quando o a opção de Mod Seguro está ativada (via "
+"request_insecure_environment())."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"Lista de mods, separados por vírgulas, que podem usar APIs de requisição "
+"HTTP, que\n"
+"os permitem enviar e baixar informações para/da internet."
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "Tecla de Comando"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Vidro conectado"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Conecta ao servidor de mídia externo"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "Conecta o vidro se isso for suportado pelo bloco."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "Console Alpha"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Cor do console"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Tecla do console"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "Para frente continuamente"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "Movimento contínuo para frente (apenas usado para testes)."
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Controles"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Controles da duração do dia.\n"
+"Exemplos: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = O tempo para e permanece "
+"inalterado."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Controla o tamanho dos desertos e das praias no Mapgen v6.\n"
+"Quando \"snowbiomes\" (bioma de neve) está habilitado 'mgv6_freq_desert' é "
+"ignorado."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr "Controla o esparsamento/profundidade dos lagos."
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr "Controla o esparsamento/altura das colinas."
+
+#: src/settings_translation_file.cpp
+msgid "Controls width of tunnels, a smaller value creates wider tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Mensagem de travamento"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Cria poços de lava randômicos nas cavernas,\n"
+"Isso pode dificultar a mineração. Zero desabilita isso. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"Cria poços de água randômicos nas cavernas,\n"
+"Isso pode dificultar a mineração. Zero desabilita isso. (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "Alpha do cursor"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Cor do cursor"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Cor do cursor (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "Velocidade para descer"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "dpi"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Dano"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Tecla para alternar modo de Debug"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Nível de log do Debug"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Passo do servidor dedicado"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "Aceleração padrão"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Jogo padrão"
+
+#: 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 ""
+"Padrões de jogo para quando criar um novo mundo.\n"
+"Isso será sobrescrito quando criar um mundo no menu principal."
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Senha padrão"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Privilégios por padrão"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Tempo limite padrão para cURL, indicado em milissegundos.\n"
+"Só tem efeito se compilado com cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"Define processo amostral de textura.\n"
+"Um valor mais alto resulta em mais suaves mapas normais."
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Define a distância máxima de transferência de jogadores em blocos (0 = "
+"ilimitado)."
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "Dicas de ferramenta mostrando atraso. indicado em milissegundos."
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "Tratamento da API Lua rejeitado"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "Profundidade em que você encontrará cavernas enormes."
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "Profundidade em que você encontrará cavernas enormes."
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "Velocidade de descida"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"Descrição do servidor, a ser exibida quando os jogadores se se conectarem e "
+"na lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "Dessincronizar animação do bloco"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "Dados detalhados do perfil do mod . Útil para desenvolvedores de mods."
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "Perfilamento detalhado do mod"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"Determina a forma do terreno\n"
+"Os 3 números entre '[' e ']' controla a escala do\n"
+"terreno, os 3 números devem ser idênticos."
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Habilitar Anti-Hack"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Não permitir logar sem senha"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Domínio do servidor, para ser mostrado na lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "\"Pular\" duas vezes ativa o vôo"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "\"Pular\" duas vezes alterna o modo vôo."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Tecla para largar item"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Mostrar informações de depuração do Mapgen."
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Habilitar VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Habilitar Mod Security (Segurança nos mods)"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Permitir que os jogadores possam sofrer dano e morrer."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "Habilitar entrada de comandos aleatórios (apenas usado para testes)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"Ativar iluminação suave com oclusão de ambiente simples.\n"
+"Desativada para andar rápido ou para visões diferentes."
+
+#: 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 ""
+"Habilitar recurso de não permitir que jogadores usando versões antigas do "
+"cliente possam se conectar.\n"
+"Essas versões são compatíveis no sentido de não travar quando conectam a "
+"servidores com versões mais atuais, porém eles podem não suportar todos os "
+"recursos que você está esperando."
+
+#: 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 ""
+"Permitir o uso de servidor de mídia remoto (se fornecido pelo servidor).\n"
+"Servidores remotos oferecem uma maneira significativamente mais rápida\n"
+"para fazer o download de mídia (por exemplo texturas) ao se conectar ao "
+"servidor."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"Habilitar/desabilitar a execução de um IPv6 do servidor. Um servidor com "
+"IPv6 pode \n"
+"ser restringido para clientes com IPv6, dependendo da configuração do "
+"sistema.\n"
+"Ignorado se bind_address estiver definido."
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr "Habilita itens animados no inventário."
+
+#: 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 ""
+"Ativar texturização bump mapping para texturas. Normalmaps precisam ser "
+"fornecidos pelo\n"
+"pacote de textura ou a necessidade de ser auto-gerada.\n"
+"Requer shaders a serem ativados."
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "Ativar armazenamento em cache de direção de face girada das malhas."
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+msgstr "Habilitar efeito \"filmic tone mapping\""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Habilitar minimapa."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+"Ativa geração de normalmap (efeito de relevo) ao voar.\n"
+"Requer texturização bump mapping para ser ativado."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Ativar mapeamento de oclusão de paralaxe.\n"
+"Requer shaders a serem ativados."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"Opção experimental, pode causar espaços visíveis entre blocos\n"
+"quando definido como número maior do que 0."
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS em menu de pausa"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA Antialiasing de tela cheia"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "Cair balançando"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Fonte Alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "Sombra da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "Alpha da sombra da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "Tamanho da fonte alternativa"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "Tecla de correr"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "Aceleração no modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "Velocidade no modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Modo rápido"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Movimento rápido (use a tecla).\n"
+"Isso requer o privilegio \"fast\" no servidor."
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr "Campo de visão"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr "Campo de visão em graus."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Arquivo na pasta client/serverlist/ que contém seus servidores favoritos, "
+"que são mostrados na aba Multiplayer."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Filmic Tone Mapping"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+"Texturas filtradas podem misturar valores RGB com os vizinhos totalmente \n"
+"transparentes, o qual otimizadores PNG geralmente descartam, por vezes \n"
+"resultando em um escuro ou luz para texturas transparentes.\n"
+"Aplicar esse filtro para limpar isso no tempo de carregamento da textura."
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "Filtros"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "Semente do mapa fixa"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Tecla de voar"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Voando"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Névoa"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Tecla de comutação de névoa"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Caminho fonte"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Fonte de sombra"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "Fonte alpha de sombra"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "Fonte alpha de sombra (opacidade, entre 0 e 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Tamanho da fonte"
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Tecla para frente"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Fontes Freetype"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"De quão longe blocos são gerados para os clientes, indicado em mapa de "
+"blocos (16 nós)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+"De quão longe blocos são enviados aos clientes, indicado em mapas de blocos "
+"(16 nós)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+"De quão longe os clientes sabem sobre objetos, indicado em mapas blocos (16 "
+"nós)."
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Tela cheia"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "Tela cheia BPP"
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Modo tela cheia."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "Escala da GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Filtro de escala da GUI"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "Filtro txr2img de escala da GUI"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gama"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "Geral"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Gerar normalmaps"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"Atributos de geração de mapa.\n"
+"No Mapgen v6 a flag 'decorations' controla todas as decorações exceto "
+"árvores\n"
+"e grama do pântano, em todos os outros mapgens essa flag controla todas as "
+"decorações.\n"
+"Flags que não são especificadas na string da flag não são alteradas por "
+"padrão.\n"
+"Flags começando com \"no\" (não) são usada para explicitamente desabilitá-"
+"las."
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Gráficos"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "Gravidade"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP mods"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Tecla de comutação HUD"
+
+#: 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 ""
+"Manipulação para chamadas de API Lua reprovados:\n"
+"- legacy: (tentar) imitar o comportamento antigo (padrão para a "
+"liberação).\n"
+"- log: imitação e log de retraçamento da chamada reprovada (padrão para "
+"depuração).\n"
+"- error: abortar no uso da chamada reprovada (sugerido para "
+"desenvolvedores de mods)."
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "Altura da janela inicial."
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "Altura em que as nuvens ficam aparecendo."
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "FPU de alta precisão"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "Pagina principal do servidor, a ser exibido na lista de servidores."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "Quão profundo são os rios"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"Quão grande área de blocos estão sujeitos ao material do bloco ativo, "
+"indicado em mapas blocos (16 nós).\n"
+"Em blocos ativos objetos são carregados e ABMs são executadas."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+"Quanto o servidor aguardará antes de descarregar mapblocks não utilizados. "
+"Um valor mais elevado é mais suave, mas vai usar mais memória RAM."
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "Quão largos serão os rios"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "Protocolo IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "Servidor de IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "Suporte a IPv6."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+"Se o FPS for mais elevado do que isso, limitá-lo dormindo\n"
+"para não gastar a potência da CPU desnecessariamente."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+msgstr ""
+"Se tecla \"usar\" estiver desabilitada então ela vai ser usada para voar "
+"rápido se modo de voar e rápido estiverem habilitados."
+
+#: 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 ""
+"Se habilitado juntamente com o modo de vôo, o jogador é capaz de voar "
+"através de nós de sólidos.\n"
+"Isso requer o privilégio \"noclip\" no servidor."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and descending."
+msgstr ""
+"Se habilitado, tecla de \"usar\" em vez de \"esgueirar\" servirá para usada "
+"descer."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+"Se habilitado, as ações são registradas para reversão.\n"
+"Esta opção só é lido quando o servidor é iniciado."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr "Se habilitado, desabilita prevenção de fraude no modo multijogador."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+"Se habilitado, dados inválidos do mundo não vão causar o queda do servidor.\n"
+"Só habilite isso, se você souber o que está fazendo."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr "Se habilitado, novos jogadores não podem entrar com uma senha vazia."
+
+#: 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 ""
+"Se habilitado, você pode colocar os blocos na posição (pés + nível dos "
+"olhos) onde você está.\n"
+"Isto é útil quando se trabalha com nodeboxes em pequenas áreas."
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+"Se isso for definido, os jogadores vão sempre (re)desovar na posição "
+"determinada."
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Ignorar erros do mundo"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "No jogo"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+"Valor alfa do fundo do console do bate-papo no jogo (opacidade, entre 0 e "
+"255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Cor de fundo do Bate-papo no jogo (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+"Intervalo para cada salvamento de alterações importantes no mundo, indicado "
+"em segundos."
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr "Intervalo de envio de hora do dia para os clientes."
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr "Animações nos itens do inventário"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "Inventário"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "Mouse invertido"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "Inverta o movimento vertical do mouse."
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr "Entidade item TTL"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"Iterações da função recursiva.\n"
+"Controles da escala de detalhes."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas para conjunto de Julia: Largura da constante hipercomplexa "
+"determinando o formato do conjunto.\n"
+"Não tem nenhum efeito em fractais 3D.\n"
+"Intervalo rugoso entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas para conjunto de Julia: Componente X da constante hipercomplexa "
+"determinando o formato do conjunto.\n"
+"Intervalo rugoso entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas para conjunto de Julia: Componente Y da constante hipercomplexa "
+"determinando o formato do conjunto.\n"
+"Intervalo rugoso entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"Apenas para conjunto de Julia: Componente Z da constante hipercomplexa "
+"determinando o formato do conjunto.\n"
+"Intervalo rugoso entre -2 e 2."
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Pular"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "Velocidade de Pulo"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para diminuir o alcance de visão.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para deixar cair o item atualmente selecionado.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para aumentar o alcance de visão.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para pular.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover-se rápido no modo rápido.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador para trás.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador para a frente.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador à esquerda.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para mover o jogador para a direita.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para abrir o console do bate-papo.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla para abrir a janela de bate-papo para digitar comandos.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para abrir a janela de bate-papo.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para abrir o inventário.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para imprimir pilhas de depuração. Usado para o desenvolvimento.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla por esgueirar.\n"
+"Também usado para descer e descendente na água se aux1_descends está "
+"desativado.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla para comutação entre câmera de primeira e terceira pessoa.\n"
+"Consulte 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 ""
+"Tecla para tirar fotos da tela.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar modo cinematográfico.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Chave para ativar/desativar a exibição do minimapa.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar o modo rápido.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para alternar a voar.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para alternar modo noclip.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar a atualização da câmera. Usado somente para "
+"desenvolvimento\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla para ativar/desativar a exibição de informações de depuração.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla para ativar/desativar a exibição do HUD.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar a exibição do bate-papo.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para ativar/desativar a exibição da névoa.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Tecla para ativar/desativar a exibição do profiler. Usado para o "
+"desenvolvimento.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Tecla para alternar o alcance de visão ilimitado.\n"
+"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "Tecla usada para descer/esgueirar"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Linguagem"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "Profundidade de cavernas grandes"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "Coisas relacionadas a Lava"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "Estilo de folhas"
+
+#: 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 ""
+"Folhas de estilo:\n"
+"- Fancy: todas as faces visíveis\n"
+"- Simple: apenas faces externas, se definidos special_tiles\n"
+"- Opaque: desativar transparência"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Tecla para a esquerda"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+"Comprimento de um tick de servidor e o intervalo no qual os objetos são "
+"geralmente atualizados em rede."
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 ""
+"Nível de registro a serem gravados em debug.txt:\n"
+"- <nothing> (nenhum)\n"
+"- none (mensagens sem nível de log)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+
+#: 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 ""
+"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 ""
+"Limites número de solicitações HTTP paralelas. afeta:\n"
+"- Media buscar se servidor usa configuração de remote_media.\n"
+"- Download de lista de servidores e anúncio do servidor.\n"
+"- Transferências realizadas pelo menu principal (por exemplo gerência de "
+"mods).\n"
+"Só tem efeito se compilado com cURL."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "Fluidez líquida"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "Suavização do fluido líquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "Limite de iteração do liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "Tempo para limpar a lista de espera para a atualização de líquidos"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "Dissipação em liquido"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Intervalo de atualização de líquido em segundos."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "Período de atualização dos Líquidos"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "Menu principal gestor de games"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Menu principal gestor de mods"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Menu principal do script"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Fazer cores de névoa e céu dependerem do dia (amanhecer/pôr do sol) e exibir "
+"a direção."
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Diretório do mapa"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"Atributos para o gerador de mapas específico para o Mapgen v6.\n"
+"Quando biomas de neve estão habilitados, pântanos ficam habilitados e a flag "
+"de pântanos é ignorada.\n"
+"Flags que não são especificadas na string da flag não são modificadas por "
+"padrão.\n"
+"Flags começando com \"no\" (não) são usadas para explicitamente desabilitá-"
+"las."
+
+#: 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.\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."
+msgstr ""
+"Atributos de mapgen específicos para Mapgen plano.\n"
+"Alguns lagos e colinas são ocasionalmente adicionados num mundo plano.\n"
+"Flags que não estão especificadas na string de flags não são modificados a "
+"partir do padrão.\n"
+"Flags começando com \"no\" (não) são usadas para desativá-los explicitamente."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"Atributos para o gerador de mapas específico para o Mapgen v6.\n"
+"Quando biomas de neve estão habilitados, pântanos ficam habilitados e a flag "
+"de pântanos é ignorada.\n"
+"Flags que não são especificadas na string da flag não são modificadas por "
+"padrão.\n"
+"Flags começando com \"no\" (não) são usadas para explicitamente desabilitá-"
+"las."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"Atributos para o gerador de mapas específico para o Mapgen v6.\n"
+"Quando biomas de neve estão habilitados, pântanos ficam habilitados e a flag "
+"de pântanos é ignorada.\n"
+"Flags que não são especificadas na string da flag não são modificadas por "
+"padrão.\n"
+"Flags começando com \"no\" (não) são usadas para explicitamente desabilitá-"
+"las."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Limite de geração de mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Intervalo de salvamento de mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "Limite de mapblock"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "Timeout de descarregamento do mapblock"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Vales do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Parâmetros de ruído para o calor nos biomas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Parâmetros de ruído de mistura de umidades nos biomas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Parâmetros de ruído para umidade nos biomas"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Debug do mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flags do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Mapgen plano"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Threshold dos lagos no Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Flags do Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Nível do terreno para o Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Esparsamento das colinas no Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Threshold das colinas no Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Esparsamento de lagos no Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Threshold dos lagos no Mapgen plano"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "Fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Componente W da fatia do fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "Fractal do Mapgen fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "Iterações no fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "Componente W do fractal Julia no Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "Componente X do fractal julia no Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Componente Y do fractal julia no Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Componente Z do fractal julia no Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "Offset do fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "Escala no fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "Componente W da fatia do fractal do Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Nome do mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Mapgen versão 5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Profundidade de cavernas grandes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Mapgen versão 6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Mapgen versão 7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Profundidade de cavernas grandes"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Opções para menus"
+
+#: 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 "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mipmapping (filtro)"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Tecla para modo de visão ilimitado"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Tecla direita"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Captura de tela"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Captura de tela"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Captura de tela"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Servidor / Um jogador"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "Endereço do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "Descrição do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Nome do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Porta do servidor"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "URL da lista de servidores"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "arquivo da lista de servidores"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Iluminação suave"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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 "Esgueirar"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "Pacotes de texturas"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Filtragem tri-linear"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "press. uma tecla"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "Útil para desenvolvedores de mods."
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "Volume do som"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "Coisas relacionadas a Ãgua"
+
+#: 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 "Balanço das árvores"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "Largura da janela inicial."
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+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 ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
#~ msgstr ""
-#~ "Atenção: Alguns mods ainda não foram configurados.\n"
-#~ "E eles serão ativados por padrão, quando você salvar a configuração."
+#~ "Habilita recurso permitindo que o nível da água seja um pouco menor, "
+#~ "portando não preenche todo o espaço disponível para bloco.\n"
+#~ "Note que isso não está bem otimizado e que suavização da iluminação na "
+#~ "superfície da água não funciona bem com esse recurso."
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr ""
+#~ "Habilitar destaque de bloco selecionado (desabilita o modo de destaque "
+#~ "selectionbox [Padrão])."
#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#~ "Julia set: (X,Y,Z) offsets from world centre.\n"
+#~ "Range roughly -2 to 2, multiply by j_scale for offsets in nodes."
#~ msgstr ""
-#~ "Atenção: Alguns mods configurados não foram encontrados.\n"
-#~ "Suas definições serão removidas quando você salvar a configuração."
+#~ "Julia definido: (X, Y, Z) deslocamentos do centro mundo.\n"
+#~ "Variam aproximadamente -2 a 2, multiplique por j_scale para deslocamentos "
+#~ "em nós."
+
+#~ msgid ""
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Tecla para diminuir o intervalo de visualização. Modifica o intervalo "
+#~ "mínimo de visualização.\n"
+#~ "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Tecla para aumentar o intervalo de visualização. Modifica o mínimo "
+#~ "intervalo de visualização.\n"
+#~ "Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "pré-carregando texturas de inventário"
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Baixar"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item"
+
+#~ msgid "is required by:"
+#~ msgstr "é necessário para:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "A configuração foi salva. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Atenção: A configuração não está consistente."
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos"
+
+#~ msgid "Show Public"
+#~ msgstr "Exibir públicos"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Exibir favoritos"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Deixe o endereço em branco para iniciar um servidor local."
+
+#~ msgid "Create world"
+#~ msgstr "Criar o mundo"
+
+#~ msgid "Address required."
+#~ msgstr "É necessário um endereço."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Arquivos a serem excluídos"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Não foi possível excluir todos os arquivos do mundo"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1301,63 +4541,131 @@ msgstr "Zoom"
#~ "- ESC: este menu\n"
#~ "- T: bate-papo\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Não foi possível excluir todos os arquivos do mundo"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Atenção: Alguns mods configurados não foram encontrados.\n"
+#~ "Suas definições serão removidas quando você salvar a configuração."
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Atenção: Alguns mods ainda não foram configurados.\n"
+#~ "E eles serão ativados por padrão, quando você salvar a configuração."
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo"
+#~ msgid "Local install"
+#~ msgstr "Instalação local"
-#~ msgid "Files to be deleted"
-#~ msgstr "Arquivos a serem excluídos"
+#~ msgid "Add mod:"
+#~ msgstr "Adicionar módulo:"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado"
+#~ msgid "MODS"
+#~ msgstr "MÓDULOS"
-#~ msgid "Address required."
-#~ msgstr "É necessário um endereço."
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "TEXTURAS"
-#~ msgid "Create world"
-#~ msgstr "Criar o mundo"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "UM JOGADOR"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Deixe o endereço em branco para iniciar um servidor local."
+#~ msgid "Finite Liquid"
+#~ msgstr "Líquido finito"
-#~ msgid "Show Favorites"
-#~ msgstr "Exibir favoritos"
+#~ msgid "Preload item visuals"
+#~ msgstr "Precarga de elementos visuais"
-#~ msgid "Show Public"
-#~ msgstr "Exibir públicos"
+#~ msgid "SETTINGS"
+#~ msgstr "CONFIGURAÇÕES"
-#~ msgid "Advanced"
-#~ msgstr "Avançado"
+#~ msgid "Password"
+#~ msgstr "Senha"
-#~ msgid "Multiplayer"
-#~ msgstr "Vários jogadores"
+#~ msgid "Name"
+#~ msgstr "Nome"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos"
+#~ msgid "START SERVER"
+#~ msgstr "SERVIDOR"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Atenção: A configuração não está consistente."
+#~ msgid "CLIENT"
+#~ msgstr "CLIENTE"
-#~ msgid "Configuration saved. "
-#~ msgstr "A configuração foi salva. "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Adicionar módulo"
-#~ msgid "is required by:"
-#~ msgstr "é necessário para:"
+#~ msgid "Remove selected mod"
+#~ msgstr "Remover o módulo selecionado"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item"
+#~ msgid "EDIT GAME"
+#~ msgstr "EDITAR JOGO"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtragem anisotrópica"
+#~ msgid "new game"
+#~ msgstr "novo jogo"
+
+#~ msgid "Mods:"
+#~ msgstr "Módulos:"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mipmapping"
+#~ msgid "GAMES"
+#~ msgstr "JOGOS"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Nome do jogo"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Baixar"
+#~ msgid "If enabled, "
+#~ msgstr "habilitado"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Desabilitar PMs"
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "Atributos de geração de mapas específicos para o Mapgen v7.\n"
+#~ "'ridges' são os rios.\n"
+#~ "Flags que não estão especificadas na string da flag não são modificadas "
+#~ "por padrão.\n"
+#~ "Flags começando com \"no\" são usadas para explicitamente desabilitá-las."
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "Atributos de mapgen específicos para vales (Mapgen Valleys).\n"
+#~ "Flags que não estão especificadas na string de flags não são modificados "
+#~ "a partir do padrão.\n"
+#~ "Flags começando com \"no\" (não) são usadas para desativá-los "
+#~ "explicitamente.\n"
+#~ "\"altitude_chill\" torna terrenos de elevada altitude mais frios, o que "
+#~ "pode causar algumas falhas nos biomas.\n"
+#~ "\"humid_rivers\" modifica a umidade ao redor dos rios e em áreas onde a "
+#~ "água tende a ser represada em poças. Pode interferir em biomas que são "
+#~ "sensíveis a mudanças."
+
+#~ msgid "No!!!"
+#~ msgstr "Não!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Gerar Normalmaps"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Lista de servidores públicos"
+
+#~ msgid "No of course not!"
+#~ msgstr "Claro que não!"
diff --git a/po/ro/minetest.po b/po/ro/minetest.po
index e58dace34..ac4bf7937 100644
--- a/po/ro/minetest.po
+++ b/po/ro/minetest.po
@@ -7,175 +7,293 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-12-18 21:44+0200\n"
-"Last-Translator: King Artur <david1989mail@yahoo.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-03-17 15:28+0000\n"
+"Last-Translator: Lordmusic Player <lordmusicplro1@gmail.com>\n"
+"Language-Team: Romanian <https://hosted.weblate.org/projects/minetest/"
+"minetest/ro/>\n"
"Language: ro\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==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 1.7-dev\n"
+"X-Generator: Weblate 2.5\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
+#, fuzzy
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "A apărut o eroare in un script Lua,ca la un mod :"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "A apărut o eroare:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Meniul Principal"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Ok"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Reconectează-te"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Serverul cere o reconectare :"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Se încarcă..."
-#: builtin/mainmenu/common.lua:240
-msgid "Try reenabling public serverlist and check your internet connection."
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Lume:"
-
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
-msgid "Hide Game"
-msgstr "Ascunde Joc"
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
-msgstr "Ascunde conținutul mp"
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
-msgstr "Mod:"
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+"Încercați să activați lista de servere publică și să vă verificați "
+"conexiunea la internet."
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Dependințe:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
-msgid "Save"
-msgstr "Salvează"
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
msgid "Cancel"
msgstr "Anulează"
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Activează MP"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Dependințe:"
-#: builtin/mainmenu/dlg_config_world.lua:73
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable MP"
msgstr "Dezactivează MP"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
-msgid "enabled"
-msgstr "activat"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Activează MP"
-#: builtin/mainmenu/dlg_config_world.lua:85
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr "Activează tot"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Numele lumii"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Seminţe"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "Ascunde Joc"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Mapgen"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr "Ascunde conținutul mp"
-#: builtin/mainmenu/dlg_create_world.lua:59
-msgid "Game"
-msgstr "Joc"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Mod:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Salvează"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Lume:"
-#: builtin/mainmenu/dlg_create_world.lua:63
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "activat"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "O lume cu numele \"$1\" deja există"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Creează"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:69
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua:72
-msgid "Warning: The minimal development test is meant for developers."
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Joc"
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "O lume cu numele \"$1\" deja există"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Mapgen"
-#: builtin/mainmenu/dlg_create_world.lua:116
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No worldname given or no game selected"
msgstr "Jocul nu are nume, sau nu ai selectat un joc"
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Seminţe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Numele lumii"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Ești sigur că vrei să ștergi \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Da"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Nu, sigur că nu!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Șterge"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: Eroare la ștergerea \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: Pacht de mod invalid \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Ștergi lumea \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Nu"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Acceptă"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Redenumiți Pachetul de moduri:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Acceptă"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Instalare Mod: fișier: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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
+#, fuzzy
+msgid "Disabled"
+msgstr "Dezactivează MP"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Enabled"
+msgstr "activat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Jocuri"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Moduri"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Select path"
+msgstr "Selectează"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
#, fuzzy
msgid ""
"\n"
@@ -184,492 +302,516 @@ msgstr ""
"\n"
"Instalare Mod: tip de fișier neacceptat \"$1\""
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Eșuare la instalarea $1 în $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
-"Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de "
-"mod $1"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Instalare Mod: fișier: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Instalare mod: nu se poate găsi numele real pentru: $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de "
+"mod $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
msgstr ""
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr ""
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Instalează"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Pagina $1 din $2"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "Notă"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
msgstr ""
-#: builtin/mainmenu/store.lua:162
+#: builtin/mainmenu/store.lua
#, fuzzy
msgid "Shortname:"
msgstr "Numele lumii"
-#: builtin/mainmenu/store.lua:472
-msgid "Rating"
-msgstr "Notă"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr ""
-#: builtin/mainmenu/store.lua:497
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr ""
+
+#: builtin/mainmenu/store.lua
msgid "re-Install"
msgstr "Reinstalează"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Instalează"
-
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Contribuitori activi"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Pagina $1 din $2"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Dezvoltatori de bază"
-#: builtin/mainmenu/tab_credits.lua:22
+#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "Credits"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Dezvoltatori de bază"
-
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
-msgstr "Contribuitori activi"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Foști contribuitori"
-#: builtin/mainmenu/tab_credits.lua:54
+#: builtin/mainmenu/tab_credits.lua
#, fuzzy
msgid "Previous Core Developers"
msgstr "Dezvoltatori de bază"
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
-msgstr "Foști contribuitori"
-
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Moduri Instalate:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Repozitoriu Online de moduri"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Informații mod:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Nici o descriere de mod disponibilă"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Informații mod:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Redenumiți"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Dezinstalaţi Pachetul de moduri selectat"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Selectează Fișierul Modului:"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr "Dezinstalaţi modul selectat"
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
-msgstr "Selectează Fișierul Modului:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Moduri"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Dezinstalaţi Pachetul de moduri selectat"
-#: builtin/mainmenu/tab_multiplayer.lua:23
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Address / Port :"
+msgid "Address / Port"
msgstr "Adresă/Port"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-#, fuzzy
-msgid "Name / Password :"
-msgstr "Nume/Parolă"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Listă de servere publică"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Șterge"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Client"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Conectează"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Creative mode"
msgstr "Modul Creativ"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Damage enabled"
msgstr "activat"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Preferate:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Preferate:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Nume/Parolă"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "PvP enabled"
msgstr "activat"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Client"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Nou"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr ""
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Configurează"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "ÃŽncepe jocul"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Selectează lumea:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Modul Creativ"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Activează Daune"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Public"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Nume/Parolă"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Nou"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#, fuzzy
+msgid "No world created or selected!"
+msgstr "Jocul nu are nume, sau nu ai selectat un joc"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr ""
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Port server"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Public"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Jocul nu are nume, sau nu ai selectat un joc"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Selectează lumea:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Server"
-#: builtin/mainmenu/tab_settings.lua:21
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Port server"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "ÃŽncepe jocul"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Apă opacă"
+msgid "3D Clouds"
+msgstr "Nori 3D"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Copaci fantezici"
+msgid "Advanced Settings"
+msgstr "Setări"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Singleplayer"
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Bilinear Filter"
msgstr "Filtrare Biliniară"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Filtrare Triliniară"
+msgid "Bump Mapping"
+msgstr "Mip Mapping"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Modifică tastele"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "Conectează"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Apă opacă"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap"
-msgstr ""
+msgstr "Mip Mapping"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Nu"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Filter"
+msgstr "Filtru Anizotropic"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Mipmap"
+msgstr "Mip Mapping"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
msgstr "Lumină mai bună"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Activează particulele"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Lumină mai bună"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "Nori 3D"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Apă opacă"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Mip Mapping"
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "Conectează"
+msgid "Opaque Leaves"
+msgstr "Apă opacă"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Apă opacă"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Activează tot"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Setări"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Umbră"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Modifică tastele"
-
-#: builtin/mainmenu/tab_settings.lua:236
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Singleplayer"
-
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+msgid "Simple Leaves"
+msgstr "Apă opacă"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Lumină mai bună"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:256
-msgid "Touchthreshold (px)"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite."
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
-msgid "Bumpmapping"
+msgid "Tone Mapping"
msgstr "Mip Mapping"
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Trilinear Filter"
+msgstr "Filtrare Triliniară"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
-msgstr ""
+msgstr "Copaci fantezici"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-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:430
-msgid "Settings"
-msgstr "Setări"
+msgstr "Copaci fantezici"
-#: builtin/mainmenu/tab_simple_main.lua:82
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Singleplayer"
+msgid "Waving Water"
+msgstr "Copaci fantezici"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Da"
+
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Config mods"
msgstr "Configurează"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Main"
msgstr "Meniul Principal"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Start Singleplayer"
+msgstr "Singleplayer"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Joacă"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Singleplayer"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Selectează pachetul de textură:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Nici o informație disponibilă"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Selectează pachetul de textură:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
#, fuzzy
msgid "Texturepacks"
msgstr "Pachete de tetură"
-#: src/client.cpp:1721
+#: src/client.cpp
+#, fuzzy
+msgid "Connection timed out."
+msgstr "Eroare de conexiune (timeout?)"
+
+#: src/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client.cpp
#, fuzzy
msgid "Loading textures..."
msgstr "Se încarcă..."
-#: src/client.cpp:1736
+#: src/client.cpp
#, fuzzy
msgid "Rebuilding shaders..."
msgstr "Se rezolvă adresa..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
-
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Eroare de conexiune (timeout?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Texturi..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Nu se poate găsi sau încărca jocul \""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "Specificare invalidă"
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Meniul Principal"
-#: src/client/clientlauncher.cpp:223
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut."
+
+#: src/client/clientlauncher.cpp
msgid "Player name too long."
msgstr ""
-#: src/client/clientlauncher.cpp:261
-msgid "Connection error (timed out?)"
-msgstr "Eroare de conexiune (timeout?)"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut."
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Verifică deug.txt pentru detalii."
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Nu se poate găsi sau încărca jocul \""
+#: src/game.cpp
+#, fuzzy
+msgid "Change Keys"
+msgstr "Modifică tastele"
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "Specificare invalidă"
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Schimbă Parola"
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "lipsă_tip_font"
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Se conectează la server..."
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid "Continue"
msgstr "Continuă"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Ai murit."
-
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Reînviere"
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Se creează clientul..."
-#: src/game.cpp:1092
-msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
-msgstr ""
+#: src/game.cpp
+#, fuzzy
+msgid "Creating server..."
+msgstr "Se crează serverul..."
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -695,578 +837,3438 @@ msgstr ""
"- Rotiță mouse: selectează obiect\n"
"- T: chat\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Continuă"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Schimbă Parola"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Volum Sunet"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Modifică tastele"
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Ieși în Meniu"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Ieși din joc"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "Se închide..."
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Se crează serverul..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Se creează clientul..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Se rezolvă adresa..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Se conectează la server..."
-
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr "Definițiile obiectelor..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr "Definițiile Blocurilor..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr ""
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr "Media..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Verifică deug.txt pentru detalii."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Definițiile Blocurilor..."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Se rezolvă adresa..."
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Reînviere"
+
+#: src/game.cpp
+#, fuzzy
+msgid "Shutting down..."
+msgstr "Se închide..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Volum Sunet"
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp
+msgid "You died."
+msgstr "Ai murit."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr ""
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
msgstr ""
-"Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Continuă"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"Aleargă\" = coboară"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
-
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tastă deja folosită"
-
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "apasă o tastă"
-
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "ÃŽnainte"
-
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "ÃŽnapoi"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Stânga"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Dreapta"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Chat"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Aleargă"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Comandă"
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Sari"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Consloă"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Furișează"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr "Aruncă"
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "ÃŽnainte"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr "Inventar"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Chat"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Sari"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Comandă"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tastă deja folosită"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Consloă"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Intră pe zbor"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Stânga"
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Intră pe rapid"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Salvează logurile"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Selectare distanță"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Dreapta"
-#: src/guiKeyChangeMenu.cpp:413
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Furișează"
+
+#: src/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle Cinematic"
msgstr "Intră pe rapid"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Intră pe rapid"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Intră pe zbor"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Intră pe noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Selectare distanță"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Salvează logurile"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Aleargă"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Vechea parolă"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "apasă o tastă"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Noua parolă"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Schimbă"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Confirmarea parolei"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Schimbă"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Noua parolă"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Vechea parolă"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Parolele nu se potrivesc!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Volum sunet: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Ieșire"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Stânga"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Rotiță"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Volum sunet: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Drepata"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Aplicații"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X Butonul 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "ÃŽnapoi"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Capital"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Șterge"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "ÃŽnapoi"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Butonul 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Capital"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Virgulă"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Control"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Convert"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Meniu"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Pauză"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Jos"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Convert"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Ștergere OEF"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Execută"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Final"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Ajutor"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Nonconvert"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Stânga"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Ctrl Stânga"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Schimbă modul"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Meniu Stânga"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Următorul"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift Stânga"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Anteriorul"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Windows Stânga"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Spațiu"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Meniu"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Jos"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Rotiță"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Execută"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Minus"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Schimbă modul"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Selectează"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Următorul"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Sus"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Nonconvert"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Ajutor"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "PrintScreen"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Windows Stânga"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Aplicații"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Windows Dreapta"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sleep"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "Curățare OEM"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Shift Stânga"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pauză"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Shift Dreapta"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Punct"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Ctrl Stânga"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Plus"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Meniu Stânga"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Anteriorul"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "ÃŽnapoi"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "Drepata"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Ctrl Dreapta"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Meniu Drepata"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Virgulă"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift Dreapta"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Minus"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Windows Dreapta"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Punct"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Plus"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Selectează"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attn"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sleep"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Ștergere OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "PrintScreen"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Spațiu"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "Curățare OEM"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Sus"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Butonul 1"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Butonul 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Mărire"
-#~ msgid "Game Name"
-#~ msgstr "Numele jocului"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\""
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
-#~ msgid "GAMES"
-#~ msgstr "JOCURI"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "Nori 3D"
-#~ msgid "Games"
-#~ msgstr "Jocuri"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
-#~ msgid "Mods:"
-#~ msgstr "Moduri:"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
-#~ msgid "edit game"
-#~ msgstr "modifică jocul"
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
-#~ msgid "new game"
-#~ msgstr "joc nou"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
-#~ msgid "EDIT GAME"
-#~ msgstr "MODIFICÄ‚ JOCUL"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
-#~ msgid "Remove selected mod"
-#~ msgstr "Șterge modul selectat"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Adaugă modul"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
-#~ msgid "CLIENT"
-#~ msgstr "CLIENT"
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
-#~ msgid "Favorites:"
-#~ msgstr "Preferate:"
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier interval"
+msgstr ""
-#~ msgid "START SERVER"
-#~ msgstr "DESCHIDE SERVERUL"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
-#~ msgid "Name"
-#~ msgstr "Nume"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
-#~ msgid "Password"
-#~ msgstr "Parolă"
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
-#~ msgid "SETTINGS"
-#~ msgstr "SETÄ‚RI"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
-#~ msgid "Preload item visuals"
-#~ msgstr "Pre-încarcă imaginile obiectelor"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
-#~ msgid "Finite Liquid"
-#~ msgstr "Lichid finit"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "SINGLE PLAYER"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "PACHETE DE TEXTURÄ‚"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr ""
-#~ msgid "MODS"
-#~ msgstr "MODURI"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
-#~ msgid "Add mod:"
-#~ msgstr "Adăugaţi mod:"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr ""
-#~ msgid "Local install"
-#~ msgstr "Instalare locală"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Anisotropic filtering"
+msgstr "Filtru Anizotropic"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "ÃŽnapoi"
+
+#: src/settings_translation_file.cpp
+msgid "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
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "Filtrare Biliniară"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr "Se rezolvă adresa..."
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bumpmapping"
+msgstr "Mip Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "Modifică tastele"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "Modifică tastele"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Modul Creativ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Modul Creativ"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "Nori 3D"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Meniul Principal"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Comandă"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "Conectează"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "Se conectează la server..."
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Consloă"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Consloă"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Consloă"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Control"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Activează Daune"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default game"
+msgstr "modifică jocul"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Noua parolă"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "Activează particulele"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double tap jump for fly"
+msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Activează MP"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable mod security"
+msgstr "Repozitoriu Online de moduri"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Activează Daune"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Activează Daune"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "lipsă_tip_font"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Filtru Anizotropic"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "ÃŽnainte"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Moduri"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Joc"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Inventar"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Sari"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Meniu Stânga"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Meniul Principal"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Meniul Principal"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Meniu"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "Selectare distanță"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "Meniu Drepata"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "PrintScreen"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "PrintScreen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "PrintScreen"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Singleplayer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "Server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "Port server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "Port server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "Server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "Port server"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Listă de servere publică"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Listă de servere publică"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Lumină mai bună"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Furișează"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Pachete de tetură"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Filtrare Triliniară"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "apasă o tastă"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Dezvoltatori de bază"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Volum Sunet"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Texturi..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Copaci fantezici"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Se încarcă..."
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Descarcă"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Click stânga: Mută toate obiectele, Click dreapta: Mută un singur obiect"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Filtru Anizotropic"
+#~ msgid "Local install"
+#~ msgstr "Instalare locală"
+
+#~ msgid "Add mod:"
+#~ msgstr "Adăugaţi mod:"
+
+#~ msgid "MODS"
+#~ msgstr "MODURI"
+
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "PACHETE DE TEXTURÄ‚"
+
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "SINGLE PLAYER"
+
+#~ msgid "Finite Liquid"
+#~ msgstr "Lichid finit"
+
+#~ msgid "Preload item visuals"
+#~ msgstr "Pre-încarcă imaginile obiectelor"
+
+#~ msgid "SETTINGS"
+#~ msgstr "SETÄ‚RI"
+
+#~ msgid "Password"
+#~ msgstr "Parolă"
+
+#~ msgid "Name"
+#~ msgstr "Nume"
+
+#~ msgid "START SERVER"
+#~ msgstr "DESCHIDE SERVERUL"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip Mapping"
+#~ msgid "CLIENT"
+#~ msgstr "CLIENT"
+
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Adaugă modul"
+
+#~ msgid "Remove selected mod"
+#~ msgstr "Șterge modul selectat"
+
+#~ msgid "EDIT GAME"
+#~ msgstr "MODIFICÄ‚ JOCUL"
+
+#~ msgid "new game"
+#~ msgstr "joc nou"
+
+#~ msgid "Mods:"
+#~ msgstr "Moduri:"
+
+#~ msgid "GAMES"
+#~ msgstr "JOCURI"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Numele jocului"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Descarcă"
+#~ msgid "If enabled, "
+#~ msgstr "activat"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Dezactivează MP"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Listă de servere publică"
+
+#~ msgid "No of course not!"
+#~ msgstr "Nu, sigur că nu!"
diff --git a/po/ru/minetest.po b/po/ru/minetest.po
index 9675095ae..d28193911 100644
--- a/po/ru/minetest.po
+++ b/po/ru/minetest.po
@@ -7,632 +7,806 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-07-30 15:32+0200\n"
-"Last-Translator: Andrey K. <narutrey@ya.ru>\n"
-"Language-Team: Russian "
-"<https://hosted.weblate.org/projects/minetest/minetest/ru/>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-04-18 23:08+0000\n"
+"Last-Translator: Stas Kies <stask85@gmail.com>\n"
+"Language-Team: Russian <https://hosted.weblate.org/projects/minetest/"
+"minetest/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
-"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 2.4-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.6-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr "Ошибка в Ñкрипте Lua в моде:"
+msgstr "Ошибка в Ñкрипте Lua, как например в моде:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "Произошла ошибка:"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Главное меню"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "OK"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "ПереподключитьÑÑ"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Сервер запроÑил переподключение:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Загрузка..."
-#: builtin/mainmenu/common.lua:240
+#: 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/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Мир:"
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "ПоддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ протокол верÑии $1."
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: 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_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Отменить"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "ЗавиÑит от:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Отключить мультиплеер"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Включить мультиплеер"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Включить вÑÑ‘"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Ошибка при попытке Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´Ð° \"$1\" поÑкольку он Ñодержит недопуÑтимые "
+"Ñимволы. ДопуÑкаетÑÑ Ð¸Ñпользование Ñимволов от Aa-Zz и от 0-9."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Скрыть игру"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Скрыть Ñодержимое модпака"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Мод:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "ЗавиÑит от:"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Сохранить"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Отменить"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Включить мультиплеер"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Отключить мультиплеер"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Мир:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "включено"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Включить вÑÑ‘"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Мир под названием \"$1\" уже ÑущеÑтвует"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Ðазвание мира"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Создать"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Зерно"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Генератор карты"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Загрузите их Ñ minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Игра"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Создать"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Генератор карты"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "У Ð²Ð°Ñ Ð½Ðµ уÑтановлено мини-игр."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Ðе задано Ð¸Ð¼Ñ Ð¼Ð¸Ñ€Ð° или не выбрана игра"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Загрузите их Ñ minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Сид"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr "Внимание: \"Minimal development test\" Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²."
-
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net"
+msgstr ""
+"Внимание: \"Minimal development test\" в оÑновном предназначен Ð´Ð»Ñ "
+"разработчиков."
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "Мир под названием \"$1\" уже ÑущеÑтвует"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Ðазвание мира"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Ðе задано Ð¸Ð¼Ñ Ð¼Ð¸Ñ€Ð° или не выбрана игра"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "У Ð²Ð°Ñ Ð½Ðµ уÑтановлены мини-игры."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "Уверены, что хотите удалить \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Да"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Ðикак нет!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Удалить"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr: невозможно удалить \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: неправильный путь \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "Удалить мир \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Ðет"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "ПринÑÑ‚ÑŒ"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Переименовать модпак:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "ПринÑÑ‚ÑŒ"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" не ÑвлÑетÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼ флагом."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "УÑтановка мода: файл \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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/modmgr.lua:345
+#: 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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Формат 3 цифры через запÑтую в Ñкобках."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Формат: <Смещение>,<МаÑштаб>, (<По оÑи X>,<По оÑи Y>,<По оÑи Z>), <Зерно>, "
+"<Октавы>,<ПоÑтоÑнÑтво>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Игры"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Моды"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "Опционально лакунарноÑтью могут быть добавлены Ñ Ð²ÐµÐ´ÑƒÑ‰ÐµÐ¹ запÑтой."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "ПожалуйÑта, вводите запÑтые Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑпиÑка флагов."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Введите допуÑтимое целое чиÑло."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "ПожалуйÑта, введите правильное чиÑло."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Возможные значениÑ: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "ВоÑÑтановить по умолчанию"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Выбрать путь"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Отобразить техничеÑкие названиÑ"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Значение должно быть больше, чем $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Значение должно быть меньше, чем $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"УÑтановка мода: неподдерживаемый тип файла \"$1\" или битый архив"
+"УÑтановка мода: неподдерживаемый тип файла \"$1\" или повреждённый архив"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Ошибка при уÑтановке $1 в $2"
+msgstr "Ðевозможно уÑтановить $1 в $2"
-#: builtin/mainmenu/modmgr.lua:368
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "УÑтановка мода: файл \"$1\""
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr "УÑтановка мода: невозможно определить название мода Ð´Ð»Ñ $1"
+
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
"УÑтановка мода: невозможно найти подходÑщее Ð¸Ð¼Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð¸ Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¿Ð°ÐºÐ° $1"
-#: builtin/mainmenu/modmgr.lua:388
-msgid "Install Mod: unable to find real modname for: $1"
-msgstr "УÑтановка мода: невозможно определить название мода Ð´Ð»Ñ $1"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Закрыть хранилище"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Ðе Ñортировано"
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr "Загрузка $1, ждите..."
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "УÑтановить"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Страница $1 из $2"
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "Рейтинг"
+
+#: builtin/mainmenu/store.lua
msgid "Search"
msgstr "ПоиÑк"
-#: builtin/mainmenu/store.lua:126
-msgid "Downloading $1, please wait..."
-msgstr "Загрузка $1..."
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Краткое имÑ:"
-#: builtin/mainmenu/store.lua:160
+#: builtin/mainmenu/store.lua
msgid "Successfully installed:"
msgstr "УÑпешно уÑтановлено:"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Краткое имÑ:"
-
-#: builtin/mainmenu/store.lua:472
-msgid "Rating"
-msgstr "Рейтинг"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Ðе Ñортировано"
-#: builtin/mainmenu/store.lua:497
+#: builtin/mainmenu/store.lua
msgid "re-Install"
msgstr "ПереуÑтановить"
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "УÑтановить"
-
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Закрыть хранилище"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Ðктивные контрибьюторы"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "Страница $1 из $2"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "ОÑновные разработчики"
-#: builtin/mainmenu/tab_credits.lua:22
+#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "БлагодарноÑти"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "ОÑновные разработчики"
-
-#: builtin/mainmenu/tab_credits.lua:47
-msgid "Active Contributors"
-msgstr "Ðктивные контрибьюторы"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Контрибьюторы в отÑтавке"
-#: builtin/mainmenu/tab_credits.lua:54
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
msgstr "Разработчики в отÑтавке"
-#: builtin/mainmenu/tab_credits.lua:59
-msgid "Previous Contributors"
-msgstr "Контрибьюторы в отÑтавке"
-
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "УÑтановленные моды:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Онлайн-хранилище модов"
-
-#: builtin/mainmenu/tab_mods.lua:78
-msgid "No mod description available"
-msgstr "ОпиÑание к моду отÑутÑтвует"
-
-#: builtin/mainmenu/tab_mods.lua:82
+#: builtin/mainmenu/tab_mods.lua
msgid "Mod information:"
msgstr "ОпиÑание мода:"
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr "ОпиÑание мода недоÑтупно"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Переименовать"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Удалить выбранный мод-пак"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Выберите файл мода:"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr "Удалить выбранный мод"
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
-msgstr "Выберите файл Ñ Ð¼Ð¾Ð´Ð¾Ð¼:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Моды"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Удалить выбранный мод-пак"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
msgstr "ÐÐ´Ñ€ÐµÑ / Порт:"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Ð˜Ð¼Ñ / Пароль:"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "СпиÑок публичных Ñерверов"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Удалить"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Клиент"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "ПодключитьÑÑ"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Режим творчеÑтва"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Разрешить увечьÑ"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Del. Favorite"
+msgstr "Избранное:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "Избранное:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Ð˜Ð¼Ñ / Пароль:"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP разрешён"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Клиент"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Ðовый"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "ÐдреÑ"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "ÐаÑтроить"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Ðачать игру"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Выберите мир:"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Режим творчеÑтва"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Разрешить увечьÑ"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Публичные"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Ð˜Ð¼Ñ / Пароль"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "ÐдреÑ"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Ðовый"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Ðе выбран мир!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Порт"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Порт Ñервера"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Публичные"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr "Ðе выбран мир!"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Выберите мир:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Сервер"
-#: builtin/mainmenu/tab_settings.lua:21
-msgid "Opaque Leaves"
-msgstr "ÐÐµÐ¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð»Ð¸Ñтва"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Порт Ñервера"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr "Ð£Ð¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ Ð»Ð¸Ñтва"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Ðачать игру"
-#: builtin/mainmenu/tab_settings.lua:23
-msgid "Fancy Leaves"
-msgstr "КраÑÐ¸Ð²Ð°Ñ Ð»Ð¸Ñтва"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Без фильтраций"
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D облака"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "раÑширенные наÑтройки"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "Сглаживание:"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Уверены, что хотите ÑброÑить мир одиночной игры?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Ð‘Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Ð¢Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Бампмаппинг"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Без Мипмаппинга"
+#: builtin/mainmenu/tab_settings.lua
+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:44
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Мипмаппинг"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
msgstr "Мипмаппинг Ñ Ð°Ð½Ð¸Ð·Ð¾Ñ‚Ñ€. фильтром"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Уверены, что хотите ÑброÑить мир одиночной игры?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Ðет"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Ðет!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Без Фильтров"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "ÐœÑгкое оÑвещение"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Без Мипмаппинга"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Включить чаÑтицы"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "ПодÑветка нод"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D облака"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "ПодÑветка нод"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "ÐÐµÐ¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð²Ð¾Ð´Ð°"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Ðичего"
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "Стёкла без швов"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Mip-текÑтурирование (Мип-маппинг)"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "ПодÑветка нод"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "ÐÐµÐ¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð»Ð¸Ñтва"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "ТекÑтуирование:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "ÐÐµÐ¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð°Ñ Ð²Ð¾Ð´Ð°"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "ОтриÑовка:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Parallax Occlusion"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "ПерезапуÑтите Minetest Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Включить чаÑтицы"
-#: builtin/mainmenu/tab_settings.lua:228
+#: 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:233
-msgid "Change keys"
-msgstr "Смена управлениÑ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "Ð£Ð¿Ñ€Ð¾Ñ‰Ñ‘Ð½Ð½Ð°Ñ Ð»Ð¸Ñтва"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð¾Ð¹ игры"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "ÐœÑгкое оÑвещение"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "МаÑштаб интерфейÑа"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "ТекÑтурирование:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "КоÑффициент маÑштаба интерфейÑа: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð¾Ð² необходим драйвер OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Свободный выбор цели"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tone Mapping"
+msgstr "Mip-текÑтурирование (Мип-маппинг)"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "ЧувÑтвительноÑÑ‚ÑŒ (пк)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Бампмаппинг"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Генерировать карты нормалей"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Волны на воде"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Ð¢Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Покачивание лиÑтвы"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "Покачивание раÑтений"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð¾Ð² необходим драйвер OpenGL."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "ÐаÑтройки"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Волны на воде"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Ðачать одиночную игру"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Да"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "ÐаÑтройка модов"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Главное меню"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Ðачать одиночную игру"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Играть"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "ÐžÐ´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Выберите пакет текÑтур:"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "ОпиÑание отÑутÑтвует"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Выберите пакет текÑтур:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Пакеты текÑтур"
-#: src/client.cpp:1721
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Тайм-аут ÑоединениÑ."
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "Готово!"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "Инициирование нод"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Инициирование нод..."
+
+#: src/client.cpp
msgid "Loading textures..."
msgstr "Загрузка текÑтур..."
-#: src/client.cpp:1736
+#: src/client.cpp
msgid "Rebuilding shaders..."
msgstr "Сборка шейдеров..."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Инициирование нод..."
-
-#: src/client.cpp:1760
-msgid "Initializing nodes"
-msgstr "Инициирование нод"
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (таймаут?)"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "ТекÑтуры предметов..."
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "Ðевозможно найти или загрузить игру \""
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Готово!"
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð³Ñ€Ñ‹."
-#: src/client/clientlauncher.cpp:185
+#: src/client/clientlauncher.cpp
msgid "Main Menu"
msgstr "Главное меню"
-#: src/client/clientlauncher.cpp:223
+#: 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:261
-msgid "Connection error (timed out?)"
-msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (таймаут?)"
-
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Ðе выбран мир и не введен адреÑ."
-
-#: src/client/clientlauncher.cpp:432
+#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "По Ñтому пути мира нет: "
-#: src/client/clientlauncher.cpp:441
-msgid "Could not find or load game \""
-msgstr "Ðевозможно найти или загрузить игру \""
-
-#: src/client/clientlauncher.cpp:459
-msgid "Invalid gamespec."
-msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð³Ñ€Ñ‹."
-
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
+#: src/fontengine.cpp
+#, fuzzy
msgid "needs_fallback_font"
msgstr "no"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² debug.txt."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Смена управлениÑ"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Изменить пароль"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Подключение к Ñерверу..."
+
+#: src/game.cpp
+msgid "Continue"
msgstr "Продолжить"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Вы умерли."
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Создание клиента..."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "ВозродитьÑÑ"
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Создание Ñервера..."
-#: src/game.cpp:1092
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"Управление по умолчанию:\n"
+"- WASD: движение\n"
+"- Пробел: прыжок/вверх\n"
+"- Shift: краÑÑ‚ÑŒÑÑ/вниз\n"
+"- Q: броÑить предмет\n"
+"- I: инвентарь\n"
+"- Мышка: поворот\n"
+"- ЛКМ: копать/удар\n"
+"- ПКМ: поÑтавить/иÑпользовать\n"
+"- КолеÑико мыши: выбор предмета\n"
+"- T: чат\n"
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"No menu visible:\n"
@@ -661,605 +835,3636 @@ msgstr ""
"Ñкран:\n"
"--> Положить один предмет в Ñчейку\n"
-#: src/game.cpp:1106
-msgid ""
-"Default Controls:\n"
-"- WASD: move\n"
-"- Space: jump/climb\n"
-"- Shift: sneak/go down\n"
-"- Q: drop item\n"
-"- I: inventory\n"
-"- Mouse: turn/look\n"
-"- Mouse left: dig/punch\n"
-"- Mouse right: place/use\n"
-"- Mouse wheel: select item\n"
-"- T: chat\n"
-msgstr ""
-"Управление по умолчанию:\n"
-"- WASD: движение\n"
-"- Пробел: прыжок/вверх\n"
-"- Shift: краÑÑ‚ÑŒÑÑ/вниз\n"
-"- Q: броÑить предмет\n"
-"- I: инвентарь\n"
-"- Мышка: поворот\n"
-"- ЛКМ: копать/удар\n"
-"- ПКМ: поÑтавить/иÑпользовать\n"
-"- КолеÑико мыши: выбор предмета\n"
-"- T: чат\n"
-
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Продолжить"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Изменить пароль"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "ГромкоÑÑ‚ÑŒ звука"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Смена управлениÑ"
-
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Выход в меню"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Выход в ОС"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Завершение..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Создание Ñервера..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Создание клиента..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Получение адреÑа..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Подключение к Ñерверу..."
-
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð¾Ð²..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð´..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "КиБ/Ñ"
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr "Медиафайлы..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr "КиБ/Ñ"
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr "МиБ/Ñ"
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² debug.txt."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð´..."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Введите "
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Получение адреÑа..."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp
+msgid "Respawn"
+msgstr "ВозродитьÑÑ"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Завершение..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "ГромкоÑÑ‚ÑŒ звука"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "Вы умерли."
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "OK"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ. (ЕÑли Ñто меню ÑломалоÑÑŒ, удалите наÑтройки из minetest."
-"conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Введите "
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Продолжить"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"ИÑпользовать\" = вниз"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Двойной прыжок = летать"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Ðазад"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Клавиша уже иÑпользуетÑÑ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Чат"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "нажмите клавишу"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Команда"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Вперед"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "КонÑоль"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Ðазад"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Двойной прыжок = летать"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Влево"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "БроÑить"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Вправо"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Вперед"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "ИÑпользовать"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Инвентарь"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Прыжок"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "КраÑÑ‚ÑŒÑÑ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Клавиша уже иÑпользуетÑÑ"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "БроÑить"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ. (ЕÑли Ñто меню ÑломалоÑÑŒ, удалите наÑтройки из minetest."
+"conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Инвентарь"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Влево"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Чат"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Печать Ñтеков"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Команда"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Зона видимоÑти"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "КонÑоль"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Вправо"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Полёт"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "КраÑÑ‚ÑŒÑÑ"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "КиношноÑÑ‚ÑŒ"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "УÑкорение"
-#: src/guiKeyChangeMenu.cpp:413
-msgid "Toggle Cinematic"
-msgstr "КиношноÑÑ‚ÑŒ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Полёт"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Включить noclip"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Зона видимоÑти"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Печать Ñтеков"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "ИÑпользовать"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Старый пароль"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "нажмите клавишу"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Ðовый пароль"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Изменить"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Подтверждение паролÑ"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Изменить"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Ðовый пароль"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Старый пароль"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Пароли не Ñовпадают!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "ГромкоÑÑ‚ÑŒ звука: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Выход"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "СреднÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ°"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "ГромкоÑÑ‚ÑŒ звука: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "ПриложениÑ"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Доп. кнопка 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Внимание"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Ðазад"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Caps Lock"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "ОчиÑтить"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "ВернутьÑÑ"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Доп. кнопка 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Caps Lock"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "ЗапÑтаÑ"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Кана"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Преобразовать"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Меню"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Пауза"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Вниз"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Преобразовать"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Стереть ОÐС"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Escape"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Выполнить"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Конец"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Справка"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Кана"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Кандзи"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Ðе преобразовано"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Левый Ctrl"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mode Change"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° меню"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Next"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Левый Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Prior"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ». Win"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "Пробел"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Меню"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Вниз"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "СреднÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ°"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Выполнить"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "МинуÑ"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Mode Change"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Выбор"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Next"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Вверх"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Ðе преобразовано"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Справка"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Доп. клав. *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Cнимок"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Доп. клав. +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ». Win"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Доп. клав. -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "ПриложениÑ"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Доп. клав. /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Доп. клав. 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Доп. клав. 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Прав. кл. Win"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Sleep"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Доп. клав. 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Доп. клав. 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Доп. клав. 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Доп. клав. 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Доп. клав. 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Доп. клав. 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Доп. клав. *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Доп. клав. +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Доп. клав. -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Доп. клав. /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Доп. клав. 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Доп. клав. 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "ОчиÑтить OEM"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Левый Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Пауза"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Правый Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Период"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Левый Ctrl"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "ПлюÑ"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° меню"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Prior"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "ВернутьÑÑ"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "Правый Ctrl"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° меню"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "ЗапÑтаÑ"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Правый Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "МинуÑ"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Прав. кл. Win"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Период"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "ПлюÑ"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Выбор"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Внимание"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Sleep"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Стереть ОÐС"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Cнимок"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Пробел"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "ОчиÑтить OEM"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Вверх"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Доп. кнопка 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Доп. кнопка 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "МаÑштаб"
-#~ msgid "Game Name"
-#~ msgstr "Ðазвание"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "Gamemgr: Ðе могу Ñкопировать мод \"$1\" в игру \"$2\""
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = ÐŸÐ°Ñ€Ð°Ð»Ð»Ð°ÐºÑ Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о наклоне (БыÑтрее).\n"
+"1 = Рельефный маппинг (Медленнее, качеÑтвеннее)."
-#~ msgid "GAMES"
-#~ msgstr "ИГРЫ"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D облака"
-#~ msgid "Games"
-#~ msgstr "Игры"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D режим"
-#~ msgid "Mods:"
-#~ msgstr "Моды:"
+#: src/settings_translation_file.cpp
+#, fuzzy
+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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"Поддержка 3D.\n"
+"Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚ÑÑ:\n"
+"- none: 3D отключен.\n"
+"- anaglyph: голубой/пурпурный цвет в 3D.\n"
+"- interlaced: четные/нечетные линии отображают два разных кадра Ð´Ð»Ñ "
+"Ñкранов поддерживающих полÑризацию.\n"
+"- topbottom: Разделение Ñкрана низ/верх.\n"
+"- sidebyside: Разделение Ñкрана право/лево."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"Выбранный Ñид Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ карты, оÑтавьте значение пуÑтым Ð´Ð»Ñ Ñлучайной "
+"генерации.\n"
+"Будет отменено при Ñоздании нового мира, в главном меню."
-#~ msgid "edit game"
-#~ msgstr "Редактировать"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "Сообщение, которое будет отображатьÑÑ Ð´Ð»Ñ Ð²Ñех при падении Ñервера."
-#~ msgid "new game"
-#~ msgstr "Создать игру"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "Сообщение, которое будет показано вÑем при отключении Ñервера."
-#~ msgid "EDIT GAME"
-#~ msgstr "РЕДÐКТИРОВÐÐИЕ"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "ÐбÑолютный лимит поÑвлÑющихÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñов"
-#~ msgid "Remove selected mod"
-#~ msgstr "Удалить мод"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "УÑкорение в воздухе"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- Добавить мод"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "ДальноÑÑ‚ÑŒ взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð±Ð»Ð¾ÐºÐ°Ð¼Ð¸"
-#~ msgid "CLIENT"
-#~ msgstr "КЛИЕÐТ"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "ДальноÑÑ‚ÑŒ взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð±Ð»Ð¾ÐºÐ°Ð¼Ð¸"
-#~ msgid "Favorites:"
-#~ msgstr "Избранное:"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "ДальноÑÑ‚ÑŒ взаимодейÑÑ‚Ð²Ð¸Ñ Ñ Ð±Ð»Ð¾ÐºÐ°Ð¼Ð¸"
-#~ msgid "START SERVER"
-#~ msgstr "СЕРВЕР"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "ДальноÑÑ‚ÑŒ отправлÑемого активного объекта"
-#~ msgid "Name"
-#~ 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 ""
+"ÐдреÑ, к которому приÑоединитьÑÑ.\n"
+"ОÑтавьте Ñто поле, чтобы запуÑтить локальный Ñервер.\n"
+"ПРИМЕЧÐÐИЕ: Ñто поле адреÑа перезапишет Ñту наÑтройку в главном меню."
-#~ msgid "Password"
-#~ msgstr "Пароль"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+"ÐаÑтройка dpi (плотноÑти точек на дюйм) Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñкрана (не Ð´Ð»Ñ X11, "
+"только Ð´Ð»Ñ Android). Ðапример Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¾Ð² Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ в 4k."
-#~ msgid "SETTINGS"
-#~ msgstr "ÐÐСТРОЙКИ"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"Отрегулируйте гамма кодировку Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ† оÑвещениÑ. Более низкие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "
+"Ñрче.\n"
+"Этот параметр предназначен только Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и игнорируетÑÑ Ñервером."
-#~ msgid "Preload item visuals"
-#~ msgstr "Предзагрузка изображений"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Дополнительно"
-#~ msgid "Finite Liquid"
-#~ msgstr "Конечные жидкоÑти"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr ""
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "ОДИÐОЧÐÐЯ ИГРÐ"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Ð’Ñегда включен полёт и уÑкорение"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "ПÐКЕТЫ ТЕКСТУР"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "Гамма Ambient occlusion"
-#~ msgid "MODS"
-#~ msgstr "МОДЫ"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr ""
-#~ msgid "Add mod:"
-#~ msgstr "Добавить мод:"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "ÐÐ½Ð¸Ð·Ð°Ð½Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
-#~ msgid "Local install"
-#~ msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑƒÑтановка"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "О Ñервере"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"ОбъÑвите ÑпиÑку Ñервера.\n"
+"ЕÑли Ð’Ñ‹ хотите объÑвить о Ñвоем адреÑе IPv6, иÑпользуйте serverlist_url = v6."
+"servers.minetest.net."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "Приблизительный (X, Y, Z) маÑштаб рекурÑивных в узлах."
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле диÑконнекта"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "ÐвтоматичеÑки добавлÑÑ‚ÑŒ в ÑпиÑок Ñерверов."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "клавиша обратно"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+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 "Bilinear filtering"
+msgstr "Ð‘Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð±Ð¸Ð½Ð´Ð°"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "Биты на пикÑель (глубина цвета) в полноÑкранном режиме."
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Разрешить Ñтавить блоки на меÑте игрока"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Бампмаппинг"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Сглаживание камеры"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 #1"
+msgstr "Шум пещеры #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "Шум пещеры #2"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave width"
+msgstr "Ширина Ñкрана"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "Пещеры и тоннели формируютÑÑ Ð½Ð° перекреÑтке Ñтих двух шумов"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Кнопка чата"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Кнопка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñ‚Ð°"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr "Размер чанка"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "КинематографичеÑкий режим"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Кнопка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² кинематографичеÑкий режим"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "очиÑтить прозрачные Ñтруктуры"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "Клиент и Сервер"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "СкороÑÑ‚ÑŒ подъема"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "Ð’Ñ‹Ñота облаков"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "Ð Ð°Ð´Ð¸ÑƒÑ Ð¾Ð±Ð»Ð°ÐºÐ¾Ð²"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Облака"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "Облака ÑвлÑÑŽÑ‚ÑÑ Ñффектом на Ñтороне клиента."
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Облака в меню"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "Цветной туман"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr "Команда"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "Стёкла без швов"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "Подключение к внешнему медиаÑерверу"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "СоединÑет Ñтекло, еÑли поддерживаетÑÑ Ð½Ð¾Ð´Ð¾Ð¹."
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "КонÑоль"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Цвет в конÑоли"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "Кнопка вызова конÑоли"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Управление"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"Задает длину цикла днÑ/ночи.\n"
+"Примеры: 72 = 20 минут, 360 = 4 минуты, 1 = 24 чаÑа, 0 = Ð²Ñ€ÐµÐ¼Ñ Ñуток не "
+"менÑетÑÑ."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"Задает размеры пуÑтыней и плÑжей.\n"
+"Когда включены Ñнежные биомы, 'mgv6_freq_desert' игнорируетÑÑ."
+
+#: 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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "Сообщение при падении"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "ПрозрачноÑÑ‚ÑŒ перекреÑтиÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "ПрозрачноÑÑ‚ÑŒ перекреÑÑ‚Ð¸Ñ (от 0 (прозрачно) до 255 (непрозрачно))."
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "Цвет перекреÑтиÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "Цвет перекреÑÑ‚Ð¸Ñ (R,G,B)."
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "СкороÑÑ‚ÑŒ ÑпуÑка"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "Урон"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° отладочной информации"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Отладочный уровень"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "Шаг выделенного Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "УÑкорение по умолчанию"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Стандартный пароль"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Стандартные права"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"Стандартный тайм-аут Ð´Ð»Ñ cURL, уÑтановленный в милиÑекундах.\n"
+"Работает только на Ñборках Ñ cURL."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Deprecated Lua API handling"
+msgstr "УÑтаревшее Lua API управление"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "СкороÑÑ‚ÑŒ ÑнижениÑ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+"ОпиÑание Ñервера, которое будет показано при входе игрока и в ÑпиÑке "
+"Ñерверов."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Desynchronize block animation"
+msgstr "РаÑÑинхронизировать анимацию блоков"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Отключить анти-чит"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "Запретить пуÑтой пароль"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "Доменное Ð¸Ð¼Ñ Ñервера, отображаемое в ÑпиÑке Ñерверов."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Полет по двойному прыжку"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Двойное нажатие на прыжок включает режим полёта."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "Кнопка выброÑа блока"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "Дамп отладочной информации генератора мира."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Включить мультиплеер"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "Включить защиту модов"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "Включает получение игроками урона и их Ñмерть."
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Включить мини-карту."
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr "Включить мини-карту."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "FPS во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð°ÑƒÐ·Ñ‹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "Fallback шрифт"
+
+#: 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 "Fallback размер шрифта"
+
+#: 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
+#, fuzzy
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"БыÑтрое перемещение (Ñ Ð¸Ñпользование клавиши).\n"
+"Это требует привилегию \"fast\" на Ñервере."
+
+#: 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
+#, fuzzy
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the Multiplayer Tab."
+msgstr ""
+"Файл, Ñодержащий ваши любимые Ñерверы, отображаемые на вкладке Multiplayer."
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr "Конкретное ÑÐµÐ¼Ñ Ð¼Ð¸Ñ€Ð°"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Кнопка полёта"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Полёт"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Туман"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ð°"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "Путь к шрифту"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "Тень шрифта"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "ПрозрачноÑÑ‚ÑŒ тени шрифта"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "ПрозрачноÑÑ‚ÑŒ тени шрифта (непрозрачноÑÑ‚ÑŒ от 0 до 255)."
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+"Смещение тени шрифта. ЕÑли уÑтановленно в 0, то тень не будет отриÑовыватьÑÑ."
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "Размер шрифта"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Format of screenshots."
+msgstr "Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Вперед"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "FreeType шрифты"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Полный Ñкран"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "ПолноÑкранный режим."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr "МаÑштабирование интерфейÑа"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr "Фильтр маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr "txr2img фильтр маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Гамма"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Графика"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "ГравитациÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Моды"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ HUD"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "ДомашнÑÑ Ñтраница Ñервера, Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÐ¼Ð°Ñ Ð² ÑпиÑке Ñерверов."
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 Ñервер"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6 поддержка."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, 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 this is set, players will always (re)spawn at the given position."
+msgstr "ЕÑли уÑтановлено, то игроки будут (ре)ÑпавнитьÑÑ Ð² указанной позиции."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Ignore world errors"
+msgstr "Игнорировать ошибки мира"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "В игре"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr "ПрозрачноÑÑ‚ÑŒ фона внутриигровой конÑоли (непрозрачноÑÑ‚ÑŒ от 0 до 255)."
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "Цвет фона внутриигровой конÑоли (R, G, B)."
+
+#: 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 "Item entity TTL"
+msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ выброшенной вещи"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "Кнопка прыжка"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr "СкороÑÑ‚ÑŒ прыжков"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Key for decreasing the viewing 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 ""
+"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
+#, fuzzy
+msgid ""
+"Key for increasing the viewing 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 ""
+"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
+#, fuzzy
+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 ""
+"Key for moving the player backward.\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 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 ""
+"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 ""
+"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 ""
+"Key for opening the chat console.\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 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.\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 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 ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Клавиша краÑÑ‚ÑŒÑÑ.\n"
+"Также иÑпользуетÑÑ Ð´Ð»Ñ ÑпуÑка и Ð¿Ð¾Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ воду, еÑли aux1_descends "
+"отключена.\n"
+"Смотрите http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° от первого и от третьего лица.\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 ""
+"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 ""
+"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 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 ""
+"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 ""
+"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 ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° отладочной информации.\n"
+"Смотрите http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Key for toggling the display of the chat.\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 toggling the display of the fog.\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 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 ""
+"Клавиша Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð¾Ð½Ñ‹ видимоÑти.\n"
+"Смотрите http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Язык"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+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 ""
+"Стили лиÑтвы:\n"
+"- Fancy: включена прозрачноÑÑ‚ÑŒ, вÑе Ñтороны видны\n"
+"- Simple: прозрачноÑÑ‚ÑŒ включена, видны только внешние Ñтороны, еÑли "
+"иÑпользуютÑÑ special_tiles\n"
+"- Opaque: прозрачноÑÑ‚ÑŒ отключена"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Кнопка выхода"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Интервал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ð´ÐºÐ¾Ñтей в Ñекундах."
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "Мод менеджер главного меню"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "Скрипт главного меню"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+"Включить завиÑимоÑÑ‚ÑŒ цвета тумана и облаков от времени Ñуток (раÑÑвет/закат)."
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "Каталог ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "Интервал ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Ðазвание генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Дебаггинг генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Повторение параллакÑа"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Повторение параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Флаги генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Ðазвание генератора карты"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Генератор карты верÑии 5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Генератор карты верÑии 5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Генератор карты верÑии 6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "Генератор карты верÑии 7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Генератор карты верÑии 7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+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 "МакÑимальный FPS"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "МакÑимальный FPS в режиме паузы."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° хотбара"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "МакÑимальное количеÑтво пользователей"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Меню"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Message of the day"
+msgstr "Фраза днÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 "Minimap"
+msgstr "Миникарта"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼Ð¸Ð½Ð¸ÐºÐ°Ñ€Ñ‚Ñ‹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Minimap scan height"
+msgstr "Ð’Ñ‹Ñота ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¸Ð½Ð¸ÐºÐ°Ñ€Ñ‚Ñ‹"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mip-текÑтурирование (Мип-маппинг)"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font path"
+msgstr "Путь моноширинного шрифта"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size"
+msgstr "Размер моноширинного шрифта"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "ЧувÑтвительноÑÑ‚ÑŒ мыши"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "Множитель чувÑтвительноÑти мыши."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, 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."
+msgstr ""
+"Ðазвание генератора карты, иÑпользуемого при Ñоздании мира.\n"
+"Создание мира из главного меню переопределит Ñто."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"Ð˜Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°.\n"
+"Ðа Ñервере клиент Ñ Ñтим именем будет админом.\n"
+"Будет переопределено при запуÑке из главного меню."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr "Ð˜Ð¼Ñ Ñервера, отображаемое при входе и в ÑпиÑке Ñерверов."
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "Сеть"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "New users need to input this password."
+msgstr "Ðовым пользователÑм нужно вводить Ñтот пароль."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Noclip"
+msgstr "Отключить ÑтолкновениÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Noclip key"
+msgstr "Клавиша Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñтолкновений"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "ПодÑветка нод"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "NodeTimer interval"
+msgstr "Интервал отправки"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "Включить параллакÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "МаÑштаб параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "Смещение параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "Повторение параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "Режим параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "Сила параллакÑа"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов."
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+"Путь до каталога Ñ Ñ‚ÐµÐºÑтурами. Ð’Ñе текÑтуры в первую очередь берутÑÑ Ð¾Ñ‚ Ñюда."
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Физика"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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"
+msgstr "Ð˜Ð¼Ñ Ð¸Ð³Ñ€Ð¾ÐºÐ°"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "PvP"
+
+#: 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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Random input"
+msgstr "Случайный ввод"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "Кнопка наÑтройки дальноÑти видимоÑти"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "Удаленный порт"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Replaces the default main menu with a custom one."
+msgstr "ЗаменÑÑ‚ÑŒ главное меню на пользовательÑкое."
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° меню"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Rightclick repetition interval"
+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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "Ð’Ñ‹Ñота Ñкрана"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "Ширина Ñкрана"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Cкриншот"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "Каталог Ñо Ñкриншотами"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Каталог Ñо Ñкриншотами"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Cкриншот"
+
+#: 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
+#, fuzzy
+msgid "Security"
+msgstr "БезопаÑноÑÑ‚ÑŒ"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "Смотрите http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Selection box border color (R,G,B)."
+msgstr "Цвет рамки Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (R, G, B)."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Selection box color"
+msgstr "Цвет выделениÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Selection box width"
+msgstr "Ширина рамки выделениÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Сервер / Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "URL Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "ÐÐ´Ñ€ÐµÑ Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "ОпиÑание Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Ð˜Ð¼Ñ Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Порт Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "СпиÑок публичных Ñерверов"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "СпиÑок публичных Ñерверов"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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
+#, fuzzy
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"УÑтановка в true включает покачивание лиÑтвы.\n"
+"Это требует включение шейдеров."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"УÑтановка в true включает покачивание раÑтений.\n"
+"Это требует включение шейдеров."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"УÑтановка в true включает волны на воде.\n"
+"Это требует включение шейдеров."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"Шейдеры позволÑÑŽÑ‚ иÑпользовать дополнительные визуальные Ñффекты и могут "
+"увеличить производительноÑÑ‚ÑŒ на некоторых видеокартах.\n"
+"Они работают только Ñ Ð²Ð¸Ð´ÐµÐ¾ Ñерверной OpenGL."
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Show debug info"
+msgstr "Показывать отладочную информацию."
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shutdown message"
+msgstr "Сообщение о выключении"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"Размер чанка, генерируемого за один раз, уÑтановленный в мапблоках (16 "
+"кубиков)."
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "ÐœÑгкое оÑвещение"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+"Сглаживать Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹ при ходьбе и поворотах.\n"
+"Это может быть полезно при запиÑи видео."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+"Плавное вращение камеры в кинематографичеÑком режиме. 0 Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "Плавное вращение камеры. 0 Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "КраÑÑ‚ÑŒÑÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sound"
+msgstr "Звук"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Static spawnpoint"
+msgstr "ПоÑтоÑнное меÑто Ñпавна"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of generated normalmaps."
+msgstr "Генерировать карты нормалей"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Пакеты текÑтур"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+"Привилегии, автоматичеÑки получаемые новым пользователем.\n"
+"Смотрите /privs Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ ÑпиÑка привилегий."
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr "Задержка в Ñекундах между кликами при зажатой правой кнопке мыши."
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+"Ð’Ñ€ÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ выброшенных предметов.\n"
+"УÑтановите в -1 Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñтой функции."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Time send interval"
+msgstr "Интервал отправки"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Time speed"
+msgstr "СкороÑÑ‚ÑŒ хода времени"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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
+#, fuzzy
+msgid "Toggle camera mode key"
+msgstr "Клавиша Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° камеры."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tooltip delay"
+msgstr "Задержка подÑказки."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Ð¢Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"Полезно Ð´Ð»Ñ Ð¿Ð»Ð°Ð²Ð½Ð¾Ð¹ миникарты на медленных машинах."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trusted mods"
+msgstr "Доверенные моды"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Unload unused server data"
+msgstr "Выгружать неиÑпользуемые Ñервером данные"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use 3D cloud look instead of flat."
+msgstr "Объемные облака вмеÑто плоÑких."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use a cloud animation for the main menu background."
+msgstr "Ðнимированные облака в главном меню."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr "ИÑпользовать анизатропную фильтрацию про взглÑде под углом."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use bilinear filtering when scaling textures."
+msgstr "ИÑпользовать билинейную фильтрацию Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "нажмите клавишу"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+"ИÑпользовать мип-маппинг Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур. Может немного "
+"увеличить производительноÑÑ‚ÑŒ."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use trilinear filtering when scaling textures."
+msgstr "ИÑпользовать трилинейную фильтрацию Ð´Ð»Ñ Ð¼Ð°Ñштабировании текÑтур."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Разработчики в отÑтавке"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "V-Sync"
+msgstr "V-Sync"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Vertical screen synchronization."
+msgstr "Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑинхронизациÑ."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Video driver"
+msgstr "Видео драйвер."
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "View range decrease key"
+msgstr "Клавиша ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ диапазона."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "View range increase key"
+msgstr "Клавиша ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ диапазона."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Viewing range"
+msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° дальноÑти отриÑовки."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "ГромкоÑÑ‚ÑŒ звука"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "СкороÑÑ‚ÑŒ ходьбы"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "ТекÑтуры предметов..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Покачивание лиÑтвы"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Покачивание лиÑтвы"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving plants"
+msgstr "Покачивание раÑтений"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "Волны на воде"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "Ð’Ñ‹Ñота волн на воде"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "Длина волн на воде"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "СкороÑÑ‚ÑŒ волн на воде"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Whether to allow players to damage and kill each other."
+msgstr "Разрешить игрокам ÑражатьÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 ""
+"Опрашивать клиентов Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле падениÑ.\n"
+"УÑтановите Ñто еÑли ваш Ñервер наÑтроен на автоматичеÑкий перезапуÑк."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Whether to fog out the end of the visible area."
+msgstr "Туман на границе видимого проÑтранÑтва."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr "Показывать данные отладки (аналогично нажатию F5)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "Ширина обводки выбранных блоков."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL file download timeout"
+msgstr "cURL тайм-аут загрузки файла"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL тайм-аут"
#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
#~ msgstr ""
-#~ "Предупреждение: Ðекоторые моды еще не наÑтроены.\n"
-#~ "Их Ñтандартные наÑтройки будут уÑтановлены, когда вы Ñохраните "
-#~ "конфигурацию. "
+#~ "Включите немного более низкую поверхноÑÑ‚ÑŒ воды, чтобы она\n"
+#~ "не заполнÑла блок полноÑтью. Учтите, что Ñто не ÑовÑем оптимизировано,\n"
+#~ "и мÑгкое оÑвещение на поверхноÑти воды не работает Ñ Ñтим."
#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
+#~ "Key for decreasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
#~ msgstr ""
-#~ "Предупреждение: Ðекоторые моды не найдены.\n"
-#~ "Их наÑтройки будут удалены, когда вы Ñохраните конфигурацию. "
+#~ "Клавиша ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ диапазона. ИзменÑет минимальную дальноÑÑ‚ÑŒ "
+#~ "отображениÑ.\n"
+#~ "Смотрите http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#~ msgid ""
+#~ "Key for increasing the viewing range. Modifies the minimum viewing "
+#~ "range.\n"
+#~ "See http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+#~ msgstr ""
+#~ "Клавиша Ð£Ð²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ диапазона. ИзменÑет минимальную дальноÑÑ‚ÑŒ "
+#~ "отображениÑ.\n"
+#~ "Смотрите http://irrlicht.sourceforge.net/docu/namespaceirr."
+#~ "html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#, fuzzy
+#~ msgid "New style water"
+#~ msgstr "Ðовый Ñтиль воды"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "Предзагрузка текÑтур..."
+
+#, fuzzy
+#~ msgid "Viewing range minimum"
+#~ msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° дальноÑти отриÑовки."
+
+#, fuzzy
+#~ msgid "Wanted FPS"
+#~ msgstr "Ожидаемый FPS"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð¾Ð¹ игры"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "КоÑффициент маÑштаба интерфейÑа: "
+
+#~ msgid "Touch free target"
+#~ msgstr "Свободный выбор цели"
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Загрузить"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "ЛКМ: ПеремеÑтить вÑе предметы, ПКМ: ПеремеÑтить один предмет"
+
+#~ msgid "is required by:"
+#~ msgstr "требуетÑÑ Ð´Ð»Ñ:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "ÐаÑтройки Ñохранены. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "Предупреждение: ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Ðевозможно Ñоздать мир: Ð˜Ð¼Ñ Ñодержит недопуÑтимые Ñимволы"
+
+#~ msgid "Show Public"
+#~ msgstr "Публичные"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Избранные"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "ОÑтавьте Ð°Ð´Ñ€ÐµÑ Ð¿ÑƒÑтым Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка локального Ñервера."
+
+#~ msgid "Create world"
+#~ msgstr "Создать мир"
+
+#~ msgid "Address required."
+#~ msgstr "Ðужно ввеÑти адреÑ."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Ðевозможно удалить мир: Ðичего не выбрано"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Следующие файлы будут удалены"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Ðевозможно Ñоздать мир: Ðи одной игры не найдено"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Ðевозможно наÑтроить мир: ничего не выбрано"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Ошибка при удалении файлов мира"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1286,63 +4491,104 @@ msgstr "МаÑштаб"
#~ "- ESC: Ñто меню\n"
#~ "- T: чат\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Ошибка при удалении файлов мира"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "Предупреждение: Ðекоторые моды не найдены.\n"
+#~ "Их наÑтройки будут удалены, когда вы Ñохраните конфигурацию. "
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Ðевозможно наÑтроить мир: ничего не выбрано"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "Предупреждение: Ðекоторые моды еще не наÑтроены.\n"
+#~ "Их Ñтандартные наÑтройки будут уÑтановлены, когда вы Ñохраните "
+#~ "конфигурацию. "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Ðевозможно Ñоздать мир: Ðи одной игры не найдено"
+#~ msgid "Local install"
+#~ msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÑƒÑтановка"
-#~ msgid "Files to be deleted"
-#~ msgstr "Следующие файлы будут удалены"
+#~ msgid "Add mod:"
+#~ msgstr "Добавить мод:"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "Ðевозможно удалить мир: Ðичего не выбрано"
+#~ msgid "MODS"
+#~ msgstr "МОДЫ"
-#~ msgid "Address required."
-#~ msgstr "Ðужно ввеÑти адреÑ."
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "ПÐКЕТЫ ТЕКСТУР"
-#~ msgid "Create world"
-#~ msgstr "Создать мир"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "ОДИÐОЧÐÐЯ ИГРÐ"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "ОÑтавьте Ð°Ð´Ñ€ÐµÑ Ð¿ÑƒÑтым Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка локального Ñервера."
+#~ msgid "Finite Liquid"
+#~ msgstr "Конечные жидкоÑти"
-#~ msgid "Show Favorites"
-#~ msgstr "Избранные"
+#~ msgid "Preload item visuals"
+#~ msgstr "Предзагрузка изображений"
-#~ msgid "Show Public"
-#~ msgstr "Публичные"
+#~ msgid "SETTINGS"
+#~ msgstr "ÐÐСТРОЙКИ"
-#~ msgid "Advanced"
-#~ msgstr "Дополнительно"
+#~ msgid "Password"
+#~ msgstr "Пароль"
-#~ msgid "Multiplayer"
-#~ msgstr "Ð¡ÐµÑ‚ÐµÐ²Ð°Ñ Ð¸Ð³Ñ€Ð°"
+#~ msgid "Name"
+#~ msgstr "ИмÑ"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Ðевозможно Ñоздать мир: Ð˜Ð¼Ñ Ñодержит недопуÑтимые Ñимволы"
+#~ msgid "START SERVER"
+#~ msgstr "СЕРВЕР"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "Предупреждение: ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ. "
+#~ msgid "CLIENT"
+#~ msgstr "КЛИЕÐТ"
-#~ msgid "Configuration saved. "
-#~ msgstr "ÐаÑтройки Ñохранены. "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- Добавить мод"
-#~ msgid "is required by:"
-#~ msgstr "требуетÑÑ Ð´Ð»Ñ:"
+#~ msgid "Remove selected mod"
+#~ msgstr "Удалить мод"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "ЛКМ: ПеремеÑтить вÑе предметы, ПКМ: ПеремеÑтить один предмет"
+#~ msgid "EDIT GAME"
+#~ msgstr "РЕДÐКТИРОВÐÐИЕ"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "ÐÐ½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
+#~ msgid "new game"
+#~ msgstr "Создать игру"
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-текÑтурирование"
+#~ msgid "Mods:"
+#~ msgstr "Моды:"
-#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Загрузить"
+#~ msgid "GAMES"
+#~ msgstr "ИГРЫ"
+
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "Gamemgr: Ðе могу Ñкопировать мод \"$1\" в игру \"$2\""
+
+#~ msgid "Game Name"
+#~ msgstr "Ðазвание"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "ПерезапуÑтите Minetest Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹"
+
+#~ msgid "Rendering:"
+#~ msgstr "Рендеринг:"
+
+#~ msgid "If enabled, "
+#~ msgstr "ЕÑли включено "
+
+#~ msgid "If disabled "
+#~ msgstr "ЕÑли выключено "
+
+#~ msgid "\""
+#~ msgstr "\""
+
+#~ msgid "No!!!"
+#~ msgstr "Ðет!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Генерировать карты нормалей"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "СпиÑок публичных Ñерверов"
+
+#~ msgid "No of course not!"
+#~ msgstr "Ðет, конечно нет!"
diff --git a/po/tr/minetest.po b/po/tr/minetest.po
index 2fdb5b6bb..b3c063d21 100644
--- a/po/tr/minetest.po
+++ b/po/tr/minetest.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-07-14 16:48+0200\n"
-"Last-Translator: Michal ÄŒihaÅ™ <michal@cihar.com>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2015-10-27 16:46+0200\n"
+"Last-Translator: PilzAdam <PilzAdam@minetest.net>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/minetest/"
"minetest/tr/>\n"
"Language: tr\n"
@@ -16,167 +16,284 @@ 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 2.4-dev\n"
+"X-Generator: Weblate 2.5-dev\n"
"X-Poedit-Language: Turkish\n"
"X-Poedit-Basepath: \n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Lua scriptte bir hata meydana geldi:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "Bir hata oluÅŸtu:"
+
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "Main menu"
+msgstr "Ana menu"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "Tamam"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "BaÄŸlan"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Bu sunucu yeniden baÄŸlanma isteÄŸinde bulundu:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "Yükleniyor..."
-#: builtin/mainmenu/common.lua:240
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokol sürümü uyumsuz. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Sunucu protokol sürümü $1 istiyor. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Bu sunucu $1 ve $2 arası tüm protokol sürümlerini destekler. "
+
+#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+"Sunucu listesini tekrar etkinleştirmeyi deneyin ve internet bağlantınızı "
+"kontrol edin."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Yalnızca $1 protokol sürümü desteklenmektedir."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Yalnızca $1 ve $2 arası protokol sürümleri desteklenmektedir."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "Vazgeç"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-msgstr "Dünya:"
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Bağımlılıklar :"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "Paketi Kapat"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "Paketi Aç"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Hepsini etkinleÅŸtir"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"Geçersiz karakterler içerdiği için \"$1\" modu etkinleştirilemiyor. İzin "
+"verilen karakterler [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "Oyunu Gizle"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "Detayları gizle"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Eklnt:"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "Bağımlılıklar :"
-
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Kaydet"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Vazgeç"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "Paketi Aç"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "Paketi Kapat"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Dünya:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "EtkinleÅŸtirildi"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "Hepsini etkinleÅŸtir"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr " \"$1\" isimli dünya zaten var"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Dünya adı"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "OluÅŸtur"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "Çekirdek"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Minetest.net adresinden bir oyun modu indirin"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Minetest.net adresinden indirin"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Oyun"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "OluÅŸtur"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Mapgen"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "Ek bir oyun modu yüklü değil."
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Dünya seçilmedi ya da adlandırılmadı"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "Minetest.net adresinden indirin"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Çekirdek"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "Uyarı : Minimal Development Test geliştiriciler içindir."
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "Minetest.net adresinden bir oyun modu indirin"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr " \"$1\" isimli dünya zaten var"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Dünya adı"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "Dünya seçilmedi ya da adlandırılmadı"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Ek bir oyun modu yüklü değil."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr " \"$1\" 'i silmek istediÄŸinizden emin misiniz ?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Evet"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "Elbette hayır!"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Sil"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
msgstr "Modmgr:\"$1\" dosyası silerken hata"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "Modmgr: \"$1\" eklenti konumu yanlış"
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr " \"$1\" dünyasını sil ?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "Hayır"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "Kabul et"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "Eklenti paketini yeniden adlandır :"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "Kabul et"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr ""
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "Eklenti yükle: Dosya: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Açıklama bilgisi verilmedi)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Seç"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Paketi Kapat"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Düzenle"
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "EtkinleÅŸtirildi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Format is 3 numbers separated by commas and inside brackets."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Oyun"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Eklentiler"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
+msgid "Select path"
+msgstr "Seç"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr ""
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
@@ -184,488 +301,496 @@ msgstr ""
"\n"
"Eklenti yükle: Desteklenmeyen dosya uzantısı \"$1\" veya bozuk dosya"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr " $1 arası $2 yükleme başarısız"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr "Eklenti yükle:$1 eklenti paketi için uygun bir klasör adı bulunamadı"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Eklenti yükle: Dosya: \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "Eklenti yükle: $1 için eklenti adı bulunamadı"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "Sıralanmamış"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr "Eklenti yükle:$1 eklenti paketi için uygun bir klasör adı bulunamadı"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "Ara"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Mağazayı kapat"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
msgstr " $1, indiriliyor, lütfen bekleyin"
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "Yükleme başarılı :"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Yükle"
-#: builtin/mainmenu/store.lua:162
-msgid "Shortname:"
-msgstr "Takma ad :"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "$2 sayfadan $1 'cisi"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "Oylama"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "yeniden yükle"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "Yükle"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Ara"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "Mağazayı kapat"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Takma ad :"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "$2 sayfadan $1 'cisi"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "Yükleme başarılı :"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "Hakkında"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "Sıralanmamış"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "Ana geliÅŸtiriciler"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "yeniden yükle"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "Aktif katkı sağlayanlar"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
msgstr "Ana geliÅŸtiriciler"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Hakkında"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Katkı sağlayanlar"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Ä°lk geliÅŸtiriciler"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "Yüklenen eklentiler :"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "Çevirimiçi eklenti deposu"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Eklenti bilgileri:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "Eklenti bilgisi yok"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "Eklenti bilgileri:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "Adlandır"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "Seçilen eklenti paketini sil"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "Eklenti seç :"
-#: builtin/mainmenu/tab_mods.lua:106
+#: builtin/mainmenu/tab_mods.lua
msgid "Uninstall selected mod"
msgstr "Seçili eklentiyi sil"
-#: builtin/mainmenu/tab_mods.lua:121
-msgid "Select Mod File:"
-msgstr "Eklenti seç :"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "Eklentiler"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Seçilen eklenti paketini sil"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-msgid "Address / Port :"
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
msgstr "Adres / Port :"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-msgid "Name / Password :"
-msgstr "Kullanıcı Adı / Şifre :"
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "Çevirimiçi Oyun Listesi"
-
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Sil"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Çevirimiçi Oyna"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "BaÄŸlan"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "Yaratıcı mod"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
msgstr "Hasar alma etkin"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "Kullanıcı Adı / Şifre :"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Mücadele modu"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "Çevirimiçi Oyna"
-
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Yeni"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Adresi doÄŸrula"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "Ayarla"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "Oyunu BaÅŸlat"
-
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Dünya seç :"
-
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "Yaratıcı Mod"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "Hasarı etkinleştir"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Herkese Açık"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Kullanıcı adı/Şifre"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "Adresi doÄŸrula"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Yeni"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#, fuzzy
+msgid "No world created or selected!"
+msgstr "Dünya seçilmedi ya da adlandırılmadı"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "Port"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "Sunucu portu"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Herkese Açık"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "Dünya seçilmedi ya da adlandırılmadı"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Dünya seç :"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "Sunucu Kur"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Åžeffaf su"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Sunucu portu"
-#: builtin/mainmenu/tab_settings.lua:22
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Oyunu BaÅŸlat"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Simple Leaves"
-msgstr "Dalgalanan Yapraklar"
+msgid "3D Clouds"
+msgstr "3 boyutlu bulutlar"
-#: builtin/mainmenu/tab_settings.lua:23
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Şık ağaçlar"
+msgid "Advanced Settings"
+msgstr "Ayarlar"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr "Süzme yok"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz ?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "İki yönlü süzme"
-#: builtin/mainmenu/tab_settings.lua:34
-msgid "Trilinear Filter"
-msgstr "Üç yönlü süzme"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "Engebeler"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr "Mipmap kapalı"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Tuşları değiştir"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Connected Glass"
+msgstr "İçiçe geçmiş cam"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Fancy Leaves"
+msgstr "Şık ağaçlar"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Mipmap + Aniso. Filter"
msgstr "Mipmap Aniso. Süzgeci"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz ?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "Hayır"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "Hayır!!!"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "No Filter"
+msgstr "Süzme yok"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Pürüzsüz ışıklandırma"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Mipmap kapalı"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Parçacıkları etkinleştir"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Highlighting"
+msgstr "Nesne seçme göstergesi"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3 boyutlu bulutlar"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "Nesne seçme göstergesi"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "Åžeffaf su"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr ""
-#: builtin/mainmenu/tab_settings.lua:210
-msgid "Connected Glass"
-msgstr "İçiçe geçmiş cam"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+msgstr "Mip-Mapping"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr "Nesne seçme göstergesi"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Opaque Leaves"
+msgstr "Åžeffaf su"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr "Doku:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Åžeffaf su"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr "Kaplama:"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Parallax Occlusion"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "Değişikliklerin etkin olabilmesi için minetesti yeniden başlatın"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "Hepsini etkinleÅŸtir"
-#: builtin/mainmenu/tab_settings.lua:228
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr "Shaders"
-#: builtin/mainmenu/tab_settings.lua:233
-msgid "Change keys"
-msgstr "Tuşları değiştir"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Simple Leaves"
+msgstr "Dalgalanan Yapraklar"
-#: builtin/mainmenu/tab_settings.lua:236
-msgid "Reset singleplayer world"
-msgstr "Tek kişilik oyunu sıfırlayın"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Smooth Lighting"
+msgstr "Pürüzsüz ışıklandırma"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "Menü boyutları"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Doku:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "Ölçeklendirme menülere işlendi:"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "OpenGL sürücüleri seçilmeden Shader etkinleştirilemez."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "Touch free target"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Tone Mapping"
+msgstr "Mip-Mapping"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "Touchthreshold (px)"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-msgid "Bumpmapping"
-msgstr "Engebeler"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "Normal haritalar oluÅŸtur"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "Dalgalanan Su"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Üç yönlü süzme"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Leaves"
msgstr "Dalgalanan Yapraklar"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Waving Plants"
msgstr "Dalgalanan Bitkiler"
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "OpenGL sürücüleri seçilmeden Shader etkinleştirilemez."
-
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "Ayarlar"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Waving Water"
+msgstr "Dalgalanan Su"
-#: builtin/mainmenu/tab_simple_main.lua:82
-msgid "Start Singleplayer"
-msgstr "Tek kiÅŸilik oyunu baÅŸlat"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Evet"
-#: builtin/mainmenu/tab_simple_main.lua:83
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
msgstr "Eklentileri ayarla"
-#: builtin/mainmenu/tab_simple_main.lua:201
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Ana"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Tek kiÅŸilik oyunu baÅŸlat"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Oyna"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Tek KiÅŸilik"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr "Doku paketi seç :"
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
msgstr "Bilgi yok"
-#: builtin/mainmenu/tab_texturepacks.lua:114
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Doku paketi seç :"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "Doku paketi"
-#: src/client.cpp:1721
-msgid "Loading textures..."
-msgstr "Dokular yükleniyor..."
-
-#: src/client.cpp:1736
-msgid "Rebuilding shaders..."
-msgstr "Shader inÅŸa ediliyor..."
+#: src/client.cpp
+#, fuzzy
+msgid "Connection timed out."
+msgstr "Bağlantı hatası ( Zaman aşımı ? )"
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr "Nesneler yükleniyor..."
+#: src/client.cpp
+msgid "Done!"
+msgstr "Tamam!"
-#: src/client.cpp:1760
+#: src/client.cpp
#, fuzzy
msgid "Initializing nodes"
msgstr "Nesneler yükleniyor..."
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "Nesne dokuları ..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr "Tamam!"
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Nesneler yükleniyor..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Ana menu"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Dokular yükleniyor..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "Kullanıcı adı çok uzun."
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Shader inÅŸa ediliyor..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Bağlantı hatası ( Zaman aşımı ? )"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Dünya veya adres seçilmedi."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr "Belirtilen dünya konumu yok:"
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "Oyun yüklenemiyor \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "Geçersiz oyun özellikleri."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Ana menu"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Uygula"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Dünya veya adres seçilmedi."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Geberdin."
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Kullanıcı adı çok uzun."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "Yeniden Canlan"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Belirtilen dünya konumu yok:"
-#: src/game.cpp:1092
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
-"Varsayılan Kontroller:\n"
-"Tüm menüler gizli:\n"
-"- Tek tık: tuş etkin\n"
-"- Çift tık: yerleştir/kullan\n"
-"- Parmağı kaydır: etrafa bak\n"
-"Menu/Encanter görünür:\n"
-"- çift tık (dışarda):\n"
-" -->kapat\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- tut&bırak, iki parmağı kullan\n"
-" --> slotuna bir item bırak\n"
+"\n"
+"Hata ayrıntıları için debug.txt dosyasını inceleyin."
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Tuşları değiştir"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Åžifre deÄŸiÅŸtir"
-#: src/game.cpp:1106
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "Sunucuya bağlanılıyor..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Devam et"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Ä°stemci oluÅŸturuluyor..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Sunucu oluÅŸturuluyor..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -691,521 +816,3439 @@ msgstr ""
"- Fare tekerleği: Araç seç\n"
"- T: Sohbet\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Devam et"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Åžifre deÄŸiÅŸtir"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "Ses yüksekliği :"
-
-#: src/game.cpp:1136
-msgid "Change Keys"
-msgstr "Tuşları değiştir"
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Varsayılan Kontroller:\n"
+"Tüm menüler gizli:\n"
+"- Tek tık: tuş etkin\n"
+"- Çift tık: yerleştir/kullan\n"
+"- Parmağı kaydır: etrafa bak\n"
+"Menu/Encanter görünür:\n"
+"- çift tık (dışarda):\n"
+" -->kapat\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- tut&bırak, iki parmağı kullan\n"
+" --> slotuna bir item bırak\n"
-#: src/game.cpp:1139
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Menüye dön"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Oyundan Çık"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr "Kapatılıyor..."
-
-#: src/game.cpp:1948
-msgid "Creating server..."
-msgstr "Sunucu oluÅŸturuluyor..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Ä°stemci oluÅŸturuluyor..."
-
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "Adres çözümleniyor..."
-
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "Sunucuya bağlanılıyor..."
-
-#: src/game.cpp:2317
+#: src/game.cpp
msgid "Item definitions..."
msgstr "Nesne tanımlamaları..."
-#: src/game.cpp:2322
-msgid "Node definitions..."
-msgstr "Blok tanımlamaları..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr ""
-#: src/game.cpp:2329
+#: src/game.cpp
msgid "Media..."
msgstr "Media..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
-
-#: src/game.cpp:2338
+#: src/game.cpp
msgid "MiB/s"
msgstr ""
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Hata ayrıntıları için debug.txt dosyasını inceleyin."
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "Blok tanımlamaları..."
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "Entrer "
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "Adres çözümleniyor..."
-#: src/guiFormSpecMenu.cpp:2875
-msgid "ok"
-msgstr "tamam"
+#: src/game.cpp
+msgid "Respawn"
+msgstr "Yeniden Canlan"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )"
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "Kapatılıyor..."
-#: src/guiKeyChangeMenu.cpp:165
-msgid "\"Use\" = climb down"
-msgstr "\"Kullan Tuşu\" = Aşağı in"
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "Ses yüksekliği :"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Çift zıplayarak uçma modunu aç/kapa"
+#: src/game.cpp
+msgid "You died."
+msgstr "Geberdin."
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Tuş zaten kullanımda"
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "tamam"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "tuÅŸa bas"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Entrer "
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Ä°leri"
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Uygula"
-#: src/guiKeyChangeMenu.cpp:400
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "\"Kullan Tuşu\" = Aşağı in"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Geri"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Sol"
-
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "SaÄŸ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "KonuÅŸma"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "Kullan"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Komut"
-#: src/guiKeyChangeMenu.cpp:404
-msgid "Jump"
-msgstr "Zıpla"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsol"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "Sessiz Yürü"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Çift zıplayarak uçma modunu aç/kapa"
-#: src/guiKeyChangeMenu.cpp:406
+#: src/guiKeyChangeMenu.cpp
msgid "Drop"
msgstr "Bırak"
-#: src/guiKeyChangeMenu.cpp:407
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Ä°leri"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Inventory"
msgstr "Envanter"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "KonuÅŸma"
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Zıpla"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Komut"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Tuş zaten kullanımda"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "Konsol"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Uçuş modu aç/kapa"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Sol"
-#: src/guiKeyChangeMenu.cpp:412
-msgid "Toggle fast"
-msgstr "Hız modu aç/kapa"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Yazdırma yığınları"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Uzaklık seçimi"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "SaÄŸ"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Sessiz Yürü"
-#: src/guiKeyChangeMenu.cpp:413
+#: src/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle Cinematic"
msgstr "Hız modu aç/kapa"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Hız modu aç/kapa"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Uçuş modu aç/kapa"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Noclip aç/kapa"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Uzaklık seçimi"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Yazdırma yığınları"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "Kullan"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Eski ÅŸifre"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "tuÅŸa bas"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Yeni ÅŸifre"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "DeÄŸiÅŸtir"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "Şifreyi doğrulayın"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "DeÄŸiÅŸtir"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Yeni ÅŸifre"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Eski ÅŸifre"
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Åžifreler uyuÅŸmuyor !"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "Ses yüksekliği :"
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Çıkış"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Sol tuÅŸu"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Orta TuÅŸ"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Ses yüksekliği :"
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "SaÄŸ tuÅŸ"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Uygulamalar"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "X Button 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Dikkat"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "Geri"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "Büyük"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Temizle"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "Return"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "X Button 2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "Büyük"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Virgul"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Kontroller"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Dönüştür"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Menü"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Beklet"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Aşağı"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Son"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "Dönüştür"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "l'OEF 'i sil"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Çıkış"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Çalıştır"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "BitiÅŸ"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Yardım"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Ev"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junja"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kana"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanji"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "Dönüştürme"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Son"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Sol tuÅŸu"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Ev"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Sol CTRL"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "Mod deÄŸiÅŸtir"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Sol Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Ä°leri"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Sol Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Öncelikli"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Sol Windows tuÅŸu"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "BoÅŸluk"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Menü"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Aşağı"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Orta TuÅŸ"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "Çalıştır"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "Eksi"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Yazdır"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Mod deÄŸiÅŸtir"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Seç"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "Ä°leri"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Yukarı"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Dönüştürme"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Yardım"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Numpad *"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "Ekran Resmi"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Numpad +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Sol Windows tuÅŸu"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Numpad -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Uygulamalar"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Numpad /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Numpad 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Numpad 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "SaÄŸ Windows tuÅŸu"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Uyu"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Numpad 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Numpad 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Numpad 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Numpad 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Numpad 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Numpad 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Numpad *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Numpad +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Numpad -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Numpad /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Numpad 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Numpad 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Temizle"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Sol Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Beklet"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "SaÄŸ Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Dönem"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Sol CTRL"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "Artı"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Sol Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Yazdır"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Öncelikli"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Return"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "SaÄŸ tuÅŸ"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Control"
msgstr "SaÄŸ CTRL"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "SaÄŸ Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Virgul"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "SaÄŸ Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "Eksi"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "SaÄŸ Windows tuÅŸu"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "Dönem"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "Artı"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Seç"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Dikkat"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Uyu"
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "l'OEF 'i sil"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Ekran Resmi"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "BoÅŸluk"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Temizle"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Yukarı"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X Button 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X Button 2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "Yakınlaştır"
-#~ msgid "Numpad "
-#~ msgstr "Numpad "
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
-#~ msgid " MB/s"
-#~ msgstr " MB/s"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
-#~ msgid " KB/s"
-#~ msgstr " KB/s"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D clouds"
+msgstr "3 boyutlu bulutlar"
-#~ msgid "Fly mode"
-#~ msgstr "Uçuş modu"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode"
+msgstr "Uçuş modu"
-#~ msgid "Tri-Linear Filtering"
-#~ msgstr "Üç yönlü süzme"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
-#~ msgid "Bi-Linear Filtering"
-#~ msgstr "Çift yönlü süzme"
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Eşyönsüz süzme"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
-#~ msgid "Mip-Mapping"
-#~ msgstr "Mip-Mapping"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
-#~ msgid "please wait..."
-#~ msgstr "lütfen bekleyin..."
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "Amplifies the valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Anisotropic filtering"
+msgstr "Eşyönsüz süzme"
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Backward key"
+msgstr "Geri"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Base terrain height"
+msgstr "Dalgalanan Su"
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic Privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bilinear filtering"
+msgstr "Çift yönlü süzme"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Bind address"
+msgstr "Adresi doÄŸrula"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Engebeler"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat key"
+msgstr "Tuşları değiştir"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat toggle key"
+msgstr "Tuşları değiştir"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode"
+msgstr "Yaratıcı mod"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cinematic mode key"
+msgstr "Yaratıcı mod"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds"
+msgstr "3 boyutlu bulutlar"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Clouds in menu"
+msgstr "Ana menu"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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
+#, fuzzy
+msgid "Command key"
+msgstr "Komut"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect glass"
+msgstr "İçiçe geçmiş cam"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Connect to external media server"
+msgstr "Sunucuya bağlanılıyor..."
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console alpha"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console color"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Console key"
+msgstr "Konsol"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Controls"
+msgstr "Kontroller"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Damage"
+msgstr "Hasarı etkinleştir"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default password"
+msgstr "Yeni ÅŸifre"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Disable anticheat"
+msgstr "Parçacıkları etkinleştir"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double tap jump for fly"
+msgstr "Çift zıplayarak uçma modunu aç/kapa"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Çift zıplayarak uçma modunu aç/kapa"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable VBO"
+msgstr "Paketi Aç"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enable mod security"
+msgstr "Çevirimiçi eklenti deposu"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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
+#, fuzzy
+msgid "Enables filmic tone mapping"
+msgstr "Hasarı etkinleştir"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Enables minimap."
+msgstr "Hasarı etkinleştir"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fallback font"
+msgstr "needs_fallback_font"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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
+#, fuzzy
+msgid "Filtering"
+msgstr "Süzme yok"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Fly key"
+msgstr "Uçuş modu"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Forward key"
+msgstr "Ä°leri"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "GUI scaling filter"
+msgstr "Menü boyutları"
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Generate normalmaps"
+msgstr "Normal haritalar oluÅŸtur"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "HTTP Mods"
+msgstr "Eklentiler"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "In-Game"
+msgstr "Oyun"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Inventory key"
+msgstr "Envanter"
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Jump key"
+msgstr "Zıpla"
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Left key"
+msgstr "Sol Menu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu mod manager"
+msgstr "Ana menu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Main menu script"
+msgstr "Ana menu"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen Valleys"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen debug"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat flags"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat ground level"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake steepness"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat lake threshold"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal fractal"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal iterations"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal offset"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal scale"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal slice w"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen name"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v6"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mapgen"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Menus"
+msgstr "Menü"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mipmapping"
+msgstr "Mip-Mapping"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Node highlighting"
+msgstr "Nesne seçme göstergesi"
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion Scale"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion bias"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion iterations"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion mode"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Parallax occlusion strength"
+msgstr "Parallax Occlusion"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Player name"
+msgstr "Kullanıcı adı çok uzun."
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Range select key"
+msgstr "Uzaklık seçimi"
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Right key"
+msgstr "SaÄŸ Menu"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot"
+msgstr "Ekran Resmi"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "Ekran Resmi"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot quality"
+msgstr "Ekran Resmi"
+
+#: 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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server / Singleplayer"
+msgstr "Tek kiÅŸilik oyunu baÅŸlat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server URL"
+msgstr "Sunucu Kur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server address"
+msgstr "Sunucu portu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server description"
+msgstr "Sunucu portu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server name"
+msgstr "Sunucu Kur"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Server port"
+msgstr "Sunucu portu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist URL"
+msgstr "Çevirimiçi Oyun Listesi"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Serverlist file"
+msgstr "Çevirimiçi Oyun Listesi"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Smooth lighting"
+msgstr "Pürüzsüz ışıklandırma"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Sneak key"
+msgstr "Sessiz Yürü"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of generated normalmaps."
+msgstr "Normal haritalar oluÅŸtur"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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
+#, fuzzy
+msgid "Texture path"
+msgstr "Doku paketi"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Trilinear filtering"
+msgstr "Üç yönlü süzme"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Use key"
+msgstr "tuÅŸa bas"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Useful for mod developers."
+msgstr "Ana geliÅŸtiriciler"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Volume"
+msgstr "Ses yüksekliği :"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Walking speed"
+msgstr "Dalgalanan Yapraklar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Water Features"
+msgstr "Nesne dokuları ..."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Dalgalanan Yapraklar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving leaves"
+msgstr "Dalgalanan Yapraklar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving plants"
+msgstr "Dalgalanan Bitkiler"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water"
+msgstr "Dalgalanan Su"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water height"
+msgstr "Dalgalanan Su"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water length"
+msgstr "Dalgalanan Su"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving water speed"
+msgstr "Dalgalanan Su"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Dokular yükleniyor..."
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Tek kişilik oyunu sıfırlayın"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "Ölçeklendirme menülere işlendi:"
+
+#~ msgid "Touch free target"
+#~ msgstr "Touch free target"
#~ msgid "Downloading"
#~ msgstr "Ä°ndiriliyor"
+
+#~ msgid "please wait..."
+#~ msgstr "lütfen bekleyin..."
+
+#~ msgid " KB/s"
+#~ msgstr " KB/s"
+
+#~ msgid " MB/s"
+#~ msgstr " MB/s"
+
+#~ msgid "Numpad "
+#~ msgstr "Numpad "
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "Değişikliklerin etkin olabilmesi için minetesti yeniden başlatın"
+
+#~ msgid "Rendering:"
+#~ msgstr "Kaplama:"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "EtkinleÅŸtirildi"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Paketi Kapat"
+
+#~ msgid "\""
+#~ msgstr "\""
+
+#~ msgid "No!!!"
+#~ msgstr "Hayır!!!"
+
+#, fuzzy
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Normal haritalar oluÅŸtur"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "Çevirimiçi Oyun Listesi"
+
+#~ msgid "No of course not!"
+#~ msgstr "Elbette hayır!"
diff --git a/po/uk/minetest.po b/po/uk/minetest.po
index 697214e08..4a2101d76 100644
--- a/po/uk/minetest.po
+++ b/po/uk/minetest.po
@@ -7,676 +7,780 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2013-06-27 01:22+0200\n"
-"Last-Translator: Vladimir a <c-vld@ya.ru>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-10 00:06+0000\n"
+"Last-Translator: Fixer <artem.brz@gmail.com>\n"
+"Language-Team: Ukrainian "
+"<https://hosted.weblate.org/projects/minetest/minetest/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 1.4-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у Lua-Ñкрипті модифікації:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Головне меню"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
-msgstr ""
+msgstr "Гаразд"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Повторне підключеннÑ"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Сервер запроÑив перез'єднаннÑ:"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "ЗавантаженнÑ..."
-#: builtin/mainmenu/common.lua:240
+#: 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_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "Залежить від:"
-#: builtin/mainmenu/dlg_config_world.lua:29
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
-msgid "World:"
-msgstr "Виберіть Ñвіт:"
+msgid "Disable MP"
+msgstr "Вимкнути МП"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
-msgid "Hide Game"
-msgstr "Гра"
+msgid "Enable MP"
+msgstr "Увімкнути МП"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
-msgid "Hide mp content"
-msgstr ""
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Увімкнути вÑе"
-#: builtin/mainmenu/dlg_config_world.lua:49
-msgid "Mod:"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
msgstr ""
+"Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ модифікацію \"$1\", тому що вона міÑтить заборонені "
+"Ñимволи. ДозволÑєтьÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… Ñимволів: [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "Приховати гру"
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
+#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
-msgid "Depends:"
-msgstr "залежить від:"
+msgid "Hide mp content"
+msgstr "Приховати мп контент"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "МодифікаціÑ:"
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "Зберегти"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "Відміна"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-#, fuzzy
-msgid "Enable MP"
-msgstr "Увімкнути Ð’Ñе"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-#, fuzzy
-msgid "Disable MP"
-msgstr "Вимкнути УÑе"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Світ:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "Увімкнено"
+msgstr "увімкнено"
-#: builtin/mainmenu/dlg_config_world.lua:85
-#, fuzzy
-msgid "Enable all"
-msgstr "Увімкнути Ð’Ñе"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Світ з такою назвою \"$1\" вже Ñ–Ñнує"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "Ðазва Світу"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Створити"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "Завантажте гру, наприклад, minetest_game з minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Завантажте з minetest.net"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Гра"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "Створити"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Генератор Ñвіту"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "Ðазву Ñвіту не задано або не обрано гру"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "Зерно"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr ""
-
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr ""
+msgstr "Увага: мінімальна теÑтова верÑÑ–Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²."
-#: builtin/mainmenu/dlg_create_world.lua:99
-#, fuzzy
-msgid "A world named \"$1\" already exists"
-msgstr "Ðеможливо Ñтворити Ñвіт: Світ з таким ім'Ñм вже Ñ–Ñнує"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Ðазва Ñвіту"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "Ви не маєте вÑтановлених ігор."
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr ""
+msgstr "Ви впевнені, що бажаєте видалити \"$1\"?"
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "Так"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr ""
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "Видалити"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "Modmgr: не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ \"$1\""
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
-msgstr ""
+msgstr "Modmgr: недійÑний шлÑÑ… модифікації \"$1\""
-#: builtin/mainmenu/dlg_delete_world.lua:24
-#, fuzzy
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Видалити Ñвіт"
+msgstr "Видалити Ñвіт \"$1\"?"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "ÐÑ–"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "ПрийнÑти"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Перейменувати збірку модифікацій:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" не є правильним параметром."
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr "Формат: 3 номера, відокремлених комами Ñ– вÑередині дужок."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
-msgid "Accept"
-msgstr "Підтвердити"
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"Формат: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Ігри"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Модифікації"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
msgstr ""
-#: builtin/mainmenu/modmgr.lua:345
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "Будь-лаÑка введіть перелік параметрів через кому."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Будь-лаÑка введіть дійÑне ціле чиÑло."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Будь-лаÑка введіть дійÑний номер."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "Можливі значеннÑ: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Відновити Ñк було"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "Вибрати шлÑÑ…"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Показувати технічні назви"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути більше за $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути менше ніж $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
+"\n"
+"Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: тип файлу \"$1\" не підтримуєтьÑÑ Ð°Ð±Ð¾ архів "
+"пошкоджено"
-#: builtin/mainmenu/modmgr.lua:365
-#, fuzzy
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñвіт"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити $1 у $2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr ""
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: файл \"$1\""
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""
+"Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: не вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ дійÑну назву модифікації $1"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""
+"Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: неможливо знайти відповідну назву папки Ð´Ð»Ñ Ð·Ð±Ñ–Ñ€ÐºÐ¸ "
+"модифікацій $1"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "Вийти з крамнички"
-#: builtin/mainmenu/store.lua:126
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ $1, зачекайте..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "Ð’Ñтановити"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "Ðазва Світу"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "Сторінка $1 з $2"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
-msgstr ""
+msgstr "Оцінка"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr ""
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "Пошук"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "Коротка назва:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "УÑпішно вÑтановлено:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "ПодÑка"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "ÐевідÑортоване"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr ""
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "ПеревÑтановити"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "Ðктивні учаÑники"
-#: builtin/mainmenu/tab_credits.lua:54
-msgid "Previous Core Developers"
-msgstr ""
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "ОÑновні розробники Ñдра гри"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "ПодÑка"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "Колишні учаÑники"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Попередні оÑновні розробники Ñдра"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
-msgstr ""
+msgstr "Ð’Ñтановлені модифікації:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr ""
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
-msgstr ""
+msgstr "ÐžÐ¿Ð¸Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— відÑутній"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr ""
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr ""
+msgstr "Перейменувати"
-#: builtin/mainmenu/tab_mods.lua:121
-#, fuzzy
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
-msgstr "Виберіть Ñвіт:"
-
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr ""
+msgstr "Оберіть файл модифікації:"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "ÐдреÑа/Порт"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "Видалити обрану модифікацію"
-#: builtin/mainmenu/tab_multiplayer.lua:24
-#, fuzzy
-msgid "Name / Password :"
-msgstr "Ім'Ñ/Пароль"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "Видалити обрану збірку модифікацій"
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-#, fuzzy
-msgid "Public Serverlist"
-msgstr "СпиÑок публічних Ñерверів:"
+#: builtin/mainmenu/tab_multiplayer.lua
+msgid "Address / Port"
+msgstr "ÐдреÑа / Порт"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "Видалити"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Клієнт"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
-msgstr "ПідключитиÑÑ"
+msgstr "Під'єднатиÑÑ"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
-msgstr "Режим СтвореннÑ"
+msgstr "ТворчіÑÑ‚ÑŒ"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "Damage enabled"
-msgstr "Увімкнено"
+msgstr "ПораненнÑ"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
-#, fuzzy
-msgid "PvP enabled"
-msgstr "Увімкнено"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Видалити мітку"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr ""
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Улюблені"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "Ðовий"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "Ім'Ñ / Пароль"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "Ðалаштувати"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "Бої увімкнено"
-#: builtin/mainmenu/tab_server.lua:29
-#, fuzzy
-msgid "Start Game"
-msgstr "Почати гру / ПідключитиÑÑ"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "Закріпити адреÑу"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "Виберіть Ñвіт:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "Ðалаштувати"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
-msgstr "Режим СтвореннÑ"
+msgstr "ТворчіÑÑ‚ÑŒ"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
-msgstr "Ввімкнути урон"
+msgstr "Увімкнути пораненнÑ"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "Публичний"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "Ім'Ñ/Пароль"
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "Ðовий"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "Світ не Ñтворено або не обрано!"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
-msgstr ""
+msgstr "Порт"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "Публічний"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-msgid "No world created or selected!"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "Виберіть Ñвіт:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
-msgstr ""
+msgstr "Сервер"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "Ðепрозора вода"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "Порт Ñервера"
-#: builtin/mainmenu/tab_settings.lua:22
-msgid "Simple Leaves"
-msgstr ""
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "Почати гру"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "Гарні дерева"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "Об'ємні хмари"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced Settings"
+msgstr "Додаткові налаштуваннÑ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "ЗгладжуваннÑ:"
-#: builtin/mainmenu/tab_settings.lua:33
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "Ви впевнені, що бажаєте Ñкинути Ñвій Ñвіт однокориÑтувацької гри?"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
msgstr "Білінійна фільтраціÑ"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "Трилінійна фільтраціÑ"
+msgid "Bump Mapping"
+msgstr "Бамп-маппінг"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "Змінити клавіші"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "З'єднане Ñкло"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Гарні лиÑÑ‚Ñ"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Міпмапи"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Міпмапи і анізотропний фільтр"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "ÐÑ–"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Без фільтруваннÑ"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "Рівне оÑвітленнÑ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Без міпмап"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "Ввімкнути чаÑтки"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "ПідÑвічувати блок"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "3D Хмари"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "ВиділÑти блок рамкою"
-#: builtin/mainmenu/tab_settings.lua:208
-#, fuzzy
-msgid "Opaque Water"
-msgstr "Ðепрозора вода"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "Ðічого"
-#: builtin/mainmenu/tab_settings.lua:210
-#, fuzzy
-msgid "Connected Glass"
-msgstr "ПідключитиÑÑ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Normal Mapping"
+msgstr "ТекÑÑ‚ÑƒÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð²"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Ðепрозоре лиÑÑ‚Ñ"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Ðепрозора вода"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "ПаралакÑова оклюзіÑ"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "ЧаÑточки"
-#: builtin/mainmenu/tab_settings.lua:228
+#: 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:233
-msgid "Change keys"
-msgstr "Змінити клавіши"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "ПроÑте лиÑÑ‚Ñ"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "Одиночна гра"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Згладжене оÑвітленнÑ"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "ТекÑтуруваннÑ:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""
+"Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб увімкнути шейдери, потрібно викориÑтовувати драйвер OpenGL."
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Тоновий шейдер"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "MIP-текÑтуруваннÑ"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "Трилінійна фільтраціÑ"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Коливати лиÑÑ‚Ñ"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "Коливати квіти"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "ÐалаштуваннÑ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "Коливати воду"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "Одиночна гра"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "Так"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "Ðалаштувати"
+msgstr "Ðалаштувати модифікації"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
msgstr "Головне Меню"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "Почати одиночну гру"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "Грати"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "Одиночна гра"
-#: builtin/mainmenu/tab_texturepacks.lua:49
-msgid "Select texture pack:"
-msgstr ""
-
-#: builtin/mainmenu/tab_texturepacks.lua:69
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "No information available"
-msgstr ""
+msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð²Ñ–Ð´ÑутнÑ"
-#: builtin/mainmenu/tab_texturepacks.lua:114
-msgid "Texturepacks"
-msgstr ""
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "Оберіть набір текÑтур:"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "ЗавантаженнÑ..."
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "Ðабори текÑтур"
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²."
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "Виконано!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "ТекÑтура предметів..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð±Ð»Ð¾ÐºÑ–Ð²..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "Головне Меню"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑтур..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr ""
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "Перебудова шейдерів..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Помилка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ñ‡Ð°Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "Жоден Ñвіт не вибрано та не надано адреÑи. Ðічого не робити."
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
-msgstr "Ðеможливо знайти, або завантажити гру \""
+msgstr "Ðеможливо знайти або завантажити гру \""
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
+#, fuzzy
msgid "Invalid gamespec."
msgstr "Помилкова ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð³Ñ€Ð¸."
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr ""
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "Головне Меню"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "Далі"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Жоден Ñвіт не вибрано та не надано адреÑи. Ðічого робити."
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "Ви загинули."
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "Ім'Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ довге."
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "ÐародитиÑÑ"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "Вказаний шлÑÑ… до Ñвіту не Ñ–Ñнує: "
-#: src/game.cpp:1092
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr ""
+
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"Деталі у файлі debug.txt."
-#: src/game.cpp:1106
-#, fuzzy
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "Змінити клавіші"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "Змінити Пароль"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñервера..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "Продовжити"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñервера..."
+
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -690,10 +794,10 @@ msgid ""
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
-"Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð·Ð° замовчанню:\n"
+"Стандартне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ°Ð¼Ð¸:\n"
"- WASD: рух\n"
-"- Space: Ñтрибок/лізти в гору\n"
-"- Shift: краÑтиÑÑ/лізти в низ\n"
+"- Space: Ñтрибок/лізти вгору\n"
+"- Shift: краÑтиÑÑ/лізти вниз\n"
"- Q: кинути предмет\n"
"- I: інвентар\n"
"- Мишка: поворот/дивитиÑÑ\n"
@@ -702,598 +806,3385 @@ msgstr ""
"- КолеÑо миші: вибір предмета\n"
"- T: чат\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "Продовжити"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "Змінити Пароль"
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "ГучніÑÑ‚ÑŒ звуку"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "Змінити клавіши"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Стандартне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ñ‚Ð¸ÐºÐ¾Ð¼:\n"
+"Коли меню не відображаєтьÑÑ:\n"
+"- один дотик: активувати кнопку\n"
+"- дотикнутиÑÑ Ð´Ð²Ñ–Ñ‡Ñ–: вÑтановити/викориÑтати\n"
+"- провеÑти пальцем: роззирнутиÑÑ\n"
+"Коли відображаєтьÑÑ Ð¼ÐµÐ½ÑŽ або інвертар:\n"
+"- дотикнутиÑÑ Ð´Ð²Ñ–Ñ‡Ñ– (поза межами):\n"
+" --> закрити\n"
+"- ТоркнутиÑÑ ÐºÑƒÐ¿Ð¸, торкнутиÑÑ ÐºÐ¾Ð¼Ñ–Ñ€ÐºÐ¸:\n"
+" --> переміÑтити купу\n"
+"- ТоркнутиÑÑ Ñ– Ñ‚Ñгнути, дотикнутиÑÑ Ð»Ñ€ÑƒÐ³Ð¸Ð¼ пальцем\n"
+" --> поміÑтити один предмет у комірку\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "Вихід в меню"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "Вихід з гри"
-#: src/game.cpp:1841
-msgid "Shutting down..."
-msgstr ""
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñервера..."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð²..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "КіБ/Ñек"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñервера..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "РеÑурÑи..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr ""
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "МіБ/Ñек"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr ""
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "ПереродитиÑÑ"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "ВимкненнÑ..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"Деталі у файлі debug.txt."
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "ГучніÑÑ‚ÑŒ звуку"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr ""
+#: src/game.cpp
+msgid "You died."
+msgstr "Ви загинули."
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
-msgstr ""
+msgstr "гаразд"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr ""
-"Комбінації клавіш. (Якщо це меню зламалоÑÑ, видаліть Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· minetest."
-"conf)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "Ввід "
-#: src/guiKeyChangeMenu.cpp:165
-#, fuzzy
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "Далі"
+
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "\"ВикориÑтовувати\" = підніматиÑÑ Ð² гору"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "Подвійний \"Стрибок\" щоб полетіти"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Ðазад"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "Клавіша вже викориÑтовуєтьÑÑ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "Чат"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "ÐатиÑніть клавішу"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Команда"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "Уперед"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "КонÑоль"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "Ðазад"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Двічі доторкнітьÑÑ Ð´Ð¾ \"Ñтрибок\" щоб полетіти"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "Ліворуч"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Викинути"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "Праворуч"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Уперед"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "ВикориÑтовувати"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "Інвентар"
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "Стрибок"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "КраÑтиÑÑ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Клавіша вже викориÑтовуєтьÑÑ"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "Викинути"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Комбінації клавіш. (Якщо це меню зламалоÑÑ, видаліть Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð· minetest."
+"conf)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "Інвентар"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "Ліворуч"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "Чат"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "Ðадрукувати Ñтак"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "Комманда"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Вибір діапазону"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "КонÑоль"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "Праворуч"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "Переключити режим польоту"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "КраÑтиÑÑ"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "Переключити кінематографічний режим"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "Переключити швидкий режим"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "Переключити швидкий режим"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Переключити режим польоту"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Переключити режим Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñкрізь Ñтін"
+msgstr "Переключити режим Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÑ€Ñ–Ð·ÑŒ Ñтіни"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "Вибір діапазону"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "Ðадрукувати Ñтек"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "ВикориÑтовувати"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "Старий Пароль"
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "ÐатиÑніть клавішу"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "Ðовий Пароль"
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Змінити"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "ÐŸÑ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паролÑ"
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "Змінити"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "Ðовий Пароль"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "Старий Пароль"
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Паролі не збігаютьÑÑ!"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "ГучніÑÑ‚ÑŒ Звуку: "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "Вихід"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "Ліва кнопка"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "ГучніÑÑ‚ÑŒ Звуку: "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "Права кнопка"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "Додатки"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Додаткова кнопка 1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Увага"
-#: src/keycode.cpp:224
-#, fuzzy
+#: src/keycode.cpp
msgid "Back"
msgstr "Ðазад"
-#: src/keycode.cpp:224
-#, fuzzy
-msgid "Clear"
-msgstr "Clear"
-
-#: src/keycode.cpp:224
-#, fuzzy
-msgid "Return"
-msgstr "Enter"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tab"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Додаткова кнопка 2"
-
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Capital"
msgstr "Caps Lock"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "ОчиÑтити"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "Кома"
+
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrl"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "Kana"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "Конвертувати"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "Меню"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr ""
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "Пауза"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "Вниз"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shift"
+#: src/keycode.cpp
+msgid "End"
+msgstr ""
-#: src/keycode.cpp:226
-#, fuzzy
-msgid "Convert"
-msgstr "Конвертувати"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr ""
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
msgstr "Esc"
-#: src/keycode.cpp:226
-#, fuzzy
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "Виконати"
+
+#: src/keycode.cpp
msgid "Final"
-msgstr "Кинець"
+msgstr "Кінець"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "Допомога"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/keycode.cpp
msgid "Junja"
-msgstr "Junja"
+msgstr ""
-#: src/keycode.cpp:226
-msgid "Kanji"
-msgstr "Kanji"
+#: src/keycode.cpp
+msgid "Kana"
+msgstr ""
-#: src/keycode.cpp:226
-#, fuzzy
-msgid "Nonconvert"
-msgstr "Ðе конвертуванно"
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr ""
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "End"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "Ліва кнопка"
-#: src/keycode.cpp:227
-#, fuzzy
-msgid "Home"
-msgstr "Home"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "Ліва клавіша Ctrl"
-#: src/keycode.cpp:227
-#, fuzzy
-msgid "Mode Change"
-msgstr "Mode"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "Ліва клавіша Menu"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "Page Up"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "Ліва клавіша Shift"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Page Down"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "Ліва клавіша Win"
-#: src/keycode.cpp:227
-#, fuzzy
-msgid "Space"
-msgstr "Space"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "Меню"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "Вниз"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "Ð¡ÐµÑ€ÐµÐ´Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°"
-#: src/keycode.cpp:228
-#, fuzzy
-msgid "Execute"
-msgstr "Виконати"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "МінуÑ"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "Print Screen"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "Змінити режим"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "Select"
+#: src/keycode.cpp
+msgid "Next"
+msgstr ""
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "Вгору"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "Ðе обернено"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "Допомога"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "Insert"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "Num *"
-#: src/keycode.cpp:229
-#, fuzzy
-msgid "Snapshot"
-msgstr "Знімок"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "Num +"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "Ліва клавіша Win (Command)"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "Num -"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "Додатки"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "Num /"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "Num 0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "Num 1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "Права клавіша Win (Command)"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "Сон"
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "Num 2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "Num 3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "Num 4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "Num 5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "Num 6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "Num 7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "Num *"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "Num +"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "Num -"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "Num /"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "Num 8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "Num 9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "Num Lock"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "Ліва клавіша Shift"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Пауза"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "Права клавіша Shift"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "Крапка"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "Ліва клавіша Control"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "ПлюÑ"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "Ліва клавіша Menu"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Print Screen"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+#, fuzzy
+msgid "Prior"
+msgstr "Page Down"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Ввід"
+
+#: src/keycode.cpp
+#, fuzzy
+msgid "Right Button"
+msgstr "Права кнопка"
+
+#: src/keycode.cpp
msgid "Right Control"
-msgstr "Права клавіша Control"
+msgstr "Права клавіша Ctrl"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
msgstr "Права клавіша Menu"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "Кома"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "Права клавіша Shift"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "МінуÑ"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "Права клавіша Win"
-#: src/keycode.cpp:243
-#, fuzzy
-msgid "Period"
-msgstr "Період"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "ПлюÑ"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "Обрати"
-#: src/keycode.cpp:247
-#, fuzzy
-msgid "Attn"
-msgstr "Увага"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSel"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "Сон"
-#: src/keycode.cpp:248
-#, fuzzy
-msgid "Erase OEF"
-msgstr "Erase OEF"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "Знімок"
-#: src/keycode.cpp:248
-#, fuzzy
-msgid "ExSel"
-msgstr "ExSel"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Пробіл"
-#: src/keycode.cpp:248
-#, fuzzy
-msgid "OEM Clear"
-msgstr "OEM ОчиÑтити"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "Вгору"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Додаткова кнопка 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Додаткова кнопка 2"
+
+#: src/keycode.cpp
#, fuzzy
msgid "Zoom"
msgstr "Збільшити"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Game Name"
-#~ msgstr "Гра"
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ñ–Ñ \"parallax occlusion\" з інформацією про криві (швидше)\n"
+"1 = Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ñ–Ñ \"relief mapping\" (повільніше, більш акуратніше)"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "Об'ємні хмари"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D режим"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifier 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 ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Додатково"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Games"
-#~ msgstr "Гра"
+msgid "Backward key"
+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 "Bilinear filtering"
+msgstr "Білінійна фільтраціÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "Ð—Ð°ÐºÑ€Ñ–Ð¿Ð»ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "Будувати в межах гравцÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "Бамп-маппінг"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÑƒÑ…Ñƒ камери"
-#~ msgid "Favorites:"
-#~ msgstr "Улюблені:"
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "Ð—Ð³Ð»Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÑƒÑ…Ñƒ камери у кінорежимі"
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Password"
-#~ msgstr "Старий Пароль"
+msgid "Camera update toggle key"
+msgstr "Клавіша Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸"
-#~ msgid "Preload item visuals"
-#~ 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 "Caves and tunnels form at the intersection of the two noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "Чат"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "Чат"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "Кінорежим"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "Кінорежим"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "Хмари"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "Хмари в меню"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated 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 "Command key"
+msgstr "Команда"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "З'єднувати Ñкло"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ зовнішнього медіаÑервера"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "КонÑоль (альфа)"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "Колір конÑолі"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "КонÑоль"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "КеруваннÑ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "ПораненнÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "Стандартний пароль"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Стандартні права"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "Вимкнути античіт"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Подвійний дотик до \"Ñтрибок\" щоб полетіти"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Подвійний дотик \"Ñтрибок\" вмикає режим польоту."
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "Увімкнути VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "Туман"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "Вперед"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "Повний екран"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr "Повноекранний режим."
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
-#~ msgid "Finite Liquid"
-#~ msgstr "Кінцеві рідини"
+msgid "GUI scaling filter"
+msgstr "МаÑштаб інтерфейÑу"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "Помилка при видаленні файлів Ñвіту"
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "Ðеможливо налаштувати Ñвіт: Ðічого не вибрано"
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr ""
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "Ðеможливо Ñтворити Ñвіт: Ðе знайдено жодної гри"
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr ""
-#~ msgid "Files to be deleted"
-#~ msgstr "Файлів, що підлÑгають видаленню"
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "Генерувати карти нормалів"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ 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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
-#~ msgid "Address required."
-#~ msgstr "ÐдреÑа необхідна."
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "Графіка"
-#~ msgid "Create world"
-#~ msgstr "Створити Ñвіт"
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "ГравітаціÑ"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "Залишіть адреÑу незаповненою Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñерверу."
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP Модифікації"
-#~ msgid "Show Favorites"
-#~ msgstr "Показати Улюблені"
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
-#~ msgid "Show Public"
-#~ 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 ""
-#~ msgid "Advanced"
-#~ msgstr "Додатково"
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
-#~ msgid "Multiplayer"
-#~ msgstr "Мережева гра"
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr ""
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "Ðеможливо Ñтворити Ñвіт: Ім'Ñ Ð¼Ñ–Ñтить недопуÑтимі Ñимволи"
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "ПопередженнÑ: Помилкова конфігураціÑ. "
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
-#~ msgid "Configuration saved. "
-#~ msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾. "
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr ""
-#~ msgid "is required by:"
-#~ msgstr "необхідний длÑ:"
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "У грі"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "Мова"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "Ліва клавіша"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "Меню"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mіп-текÑтуруваннÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New 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 "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "ПаралакÑова оклюзіÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "Ім'Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "Права клавіша"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "Знімок екрану"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "Сервер / Гра"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "ÐдреÑа Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "ÐдреÑа Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "Ðазва Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "Порт Ñервера"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "ÐдреÑа ÑпиÑку публічних Ñерверів"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "Файл ÑпиÑку публічних Ñерверів"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "Згладжене оÑвітленнÑ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "КраÑтиÑÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "ШлÑÑ… до текÑтури"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "Трилінійна фільтраціÑ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+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 "Valleys C Flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "ГучніÑÑ‚ÑŒ звуку"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Waving Nodes"
+msgstr "Блоки, що коливаютьÑÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "ЛиÑÑ‚Ñ, що коливаєтьÑÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑтур..."
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "Скинути Ñвіт однокориÑтувацької гри"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "МаÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñ–Ð² меню: "
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "Вниз"
#~ msgid "Left click: Move all items, Right click: Move single item"
#~ msgstr ""
#~ "Ліва кнопка миші: ПереміÑтити уÑÑ– предмети, Права кнопка миші: "
#~ "ПереміÑтити один предмет"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "Ðнізотропна фільтраціÑ"
+#~ msgid "is required by:"
+#~ msgstr "необхідний длÑ:"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾. "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "ПопередженнÑ: Помилкова конфігураціÑ. "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "Ðеможливо Ñтворити Ñвіт: Ім'Ñ Ð¼Ñ–Ñтить недопуÑтимі Ñимволи"
+
+#~ msgid "Show Public"
+#~ msgstr "Показати Публічні"
+
+#~ msgid "Show Favorites"
+#~ msgstr "Показати Улюблені"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "Залишіть адреÑу незаповненою Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñерверу."
+
+#~ msgid "Create world"
+#~ msgstr "Створити Ñвіт"
+
+#~ msgid "Address required."
+#~ msgstr "ÐдреÑа необхідна."
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "Ðеможливо видалити Ñвіт: Ðічого не вибрано"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "Файлів, що підлÑгають видаленню"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "Ðеможливо Ñтворити Ñвіт: Ðе знайдено жодної гри"
-#~ msgid "Mip-Mapping"
-#~ msgstr "MIP-текÑтуруваннÑ"
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "Ðеможливо налаштувати Ñвіт: Ðічого не вибрано"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "Помилка при видаленні файлів Ñвіту"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "Вниз"
+#~ msgid "Finite Liquid"
+#~ msgstr "Кінцеві рідини"
+
+#~ msgid "Preload item visuals"
+#~ msgstr "Попереднє Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½ÑŒ"
+
+#, fuzzy
+#~ msgid "Password"
+#~ msgstr "Старий Пароль"
+
+#, fuzzy
+#~ msgid "Game Name"
+#~ msgstr "Гра"
+
+#, fuzzy
+#~ msgid "If enabled, "
+#~ msgstr "Увімкнено"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "Вимкнути багатокориÑтувацьку гру"
+
+#~ msgid "No!!!"
+#~ msgstr "ÐÑ–!!!"
+
+#, fuzzy
+#~ msgid "Generate Normalmaps"
+#~ msgstr "Генерувати карти нормалей"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "СпиÑок публічних Ñерверів"
+
+#~ msgid "No of course not!"
+#~ msgstr "ÐÑ–, звіÑно ні!"
diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po
index bda9dc6e7..62ebcd217 100644
--- a/po/zh_CN/minetest.po
+++ b/po/zh_CN/minetest.po
@@ -2,673 +2,774 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-17 07:23+0200\n"
-"PO-Revision-Date: 2015-04-19 02:00+0800\n"
-"Last-Translator: Ang Weijie <fishyWET@hotmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-05-05 19:09+0000\n"
+"Last-Translator: Claybiokiller <clay0305@hotmail.com>\n"
+"Language-Team: Chinese (China) "
+"<https://hosted.weblate.org/projects/minetest/minetest/zh_CN/>\n"
"Language: zh_CN\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 1.7-dev\n"
+"X-Generator: Weblate 2.7-dev\n"
-#: builtin/fstk/ui.lua:82
+#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
-msgstr ""
+msgstr "Lua 脚本å‘生错误,如一个 mod:"
-#: builtin/fstk/ui.lua:84
+#: builtin/fstk/ui.lua
msgid "An error occured:"
-msgstr ""
+msgstr "å‘生了一个错误:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "主èœå•"
-#: builtin/fstk/ui.lua:89 builtin/mainmenu/store.lua:165
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "确定"
-#: builtin/mainmenu/common.lua:239 src/game.cpp:1891
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "é‡æ–°è¿žæŽ¥"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "æœåŠ¡å™¨å·²è¦æ±‚é‡æ–°è¿žæŽ¥ï¼š"
+
+#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "载入中..."
-#: builtin/mainmenu/common.lua:240
+#: 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 ""
+msgstr "请å°è¯•é‡æ–°å¯ç”¨å…¬å…±æœåŠ¡å™¨åˆ—表并检查您的网络连接。"
-#: builtin/mainmenu/dlg_config_world.lua:29
-msgid "World:"
-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_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "å–消"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "ä¾èµ–:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "ç¦ç”¨MOD包"
-#: builtin/mainmenu/dlg_config_world.lua:33
-#: builtin/mainmenu/dlg_config_world.lua:35
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "å¯ç”¨MOD包"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "全部å¯ç”¨"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr "无法å¯ç”¨ MOD \"$1\":å«æœ‰ä¸æ”¯æŒçš„字符。å…许的字符为 [a-z0-9_]。"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "éšè—游æˆ"
-#: builtin/mainmenu/dlg_config_world.lua:39
-#: builtin/mainmenu/dlg_config_world.lua:41
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide mp content"
msgstr "éšè—MOD包内容"
-#: builtin/mainmenu/dlg_config_world.lua:49
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "MOD:"
-
-#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
-msgid "Depends:"
-msgstr "ä¾èµ–于:"
+msgstr "Mod:"
-#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:191
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "ä¿å­˜"
-#: builtin/mainmenu/dlg_config_world.lua:55
-#: builtin/mainmenu/dlg_create_world.lua:64
-#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199
-#: src/keycode.cpp:223
-msgid "Cancel"
-msgstr "å–消"
-
-#: builtin/mainmenu/dlg_config_world.lua:71
-msgid "Enable MP"
-msgstr "å¯ç”¨MOD包"
-
-#: builtin/mainmenu/dlg_config_world.lua:73
-msgid "Disable MP"
-msgstr "ç¦ç”¨MOD包"
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "世界:"
-#: builtin/mainmenu/dlg_config_world.lua:77
-#: builtin/mainmenu/dlg_config_world.lua:79
+#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "å¯ç”¨"
-#: builtin/mainmenu/dlg_config_world.lua:85
-msgid "Enable all"
-msgstr "全部å¯ç”¨"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "å为 \"$1\" 的世界已ç»å­˜åœ¨"
-#: builtin/mainmenu/dlg_create_world.lua:50
-msgid "World name"
-msgstr "世界å称"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "创建"
-#: builtin/mainmenu/dlg_create_world.lua:53
-msgid "Seed"
-msgstr "ç§å­"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "从 minetest.net 下载一个å­æ¸¸æˆï¼Œä¾‹å¦‚ minetest_game"
-#: builtin/mainmenu/dlg_create_world.lua:56
-msgid "Mapgen"
-msgstr "地图生æˆå™¨"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "从 minetest.net 下载一个"
-#: builtin/mainmenu/dlg_create_world.lua:59
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "游æˆ"
-#: builtin/mainmenu/dlg_create_world.lua:63
-msgid "Create"
-msgstr "创建"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "地图生æˆå™¨"
-#: builtin/mainmenu/dlg_create_world.lua:68
-msgid "You have no subgames installed."
-msgstr "你没有安装任何游æˆ"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "未指定世界å或未选择游æˆ"
-#: builtin/mainmenu/dlg_create_world.lua:69
-msgid "Download one from minetest.net"
-msgstr "从minetest.net下载一个"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "ç§å­"
-#: builtin/mainmenu/dlg_create_world.lua:72
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
-msgstr "警告: 最å°åŒ–å¼€å‘测试为开å‘人员所使用。"
+msgstr "警告: 最å°åŒ–å¼€å‘测试是为开å‘者æ供。"
-#: builtin/mainmenu/dlg_create_world.lua:73
-msgid "Download a subgame, such as minetest_game, from minetest.net"
-msgstr "从minetest.net下载一个游æˆï¼Œä¾‹å¦‚:minetest_game"
-
-#: builtin/mainmenu/dlg_create_world.lua:99
-msgid "A world named \"$1\" already exists"
-msgstr "å为 \"$1\" 的世界已ç»å­˜åœ¨"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "世界å称"
-#: builtin/mainmenu/dlg_create_world.lua:116
-msgid "No worldname given or no game selected"
-msgstr "未给定世界å或未选择游æˆ"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "你没有安装任何å­æ¸¸æˆã€‚"
-#: builtin/mainmenu/dlg_delete_mod.lua:26
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "你确认è¦åˆ é™¤\"$1\"?"
-
-#: builtin/mainmenu/dlg_delete_mod.lua:27
-#: builtin/mainmenu/dlg_delete_world.lua:25
-#: builtin/mainmenu/tab_settings.lua:100
-msgid "Yes"
-msgstr "是"
+msgstr "你确认è¦åˆ é™¤â€œ$1â€ï¼Ÿ"
-#: builtin/mainmenu/dlg_delete_mod.lua:28
-msgid "No of course not!"
-msgstr "当然ä¸ï¼"
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "删除"
-#: builtin/mainmenu/dlg_delete_mod.lua:41
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: failed to delete \"$1\""
-msgstr "MOD管ç†å™¨ï¼šæ— æ³•åˆ é™¤â€œ$1“"
+msgstr "MOD管ç†å™¨ï¼šæ— æ³•åˆ é™¤â€œ$1â€"
-#: builtin/mainmenu/dlg_delete_mod.lua:45
+#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Modmgr: invalid modpath \"$1\""
msgstr "MOD管ç†å™¨ï¼šMOD“$1“路径éžæ³•"
-#: builtin/mainmenu/dlg_delete_world.lua:24
+#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "删除世界“$1�"
+msgstr "删除世界“$1â€ï¼Ÿ"
-#: builtin/mainmenu/dlg_delete_world.lua:26
-msgid "No"
-msgstr "å¦"
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "接å—"
-#: builtin/mainmenu/dlg_rename_modpack.lua:26
+#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
msgstr "é‡å‘½åMOD包:"
-#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:227
-msgid "Accept"
-msgstr "接å—"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "\"$1\" ä¸æ˜¯åˆæ³•çš„ flag."
-#: builtin/mainmenu/modmgr.lua:344
-msgid "Install Mod: file: \"$1\""
-msgstr "安装MOD:文件:â€$1“"
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(没有关于此设置的信æ¯)"
-#: builtin/mainmenu/modmgr.lua:345
-#, fuzzy
+#: 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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr "æ ¼å¼: (X, Y, Z)."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"æ ¼å¼: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "游æˆ"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mod"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "å¯é€‰é™„加一逗å·èµ·å§‹çš„孔隙度å‚数。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "请输入 flag, 多个 flag 以åŠè§’逗å·åˆ†éš”."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "请输入一个整数类型."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "请输入一个åˆæ³•çš„æ•°å­—."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "å¯è®¾ç½®çš„ flag: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "回å¤åˆå§‹è®¾ç½®"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "选择路径"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "显示高级设置"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "这个值必须大于 $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "这个值必须å°äºŽ $1."
+
+#: builtin/mainmenu/modmgr.lua
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""
"\n"
-"安装MOD:ä¸æ”¯æŒçš„文件类型“$1“"
+"安装MOD:ä¸æ”¯æŒçš„文件类型“$1“或文件æŸå"
-#: builtin/mainmenu/modmgr.lua:365
+#: builtin/mainmenu/modmgr.lua
msgid "Failed to install $1 to $2"
msgstr "无法安装$1到$2"
-#: builtin/mainmenu/modmgr.lua:368
-msgid "Install Mod: unable to find suitable foldername for modpack $1"
-msgstr "安装MOD:找ä¸åˆ°MOD包$1çš„åˆé€‚文件夹å"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "安装MOD:文件:â€$1“"
-#: builtin/mainmenu/modmgr.lua:388
+#: builtin/mainmenu/modmgr.lua
msgid "Install Mod: unable to find real modname for: $1"
msgstr "安装MOD:找ä¸åˆ°$1的真正MODå"
-#: builtin/mainmenu/store.lua:88
-msgid "Unsorted"
-msgstr "未分类"
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr "安装MOD:找ä¸åˆ°MOD包$1çš„åˆé€‚文件夹å"
-#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
-msgid "Search"
-msgstr "æœç´¢"
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "关闭商店"
-#: builtin/mainmenu/store.lua:126
-#, fuzzy
+#: builtin/mainmenu/store.lua
msgid "Downloading $1, please wait..."
-msgstr "请ç¨å€™..."
+msgstr "正在下载 $1, 请ç¨å€™..."
-#: builtin/mainmenu/store.lua:160
-msgid "Successfully installed:"
-msgstr "æˆåŠŸçš„安装:"
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "安装"
-#: builtin/mainmenu/store.lua:162
-#, fuzzy
-msgid "Shortname:"
-msgstr "短å称"
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "第$1页,共$2页"
-#: builtin/mainmenu/store.lua:472
+#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "评级"
-#: builtin/mainmenu/store.lua:497
-msgid "re-Install"
-msgstr "é‡æ–°å®‰è£…"
-
-#: builtin/mainmenu/store.lua:499
-msgid "Install"
-msgstr "安装"
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "æœç´¢"
-#: builtin/mainmenu/store.lua:518
-msgid "Close store"
-msgstr "关闭商店"
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "短å称:"
-#: builtin/mainmenu/store.lua:526
-msgid "Page $1 of $2"
-msgstr "第$1页,共$2页"
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "æˆåŠŸçš„安装:"
-#: builtin/mainmenu/tab_credits.lua:22
-msgid "Credits"
-msgstr "归功"
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "未分类"
-#: builtin/mainmenu/tab_credits.lua:31
-msgid "Core Developers"
-msgstr "内部开å‘人员"
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "é‡æ–°å®‰è£…"
-#: builtin/mainmenu/tab_credits.lua:47
+#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
msgstr "积æžè´¡çŒ®è€…"
-#: builtin/mainmenu/tab_credits.lua:54
-#, fuzzy
-msgid "Previous Core Developers"
-msgstr "内部开å‘人员"
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "核心开å‘者"
-#: builtin/mainmenu/tab_credits.lua:59
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "贡献者"
+
+#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "å‰è´¡çŒ®è€…"
-#: builtin/mainmenu/tab_mods.lua:30
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "å‰æ ¸å¿ƒå¼€å‘者"
+
+#: builtin/mainmenu/tab_mods.lua
msgid "Installed Mods:"
msgstr "已安装的MOD:"
-#: builtin/mainmenu/tab_mods.lua:39
-msgid "Online mod repository"
-msgstr "网上MOD库"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "MOD资料:"
-#: builtin/mainmenu/tab_mods.lua:78
+#: builtin/mainmenu/tab_mods.lua
msgid "No mod description available"
msgstr "æ— MOD资料å¯å¾—"
-#: builtin/mainmenu/tab_mods.lua:82
-msgid "Mod information:"
-msgstr "MOD资料:"
-
-#: builtin/mainmenu/tab_mods.lua:93
+#: builtin/mainmenu/tab_mods.lua
msgid "Rename"
msgstr "改å"
-#: builtin/mainmenu/tab_mods.lua:95
-msgid "Uninstall selected modpack"
-msgstr "删除选中的MOD包"
-
-#: builtin/mainmenu/tab_mods.lua:106
-msgid "Uninstall selected mod"
-msgstr "删除选中的MOD"
-
-#: builtin/mainmenu/tab_mods.lua:121
+#: builtin/mainmenu/tab_mods.lua
msgid "Select Mod File:"
msgstr "选择MOD文件:"
-#: builtin/mainmenu/tab_mods.lua:165
-msgid "Mods"
-msgstr "MODS"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "删除选中的MOD"
-#: builtin/mainmenu/tab_multiplayer.lua:23
-#, fuzzy
-msgid "Address / Port :"
-msgstr "地å€/端å£"
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "删除选中的MOD包"
-#: builtin/mainmenu/tab_multiplayer.lua:24
+#: builtin/mainmenu/tab_multiplayer.lua
#, fuzzy
-msgid "Name / Password :"
-msgstr "åå­—/密ç "
-
-#: builtin/mainmenu/tab_multiplayer.lua:29
-#: builtin/mainmenu/tab_simple_main.lua:30
-msgid "Public Serverlist"
-msgstr "公共æœåŠ¡å™¨åˆ—表"
+msgid "Address / Port"
+msgstr "地å€/端å£:"
-#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
-#: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229
-msgid "Delete"
-msgstr "删除"
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "客户端"
-#: builtin/mainmenu/tab_multiplayer.lua:38
-#: builtin/mainmenu/tab_simple_main.lua:34
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "连接"
-#: builtin/mainmenu/tab_multiplayer.lua:62
-#: builtin/mainmenu/tab_simple_main.lua:45
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
msgstr "创造模å¼"
-#: builtin/mainmenu/tab_multiplayer.lua:63
-#: builtin/mainmenu/tab_simple_main.lua:46
-#, fuzzy
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "å¯ç”¨"
+msgstr "å¯ç”¨ä¼¤å®³"
-#: builtin/mainmenu/tab_multiplayer.lua:64
-#: builtin/mainmenu/tab_simple_main.lua:47
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
-msgid "PvP enabled"
-msgstr "å¯ç”¨"
+msgid "Del. Favorite"
+msgstr "最爱的æœåŠ¡å™¨ï¼š"
-#: builtin/mainmenu/tab_multiplayer.lua:257
-msgid "Client"
-msgstr "客户端"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Favorite"
+msgstr "最爱的æœåŠ¡å™¨ï¼š"
-#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97
-msgid "New"
-msgstr "新建"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "用户å/密ç :"
-#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98
-msgid "Configure"
-msgstr "é…ç½®"
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "å¯ç”¨ PvP"
-#: builtin/mainmenu/tab_server.lua:29
-msgid "Start Game"
-msgstr "å¯åŠ¨æ¸¸æˆ"
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "绑定地å€"
-#: builtin/mainmenu/tab_server.lua:30
-#: builtin/mainmenu/tab_singleplayer.lua:100
-msgid "Select World:"
-msgstr "选择世界:"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "é…ç½®"
-#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
-#: builtin/mainmenu/tab_singleplayer.lua:101
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "创造模å¼"
-#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
-#: builtin/mainmenu/tab_singleplayer.lua:103
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "å¼€å¯ä¼¤å®³é£Žé™©"
-#: builtin/mainmenu/tab_server.lua:35
-msgid "Public"
-msgstr "公共æœåŠ¡å™¨"
-
-#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
+#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "åå­—/密ç "
-#: builtin/mainmenu/tab_server.lua:45
-msgid "Bind Address"
-msgstr "绑定地å€"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "新建"
-#: builtin/mainmenu/tab_server.lua:47
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "未创建或选择世界!"
+
+#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "端å£"
-#: builtin/mainmenu/tab_server.lua:51
-msgid "Server Port"
-msgstr "æœåŠ¡å™¨ç«¯å£"
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "公共æœåŠ¡å™¨"
-#: builtin/mainmenu/tab_server.lua:138
-#: builtin/mainmenu/tab_singleplayer.lua:165
-#, fuzzy
-msgid "No world created or selected!"
-msgstr "未给定世界å或未选择游æˆ"
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "选择世界:"
-#: builtin/mainmenu/tab_server.lua:191
+#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "æœåŠ¡å™¨"
-#: builtin/mainmenu/tab_settings.lua:21
-#, fuzzy
-msgid "Opaque Leaves"
-msgstr "ä¸é€æ˜Žçš„æ°´"
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "æœåŠ¡å™¨ç«¯å£"
-#: builtin/mainmenu/tab_settings.lua:22
-#, fuzzy
-msgid "Simple Leaves"
-msgstr "摇动的å¶å­"
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "å¯åŠ¨æ¸¸æˆ"
-#: builtin/mainmenu/tab_settings.lua:23
-#, fuzzy
-msgid "Fancy Leaves"
-msgstr "花å¼æ ‘"
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "两å€"
-#: builtin/mainmenu/tab_settings.lua:32
-msgid "No Filter"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D 云彩"
-#: builtin/mainmenu/tab_settings.lua:33
-#, fuzzy
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "å››å€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "å…«å€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced 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 "Bilinear Filter"
msgstr "åŒçº¿æ€§è¿‡æ»¤"
-#: builtin/mainmenu/tab_settings.lua:34
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Trilinear Filter"
-msgstr "三线性过滤"
+msgid "Bump Mapping"
+msgstr "凹凸贴图"
-#: builtin/mainmenu/tab_settings.lua:43
-msgid "No Mipmap"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Change keys"
+msgstr "更改键ä½è®¾ç½®"
-#: builtin/mainmenu/tab_settings.lua:44
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "连接的玻璃"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "åŽä¸½çš„æ ‘å¶"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mip 贴图"
-#: builtin/mainmenu/tab_settings.lua:45
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mip 贴图 + Aniso 过滤"
-#: builtin/mainmenu/tab_settings.lua:98
-msgid "Are you sure to reset your singleplayer world?"
-msgstr "你确定è¦é‡ç½®æ‚¨çš„å•äººä¸–ç•Œå—?"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "å¦"
-#: builtin/mainmenu/tab_settings.lua:102
-msgid "No!!!"
-msgstr "ä¸!!!"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "无过滤"
-#: builtin/mainmenu/tab_settings.lua:202
-msgid "Smooth Lighting"
-msgstr "平滑光照"
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "无 Mip 贴图"
-#: builtin/mainmenu/tab_settings.lua:204
-msgid "Enable Particles"
-msgstr "å¯ç”¨ç²’å­æ•ˆæžœ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "节点高亮"
-#: builtin/mainmenu/tab_settings.lua:206
-msgid "3D Clouds"
-msgstr "三维云彩"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "节点高亮"
-#: builtin/mainmenu/tab_settings.lua:208
-msgid "Opaque Water"
-msgstr "ä¸é€æ˜Žçš„æ°´"
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "æ— "
-#: builtin/mainmenu/tab_settings.lua:210
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
-msgid "Connected Glass"
-msgstr "连接的玻璃"
+msgid "Normal Mapping"
+msgstr "一般地图采样"
-#: builtin/mainmenu/tab_settings.lua:212
-msgid "Node Highlighting"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "ä¸é€æ˜Žçš„æ ‘å¶"
-#: builtin/mainmenu/tab_settings.lua:217
-msgid "Texturing:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "ä¸é€æ˜Žçš„æ°´"
-#: builtin/mainmenu/tab_settings.lua:222
-msgid "Rendering:"
-msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "视差贴图"
-#: builtin/mainmenu/tab_settings.lua:226
-msgid "Restart minetest for driver change to take effect"
-msgstr "é‡å¯minetest让驱动å˜åŒ–生效"
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Particles"
+msgstr "å¯ç”¨ç²’å­"
-#: builtin/mainmenu/tab_settings.lua:228
+#: 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:233
-msgid "Change keys"
-msgstr "改å˜é”®ä½è®¾ç½®"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "简å•çš„æ ‘å¶"
-#: builtin/mainmenu/tab_settings.lua:236
-#, fuzzy
-msgid "Reset singleplayer world"
-msgstr "é‡ç½®å•äººæ¸¸æˆ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "平滑光照"
-#: builtin/mainmenu/tab_settings.lua:240
-msgid "GUI scale factor"
-msgstr "GUI缩放因å­"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "纹ç†:"
-#: builtin/mainmenu/tab_settings.lua:244
-msgid "Scaling factor applied to menu elements: "
-msgstr "èœå•å…ƒç´ åº”用缩放因å­"
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "å¯ç”¨ç€è‰²å™¨éœ€è¦ä½¿ç”¨OpenGL驱动。"
-#: builtin/mainmenu/tab_settings.lua:250
-msgid "Touch free target"
-msgstr "自由触摸目标"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "色调映射"
-#: builtin/mainmenu/tab_settings.lua:256
+#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold (px)"
msgstr "触控阈值(åƒç´ ï¼‰"
-#: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277
-#, fuzzy
-msgid "Bumpmapping"
-msgstr "贴图处ç†"
-
-#: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278
-msgid "Generate Normalmaps"
-msgstr "产生法线贴图"
-
-#: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279
-msgid "Parallax Occlusion"
-msgstr "视差贴图"
-
-#: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280
-msgid "Waving Water"
-msgstr "摇动的水"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "三线性过滤"
-#: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "摇动的å¶å­"
+msgstr "飘动的树å¶"
-#: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "摇动的æ¤ç‰©"
-
-#: builtin/mainmenu/tab_settings.lua:308
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "å¯ç”¨ç€è‰²å™¨éœ€è¦ä½¿ç”¨OpenGL驱动。"
+msgstr "摇摆的æ¤ç‰©"
-#: builtin/mainmenu/tab_settings.lua:430
-msgid "Settings"
-msgstr "设置"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "æµåŠ¨çš„æ°´é¢"
-#: builtin/mainmenu/tab_simple_main.lua:82
-#, fuzzy
-msgid "Start Singleplayer"
-msgstr "å•äººæ¸¸æˆ"
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "是"
-#: builtin/mainmenu/tab_simple_main.lua:83
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "é…ç½®MOD"
+msgstr "é…ç½® MOD"
-#: builtin/mainmenu/tab_simple_main.lua:201
-#, fuzzy
+#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "主èœå•"
+msgstr "主è¦"
-#: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "å•äººæ¸¸æˆ"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "开始游æˆ"
-#: builtin/mainmenu/tab_singleplayer.lua:246
+#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "å•äººæ¸¸æˆ"
-#: builtin/mainmenu/tab_texturepacks.lua:49
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "æ— ä¿¡æ¯å¯ç”¨"
+
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Select texture pack:"
msgstr "选择æ质包:"
-#: builtin/mainmenu/tab_texturepacks.lua:69
-msgid "No information available"
-msgstr "无资料å¯å¾—"
-
-#: builtin/mainmenu/tab_texturepacks.lua:114
-#, fuzzy
+#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "æ质包"
-#: src/client.cpp:1721
-#, fuzzy
-msgid "Loading textures..."
-msgstr "载入中..."
-
-#: src/client.cpp:1736
-#, fuzzy
-msgid "Rebuilding shaders..."
-msgstr "正在解æžåœ°å€..."
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "连接超时。"
-#: src/client.cpp:1743
-msgid "Initializing nodes..."
-msgstr ""
+#: src/client.cpp
+msgid "Done!"
+msgstr "完æˆ!"
-#: src/client.cpp:1760
+#: src/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "åˆå§‹åŒ–节点中"
-#: src/client.cpp:1768
-msgid "Item textures..."
-msgstr "物å“æè´¨..."
-
-#: src/client.cpp:1793
-msgid "Done!"
-msgstr ""
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "åˆå§‹åŒ–节点..."
-#: src/client/clientlauncher.cpp:185
-msgid "Main Menu"
-msgstr "主èœå•"
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "载入æè´¨..."
-#: src/client/clientlauncher.cpp:223
-msgid "Player name too long."
-msgstr "玩家的å字太长了"
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "é‡å»ºæ¸²æŸ“器..."
-#: src/client/clientlauncher.cpp:261
+#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "连接出错(超时?)"
-#: src/client/clientlauncher.cpp:425
-msgid "No world selected and no address provided. Nothing to do."
-msgstr "没有选择世界或æ供地å€ã€‚未执行æ“作。"
-
-#: src/client/clientlauncher.cpp:432
-msgid "Provided world path doesn't exist: "
-msgstr "æ供世界地å€ä¸å­˜åœ¨"
-
-#: src/client/clientlauncher.cpp:441
+#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr "无法找到或载入游æˆæ¨¡å¼"
-#: src/client/clientlauncher.cpp:459
+#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr "éžæ³•æ¸¸æˆæ¨¡å¼è§„格。"
-#: src/fontengine.cpp:70 src/fontengine.cpp:226
-msgid "needs_fallback_font"
-msgstr "yes"
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "主èœå•"
-#: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065
-msgid "Proceed"
-msgstr "继续"
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "没有选择世界或æ供地å€ã€‚未执行æ“作。"
-#: src/game.cpp:1072
-msgid "You died."
-msgstr "你死了。"
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "玩家å称太长了。"
-#: src/game.cpp:1073
-msgid "Respawn"
-msgstr "é‡ç”Ÿ"
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "æ供的世界路径ä¸å­˜åœ¨: "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
-#: src/game.cpp:1092
+#: src/game.cpp
msgid ""
-"Default Controls:\n"
-"No menu visible:\n"
-"- single tap: button activate\n"
-"- double tap: place/use\n"
-"- slide finger: look around\n"
-"Menu/Inventory visible:\n"
-"- double tap (outside):\n"
-" -->close\n"
-"- touch stack, touch slot:\n"
-" --> move stack\n"
-"- touch&drag, tap 2nd finger\n"
-" --> place single item to slot\n"
+"\n"
+"Check debug.txt for details."
msgstr ""
+"\n"
+"查看 debug.txt 以获得详细信æ¯ã€‚"
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "更改键ä½è®¾ç½®"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "更改密ç "
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "正在连接æœåŠ¡å™¨..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "继续"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "正在建立客户端..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "建立æœåŠ¡å™¨...."
-#: src/game.cpp:1106
+#: src/game.cpp
msgid ""
"Default Controls:\n"
"- WASD: move\n"
@@ -694,580 +795,3434 @@ msgstr ""
"鼠标滚轮: 选择物å“\n"
"T: èŠå¤©\n"
-#: src/game.cpp:1125
-msgid "Continue"
-msgstr "继续"
-
-#: src/game.cpp:1129
-msgid "Change Password"
-msgstr "更改密ç "
-
-#: src/game.cpp:1134
-msgid "Sound Volume"
-msgstr "音é‡"
-
-#: src/game.cpp:1136
-#, fuzzy
-msgid "Change Keys"
-msgstr "改å˜é”®ä½è®¾ç½®"
-
-#: src/game.cpp:1139
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"默认控制:\n"
+"èœå•ä¸å¯è§æ—¶:\n"
+"- å•å‡»: 激活按钮\n"
+"- åŒå‡»: 放置/使用\n"
+"- 滑动手指: 改å˜è§†è§’\n"
+"èœå•/物å“æ å¯è§æ—¶:\n"
+"- åŒå‡» (ç•Œé¢åŒºåŸŸå¤–):\n"
+" --> 关闭\n"
+"- 点击物å“, 然åŽç‚¹å‡»æ ä½:\n"
+" --> 移动一组物å“\n"
+"- 点击物å“并拖动, 然åŽå¦ä¸€æ‰‹æŒ‡ç‚¹å‡»\n"
+" --> 移动一个物å“\n"
+
+#: src/game.cpp
msgid "Exit to Menu"
msgstr "退出至èœå•"
-#: src/game.cpp:1141
+#: src/game.cpp
msgid "Exit to OS"
msgstr "退出至æ“作系统"
-#: src/game.cpp:1841
-#, fuzzy
-msgid "Shutting down..."
-msgstr "关闭中......"
-
-#: src/game.cpp:1948
-#, fuzzy
-msgid "Creating server..."
-msgstr "正在建立æœåŠ¡å™¨...."
-
-#: src/game.cpp:1984
-msgid "Creating client..."
-msgstr "正在建立客户端..."
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "物å“定义..."
-#: src/game.cpp:2159
-msgid "Resolving address..."
-msgstr "正在解æžåœ°å€..."
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
-#: src/game.cpp:2261
-msgid "Connecting to server..."
-msgstr "正在连接æœåŠ¡å™¨..."
+#: src/game.cpp
+msgid "Media..."
+msgstr "媒体..."
-#: src/game.cpp:2317
-msgid "Item definitions..."
-msgstr "物å“定义..."
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
-#: src/game.cpp:2322
+#: src/game.cpp
msgid "Node definitions..."
msgstr "æ–¹å—定义..."
-#: src/game.cpp:2329
-msgid "Media..."
-msgstr "媒体..."
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "正在解æžåœ°å€..."
-#: src/game.cpp:2334
-msgid "KiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Respawn"
+msgstr "é‡ç”Ÿ"
-#: src/game.cpp:2338
-msgid "MiB/s"
-msgstr ""
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "关闭..."
-#: src/game.cpp:4363
-msgid ""
-"\n"
-"Check debug.txt for details."
-msgstr ""
-"\n"
-"查看 debug.txt 以获得详细信æ¯ã€‚"
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "音é‡"
-#: src/guiFormSpecMenu.cpp:2855
-msgid "Enter "
-msgstr "输入"
+#: src/game.cpp
+msgid "You died."
+msgstr "你死了。"
-#: src/guiFormSpecMenu.cpp:2875
+#: src/game.cpp src/guiFormSpecMenu.cpp
msgid "ok"
msgstr "确定"
-#: src/guiKeyChangeMenu.cpp:125
-msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
-msgstr "é”®ä½é…置。(如果这个èœå•è¢«å¼„乱,从minetest.conf中删掉点东西)"
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "输入 "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "继续"
-#: src/guiKeyChangeMenu.cpp:165
+#: src/guiKeyChangeMenu.cpp
msgid "\"Use\" = climb down"
msgstr "“使用†= å‘下爬"
-#: src/guiKeyChangeMenu.cpp:180
-msgid "Double tap \"jump\" to toggle fly"
-msgstr "连按两次“跳â€åˆ‡æ¢é£žè¡Œæ¨¡å¼"
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "å‘åŽ"
-#: src/guiKeyChangeMenu.cpp:295
-msgid "Key already in use"
-msgstr "按键已被å ç”¨"
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "èŠå¤©"
-#: src/guiKeyChangeMenu.cpp:373
-msgid "press key"
-msgstr "按键"
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "命令"
-#: src/guiKeyChangeMenu.cpp:399
-msgid "Forward"
-msgstr "å‘å‰"
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "控制å°"
-#: src/guiKeyChangeMenu.cpp:400
-msgid "Backward"
-msgstr "å‘åŽ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "连按两次“跳â€åˆ‡æ¢é£žè¡Œæ¨¡å¼"
-#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228
-msgid "Left"
-msgstr "å‘å·¦"
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "丢出"
-#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
-msgid "Right"
-msgstr "å‘å³"
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "å‘å‰"
-#: src/guiKeyChangeMenu.cpp:403
-msgid "Use"
-msgstr "使用"
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "物å“æ "
-#: src/guiKeyChangeMenu.cpp:404
+#: src/guiKeyChangeMenu.cpp
msgid "Jump"
msgstr "è·³"
-#: src/guiKeyChangeMenu.cpp:405
-msgid "Sneak"
-msgstr "潜行"
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "按键已被å ç”¨"
-#: src/guiKeyChangeMenu.cpp:406
-msgid "Drop"
-msgstr "丢出"
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "é”®ä½é…置。(如果这个èœå•è¢«å¼„乱,从 minetest.conf 中删掉点东西)"
-#: src/guiKeyChangeMenu.cpp:407
-msgid "Inventory"
-msgstr "物å“æ "
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "å‘å·¦"
-#: src/guiKeyChangeMenu.cpp:408
-msgid "Chat"
-msgstr "èŠå¤©"
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "打å°æ ˆ"
-#: src/guiKeyChangeMenu.cpp:409
-msgid "Command"
-msgstr "命令"
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "选择范围"
-#: src/guiKeyChangeMenu.cpp:410
-msgid "Console"
-msgstr "控制å°"
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "å‘å³"
-#: src/guiKeyChangeMenu.cpp:411
-msgid "Toggle fly"
-msgstr "切æ¢é£žè¡Œæ¨¡å¼"
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "潜行"
-#: src/guiKeyChangeMenu.cpp:412
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "切æ¢ç”µå½±æ¨¡å¼"
+
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle fast"
msgstr "切æ¢å¿«é€Ÿç§»åŠ¨æ¨¡å¼"
-#: src/guiKeyChangeMenu.cpp:413
-#, fuzzy
-msgid "Toggle Cinematic"
-msgstr "切æ¢å¿«é€Ÿç§»åŠ¨æ¨¡å¼"
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "切æ¢é£žè¡Œæ¨¡å¼"
-#: src/guiKeyChangeMenu.cpp:414
+#: src/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "切æ¢ç©¿å¢™æ¨¡å¼"
-#: src/guiKeyChangeMenu.cpp:415
-msgid "Range select"
-msgstr "选择范围"
-
-#: src/guiKeyChangeMenu.cpp:416
-msgid "Print stacks"
-msgstr "打å°æ ˆ"
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "使用"
-#: src/guiPasswordChange.cpp:108
-msgid "Old Password"
-msgstr "旧密ç "
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "按键"
-#: src/guiPasswordChange.cpp:124
-msgid "New Password"
-msgstr "新密ç "
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "更改"
-#: src/guiPasswordChange.cpp:139
+#: src/guiPasswordChange.cpp
msgid "Confirm Password"
msgstr "确认密ç "
-#: src/guiPasswordChange.cpp:155
-msgid "Change"
-msgstr "更改"
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "新密ç "
-#: src/guiPasswordChange.cpp:164
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "旧密ç "
+
+#: src/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "密ç ä¸åŒ¹é…ï¼"
-#: src/guiVolumeChange.cpp:105
-msgid "Sound Volume: "
-msgstr "音é‡ï¼š "
-
-#: src/guiVolumeChange.cpp:119
+#: src/guiVolumeChange.cpp
msgid "Exit"
msgstr "退出"
-#: src/keycode.cpp:223
-msgid "Left Button"
-msgstr "左键"
-
-#: src/keycode.cpp:223
-msgid "Middle Button"
-msgstr "中键"
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "音é‡ï¼š "
-#: src/keycode.cpp:223
-msgid "Right Button"
-msgstr "å³é”®"
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "应用"
-#: src/keycode.cpp:223
-msgid "X Button 1"
-msgstr "Xé”®1"
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attné”®"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
msgid "Back"
msgstr "退格"
-#: src/keycode.cpp:224
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "大写é”定键"
+
+#: src/keycode.cpp
msgid "Clear"
msgstr "Clearé”®"
-#: src/keycode.cpp:224
-msgid "Return"
-msgstr "回车"
-
-#: src/keycode.cpp:224
-msgid "Tab"
-msgstr "Tabé”®"
-
-#: src/keycode.cpp:224
-msgid "X Button 2"
-msgstr "Xé”®2"
-
-#: src/keycode.cpp:225
-msgid "Capital"
-msgstr "大写"
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "逗å·"
-#: src/keycode.cpp:225
+#: src/keycode.cpp
msgid "Control"
msgstr "Ctrlé”®"
-#: src/keycode.cpp:225
-msgid "Kana"
-msgstr "å‡å"
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "转æ¢"
-#: src/keycode.cpp:225
-msgid "Menu"
-msgstr "èœå•"
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSelé”®"
-#: src/keycode.cpp:225
-msgid "Pause"
-msgstr "æš‚åœ"
+#: src/keycode.cpp
+msgid "Down"
+msgstr "å‘下"
-#: src/keycode.cpp:225
-msgid "Shift"
-msgstr "Shifté”®"
+#: src/keycode.cpp
+msgid "End"
+msgstr "Endé”®"
-#: src/keycode.cpp:226
-msgid "Convert"
-msgstr "转æ¢"
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "Erase OEFé”®"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
msgid "Escape"
-msgstr "Escapeé”®"
+msgstr "Escé”®"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSelé”®"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "执行"
+
+#: src/keycode.cpp
msgid "Final"
msgstr "Finalé”®"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Help"
+msgstr "帮助"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Homeé”®"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "Inserté”®"
+
+#: src/keycode.cpp
msgid "Junja"
msgstr "Junjaé”®"
-#: src/keycode.cpp:226
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "Kanaé”®"
+
+#: src/keycode.cpp
msgid "Kanji"
msgstr "Kanjié”®"
-#: src/keycode.cpp:226
-msgid "Nonconvert"
-msgstr "æ— å˜æ¢"
-
-#: src/keycode.cpp:227
-msgid "End"
-msgstr "Endé”®"
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "左键"
-#: src/keycode.cpp:227
-msgid "Home"
-msgstr "Homeé”®"
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "å·¦Controlé”®"
-#: src/keycode.cpp:227
-msgid "Mode Change"
-msgstr "改å˜æ¨¡å¼"
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "å·¦èœå•é”®"
-#: src/keycode.cpp:227
-msgid "Next"
-msgstr "下一个"
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "å·¦Shifté”®"
-#: src/keycode.cpp:227
-msgid "Prior"
-msgstr "Prioré”®"
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "å·¦Windowsé”®"
-#: src/keycode.cpp:227
-msgid "Space"
-msgstr "空格"
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "èœå•"
-#: src/keycode.cpp:228
-msgid "Down"
-msgstr "å‘下"
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "中键"
-#: src/keycode.cpp:228
-msgid "Execute"
-msgstr "执行"
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "å‡å·"
-#: src/keycode.cpp:228
-msgid "Print"
-msgstr "打å°"
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "更改模å¼"
-#: src/keycode.cpp:228
-msgid "Select"
-msgstr "选择"
+#: src/keycode.cpp
+msgid "Next"
+msgstr "下一个"
-#: src/keycode.cpp:228
-msgid "Up"
-msgstr "å‘上"
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "无转æ¢"
-#: src/keycode.cpp:229
-msgid "Help"
-msgstr "帮助"
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "æ•°å­—é”定键"
-#: src/keycode.cpp:229
-msgid "Insert"
-msgstr "æ’å…¥"
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "å°é”®ç›˜*"
-#: src/keycode.cpp:229
-msgid "Snapshot"
-msgstr "å¿«ç…§"
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "å°é”®ç›˜+"
-#: src/keycode.cpp:232
-msgid "Left Windows"
-msgstr "左窗å£"
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "å°é”®ç›˜-"
-#: src/keycode.cpp:233
-msgid "Apps"
-msgstr "应用"
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "å°é”®ç›˜/"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 0"
msgstr "å°é”®ç›˜0"
-#: src/keycode.cpp:233
+#: src/keycode.cpp
msgid "Numpad 1"
msgstr "å°é”®ç›˜1"
-#: src/keycode.cpp:233
-msgid "Right Windows"
-msgstr "å³çª—å£"
-
-#: src/keycode.cpp:233
-msgid "Sleep"
-msgstr "ç¡çœ "
-
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 2"
msgstr "å°é”®ç›˜2"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 3"
msgstr "å°é”®ç›˜3"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 4"
msgstr "å°é”®ç›˜4"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 5"
msgstr "å°é”®ç›˜5"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 6"
msgstr "å°é”®ç›˜6"
-#: src/keycode.cpp:234
+#: src/keycode.cpp
msgid "Numpad 7"
msgstr "å°é”®ç›˜7"
-#: src/keycode.cpp:235
-msgid "Numpad *"
-msgstr "å°é”®ç›˜*"
-
-#: src/keycode.cpp:235
-msgid "Numpad +"
-msgstr "å°é”®ç›˜+"
-
-#: src/keycode.cpp:235
-msgid "Numpad -"
-msgstr "å°é”®ç›˜-"
-
-#: src/keycode.cpp:235
-msgid "Numpad /"
-msgstr "å°é”®ç›˜/"
-
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 8"
msgstr "å°é”®ç›˜8"
-#: src/keycode.cpp:235
+#: src/keycode.cpp
msgid "Numpad 9"
msgstr "å°é”®ç›˜9"
-#: src/keycode.cpp:239
-msgid "Num Lock"
-msgstr "å°é”®ç›˜é”"
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clearé”®"
-#: src/keycode.cpp:239
-msgid "Scroll Lock"
-msgstr "Scroll Locké”®"
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1é”®"
-#: src/keycode.cpp:240
-msgid "Left Shift"
-msgstr "å·¦Shifté”®"
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "Pauseé”®"
-#: src/keycode.cpp:240
-msgid "Right Shift"
-msgstr "å³Shifté”®"
+#: src/keycode.cpp
+msgid "Period"
+msgstr "å¥å·"
-#: src/keycode.cpp:241
-msgid "Left Control"
-msgstr "å·¦Controlé”®"
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "加å·"
-#: src/keycode.cpp:241
-msgid "Left Menu"
-msgstr "å·¦èœå•"
+#: src/keycode.cpp
+msgid "Print"
+msgstr "Printé”®"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "Prioré”®"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "回车键"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "å³é”®"
+
+#: src/keycode.cpp
msgid "Right Control"
msgstr "å³Controlé”®"
-#: src/keycode.cpp:241
+#: src/keycode.cpp
msgid "Right Menu"
-msgstr "å³èœå•"
+msgstr "å³èœå•é”®"
-#: src/keycode.cpp:243
-msgid "Comma"
-msgstr "逗å·"
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "å³Shifté”®"
-#: src/keycode.cpp:243
-msgid "Minus"
-msgstr "å‡å·"
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "å³Windowsé”®"
-#: src/keycode.cpp:243
-msgid "Period"
-msgstr "å¥å·"
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Locké”®"
-#: src/keycode.cpp:243
-msgid "Plus"
-msgstr "加å·"
+#: src/keycode.cpp
+msgid "Select"
+msgstr "选择键"
-#: src/keycode.cpp:247
-msgid "Attn"
-msgstr "Attné”®"
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shifté”®"
-#: src/keycode.cpp:247
-msgid "CrSel"
-msgstr "CrSelé”®"
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "ç¡çœ "
-#: src/keycode.cpp:248
-msgid "Erase OEF"
-msgstr "Erase OEFé”®"
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "å¿«ç…§"
-#: src/keycode.cpp:248
-msgid "ExSel"
-msgstr "ExSelé”®"
+#: src/keycode.cpp
+msgid "Space"
+msgstr "空格"
-#: src/keycode.cpp:248
-msgid "OEM Clear"
-msgstr "OEM Clearé”®"
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tabé”®"
-#: src/keycode.cpp:248
-msgid "PA1"
-msgstr "PA1é”®"
+#: src/keycode.cpp
+msgid "Up"
+msgstr "å‘上"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "Xé”®1"
-#: src/keycode.cpp:248
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "Xé”®2"
+
+#: src/keycode.cpp
msgid "Zoom"
msgstr "缩放"
-#~ msgid "Game Name"
-#~ msgstr "游æˆå"
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"在「比例尺ã€ä¸­åˆ†å½¢çš„ (X,Y,Z) å移。\n"
+"用于移动适åˆçš„低地生æˆåŒºåŸŸé è¿‘ (0, 0)。\n"
+"预设值适åˆæ›¼å¾·å°”布罗特集åˆï¼Œè‹¥è¦ç”¨äºŽæœ±åˆ©äºšé›†åˆåˆ™å¿…须修改。\n"
+"范围大约在 -2 至 2 间。乘以节点的å移值。"
-#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
-#~ msgstr "游æˆç®¡ç†: 无法å¤åˆ¶MOD“$1â€åˆ°æ¸¸æˆâ€œ$2â€"
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = 利用梯度信æ¯è¿›è¡Œè§†å·®é®è”½ (较快).\n"
+"1 = 浮雕映射 (较慢, 但准确)."
-#~ msgid "GAMES"
-#~ msgstr "游æˆ"
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D 云彩"
-#~ msgid "Games"
-#~ msgstr "游æˆ"
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D 模å¼"
-#~ msgid "Mods:"
-#~ msgstr "MODS:"
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3D 支æŒã€‚\n"
+"ç›®å‰å·²æ”¯æŒï¼š\n"
+"- 无: 无 3D输出。\n"
+"- 浮雕:é’红/å“红色彩色 3D。\n"
+"- 交错:基于å振å±çš„奇å¶è¡Œæ”¯æŒã€‚\n"
+"- 顶底:上下分å±ã€‚\n"
+"- 并列:左å³åˆ†å±ã€‚\n"
+"- 翻页:基于 3D çš„å››é‡ç¼“冲。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"输入新地图的éšæœºç§å­å€¼ï¼Œä¸å¡«åˆ™éšæœºç”Ÿæˆã€‚\n"
+"在主èœå•ä¸­åˆ›å»ºæ–°åœ°å›¾æ—¶å°†è¢«è¦†ç›–。"
-#~ msgid "edit game"
-#~ msgstr "编辑游æˆ"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "当æœåŠ¡å™¨æŒ‚掉的时候,å‘é€ç»™æ‰€æœ‰å®¢æˆ·ç«¯çš„ä¿¡æ¯ã€‚"
-#~ msgid "new game"
-#~ msgstr "新建游æˆ"
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "当关闭æœåŠ¡å™¨æ—¶ï¼Œå‘é€ç»™æ‰€æœ‰å®¢æˆ·ç«¯çš„ä¿¡æ¯ã€‚"
-#~ msgid "EDIT GAME"
-#~ msgstr "编辑游æˆ"
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "生产队列ç»å¯¹é™åˆ¶"
-#~ msgid "Remove selected mod"
-#~ msgstr "删除选中MOD"
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "空中加速"
-#~ msgid "<<-- Add mod"
-#~ msgstr "<<-- 添加MOD"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "活动å—范围"
-#~ msgid "CLIENT"
-#~ msgstr "客户端"
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier interval"
+msgstr "活动å—范围"
-#~ msgid "Favorites:"
-#~ msgstr "最爱的æœåŠ¡å™¨ï¼š"
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr "活动å—范围"
-#~ msgid "START SERVER"
-#~ msgstr "å¯åŠ¨æœåŠ¡å™¨"
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr "活动目标å‘é€èŒƒå›´"
-#~ msgid "Name"
-#~ 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 ""
+"æœåŠ¡å™¨è¿žæŽ¥åœ°å€ã€‚\n"
+"留空则å¯åŠ¨ä¸€ä¸ªæœ¬åœ°æœåŠ¡å™¨ã€‚\n"
+"注æ„,主èœå•çš„地å€æ å°†ä¼šè¦†ç›–这里的设置。"
-#~ msgid "Password"
-#~ msgstr "密ç "
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr "为支æŒ4Kç­‰å±å¹•ï¼Œè°ƒèŠ‚åƒç´ ç‚¹å¯†åº¦ï¼ˆéž X11/Android 环境æ‰æœ‰æ•ˆï¼‰ã€‚"
-#~ msgid "SETTINGS"
-#~ msgstr "设置"
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"调整亮度表的伽玛编ç ã€‚较低的数值会较亮。\n"
+"这个设定是给客户端使用的,会被æœåŠ¡å™¨å¿½ç•¥ã€‚"
-#~ msgid "Preload item visuals"
-#~ msgstr "预先加载物å“图åƒ"
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "高级è”机设置"
-#~ msgid "Finite Liquid"
-#~ msgstr "液体有é™å»¶ä¼¸"
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+msgstr "海拔寒冷"
-#~ msgid "SINGLE PLAYER"
-#~ msgstr "å•äººæ¸¸æˆ"
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "ä¿æŒé«˜é€Ÿé£žè¡Œ"
-#~ msgid "TEXTURE PACKS"
-#~ msgstr "æ质包"
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr "环境闭塞伽马"
-#~ msgid "MODS"
-#~ msgstr "MODS"
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys"
+msgstr "放大山谷"
-#~ msgid "Add mod:"
-#~ msgstr "添加MOD:"
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr "å„å‘异性过滤"
-#~ msgid "Local install"
-#~ msgstr "本地安装"
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "å‘布æœåŠ¡å™¨"
-#~ msgid ""
-#~ "Warning: Some mods are not configured yet.\n"
-#~ "They will be enabled by default when you save the configuration. "
-#~ msgstr ""
-#~ "警告:一些MODä»æœªè®¾å®šã€‚\n"
-#~ "它们会在你ä¿å­˜é…置的时候自动å¯ç”¨ã€‚ "
+#: src/settings_translation_file.cpp
+msgid ""
+"Announce to this serverlist.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"å‘布到此æœåŠ¡å™¨åˆ—表。\n"
+"如果你想å‘布你的 IPv6 地å€ï¼Œä½¿ç”¨ serverlist_url = v6.servers.minetest.net 。"
-#~ msgid ""
-#~ "Warning: Some configured mods are missing.\n"
-#~ "Their setting will be removed when you save the configuration. "
-#~ msgstr ""
-#~ "警告:缺少一些设定了的MOD。\n"
-#~ "它们的设置会在你ä¿å­˜é…置的时候被移除。 "
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "大约 (X,Y,Z) 的节点分形规模。"
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "崩溃åŽè¯¢é—®é‡æ–°è¿žæŽ¥"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "自动报告到æœåŠ¡å™¨åˆ—表。"
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "åŽé€€é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+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 "Bilinear filtering"
+msgstr "åŒçº¿æ€§è¿‡æ»¤"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "绑定地å€"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "å…¨å±æ¨¡å¼ä¸­çš„ä½ï¼åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "建立内部玩家"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "凹凸贴图"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "镜头平滑"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "电影模å¼ä¸‹é•œå¤´å¹³æ»‘"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "镜头更新切æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "洞穴噪音 #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "洞穴噪音 #2"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave width"
+msgstr "å±å¹•å®½åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "洞穴与隧é“由两ç§å™ªéŸ³çš„交集形æˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "èŠå¤©é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "èŠå¤©åˆ‡æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"从 9 ç§å…¬å¼é‡Œé€‰å– 18 ç§åˆ†å½¢ã€‚\n"
+"1 = 4D \"Roundy\" 曼德尔布罗特集.\n"
+"2 = 4D \"Roundy\" 朱利亚集.\n"
+"3 = 4D \"Squarry\" 曼德尔布罗特集.\n"
+"4 = 4D \"Squarry\" 朱利亚集.\n"
+"5 = 4D \"Mandy Cousin\" 曼德尔布罗特集.\n"
+"6 = 4D \"Mandy Cousin\" 朱利亚集.\n"
+"7 = 4D \"Variation\" 曼德尔布罗特集.\n"
+"8 = 4D \"Variation\" 朱利亚集.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" 曼德尔布罗特集.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" 朱利亚集.\n"
+"11 = 3D \"Christmas Tree\" 曼德尔布罗特集.\n"
+"12 = 3D \"Christmas Tree\" 朱利亚集.\n"
+"13 = 3D \"Mandelbulb\" 曼德尔布罗特集.\n"
+"14 = 3D \"Mandelbulb\" 朱利亚集.\n"
+"15 = 3D \"Cosine Mandelbulb\" 曼德尔布罗特集.\n"
+"16 = 3D \"Cosine Mandelbulb\" 朱利亚集.\n"
+"17 = 4D \"Mandelbulb\" 曼德尔布罗特集.\n"
+"18 = 4D \"Mandelbulb\" 朱利亚集."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "å—大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "电影模å¼"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "电影模å¼é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "干净é€æ˜Žçº¹ç†"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "客户端和æœåŠ¡å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "攀登速度"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "云高度"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "云åŠå¾„"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "云彩"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "云是客户端侧效果。"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "主èœå•æ˜¾ç¤ºäº‘彩"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "彩色雾"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"å—信任的 Mod 列表,以逗å·åˆ†éš”,其å¯å­˜å–ä¸å®‰å…¨çš„\n"
+"功能,å³ä¾¿ mod 安全性已å¯ç”¨ï¼ˆç»ç”± request_insecure_environment())。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"以逗å·åˆ†éš”çš„ mod 清å•ï¼Œè®©æ‚¨å¯ä»¥å­˜å– HTTP API,\n"
+"å…¶å¯ä»Žäº’è”网上传åŠä¸‹è½½èµ„料。"
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "命令键"
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr "连接玻璃"
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr "连接到外部媒体æœåŠ¡å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr "连接玻璃,如果节点支æŒã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr "控制å°é€æ˜Ž"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "控制å°é¢œè‰²"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "控制å°é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "è¿žç»­å‰è¿›"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "è¿žç»­å‘å‰ç§»åŠ¨ï¼ˆä»…用于测试)。"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "控制"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"控制日ï¼å¤œå¾ªçŽ¯çš„长度。\n"
+"示例:72 = 20分钟,360 = 4分钟,1 = 24å°æ—¶ï¼Œ0 = æ—¥ï¼å¤œï¼ä¸€åˆ‡ä¿æŒä¸å˜ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"控制在 Mapgen v6 中的沙漠与沙滩大å°ã€‚\n"
+"当 snowbiomes å¯ç”¨æ—¶ã€Œmgv6_freq_desertã€ä¼šè¢«å¿½ç•¥ã€‚"
+
+#: 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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "崩溃信æ¯"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"在山洞中创建ä¸å¯é¢„知的熔岩特性。\n"
+"è¿™å¯ä»¥ä½¿æŒ–掘更加困难。0 表示ç¦ç”¨ã€‚ (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "åå­—é€æ˜Ž"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "å字线ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "å字颜色"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "å字颜色 (红,绿,è“)。"
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "è¹²ä¼é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "伤害"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "调试信æ¯åˆ‡æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "调试日志级别"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "专用æœåŠ¡å™¨æ­¥éª¤"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "默认加速度"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "默认游æˆ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+"创建新世界时默认游æˆã€‚\n"
+"从主èœå•åˆ›å»ºä¸€ä¸ªæ–°ä¸–界时这将被覆盖。"
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "默认密ç "
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "默认æƒé™"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"cURL 的默认超时,å•ä½æ¯«ç§’。\n"
+"仅使用 cURL 编译时有效果。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"定义纹ç†é‡‡æ ·æ­¥éª¤ã€‚\n"
+"数值越高常æ€è´´å›¾è¶Šå¹³æ»‘。"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "已弃用 Lua API 处ç†"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "下é™é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr "æœåŠ¡å™¨æ述,将显示在æ供给玩家的æœåŠ¡å™¨åˆ—表。"
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "去åŒæ­¥å—动画"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "详细 mod 剖æž"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "ç¦ç”¨å作弊"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "ç¦æ­¢ä½¿ç”¨ç©ºå¯†ç "
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "æœåŠ¡å™¨åŸŸå,将显示在æ供给玩家的æœåŠ¡å™¨åˆ—表。"
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "åŒå‡»â€œè·³è·ƒâ€é”®é£žè¡Œ"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "连按两次“跳跃â€é”®åˆ‡æ¢é£žè¡Œæ¨¡å¼ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "丢弃物å“é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "转储地图生æˆå™¨è°ƒè¯•ä¿¡æ¯ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "å¯ç”¨ VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "å¯ç”¨ mod 安全"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "å¯ç”¨çŽ©å®¶å—到伤害和死亡。"
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "å¯ç”¨éšæœºç”¨æˆ·è¾“入(仅用于测试)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"å¯ç”¨ç®€å•çŽ¯å¢ƒå…‰é—­å¡žçš„平滑光照。\n"
+"ç¦ç”¨å¯å½±å“速度和获得ä¸åŒå¤–观。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables 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 filmic tone mapping"
+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 ""
+"å¯ç”¨è§†å·®é—­å¡žæ˜ å°„。\n"
+"需è¦ç€è‰²å™¨å·²å¯ç”¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr "实验性选项,设为大于 0 çš„æ•°å­—æ—¶å¯èƒ½å¯¼è‡´å—之间出现å¯è§ç©ºé—´ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "æš‚åœèœå• FPS"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "å è½ä¸Šä¸‹æ‘†åŠ¨"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "åŽå¤‡å­—体"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "åŽå¤‡å­—体阴影"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "åŽå¤‡å­—体阴影é€æ˜Ž"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "åŽå¤‡å­—体大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "快速移动键"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "快速移动模å¼åŠ é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "快速移动模å¼é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "快速移动"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+"client/serverlist/ 中的文件包å«ä¼šæ˜¾ç¤ºåœ¨â€œå¤šäººæ¸¸æˆâ€é€‰é¡¹å¡ä¸­çš„您收è—çš„æœåŠ¡å™¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 "Fixed map seed"
+msgstr "固定地图ç§å­"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "飞行键"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "飞行"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "雾"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "雾切æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "字体路径"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "字体阴影"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "字体阴影é€æ˜Žåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "字体阴影ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "字体阴影å移,0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "字体大å°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Format of screenshots."
+msgstr "å±å¹•æˆªå›¾ä¿å­˜ä½ç½®ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "å‰è¿›é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "FreeType 字体"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "å…¨å±"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "å…¨å± BPP"
+
+#: 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 "用户图形界é¢ç¼©æ”¾è¿‡æ»¤å™¨ txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "伽马"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "常规"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+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.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "图形"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "é‡åŠ›"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP Mod"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "HUD 切æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated lua api calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "云在多高的高度出现。"
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "高精度 FPU"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "æœåŠ¡å™¨é¦–页,将会显示在æœåŠ¡å™¨åˆ—表中。"
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "æ²³æµæœ‰å¤šæ·±"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "æ²³æµæœ‰å¤šå®½"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 æœåŠ¡å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6 支æŒã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr "如果 FPS å¯ä»¥è¶…过此值,é™åˆ¶å®ƒä»¥èŠ‚çœ CPU 功耗,因为没有更多好处。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "忽略世界错误"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "游æˆä¸­"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory 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 "Item entity TTL"
+msgstr "物å“实体 TTL"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+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 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 jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for printing debug stacks. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Key use for climbing/descending"
+msgstr "攀登/é™è½çš„é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr "语言"
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr "巨大洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Lava Features"
+msgstr "熔岩特性"
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr "æ ‘å¶é£Žæ ¼"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "左方å‘é”®"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 "Limit of emerge queues on disk"
+msgstr "ç£ç›˜ä¸Šçš„生产队列é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr "è¦ç”Ÿæˆçš„生产队列ç»å¯¹é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "液体æµåŠ¨æ€§"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "液体æµåŠ¨æ€§å¹³æ»‘"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "液体循环最大"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "液体队列清除时间"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "液体下沉"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "液体更新间隔,å•ä½ç§’。"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "液体更新å•æ¬¡"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "主èœå•æ¸¸æˆç®¡ç†å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "主èœå• mode 管ç†å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "主èœå•è„šæœ¬"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "地图目录"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+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.\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "地图生æˆé™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "地图ä¿å­˜é—´éš”"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "地图å—é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "地图å—å¸è½½è¶…æ—¶"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "地图生æˆå™¨å±±è°·"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "地图生æˆå™¨è°ƒè¯•"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "地图生æˆå™¨æ ‡å¿—"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "地图生æˆå™¨å¹³é¢"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "地图生æˆå™¨å¹³é¢é˜ˆå€¼"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "地图生æˆå™¨å¹³é¢æ ‡å¿—"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "地图生æˆå™¨å¹³åœ°çº§åˆ«"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "地图生æˆå™¨å¹³é¢å±±ä¸˜å¡åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "地图生æˆå™¨å¹³é¢å±±ä¸˜é˜ˆå€¼"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "地图生æˆå™¨å¹³é¢æ¹–å¡åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "地图生æˆå™¨å¹³é¢é˜ˆå€¼"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "地图生æˆå™¨åˆ†å½¢"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "地图生æˆå™¨åˆ†å½¢ç‰‡ w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "地图生æˆå™¨åˆ†å½¢åˆ†å½¢"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "地图生æˆå™¨åˆ†å½¢è¿­ä»£"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "地图生æˆå™¨åˆ†å½¢ julia w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "地图生æˆå™¨åˆ†å½¢ julia x"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "地图生æˆå™¨åˆ†å½¢ julia y"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "地图生æˆå™¨åˆ†å½¢ julia z"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "地图生æˆå™¨åˆ†å½¢å移"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "地图生æˆå™¨åˆ†å½¢è§„模"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "地图生æˆå™¨åˆ†å½¢ç‰‡ w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "地图生æˆå™¨å称"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "地图生æˆå™¨ v5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "巨大洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "地图生æˆå™¨ v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "地图生æˆå™¨ v6 沙滩频率"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "地图生æˆå™¨ v6 沙漠频率"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "地图生æˆå™¨ v6 标志"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "地图生æˆå™¨ v7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "巨大洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "地图生æˆå™¨ v7 标志"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "巨大洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr "巨大洞穴噪音"
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+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 "最大 FPS"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "游æˆæš‚åœæ—¶æœ€é«˜ FPS。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "最大强制载入å—"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "最大快æ·æ å®½åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr "强制载入地图å—最大数é‡ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "最大用户"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "èœå•"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr "Mesh 缓存"
+
+#: 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 "Minimap"
+msgstr "å°åœ°å›¾"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "å°åœ°å›¾é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "å°åœ°å›¾æ‰«æ高度"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "纹ç†è¿‡æ»¤å™¨æœ€å°å¤§å°"
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "Mip 贴图处ç†"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr "Mod 剖æž"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "Mod 存储详情 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "Mod 存储下载 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "Mod 存储的 Mod 列表 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "等宽字体路径"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "等宽字体大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "é¼ æ ‡çµæ•åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "é¼ æ ‡çµæ•åº¦å€æ•°ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+"玩家å称。\n"
+"当è¿è¡ŒæœåŠ¡å™¨æ—¶ï¼Œç”¨æ­¤å称连接的客户端是管ç†å‘˜ã€‚\n"
+"从主èœå•å¼€å§‹æ—¶ï¼Œæ­¤é¡¹å°†è¢«è¦†ç›–。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr "æœåŠ¡å™¨å称,将显示在æ供给玩家的æœåŠ¡å™¨åˆ—表。"
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "网络"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"监å¬ç½‘ç»œç«¯å£ (UDP)。\n"
+"从主èœå•å¼€å§‹æ—¶æ­¤å€¼å°†è¢«è¦†ç›–。"
+
+#: 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
+#, fuzzy
+msgid "NodeTimer interval"
+msgstr "å‘é€é—´éš”时间"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "视差闭塞迭代数。"
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr "视差闭塞效果的总体比例。"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr "视差贴图闭塞"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion Scale"
+msgstr "视差贴图闭塞比例"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "视差贴图闭塞å移"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "视差贴图闭塞迭代"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "视差贴图闭塞模å¼"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "视差贴图闭塞强度"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "TrueType 字体或ä½å›¾çš„路径。"
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "å±å¹•æˆªå›¾ä¿å­˜ä½ç½®ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr "玩家å称"
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr "玩家转移è·ç¦»"
+
+#: src/settings_translation_file.cpp
+msgid "Player versus Player"
+msgstr "玩家对战玩家"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "剖æžå™¨åˆ‡æ¢é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "剖æžå°å‡ºé—´éš”"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "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 "Remote media"
+msgstr "远程媒体"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "远程端å£"
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "å³æ–¹å‘é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "å³å‡»é‡å¤é—´éš”"
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "回滚记录"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "圆形å°åœ°å›¾"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "ä¿å­˜ä»ŽæœåŠ¡å™¨æ”¶åˆ°çš„地图"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "å±å¹•é«˜åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "å±å¹•å®½åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "截图"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "截图文件夹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "截图文件夹"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 "Security"
+msgstr "安全"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "选择框颜色"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "选择框宽度"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "æœåŠ¡å™¨ / å•äººæ¸¸æˆ"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "æœåŠ¡å™¨ URL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "æœåŠ¡å™¨åœ°å€"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "æœåŠ¡å™¨æè¿°"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "æœåŠ¡å™¨å称"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "æœåŠ¡å™¨ç«¯å£"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "æœåŠ¡å™¨åˆ—表 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr "æœåŠ¡å™¨åˆ—表文件"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr "显示调试信æ¯"
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr "关机消æ¯"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "平滑光照"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "潜行键"
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr "音效"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "é™æ€é‡ç”Ÿç‚¹"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "生æˆçš„一般地图强度。"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr "视差强度。"
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "严格å议检查"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "åŒæ­¥ SQLite"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 "Texture path"
+msgstr "纹ç†è·¯å¾„"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+msgstr "泥土深度或其他过滤器"
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr "æœåŠ¡å™¨ç›‘å¬çš„网络接å£ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Irrlicht 的渲染åŽç«¯ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "用于特定语言的字体。"
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr "å‘é€é—´éš”时间"
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr "速度时间"
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr "客户端从内存中移除未用地图数æ®çš„超时。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "切æ¢æ‹ç…§æ¨¡å¼é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "工具æ示延迟"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "三线性过滤"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "å¯ä¿¡ MOD"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "æ— é™çš„玩家转移è·ç¦»"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "å¸è½½æœªç”¨æœåŠ¡å™¨æ•°æ®"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "使用 3D 云彩,而ä¸æ˜¯çœ‹èµ·æ¥æ˜¯å¹³é¢çš„。"
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "使用按键"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "适用 MOD å¼€å‘者。"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "åž‚ç›´åŒæ­¥"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr "VBO"
+
+#: 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 "Valleys C Flags"
+msgstr "山谷 C 标志"
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "å±å¹•åž‚ç›´åŒæ­¥ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "视频驱动程åº"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "范围摇动"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"节点间å¯è§†è·ç¦»ã€‚\n"
+"æœ€å° = 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "å¯è§†èŒƒå›´å‡å°é”®"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "å¯è§†èŒƒå›´å¢žåŠ é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr "å¯è§†èŒƒå›´"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "音é‡"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "步行速度"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "水特性"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "水级别"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "世界水平é¢çº§åˆ«ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "摇动节点"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "摇动树å¶"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "摇动æ¤ç‰©"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "摇动水"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "摇动水高度"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "摇动水长度"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "摇动水速度"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+"是å¦åœ¨ä¸€æ¬¡ (Lua) 崩溃åŽè¯¢é—®å®¢æˆ·ç«¯æ˜¯å¦é‡æ–°è¿žæŽ¥ã€‚\n"
+"如果你的æœåŠ¡å™¨è®¾ä¸ºè‡ªåŠ¨é‡è¿žï¼Œå°†æ­¤é¡¹è®¾ä¸ºçœŸã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "是å¦è®©é›¾å‡ºçŽ°åœ¨å¯è§†èŒƒå›´æœ«ç«¯ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr "是å¦æ˜¾ç¤ºå®¢æˆ·ç«¯è°ƒè¯•ä¿¡æ¯ï¼ˆä¸ŽæŒ‰ F5 的效果相åŒï¼‰ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "åˆå§‹åŒ–窗å£å°ºå¯¸ä¹‹å®½åº¦ç»„件。"
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr "平地的 Y。"
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "cURL 文件下载超时"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "cURL 并å‘é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL 超时"
+
+#, fuzzy
+#~ msgid "Preload inventory textures"
+#~ msgstr "载入中..."
+
+#, fuzzy
+#~ msgid "Reset singleplayer world"
+#~ msgstr "é‡ç½®å•äººæ¸¸æˆ"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "èœå•å…ƒç´ åº”用缩放因å­"
+
+#~ msgid "Touch free target"
+#~ msgstr "自由触摸目标"
+
+#, fuzzy
+#~ msgid "Downloading"
+#~ msgstr "下载中"
+
+#~ msgid " KB/s"
+#~ msgstr "åƒå­—节/秒"
+
+#~ msgid " MB/s"
+#~ msgstr "兆字节/秒"
+
+#~ msgid "Left click: Move all items, Right click: Move single item"
+#~ msgstr "左键:移动所有物å“,å³é”®ï¼šç§»åŠ¨å•ä¸ªç‰©å“"
+
+#~ msgid "is required by:"
+#~ msgstr "被需è¦ï¼š"
+
+#~ msgid "Configuration saved. "
+#~ msgstr "é…置已ä¿å­˜ã€‚ "
+
+#~ msgid "Warning: Configuration not consistent. "
+#~ msgstr "警告:é…ç½®ä¸ä¸€è‡´ã€‚ "
+
+#~ msgid "Cannot create world: Name contains invalid characters"
+#~ msgstr "无法创建世界:å字包å«éžæ³•å­—符"
+
+#~ msgid "Show Public"
+#~ msgstr "显示公共"
+
+#~ msgid "Show Favorites"
+#~ msgstr "显示最爱"
+
+#~ msgid "Leave address blank to start a local server."
+#~ msgstr "地å€æ ç•™ç©ºå¯å¯åŠ¨æœ¬åœ°æœåŠ¡å™¨ã€‚"
+
+#~ msgid "Create world"
+#~ msgstr "创造世界"
+
+#~ msgid "Address required."
+#~ msgstr "需è¦åœ°å€ã€‚"
+
+#~ msgid "Cannot delete world: Nothing selected"
+#~ msgstr "无法删除世界:没有选择世界"
+
+#~ msgid "Files to be deleted"
+#~ msgstr "将被删除的文件"
+
+#~ msgid "Cannot create world: No games found"
+#~ msgstr "无法创造世界:未找到游æˆæ¨¡å¼"
+
+#~ msgid "Cannot configure world: Nothing selected"
+#~ msgstr "无法é…置世界:没有选择世界"
+
+#~ msgid "Failed to delete all world files"
+#~ msgstr "无法删除所有该世界的文件"
#~ msgid ""
#~ "Default Controls:\n"
@@ -1295,72 +4250,99 @@ msgstr "缩放"
#~ "ESC:èœå•\n"
#~ "T:èŠå¤©\n"
-#~ msgid "Failed to delete all world files"
-#~ msgstr "无法删除所有该世界的文件"
+#~ msgid ""
+#~ "Warning: Some configured mods are missing.\n"
+#~ "Their setting will be removed when you save the configuration. "
+#~ msgstr ""
+#~ "警告:缺少一些设定了的MOD。\n"
+#~ "它们的设置会在你ä¿å­˜é…置的时候被移除。 "
-#~ msgid "Cannot configure world: Nothing selected"
-#~ msgstr "无法é…置世界:没有选择世界"
+#~ msgid ""
+#~ "Warning: Some mods are not configured yet.\n"
+#~ "They will be enabled by default when you save the configuration. "
+#~ msgstr ""
+#~ "警告:一些MODä»æœªè®¾å®šã€‚\n"
+#~ "它们会在你ä¿å­˜é…置的时候自动å¯ç”¨ã€‚ "
-#~ msgid "Cannot create world: No games found"
-#~ msgstr "无法创造世界:未找到游æˆæ¨¡å¼"
+#~ msgid "Local install"
+#~ msgstr "本地安装"
-#~ msgid "Files to be deleted"
-#~ msgstr "将被删除的文件"
+#~ msgid "Add mod:"
+#~ msgstr "添加MOD:"
-#~ msgid "Cannot delete world: Nothing selected"
-#~ msgstr "无法删除世界:没有选择世界"
+#~ msgid "MODS"
+#~ msgstr "MODS"
-#~ msgid "Address required."
-#~ msgstr "需è¦åœ°å€ã€‚"
+#~ msgid "TEXTURE PACKS"
+#~ msgstr "æ质包"
-#~ msgid "Create world"
-#~ msgstr "创造世界"
+#~ msgid "SINGLE PLAYER"
+#~ msgstr "å•äººæ¸¸æˆ"
-#~ msgid "Leave address blank to start a local server."
-#~ msgstr "地å€æ ç•™ç©ºå¯å¯åŠ¨æœ¬åœ°æœåŠ¡å™¨ã€‚"
+#~ msgid "Finite Liquid"
+#~ msgstr "液体有é™å»¶ä¼¸"
-#~ msgid "Show Favorites"
-#~ msgstr "显示最爱"
+#~ msgid "Preload item visuals"
+#~ msgstr "预先加载物å“图åƒ"
-#~ msgid "Show Public"
-#~ msgstr "显示公共"
+#~ msgid "SETTINGS"
+#~ msgstr "设置"
-#~ msgid "Advanced"
-#~ msgstr "高级è”机设置"
+#~ msgid "Password"
+#~ msgstr "密ç "
-#~ msgid "Multiplayer"
-#~ msgstr "多人游æˆ"
+#~ msgid "Name"
+#~ msgstr "åå­—"
-#~ msgid "Cannot create world: Name contains invalid characters"
-#~ msgstr "无法创建世界:å字包å«éžæ³•å­—符"
+#~ msgid "START SERVER"
+#~ msgstr "å¯åŠ¨æœåŠ¡å™¨"
-#~ msgid "Warning: Configuration not consistent. "
-#~ msgstr "警告:é…ç½®ä¸ä¸€è‡´ã€‚ "
+#~ msgid "CLIENT"
+#~ msgstr "客户端"
-#~ msgid "Configuration saved. "
-#~ msgstr "é…置已ä¿å­˜ã€‚ "
+#~ msgid "<<-- Add mod"
+#~ msgstr "<<-- 添加MOD"
-#~ msgid "is required by:"
-#~ msgstr "被需è¦ï¼š"
+#~ msgid "Remove selected mod"
+#~ msgstr "删除选中MOD"
-#~ msgid "Left click: Move all items, Right click: Move single item"
-#~ msgstr "左键:移动所有物å“,å³é”®ï¼šç§»åŠ¨å•ä¸ªç‰©å“"
+#~ msgid "EDIT GAME"
+#~ msgstr "编辑游æˆ"
-#~ msgid " MB/s"
-#~ msgstr "兆字节/秒"
+#~ msgid "new game"
+#~ msgstr "新建游æˆ"
-#~ msgid " KB/s"
-#~ msgstr "åƒå­—节/秒"
+#~ msgid "Mods:"
+#~ msgstr "MODS:"
-#~ msgid "Fly mode"
-#~ msgstr "飞行模å¼"
+#~ msgid "GAMES"
+#~ msgstr "游æˆ"
-#~ msgid "Anisotropic Filtering"
-#~ msgstr "å„å‘异性过滤"
+#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\""
+#~ msgstr "游æˆç®¡ç†: 无法å¤åˆ¶MOD“$1â€åˆ°æ¸¸æˆâ€œ$2â€"
-#~ msgid "Mip-Mapping"
-#~ msgstr "贴图处ç†"
+#~ msgid "Game Name"
+#~ msgstr "游æˆå"
+
+#~ msgid "Restart minetest for driver change to take effect"
+#~ msgstr "é‡å¯minetest让驱动å˜åŒ–生效"
#, fuzzy
-#~ msgid "Downloading"
-#~ msgstr "下载中"
+#~ msgid "If enabled, "
+#~ msgstr "å¯ç”¨"
+
+#, fuzzy
+#~ msgid "If disabled "
+#~ msgstr "ç¦ç”¨MOD包"
+
+#~ msgid "No!!!"
+#~ msgstr "ä¸!!!"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "生æˆä¸€èˆ¬åœ°å›¾"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "公共æœåŠ¡å™¨åˆ—表"
+
+#~ msgid "No of course not!"
+#~ msgstr "当然ä¸ï¼"
diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po
new file mode 100644
index 000000000..abe574c93
--- /dev/null
+++ b/po/zh_TW/minetest.po
@@ -0,0 +1,4524 @@
+# Chinese translations for minetest package.
+# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# Automatically generated, 2015.
+# Jeff Huang <s8321414@chakraos.org>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-05 16:13+0200\n"
+"PO-Revision-Date: 2016-03-05 14:43+0000\n"
+"Last-Translator: Jeff Huang <s8321414@chakraos.org>\n"
+"Language-Team: Chinese (Taiwan) <https://hosted.weblate.org/projects/"
+"minetest/minetest/zh_TW/>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.5-dev\n"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured in a Lua script, such as a mod:"
+msgstr "在 Lua 指令稿中發生錯誤,如 mod:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occured:"
+msgstr "發生錯誤:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "主é¸å–®"
+
+#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
+msgid "Ok"
+msgstr "確定"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "é‡æ–°é€£ç·š"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "伺æœå™¨å·²è¦æ±‚é‡æ–°é€£ç·šï¼š"
+
+#: builtin/mainmenu/common.lua src/game.cpp
+msgid "Loading..."
+msgstr "正在載入..."
+
+#: builtin/mainmenu/common.lua
+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_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+#: src/keycode.cpp
+msgid "Cancel"
+msgstr "å–消"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
+msgid "Depends:"
+msgstr "ä¾è³´ï¼š"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable MP"
+msgstr "åœç”¨ MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable MP"
+msgstr "啟用 MP"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "啟用全部"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"chararacters [a-z0-9_] are allowed."
+msgstr ""
+"啟用 mod 「$1〠失敗,因為其包å«äº†ä¸åˆæ³•çš„字元。åªæœ‰ å­—å…ƒ [a-z0-9_] æ‰æ˜¯å¯ç”¨"
+"的。"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide Game"
+msgstr "éš±è—éŠæˆ²"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Hide mp content"
+msgstr "éš±è— mp 內容"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Mod:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "儲存"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "世界:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "已啟用"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "å為「$1ã€çš„世界已存在"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "建立"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a subgame, such as minetest_game, from minetest.net"
+msgstr "從 minetest.net 下載一個å­éŠæˆ²ï¼Œåƒæ˜¯ minetest_game"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "從 minetest.net 下載一個"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "éŠæˆ²"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "地圖產生器"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No worldname given or no game selected"
+msgstr "未給予世界éŠæˆ²æˆ–是未é¸å–éŠæˆ²"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Seed"
+msgstr "種å­"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The minimal development test is meant for developers."
+msgstr "警告:最å°åŒ–的開發測試僅供開發者使用。"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "世界éŠæˆ²"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no subgames installed."
+msgstr "您沒有安è£å­éŠæˆ²ã€‚"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "您確定您è¦åˆªé™¤ã€Œ$1ã€å—Žï¼Ÿ"
+
+#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+#: src/keycode.cpp
+msgid "Delete"
+msgstr "刪除"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: failed to delete \"$1\""
+msgstr "Mod 管ç†å“¡ï¼šåˆªé™¤ã€Œ$1ã€å¤±æ•—"
+
+#: builtin/mainmenu/dlg_delete_mod.lua
+msgid "Modmgr: invalid modpath \"$1\""
+msgstr "Mod 管ç†å“¡ï¼šç„¡æ•ˆçš„ mod 路徑「$1ã€"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "刪除世界「$1ã€ï¼Ÿ"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
+msgid "Accept"
+msgstr "接å—"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "é‡æ–°å‘½å Mod 包:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "\"$1\" is not a valid flag."
+msgstr "「$1ã€ä¸æ˜¯ä¸€å€‹æœ‰æ•ˆçš„旗標。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+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 "Format is 3 numbers separated by commas and inside brackets."
+msgstr "æ ¼å¼ç‚º 3 個在括號內的以逗號分離的數字。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid ""
+"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
+"<octaves>, <persistence>"
+msgstr ""
+"æ ¼å¼ï¼š<å移>, <尺寸>, (<寬度 X>, <寬度 Y>, <寬度 Z>), <種å­>, <八進ä½>, <æŒçºŒ"
+"性>"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "éŠæˆ²"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
+msgid "Mods"
+msgstr "Mods"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Optionally the lacunarity can be appended with a leading comma."
+msgstr "é¸æ“‡æ€§çš„空隙度å¯ä»¥ä»¥ä¸€å€‹é€—號開頭附加。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a comma seperated list of flags."
+msgstr "請輸入逗號以分離å„項旗標。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "請輸入有效的整數。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "請輸入有效的數字。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Possible values are: "
+msgstr "å¯èƒ½çš„值為: "
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "æ¢å¾©é è¨­å€¼"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select path"
+msgstr "é¸å–路徑"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "顯示技術å稱"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be greater than $1."
+msgstr "值必須大於 $1。"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be lower than $1."
+msgstr "值必須低於 $1。"
+
+#: builtin/mainmenu/modmgr.lua
+msgid ""
+"\n"
+"Install Mod: unsupported filetype \"$1\" or broken archive"
+msgstr ""
+"\n"
+"å®‰è£ Mod:ä¸æ”¯æ´çš„檔案類型「$1ã€æˆ–是æ毀的壓縮檔"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "å®‰è£ $1 到 $2 失敗"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: file: \"$1\""
+msgstr "å®‰è£ Mod:檔案「$1ã€"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find real modname for: $1"
+msgstr "å®‰è£ Mod:找ä¸åˆ° $1 的真實 mod å稱"
+
+#: builtin/mainmenu/modmgr.lua
+msgid "Install Mod: unable to find suitable foldername for modpack $1"
+msgstr "å®‰è£ Mod:找ä¸åˆ° mod 包 $1 é©åˆçš„資料夾å稱"
+
+#: builtin/mainmenu/store.lua
+msgid "Close store"
+msgstr "關閉商店"
+
+#: builtin/mainmenu/store.lua
+msgid "Downloading $1, please wait..."
+msgstr "正在下載 $1,請ç¨å€™..."
+
+#: builtin/mainmenu/store.lua
+msgid "Install"
+msgstr "安è£"
+
+#: builtin/mainmenu/store.lua
+msgid "Page $1 of $2"
+msgstr "$2 的第 $1 é "
+
+#: builtin/mainmenu/store.lua
+msgid "Rating"
+msgstr "評分"
+
+#: builtin/mainmenu/store.lua
+msgid "Search"
+msgstr "æœå°‹"
+
+#: builtin/mainmenu/store.lua
+msgid "Shortname:"
+msgstr "短å稱:"
+
+#: builtin/mainmenu/store.lua
+msgid "Successfully installed:"
+msgstr "å·²æˆåŠŸå®‰è£ï¼š"
+
+#: builtin/mainmenu/store.lua
+msgid "Unsorted"
+msgstr "未分類"
+
+#: builtin/mainmenu/store.lua
+msgid "re-Install"
+msgstr "é‡æ–°å®‰è£"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "æ´»èºçš„è²¢ç»è€…"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "核心開發者"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "æ„Ÿè¬"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "å…ˆå‰çš„è²¢ç»è€…"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "å…ˆå‰çš„核心開發者"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Installed Mods:"
+msgstr "已安è£çš„ Mod:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Mod information:"
+msgstr "Mod 資訊:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "No mod description available"
+msgstr "找ä¸åˆ° mod æè¿°"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Rename"
+msgstr "é‡æ–°å‘½å"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Select Mod File:"
+msgstr "é¸å– Mod 檔案:"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected mod"
+msgstr "解除安è£å·²é¸å–çš„ mod"
+
+#: builtin/mainmenu/tab_mods.lua
+msgid "Uninstall selected modpack"
+msgstr "解除安è£å·²é¸å–çš„ mod 包"
+
+#: builtin/mainmenu/tab_multiplayer.lua
+#, fuzzy
+msgid "Address / Port"
+msgstr "地å€ï¼åŸ ï¼š"
+
+#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
+msgid "Client"
+msgstr "客戶端"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "連線"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "創造模å¼"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "已啟用傷害"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
+msgid "Name / Password"
+msgstr "å稱ï¼å¯†ç¢¼ï¼š"
+
+#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "已啟用 PvP"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Bind Address"
+msgstr "ç¶å®šåœ°å€"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Configure"
+msgstr "設定"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Creative Mode"
+msgstr "創造模å¼"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Enable Damage"
+msgstr "啟用傷害"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Name/Password"
+msgstr "å稱ï¼å¯†ç¢¼"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "New"
+msgstr "æ–°"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "No world created or selected!"
+msgstr "未有已建立或已é¸å–的世界ï¼"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Port"
+msgstr "埠"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Public"
+msgstr "公共"
+
+#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
+msgid "Select World:"
+msgstr "é¸å–世界:"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server"
+msgstr "伺æœå™¨"
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Server Port"
+msgstr "伺æœå™¨åŸ "
+
+#: builtin/mainmenu/tab_server.lua
+msgid "Start Game"
+msgstr "開始éŠæˆ²"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D 雲朵"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Advanced 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 "Bilinear Filter"
+msgstr "雙線性éŽæ¿¾å™¨"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Bump Mapping"
+msgstr "映射貼圖"
+
+#: builtin/mainmenu/tab_settings.lua
+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 "Mipmap"
+msgstr "Mip 貼圖"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "Mip 貼圖 + Aniso. éŽæ¿¾å™¨"
+
+#: 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 "無 Mip 貼圖"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "çªé¡¯ç¯€é»ž"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Node Outlining"
+msgstr "çªé¡¯ç¯€é»ž"
+
+#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
+msgid "None"
+msgstr "ç„¡"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Normal Mapping"
+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
+#, fuzzy
+msgid "Particles"
+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 "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 "碰觸é™å€¼ï¼ˆåƒç´ ï¼‰"
+
+#: 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 Plants"
+msgstr "æ¤ç‰©æ“ºå‹•"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Water"
+msgstr "波動的水"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "是"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "設定 mod"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "主è¦"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "開始單人éŠæˆ²"
+
+#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
+msgid "Play"
+msgstr "玩"
+
+#: builtin/mainmenu/tab_singleplayer.lua
+msgid "Singleplayer"
+msgstr "單人éŠæˆ²"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "No information available"
+msgstr "ä¸æ供資訊"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Select texture pack:"
+msgstr "é¸å–æ質包:"
+
+#: builtin/mainmenu/tab_texturepacks.lua
+msgid "Texturepacks"
+msgstr "æ質包"
+
+#: src/client.cpp
+msgid "Connection timed out."
+msgstr "連線逾時。"
+
+#: src/client.cpp
+msgid "Done!"
+msgstr "完æˆï¼"
+
+#: src/client.cpp
+msgid "Initializing nodes"
+msgstr "正在åˆå§‹åŒ–節點"
+
+#: src/client.cpp
+msgid "Initializing nodes..."
+msgstr "正在åˆå§‹åŒ–節點..."
+
+#: src/client.cpp
+msgid "Loading textures..."
+msgstr "正在載入æ質..."
+
+#: src/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "正在é‡æ–°æ§‹å»ºè‘—色器..."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "連線錯誤(逾時?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "找ä¸åˆ°æˆ–無法載入éŠæˆ² \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "無效的éŠæˆ²è¦æ ¼ã€‚"
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "主é¸å–®"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "未有已被é¸å–的世界,且未æ供地å€ã€‚無事å¯åšã€‚"
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "玩家å稱太長。"
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "æ供的世界路徑ä¸å­˜åœ¨ï¼š "
+
+#: src/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
+
+#: src/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"檢視 debug.txt 以å–得更多資訊。"
+
+#: src/game.cpp
+msgid "Change Keys"
+msgstr "變更按éµ"
+
+#: src/game.cpp
+msgid "Change Password"
+msgstr "變更密碼"
+
+#: src/game.cpp
+msgid "Connecting to server..."
+msgstr "正在連線至伺æœå™¨..."
+
+#: src/game.cpp
+msgid "Continue"
+msgstr "繼續"
+
+#: src/game.cpp
+msgid "Creating client..."
+msgstr "正在建立客戶端..."
+
+#: src/game.cpp
+msgid "Creating server..."
+msgstr "正在建立伺æœå™¨..."
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"- WASD: move\n"
+"- Space: jump/climb\n"
+"- Shift: sneak/go down\n"
+"- Q: drop item\n"
+"- I: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- T: chat\n"
+msgstr ""
+"é è¨­æŽ§åˆ¶ï¼š\n"
+"- WASD:移動\n"
+"- Space:跳èºï¼æ”€çˆ¬\n"
+"- Shift:潛行ï¼å¾€ä¸‹\n"
+"- Q:丟棄物å“\n"
+"- I:物å“欄\n"
+"- 滑鼠:旋轉ï¼è§€çœ‹\n"
+"- 滑鼠左éµï¼šæŒ–ï¼æŽ¨æ“ \n"
+"- 滑鼠å³éµï¼šæ”¾ç½®ï¼ä½¿ç”¨\n"
+"- 滑鼠滾輪:é¸å–物å“\n"
+"- T:èŠå¤©\n"
+
+#: src/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"é è¨­æŽ§åˆ¶ï¼š\n"
+"ç„¡å¯è¦‹é¸å–®ï¼š\n"
+"- 輕擊一次:啟動按鈕\n"
+"- 輕擊兩次:放置ï¼ä½¿ç”¨\n"
+"- 滑動手指:轉動視角\n"
+"檢視é¸å–®ï¼ç‰©å“欄:\n"
+"- 輕擊兩次(外é¢ï¼‰ï¼š\n"
+" -->關閉\n"
+"- 碰觸堆疊,碰觸槽:\n"
+" --> 移動堆疊\n"
+"- 碰觸並拖曳,以第二隻手指輕擊\n"
+" --> 放置單一物å“到槽中\n"
+
+#: src/game.cpp
+msgid "Exit to Menu"
+msgstr "離開到é¸å–®"
+
+#: src/game.cpp
+msgid "Exit to OS"
+msgstr "離開到作業系統"
+
+#: src/game.cpp
+msgid "Item definitions..."
+msgstr "物å“定義..."
+
+#: src/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/game.cpp
+msgid "Media..."
+msgstr "媒體..."
+
+#: src/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/game.cpp
+msgid "Node definitions..."
+msgstr "節點定義..."
+
+#: src/game.cpp
+msgid "Resolving address..."
+msgstr "正在解æžåœ°å€â€¦â€¦"
+
+#: src/game.cpp
+msgid "Respawn"
+msgstr "é‡ç”Ÿ"
+
+#: src/game.cpp
+msgid "Shutting down..."
+msgstr "關閉..."
+
+#: src/game.cpp
+msgid "Sound Volume"
+msgstr "音é‡"
+
+#: src/game.cpp
+msgid "You died."
+msgstr "您已經死亡。"
+
+#: src/game.cpp src/guiFormSpecMenu.cpp
+msgid "ok"
+msgstr "確定"
+
+#: src/guiFormSpecMenu.cpp
+msgid "Enter "
+msgstr "輸入 "
+
+#: src/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "開始"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "\"Use\" = climb down"
+msgstr "「使用ã€=å‘下攀爬"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "後退"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "èŠå¤©"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "指令"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "終端機"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "輕擊兩次「跳èºã€ä»¥åˆ‡æ›æˆé£›è¡Œ"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "丟棄"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "å‰é€²"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "物å“欄"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "è·³èº"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "此按éµå·²è¢«ä½¿ç”¨"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "按éµç¶å®šã€‚(若此é¸å–®éŽ–ä½äº†ï¼Œå¾ž minetest.conf 移除相關åƒæ•¸ï¼‰"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Left"
+msgstr "å·¦"
+
+#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Print stacks"
+msgstr "å°å‡ºå †ç–Š"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "é¸æ“‡ç¯„åœ"
+
+#: src/guiKeyChangeMenu.cpp src/keycode.cpp
+msgid "Right"
+msgstr "å³"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "潛行"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle Cinematic"
+msgstr "切æ›éŽå ´å‹•ç•«"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "切æ›å¿«é€Ÿ"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "切æ›é£›è¡Œ"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "切æ›ç„¡çœç•¥"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "Use"
+msgstr "使用"
+
+#: src/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "按下按éµ"
+
+#: src/guiPasswordChange.cpp
+msgid "Change"
+msgstr "變更"
+
+#: src/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "確èªå¯†ç¢¼"
+
+#: src/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "新密碼"
+
+#: src/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "舊密碼"
+
+#: src/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "密碼ä¸ç¬¦åˆï¼"
+
+#: src/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "離開"
+
+#: src/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "音é‡ï¼š "
+
+#: src/keycode.cpp
+msgid "Apps"
+msgstr "應用程å¼"
+
+#: src/keycode.cpp
+msgid "Attn"
+msgstr "Attn"
+
+#: src/keycode.cpp
+msgid "Back"
+msgstr "Back"
+
+#: src/keycode.cpp
+msgid "Capital"
+msgstr "大寫"
+
+#: src/keycode.cpp
+msgid "Clear"
+msgstr "清除"
+
+#: src/keycode.cpp
+msgid "Comma"
+msgstr "逗號"
+
+#: src/keycode.cpp
+msgid "Control"
+msgstr "Control"
+
+#: src/keycode.cpp
+msgid "Convert"
+msgstr "轉æ›"
+
+#: src/keycode.cpp
+msgid "CrSel"
+msgstr "CrSel"
+
+#: src/keycode.cpp
+msgid "Down"
+msgstr "下"
+
+#: src/keycode.cpp
+msgid "End"
+msgstr "End"
+
+#: src/keycode.cpp
+msgid "Erase OEF"
+msgstr "抹除 OEF"
+
+#: src/keycode.cpp
+msgid "Escape"
+msgstr "Escape"
+
+#: src/keycode.cpp
+msgid "ExSel"
+msgstr "ExSel"
+
+#: src/keycode.cpp
+msgid "Execute"
+msgstr "執行"
+
+#: src/keycode.cpp
+msgid "Final"
+msgstr "Final"
+
+#: src/keycode.cpp
+msgid "Help"
+msgstr "說明"
+
+#: src/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/keycode.cpp
+msgid "Insert"
+msgstr "æ’å…¥"
+
+#: src/keycode.cpp
+msgid "Junja"
+msgstr "Junja"
+
+#: src/keycode.cpp
+msgid "Kana"
+msgstr "å‡å"
+
+#: src/keycode.cpp
+msgid "Kanji"
+msgstr "日文漢字"
+
+#: src/keycode.cpp
+msgid "Left Button"
+msgstr "å·¦éµ"
+
+#: src/keycode.cpp
+msgid "Left Control"
+msgstr "左邊 Control"
+
+#: src/keycode.cpp
+msgid "Left Menu"
+msgstr "左邊é¸å–®éµ"
+
+#: src/keycode.cpp
+msgid "Left Shift"
+msgstr "左邊 Shift"
+
+#: src/keycode.cpp
+msgid "Left Windows"
+msgstr "左方視窗"
+
+#: src/keycode.cpp
+msgid "Menu"
+msgstr "é¸å–®"
+
+#: src/keycode.cpp
+msgid "Middle Button"
+msgstr "中éµ"
+
+#: src/keycode.cpp
+msgid "Minus"
+msgstr "減號"
+
+#: src/keycode.cpp
+msgid "Mode Change"
+msgstr "模å¼è®Šæ›´"
+
+#: src/keycode.cpp
+msgid "Next"
+msgstr "下一個"
+
+#: src/keycode.cpp
+msgid "Nonconvert"
+msgstr "ä¸è½‰æ›"
+
+#: src/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: src/keycode.cpp
+msgid "Numpad *"
+msgstr "æ•¸å­—éµ *"
+
+#: src/keycode.cpp
+msgid "Numpad +"
+msgstr "æ•¸å­—éµ +"
+
+#: src/keycode.cpp
+msgid "Numpad -"
+msgstr "æ•¸å­—éµ -"
+
+#: src/keycode.cpp
+msgid "Numpad /"
+msgstr "æ•¸å­—éµ /"
+
+#: src/keycode.cpp
+msgid "Numpad 0"
+msgstr "æ•¸å­—éµ 0"
+
+#: src/keycode.cpp
+msgid "Numpad 1"
+msgstr "æ•¸å­—éµ 1"
+
+#: src/keycode.cpp
+msgid "Numpad 2"
+msgstr "æ•¸å­—éµ 2"
+
+#: src/keycode.cpp
+msgid "Numpad 3"
+msgstr "æ•¸å­—éµ 3"
+
+#: src/keycode.cpp
+msgid "Numpad 4"
+msgstr "æ•¸å­—éµ 4"
+
+#: src/keycode.cpp
+msgid "Numpad 5"
+msgstr "æ•¸å­—éµ 5"
+
+#: src/keycode.cpp
+msgid "Numpad 6"
+msgstr "æ•¸å­—éµ 6"
+
+#: src/keycode.cpp
+msgid "Numpad 7"
+msgstr "æ•¸å­—éµ 7"
+
+#: src/keycode.cpp
+msgid "Numpad 8"
+msgstr "æ•¸å­—éµ 8"
+
+#: src/keycode.cpp
+msgid "Numpad 9"
+msgstr "æ•¸å­—éµ 9"
+
+#: src/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM 清除"
+
+#: src/keycode.cpp
+msgid "PA1"
+msgstr "PA1"
+
+#: src/keycode.cpp
+msgid "Pause"
+msgstr "æš«åœ"
+
+#: src/keycode.cpp
+msgid "Period"
+msgstr "å¥è™Ÿ"
+
+#: src/keycode.cpp
+msgid "Plus"
+msgstr "加號"
+
+#: src/keycode.cpp
+msgid "Print"
+msgstr "列å°"
+
+#: src/keycode.cpp
+msgid "Prior"
+msgstr "上一個"
+
+#: src/keycode.cpp
+msgid "Return"
+msgstr "Return"
+
+#: src/keycode.cpp
+msgid "Right Button"
+msgstr "å³éµ"
+
+#: src/keycode.cpp
+msgid "Right Control"
+msgstr "å³é‚Š Control"
+
+#: src/keycode.cpp
+msgid "Right Menu"
+msgstr "å³é‚Šé¸å–®éµ"
+
+#: src/keycode.cpp
+msgid "Right Shift"
+msgstr "å³é‚Š Shift"
+
+#: src/keycode.cpp
+msgid "Right Windows"
+msgstr "å³æ–¹è¦–窗"
+
+#: src/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#: src/keycode.cpp
+msgid "Select"
+msgstr "é¸æ“‡"
+
+#: src/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/keycode.cpp
+msgid "Sleep"
+msgstr "ç¡çœ "
+
+#: src/keycode.cpp
+msgid "Snapshot"
+msgstr "螢幕截圖"
+
+#: src/keycode.cpp
+msgid "Space"
+msgstr "Space"
+
+#: src/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
+
+#: src/keycode.cpp
+msgid "Up"
+msgstr "上"
+
+#: src/keycode.cpp
+msgid "X Button 1"
+msgstr "X 按鈕 1"
+
+#: src/keycode.cpp
+msgid "X Button 2"
+msgstr "X 按鈕 2"
+
+#: src/keycode.cpp
+msgid "Zoom"
+msgstr "縮放"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
+"Used to move a suitable spawn area of low land close to (0, 0).\n"
+"The default is suitable for mandelbrot sets, it needs to be edited for julia "
+"sets.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+"在「比例尺ã€ä¸­å–®ä½çš„ (X,Y,Z) å移。\n"
+"用於移動é©åˆçš„低地生æˆå€åŸŸé è¿‘ (0, 0)。\n"
+"é è¨­å€¼é©åˆæ›¼å¾·åšé›†åˆï¼Œè‹¥è¦ç”¨æ–¼æœ±åˆ©äºžé›†åˆå‰‡å¿…須修改。\n"
+"範åœå¤§ç´„在 -2 至 2 間。乘以節點的å移值。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+"0 = 包å«æ–œçŽ‡è³‡è¨Šçš„視差é®è”½ï¼ˆè¼ƒå¿«ï¼‰ã€‚\n"
+"1 = 替æ›è²¼åœ–(較慢,較準確)。"
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr "3D 雲朵"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr "3D 模å¼"
+
+#: 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"
+"- pageflip: quadbuffer based 3d."
+msgstr ""
+"3D 支æ´ã€‚\n"
+"ç›®å‰å·²æ”¯æ´ï¼š\n"
+"- 無:無 3D 輸出。\n"
+"- 浮雕:é’色ï¼å“紅色彩色 3D。\n"
+"- 交錯的:基於å振螢幕的奇ï¼å¶è¡Œæ”¯æ´ã€‚\n"
+"- 頂底:將螢幕分離為頂部ï¼åº•éƒ¨ã€‚\n"
+"- 一邊一個:將螢幕分離為一邊一個。\n"
+"- ç¿»é ï¼šåŸºæ–¼å››é‡ç·©è¡çš„ 3D。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+"新地圖的已é¸å–種å­ï¼Œç•™ç©ºå‰‡ç‚ºéš¨æ©Ÿã€‚\n"
+"當在主é¸å–®ä¸­å»ºç«‹æ–°ä¸–界的時候將會被覆寫。"
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr "當伺æœå™¨ç•¶æ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰å®¢æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr "當伺æœå™¨é—œæ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰å®¢æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of emerge queues"
+msgstr "發生佇列的絕å°é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr "在空氣中的加速"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Management interval"
+msgstr "活動å€å¡Šç¯„åœ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Active Block Modifier 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 ""
+"è¦é€£ç·šåˆ°çš„地å€ã€‚\n"
+"把這個留空以啟動本機伺æœå™¨ã€‚\n"
+"注æ„在主é¸å–®ä¸­çš„地å€æ¬„會覆寫這個設定。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr "調整您螢幕的 DPI 設定(並ä¸åªæœ‰ X11/Android)例如 4K 螢幕。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
+"This setting is for the client only and is ignored by the server."
+msgstr ""
+"調整亮度表的伽瑪編碼。較低的數值會較亮。\n"
+"這個設定是給客戶端使用的,會被伺æœå™¨å¿½ç•¥ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "進階"
+
+#: src/settings_translation_file.cpp
+msgid "Altitude Chill"
+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 "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.\n"
+"If you want to announce your ipv6 address, use serverlist_url = v6.servers."
+"minetest.net."
+msgstr ""
+"公佈到這個伺æœå™¨åˆ—表。\n"
+"若您想è¦å…¬ä½ˆæ‚¨çš„ IPv6 地å€ï¼Œä½¿ç”¨ serverlist_url = v6.servers.minetest.net。"
+
+#: src/settings_translation_file.cpp
+msgid "Approximate (X,Y,Z) scale of fractal in nodes."
+msgstr "大約 (X,Y,Z) 的節點碎形è¦æ¨¡ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr "è©¢å•æ˜¯å¦åœ¨ç•¶æ©Ÿå¾Œé‡æ–°é€£ç·š"
+
+#: src/settings_translation_file.cpp
+msgid "Automaticaly report to the serverlist."
+msgstr "自動回報到伺æœå™¨åˆ—表。"
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "後退éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height"
+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 "Bilinear filtering"
+msgstr "雙線性éŽæ¿¾å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr "ç¶å®šåœ°å€"
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr "全螢幕模å¼ä¸­çš„ä½å…ƒï¼åƒç´ ï¼ˆåˆç¨±è‰²å½©æ·±åº¦ï¼‰ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "在玩家內構建"
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr "映射貼圖"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "æ”影機平滑"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "在電影模å¼ä¸­æ”影機平滑"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr "æ”影機切æ›æ›´æ–°æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr "洞穴噪音 #1"
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr "洞穴噪音 #2"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Cave width"
+msgstr "螢幕寬度"
+
+#: src/settings_translation_file.cpp
+msgid "Caves and tunnels form at the intersection of the two noises"
+msgstr "洞穴與隧é“å½¢æˆå…©ç¨®å™ªéŸ³çš„交集"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "èŠå¤©æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr "èŠå¤©åˆ‡æ›æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Choice of 18 fractals from 9 formulas.\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 ""
+"從 9 種公å¼è£¡é¸å– 18 種碎形。\n"
+"1 = 4D \"Roundy\" mandelbrot set.\n"
+"2 = 4D \"Roundy\" julia set.\n"
+"3 = 4D \"Squarry\" mandelbrot set.\n"
+"4 = 4D \"Squarry\" julia set.\n"
+"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" julia set.\n"
+"7 = 4D \"Variation\" mandelbrot set.\n"
+"8 = 4D \"Variation\" julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
+"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" julia set.\n"
+"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
+"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" julia set."
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "方塊大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "電影模å¼"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "電影模å¼æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr "清除é€æ˜Žæ質"
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr "客戶端與伺æœå™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr "攀爬速度"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud height"
+msgstr "雲朵高度"
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr "雲朵範åœ"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr "雲朵"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr "雲朵是客戶端的特效。"
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr "é¸å–®ä¸­çš„雲朵"
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr "彩色迷霧"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+"å—信任的 Mod 列表,以逗號分隔,其å¯å­˜å–ä¸å®‰å…¨çš„\n"
+"功能,å³ä¾¿ mod 安全性是(經由 request_insecure_environment())。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-seperated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+"以逗號分隔的 mod 清單,讓您å¯ä»¥å­˜å– HTTP API,\n"
+"å…¶å¯å¾žç¶²éš›ç¶²è·¯ä¸Šå‚³åŠä¸‹è¼‰è³‡æ–™ã€‚"
+
+#: 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 "終端機 alpha 值"
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr "終端機é¡è‰²"
+
+#: src/settings_translation_file.cpp
+msgid "Console key"
+msgstr "終端機按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "連續å‰é€²"
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward movement (only used for testing)."
+msgstr "連續å‰é€²ç§»å‹•ï¼ˆåƒ…供測試使用)。"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "控制"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
+"unchanged."
+msgstr ""
+"控制日ï¼å¤œå¾ªç’°çš„長度。\n"
+"範例:72 = 20分é˜ï¼Œ360 = 4分é˜ï¼Œ1 = 24å°æ™‚,0 = æ—¥ï¼å¤œï¼ä¸€åˆ‡ä¿æŒä¸è®Šã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls size of deserts and beaches in Mapgen v6.\n"
+"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
+msgstr ""
+"控制在 Mapgen v6 中的沙漠與沙ç˜å¤§å°ã€‚\n"
+"當 snowbiomes 啟用時「mgv6_freq_desertã€æœƒè¢«å¿½ç•¥ã€‚"
+
+#: 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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr "當機訊æ¯"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable lava features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"在洞穴中建立無法é æ¸¬çš„岩漿功能。\n"
+"這些會讓挖礦變得困難。設為零以åœç”¨ã€‚ (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Creates unpredictable water features in caves.\n"
+"These can make mining difficult. Zero disables them. (0-10)"
+msgstr ""
+"在洞穴中建立無法é æ¸¬çš„水功能。\n"
+"這些會讓挖礦變得困難。設為零以åœç”¨ã€‚ (0-10)"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr "åå­— alpha 值"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr "åå­— alpha 值(ä¸é€æ˜Žï¼Œ0 至 255間)。"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr "å字色彩"
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr "å字色彩 (R,G,B)。"
+
+#: src/settings_translation_file.cpp
+msgid "Crouch speed"
+msgstr "è¹²ä¼é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr "DPI"
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr "傷害"
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "除錯資訊切æ›æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "除錯記錄等級"
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr "專用伺æœå™¨æ­¥é©Ÿ"
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr "é è¨­åŠ é€Ÿ"
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr "é è¨­éŠæˆ²"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+"當建立新世界時的é è¨­éŠæˆ²ã€‚\n"
+"當從主é¸å–®å»ºç«‹ä¸–界時將會被覆寫。"
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr "é è¨­å¯†ç¢¼"
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "é è¨­ç‰¹æ¬Š"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"cURL çš„é è¨­é€¾æ™‚,以毫秒計算。\n"
+"åªæœƒåœ¨èˆ‡ cURL 一åŒç·¨è­¯çš„情æ³ä¸‹æ‰æœƒæœ‰å½±éŸ¿ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+"定義æ質的採樣步驟。\n"
+"較高的值會有較平滑的一般地圖。"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr "定義玩家最大å¯å‚³é€çš„è·é›¢ï¼Œä»¥æ–¹å¡Šè¨ˆï¼ˆ0 = ä¸é™åˆ¶ï¼‰ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr "顯示工具æ示å‰çš„延é²ï¼Œä»¥æ¯«ç§’計算。"
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr "ä¸æŽ¨è–¦ä½¿ç”¨ Lua API 處ç†"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr "您會發ç¾å¤§åž‹æ´žç©´çš„深度。"
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find massive caves."
+msgstr "您會發ç¾å¤§é‡æ´žç©´çš„深度。"
+
+#: src/settings_translation_file.cpp
+msgid "Descending speed"
+msgstr "éžæ¸›é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr "伺æœå™¨çš„æ述,會在玩家加入時顯示,也會顯示在伺æœå™¨åˆ—表上。"
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr "異步化方塊動畫"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profile data. Useful for mod developers."
+msgstr "詳細的 mod æª”æ¡ˆè³‡æ–™ã€‚å° mod 開發者很有用。"
+
+#: src/settings_translation_file.cpp
+msgid "Detailed mod profiling"
+msgstr "詳細的 mod 檔案"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Determines terrain shape.\n"
+"The 3 numbers in brackets control the scale of the\n"
+"terrain, the 3 numbers should be identical."
+msgstr ""
+"決定地形的形狀。\n"
+"在括號中的 3 個數字控制著\n"
+"地形的è¦æ¨¡ï¼Œé‚£ä¸‰å€‹æ•¸å­—應該è¦æ˜¯ç›¸åŒçš„。"
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr "åœç”¨å作弊"
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr "ä¸å…許空密碼"
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr "伺æœå™¨çš„域å,將會在伺æœå™¨åˆ—表中顯示。"
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "輕擊兩次跳èºä»¥é£›è¡Œ"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "輕擊兩次跳èºéµä»¥åˆ‡æ›æˆé£›è¡Œæ¨¡å¼ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "丟棄物å“éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug infos."
+msgstr "轉儲 mapgen 的除錯資訊。"
+
+#: src/settings_translation_file.cpp
+msgid "Enable VBO"
+msgstr "啟用 VBO"
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr "啟用 mod 安全性"
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr "啟用玩家傷害åŠç€•æ­»ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "啟用隨機使用者輸入(僅供測試使用)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+"啟用包å«ç°¡æ˜“環境光é®è”½çš„平滑光。\n"
+"åœç”¨ä»¥å–得速度或ä¸åŒçš„外觀。"
+
+#: 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 ""
+"啟用以讓舊的客戶端無法連線。\n"
+"較舊的客戶端在這個æ„義上相容,它們ä¸æœƒåœ¨é€£ç·šè‡³\n"
+"新伺æœå™¨æ™‚當掉,但它們å¯èƒ½æœƒä¸æ”¯æ´ä¸€äº›æ‚¨é æœŸæœƒæœ‰çš„新功能。"
+
+#: 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 ""
+"啟用é ç«¯åª’體伺æœå™¨çš„使用(若由伺æœå™¨æ供的話)。\n"
+"當連線到伺æœå™¨æ™‚,é ç«¯ä¼ºæœå™¨æ供了一個\n"
+"顯著較快的下載媒體(如æ質)的方å¼ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n"
+"to IPv6 clients, depending on system configuration.\n"
+"Ignored if bind_address is set."
+msgstr ""
+"啟用ï¼åœç”¨åŸ·è¡Œ IPv6 伺æœå™¨ã€‚IPv6 伺æœå™¨å¯èƒ½æœƒé™åˆ¶åªæœ‰\n"
+"IPv6 客戶端æ‰èƒ½é€£ç·šï¼Œå–決於系統設定。\n"
+"當 bind_address 被設定時將會被忽略。"
+
+#: 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 ""
+"為æ質啟用貼圖轉儲。普通地圖需è¦æ質包的支æ´\n"
+"或是自動生æˆã€‚\n"
+"必須啟用著色器。"
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr "啟用é¢æ—‹è½‰æ–¹å‘的網格快å–。"
+
+#: src/settings_translation_file.cpp
+msgid "Enables filmic tone mapping"
+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 ""
+"啟用忙碌的一般地圖生æˆï¼ˆæµ®é›•æ•ˆæžœï¼‰ã€‚\n"
+"必須啟用貼圖轉儲。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"啟用視差é®è”½è²¼åœ–。\n"
+"必須啟用著色器。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+"實驗性é¸é …,當設定到大於零的值時\n"
+"也許會造æˆåœ¨æ–¹å¡Šé–“有視覺空隙。"
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr "在暫åœé¸å–®ä¸­çš„ FPS"
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr "FSAA"
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing"
+msgstr "墜è½ä¸Šä¸‹ç§»å‹•"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font"
+msgstr "備用字型"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr "後備字型陰影"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr "後備字型陰影 alpha 值"
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr "後備字型大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "快速按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr "快速模å¼åŠ é€Ÿ"
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr "快速模å¼é€Ÿåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "快速移動"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via use key).\n"
+"This requires the \"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 Multiplayer Tab."
+msgstr ""
+"在 客戶端/伺æœå™¨æ¸…å–®/ 中的檔案包å«äº†é¡¯ç¤ºåœ¨å¤šäººéŠæˆ²åˆ†é ä¸­æ‚¨æœ€æ„›çš„伺æœå™¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Filler Depth"
+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 ""
+"å·²éŽæ¿¾çš„æ質會與完全é€æ˜Žçš„é„°å±…æ··åˆ RGB 值,\n"
+"PNG 最佳化器通常會丟棄,有時候會導致é€æ˜Žæ質\n"
+"會有黑邊或亮邊。套用這個éŽæ¿¾å™¨ä»¥åœ¨æ質載入時\n"
+"清ç†é€™äº›æ±è¥¿ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr "éŽæ¿¾å™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr "固定的地圖種å­"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "飛行按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "飛行"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr "霧"
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr "霧切æ›éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Font path"
+msgstr "字型路徑"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr "å­—åž‹é™°å½±"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr "字型陰影 alpha 值"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha (opaqueness, between 0 and 255)."
+msgstr "å­—åž‹é™°å½± alpha(ä¸é€æ˜Žåº¦ï¼Œä»‹æ–¼ 0 到 255)。"
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow offset, if 0 then shadow will not be drawn."
+msgstr "å­—åž‹é™°å½±å移,若為 0 則陰影將ä¸æœƒè¢«ç¹ªè£½ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr "字型大å°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Format of screenshots."
+msgstr "儲存螢幕截圖的路徑。"
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "å‰é€²éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Freetype fonts"
+msgstr "Freetype å­—åž‹"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr "è¦åœ¨å®¢æˆ¶ç«¯ä¸Šå¾žå¤šé çš„å€å¡Šé–‹å§‹ç”Ÿæˆï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr "è¦æŠŠå¤šé çš„å€å¡Šé€åˆ°å®¢æˆ¶ç«¯ï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes)."
+msgstr "客戶端上知é“多é çš„å€å¡Šä¸Šçš„物件,以地圖å€å¡Šè¨ˆç®—(16 個節點)。"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr "全螢幕"
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr "全螢幕 BPP"
+
+#: 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 "圖形使用者介é¢ç¸®æ”¾æ¯”例éŽæ¿¾å™¨ txr2img"
+
+#: src/settings_translation_file.cpp
+msgid "Gamma"
+msgstr "Gamma"
+
+#: src/settings_translation_file.cpp
+msgid "General"
+msgstr "一般"
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr "生æˆä¸€èˆ¬åœ°åœ–"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations.\n"
+"The default flags set in the engine are: caves, light, decorations\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."
+msgstr ""
+"全域地圖產生屬性。\n"
+"在 Mapgen v6 中,「decorationsã€æ——標控制所有除了樹木\n"
+"與å¢æž—以外的è£é£¾ï¼Œåœ¨å…¶ä»–所有的 mapgen 中,這個旗標控制所有è£é£¾ã€‚\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr "圖形"
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr "é‡åŠ›"
+
+#: src/settings_translation_file.cpp
+msgid "HTTP Mods"
+msgstr "HTTP Mod"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "HUD 切æ›éµ"
+
+#: 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 ""
+"處ç†å·²æ£„用的 Lua API 呼å«ï¼š\n"
+"- 舊å¼ï¼šï¼ˆå˜—試)模仿舊的行為(release 模å¼é è¨­å€¼ï¼‰ã€‚\n"
+"- 紀錄:模仿並記錄已棄用呼å«çš„åå‘追蹤(debug 模å¼é è¨­å€¼ï¼‰\n"
+"- 錯誤:在使用到棄用的呼å«æ™‚中止(建議 mod 開發者使用)。"
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr "åˆå§‹è¦–窗大å°çš„高度組件。"
+
+#: src/settings_translation_file.cpp
+msgid "Height on which clouds are appearing."
+msgstr "雲朵è¦å‡ºç¾çš„高度。"
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr "高精度 FPU"
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr "伺æœå™¨çš„首é ï¼Œæœƒåœ¨ä¼ºæœå™¨æ¸…單中顯示。"
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers"
+msgstr "æ²³æµå¤šæ·±"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How large area of blocks are subject to the active block stuff, stated in "
+"mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run."
+msgstr ""
+"æ´»èºçš„å€å¡Šè¦éµå¾ªå¤šå¤§çš„å€åŸŸï¼Œä»¥åœ°åœ–å€å¡Šï¼ˆ16 個節點)計。\n"
+"活動å€å¡Šç‰©ä»¶å°‡æœƒè¢«è¼‰å…¥ï¼Œè€Œ ABM 會執行。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How many blocks are flying in the wire simultaneously for the whole server."
+msgstr "整個伺æœå™¨æœ‰å¤šå°‘個å€å¡ŠåŒæ™‚以線性方å¼é£›è¡Œã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "How many blocks are flying in the wire simultaneously per client."
+msgstr "æ¯å€‹å®¢æˆ¶ç«¯æœ‰å¤šå°‘個å€å¡ŠåŒæ™‚以線性方å¼é£›è¡Œã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+"在å–消載入å‰è¦æœ‰å¤šå°‘未使用的地圖å€å¡Šã€‚\n"
+"較高的值會較平滑,但會使用更多的記憶體。"
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers"
+msgstr "æ²³æµå¤šå¯¬"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr "IPv6"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr "IPv6 伺æœå™¨"
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 support."
+msgstr "IPv6 支æ´ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+"è‹¥ FPS 高於此,以休眠的方å¼é™åˆ¶å®ƒ\n"
+"以é¿å…無謂的浪費 CPU 的電力。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
+"enabled."
+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"
+"這需è¦åœ¨ä¼ºæœå™¨ä¸Šçš„「noclipã€ç‰¹æ¬Šã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
+"and 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 ""
+"若啟用,動作會被記錄以供復原。\n"
+"這個é¸é …åªæœƒåœ¨ä¼ºæœå™¨å•Ÿå‹•æ™‚讀å–。"
+
+#: 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 ""
+"若啟用,無效的世界資訊將ä¸æœƒé€ æˆä¼ºæœå™¨é—œæ©Ÿã€‚\n"
+"åªåœ¨æ‚¨çŸ¥é“您在幹嘛時æ‰å•Ÿç”¨é€™å€‹é¸é …。"
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr "若啟用,新玩家將無法以空密碼加入。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+"若啟用,您å¯ä»¥åœ¨æ‚¨ç«™ç«‹çš„ä½ç½®ï¼ˆè…³èˆ‡çœ¼ç›çš„高度)放置方塊。當在å°å€åŸŸè£¡èˆ‡ç¯€é»žç›’"
+"一åŒå·¥ä½œæ™‚éžå¸¸æœ‰ç”¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr "如果設定了這個,玩家將會總是在指定的ä½ç½®é‡ç”Ÿã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "忽略世界錯誤"
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr "éŠæˆ²ä¸­"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr "éŠæˆ²å…§èŠå¤©è¦–窗背景 alpha 值(ä¸é€æ˜Žåº¦ï¼Œä»‹æ–¼ 0 到 255 間)。"
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr "éŠæˆ²å…§èŠå¤©è¦–窗背景é¡è‰² (R,G,B)。"
+
+#: 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 "Item entity TTL"
+msgstr "物å“主體 TTL"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Controls the amount of fine detail."
+msgstr ""
+"éžè¿´å‡½æ•¸çš„迭代。\n"
+"控制細節的å“質。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: W component of hypercomplex constant determining julia "
+"shape.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 W 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: X component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 X 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Y component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 Y 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only: Z component of hypercomplex constant determining julia "
+"shape.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"僅朱利亞集åˆï¼šå¯äº¤æ›è¶…複數的 Z 元素決定了 朱利亞形狀。\n"
+"在 3D 碎形上沒有效果。\n"
+"範åœç´„在 -2 至 2 間。"
+
+#: 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 ""
+"é™ä½Žè¦–野範åœçš„按éµã€‚\n"
+"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Key for increasing the viewing 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 ""
+"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 ""
+"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 ""
+"Key for moving the player backward.\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 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 ""
+"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 ""
+"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 ""
+"Key for opening the chat console.\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 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.\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 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 ""
+"Key for printing debug stacks. Used for development.\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 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_ é™ä½Žåœç”¨æ™‚,也會用於å‘下攀爬與在水中下潛。\n"
+"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"用來切æ›ç¬¬ä¸€èˆ‡ç¬¬ä¸‰äººç¨±è¦–角的按éµã€‚\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 ""
+"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 ""
+"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 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 ""
+"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 ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"åˆ‡æ› noclip 模å¼çš„按éµã€‚\n"
+"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camrea update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"切æ›è¦–角更新的按éµã€‚僅å°é–‹ç™¼æœ‰ç”¨ã€‚\n"
+"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"切æ›é¡¯ç¤ºé™¤éŒ¯è³‡è¨Šçš„按éµã€‚\n"
+"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: 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 ""
+"Key for toggling the display of the chat.\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 toggling the display of the fog.\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 toggling the display of the profiler. Used for development.\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 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 "Key use for climbing/descending"
+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 "Lava Features"
+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 ""
+"樹葉樣å¼ï¼š\n"
+"- 花ä¿ï¼šæ‰€æœ‰è¡¨é¢å‡å¯è¦‹\n"
+"- 簡單:åªæœ‰å¤–部表é¢ï¼Œè‹¥æœ‰å·²å®šç¾©çš„ special_tiles,則會使用它\n"
+"- ä¸é€æ˜Žï¼šåœç”¨é€æ˜Žåº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "å·¦éµ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over network."
+msgstr "伺æœå™¨ tick 的長度與相關物件的間隔通常é€éŽç¶²è·¯æ›´æ–°ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between ABM execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution 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 ""
+"è¦è¢«å¯«å…¥åˆ° debug.txt 的紀錄等級:\n"
+"- <nothing> (ä¸è¨˜éŒ„)\n"
+"- none(無等級的訊æ¯ï¼‰\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues on disk"
+msgstr "在ç£ç¢Ÿä¸Šå‡ºç¾ä½‡åˆ—çš„é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Limit of emerge queues to generate"
+msgstr "è¦ç”Ÿæˆçš„出ç¾ä½‡åˆ—çš„é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+"é™åˆ¶å¹³è¡Œçš„ HTTP 請求數é‡ã€‚影響:\n"
+"- 媒體擷å–,若伺æœå™¨ä½¿ç”¨ remote_media 設定。\n"
+"- 伺æœå™¨æ¸…單下載與伺æœå™¨å…¬å‘Šã€‚\n"
+"- 從主é¸å–®ä¸‹è¼‰çš„æ±è¥¿ï¼ˆä¾‹å¦‚ mod 管ç†å“¡ï¼‰ã€‚\n"
+"åªæœƒåœ¨åŒ…å« cURL 進行編譯時有影響。"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr "液體æµå‹•æ€§"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr "液體æµå‹•å¹³æ»‘"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr "液體迴路最大值"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr "液體佇列清除時間"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sink"
+msgstr "液體下沉"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "液體更新間隔,以秒計。"
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr "液體更新 tick"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu game manager"
+msgstr "主é¸å–®éŠæˆ²ç®¡ç†å“¡"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu mod manager"
+msgstr "主é¸å–® mod 管ç†å“¡"
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr "主é¸å–®æŒ‡ä»¤ç¨¿"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr "讓霧與天空的é¡è‰²å–決於時間(黎明ï¼æ—¥è½ï¼‰èˆ‡è§€çœ‹æ–¹å‘。"
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr "讓 DirectX 與 LuaJIT 一åŒé‹ä½œã€‚若其造æˆéº»ç…©å‰‡è«‹åœç”¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr "地圖目錄"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill' makes higher elevations colder, which may cause biome "
+"issues.\n"
+"'humid_rivers' modifies the humidity around rivers and in areas where water "
+"would tend to pool,\n"
+"it may interfere with delicately adjusted biomes.\n"
+"The default flags set in the engine are: altitude_chill, humid_rivers\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."
+msgstr ""
+"專用於 Mapgen v6 的地圖生æˆå±¬æ€§ã€‚\n"
+"當 snowbiomes 與å¢æž—都啟用時,å¢æž—旗標會被忽略。\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#: 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.\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."
+msgstr ""
+"專用於 Mapgen flat 的地圖生æˆå±¬æ€§ã€‚\n"
+"å¶è€Œæœƒåœ¨å¹³å¦çš„世界中加入湖泊與山丘。\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
+"flag is ignored.\n"
+"The default flags set in the engine are: biomeblend, mudflow\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with 'no' are used to explicitly disable them."
+msgstr ""
+"專用於 Mapgen v6 的地圖生æˆå±¬æ€§ã€‚\n"
+"當 snowbiomes 與å¢æž—都啟用時,å¢æž—旗標會被忽略。\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"The 'ridges' flag controls the rivers.\n"
+"The default flags set in the engine are: mountains, ridges\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."
+msgstr ""
+"專用於 Mapgen v6 的地圖生æˆå±¬æ€§ã€‚\n"
+"當 snowbiomes 與å¢æž—都啟用時,å¢æž—旗標會被忽略。\n"
+"未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "地圖生æˆé™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr "地圖儲存間隔"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr "地圖å€å¡Šé™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr "地圖å€å¡Šå¸é™¤é€¾æ™‚"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Mapgen 山谷"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome heat noise parameters"
+msgstr "Mapgen ç”Ÿç‰©ç¾¤è½ ç†± 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity blend noise parameters"
+msgstr "Mapgen ç”Ÿç‰©ç¾¤è½ æ¿•åº¦ æ··åˆ å™ªéŸ³ åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen biome humidity noise parameters"
+msgstr "Mapgen ç”Ÿç‰©ç¾¤è½ æ¿•åº¦ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Mapgen 除錯"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Mapgen 旗標"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat"
+msgstr "Mapgen flat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flat cave width"
+msgstr "Mapgen flat 大型洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave1 noise parameters"
+msgstr "Mapgen flat æ´žç©´1 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat cave2 noise parameters"
+msgstr "Mapgen flat æ´žç©´2 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat filler depth noise parameters"
+msgstr "Mapgen flat 填充器 深度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat flags"
+msgstr "Mapgen flat 旗標"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat ground level"
+msgstr "Mapgen flat 地é¢"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill steepness"
+msgstr "Mapgen flat 山丘å¡åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat hill threshold"
+msgstr "Mapgen flat 山丘閾值"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake steepness"
+msgstr "Mapgen flat 湖泊å¡åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat lake threshold"
+msgstr "Mapgen flat 湖泊閾值"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat large cave depth"
+msgstr "Mapgen flat 大型洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen flat terrain noise parameters"
+msgstr "Mapgen flat 地形 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal"
+msgstr "地圖產生器分形"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen fractal cave width"
+msgstr "Mapgen fractal slice w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave1 noise parameters"
+msgstr "Mapgen fractal æ´žç©´1 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal cave2 noise parameters"
+msgstr "Mapgen fractal æ´žç©´2 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal filler depth noise parameters"
+msgstr "Mapgen fractal 填充器 深度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal fractal"
+msgstr "Mapgen fractal fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal iterations"
+msgstr "Mapgen fractal 迭代"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia w"
+msgstr "Mapgen fractal 朱利亞 w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia x"
+msgstr "Mapgen fractal 朱利亞 x"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia y"
+msgstr "Mapgen fractal 朱利亞 y"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal julia z"
+msgstr "Mapgen fractal 朱利亞 z"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal offset"
+msgstr "Mapgen fractal å移"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal scale"
+msgstr "Mapgen fractal è¦æ¨¡"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal seabed noise parameters"
+msgstr "Mapgen fractal 海床 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen fractal slice w"
+msgstr "Mapgen fractal slice w"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen heat blend noise parameters"
+msgstr "Mapgen 熱 æ··åˆ å™ªéŸ³ åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Mapgen å稱"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5"
+msgstr "Mapgen v5"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v5 cave width"
+msgstr "Mapgen flat 大型洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave1 noise parameters"
+msgstr "Mapgen v5 æ´žç©´1 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 cave2 noise parameters"
+msgstr "Mapgen v5 æ´žç©´2 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 factor noise parameters"
+msgstr "Mapgen v5 å› å­ å™ªéŸ³ åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 filler depth noise parameters"
+msgstr "Mapgen v5 填充器 深度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v5 height noise parameters"
+msgstr "Mapgen v5 高度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6"
+msgstr "Mapgen v6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 apple trees noise parameters"
+msgstr "Mapgen v6 蘋果樹 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach frequency"
+msgstr "Mapgen v6 æµ·ç˜é »çŽ‡"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 beach noise parameters"
+msgstr "Mapgen v6 æµ·ç˜ å™ªéŸ³ åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 biome noise parameters"
+msgstr "Mapgen v6 ç”Ÿç‰©ç¾¤è½ å™ªéŸ³ åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 cave noise parameters"
+msgstr "Mapgen v6 æ´žç©´ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 desert frequency"
+msgstr "Mapgen v6 沙漠頻率"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 flags"
+msgstr "Mapgen v6 旗標"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 height select noise parameters"
+msgstr "Mapgen v6 高度 é¸æ“‡ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 humidity noise parameters"
+msgstr "Mapgen v6 濕度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 mud noise parameters"
+msgstr "Mapgen v6 泥土 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 steepness noise parameters"
+msgstr "Mapgen v6 å¡åº¦ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain altitude noise parameters"
+msgstr "Mapgen v6 地形 æµ·æ‹” 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 terrain base noise parameters"
+msgstr "Mapgen v6 地形 基礎 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v6 trees noise parameters"
+msgstr "Mapgen v6 樹 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7"
+msgstr "地圖產生器 v7"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen v7 cave width"
+msgstr "Mapgen flat 大型洞穴深度"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave1 noise parameters"
+msgstr "Mapgen v7 æ´žç©´1 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 cave2 noise parameters"
+msgstr "Mapgen v7 æ´žç©´2 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 filler depth noise parameters"
+msgstr "Mapgen v7 填充器 深度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 flags"
+msgstr "Mapgen v7 旗標"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 height select noise parameters"
+msgstr "Mapgen v7 高度 é¸æ“‡ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mount height noise parameters"
+msgstr "Mapgen v7 å騎 高度 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 mountain noise parameters"
+msgstr "Mapgen v7 å±± 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge noise parameters"
+msgstr "Mapgen v7 ridge 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 ridge water noise parameters"
+msgstr "Mapgen v7 ridge æ°´ 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain altitude noise parameters"
+msgstr "Mapgen v7 地形 æµ·æ‹” 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain base noise parameters"
+msgstr "Mapgen v7 地形 基礎 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen v7 terrain persistation noise parameters"
+msgstr "Mapgen v7 地形 æŒä¹… 噪音 åƒæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave depth"
+msgstr "大è¦æ¨¡æ´žç©´æ·±åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Massive cave noise"
+msgstr "大è¦æ¨¡æ´žç©´å™ªéŸ³"
+
+#: src/settings_translation_file.cpp
+msgid "Massive caves form here."
+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 "最高 FPS"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr "當éŠæˆ²æš«åœæ™‚的最高 FPS。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr "強制載入å€å¡Šçš„最大值"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "å¿«æ·åˆ—最大寬度"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr "å¯è¢«æ”¾é€²ä½‡åˆ—內等待載入的最大å€å¡Šæ•¸ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"Set to blank for an appropriate amount to be chosen automatically."
+msgstr ""
+"å¯è¢«æ”¾é€²ä½‡åˆ—內等待生æˆçš„最大å€å¡Šæ•¸ã€‚\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."
+msgstr ""
+"å¯è¢«æ”¾é€²ä½‡åˆ—內等待從檔案載入的最大å€å¡Šæ•¸ã€‚\n"
+"將其設定留空則會自動é¸æ“‡é©ç•¶çš„值。"
+
+#: 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 ""
+"è¦ä¿ç•™åœ¨è¨˜æ†¶é«”中的客戶端地圖å€å¡Šæœ€å¤§å€¼ã€‚\n"
+"設定為 -1 則ä¸é™åˆ¶æ•¸é‡ã€‚"
+
+#: 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 ""
+"æ¯å€‹å‚³é€æ­¥é©Ÿè¦å‚³é€çš„最大å°åŒ…數,若您的網路連線緩慢\n"
+"請試著é™ä½Žå®ƒï¼Œä½†è«‹ä¸è¦é™ä½Žåˆ°ä½Žæ–¼å…©å€çš„目標\n"
+"客戶端數。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can connect simultaneously."
+msgstr "最大å¯åŒæ™‚連線的玩家數。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr "最大éœæ…‹å„²å­˜æ–¼ä¸€å€‹å€å¡Šä¸­çš„物件數é‡ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+"è¦ç”¨æ–¼ç›®å‰è¦–窗的最大比例,放在快æ·åˆ—中。\n"
+"如果有æ±è¥¿è¦é¡¯ç¤ºåœ¨å¿«æ·åˆ—左邊或å³é‚Šæ™‚很有用。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously blocks send per client"
+msgstr "æ¯å€‹å®¢æˆ¶ç«¯æœ€å¤§åŒæ™‚傳é€å€å¡Šæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneously bocks send total"
+msgstr "總和最大åŒæ™‚傳é€å€å¡Šæ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr "檔案下載(例如下載 mod)å¯èŠ±è²»çš„最大時間,以毫秒計。"
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "最多使用者"
+
+#: src/settings_translation_file.cpp
+msgid "Maxmimum objects per block"
+msgstr "æ¯å€‹å€å¡Šæœ€å¤§ç‰©ä»¶æ•¸"
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr "é¸å–®"
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr "網狀快å–"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr "æ¯æ—¥è¨Šæ¯"
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr "æ¯æ—¥è¨Šæ¯æœƒåœ¨çŽ©å®¶é€£ç·šæ™‚顯示。"
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr "用於çªé¡¯ç‰©ä»¶çš„方法。"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "迷你地圖"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "迷你地圖按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr "迷你地圖掃æ高度"
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size for filters"
+msgstr "éŽæ¿¾å™¨çš„最大æ質大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr "映射貼圖"
+
+#: src/settings_translation_file.cpp
+msgid "Mod profiling"
+msgstr "Mod 分æžå™¨"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore details URL"
+msgstr "Modstore 詳細資訊 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore download URL"
+msgstr "Modstore 下載 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Modstore mods list URL"
+msgstr "Modstore mod 清單 URL"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "等寬字型路徑"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr "等寬字型大å°"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "滑鼠éˆæ•åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "滑鼠éˆæ•åº¦å€æ•¸ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"è½å·®æ™ƒå‹•çš„å€æ•¸ã€‚\n"
+"舉例來說:設為 0 å°±ä¸æœƒæœ‰è¦–野晃動;1.0 是一般情æ³ï¼›2.0 為雙å€ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+"視野晃動的å€æ•¸ã€‚\n"
+"舉例來說:設為 0 å°±ä¸æœƒæœ‰è¦–野晃動;1.0 是一般情æ³ï¼›2.0 為雙å€ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this."
+msgstr ""
+"è¦ç”¨ä¾†å»ºç«‹æ–°ä¸–界的地圖產生器的å稱。\n"
+"在主é¸å–®ä¸­å»ºç«‹ä¸–界將會覆蓋它。"
+
+#: 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 ""
+"玩家å稱。\n"
+"當執行伺æœå™¨æ™‚,以此å稱連線的客戶端å³ç‚ºç®¡ç†å“¡ã€‚\n"
+"當從主é¸å–®å•Ÿå‹•æ™‚,這個將會被覆寫。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr "伺æœå™¨å稱,當玩家加入時會顯示,也會顯示在伺æœå™¨æ¸…單中。"
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr "網路"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+"è¦ç›£è½çš„網路埠 (UDP)。\n"
+"當從主é¸å–®å•Ÿå‹•æ™‚,這個值將會被覆寫。"
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr "新使用這需è¦è¼¸å…¥é€™å€‹å¯†ç¢¼ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Noclip"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Noclip 按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr "çªé¡¯ç¯€é»ž"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "NodeTimer interval"
+msgstr "時間傳é€é–“éš”"
+
+#: src/settings_translation_file.cpp
+msgid "Noise parameters for biome API temperature, humidity and biome blend."
+msgstr "噪音åƒæ•¸ä¾›ç”Ÿç‰©ç¾¤è½ API 溫度ã€æ¿•åº¦èˆ‡ç”Ÿç‰©æ··åˆä½¿ç”¨ã€‚"
+
+#: 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. Make this field blank, or increase this "
+"number\n"
+"to use multiple threads. On multiprocessor systems, this will improve mapgen "
+"speed greatly\n"
+"at the cost of slightly buggy caves."
+msgstr ""
+"è¦ä½¿ç”¨çš„出ç¾çš„執行緒數。讓這個欄ä½ç•™ç©ºï¼Œæˆ–是增大這個數字\n"
+"來使用多執行緒。在多處ç†å™¨çš„系統上,這將會大大地改善mapgen 的速度\n"
+"在ç¨æœ‰è‡­èŸ²çš„洞穴中的耗費資æºã€‚"
+
+#: 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 ""
+"å¯è¢« /clearobjects 一次載入的é¡å¤–å€å¡Šæ•¸é‡ã€‚\n"
+"這是與 sqlite 處ç†è€—費的折衷與\n"
+"記憶體耗費(根據經驗,4096=100MB)。"
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr "視差é®è”½è¿­ä»£æ¬¡æ•¸ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr "視差é®è”½æ•ˆæžœçš„總å差,通常是è¦æ¨¡/2。"
+
+#: 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 Scale"
+msgstr "視差é®è”½ä¿‚數"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr "視差é®è”½åå·®"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr "視差é®è”½è¿­ä»£"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr "視差é®è”½æ¨¡å¼"
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion strength"
+msgstr "視差é®è”½å¼·åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Path to TrueTypeFont or bitmap."
+msgstr "TrueType 字型或點陣字的路徑。"
+
+#: src/settings_translation_file.cpp
+msgid "Path to save screenshots at."
+msgstr "儲存螢幕截圖的路徑。"
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr "æ質目錄的路徑。所有æ質都會先從這裡æœå°‹ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "物ç†"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"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 ""
+"è¦é€£ç·šè‡³çš„埠 (UDP)。\n"
+"注æ„在主é¸å–®ä¸­çš„埠欄ä½æœƒè¦†è“‹é€™å€‹è¨­å®šã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr "é¿å… mod åšå‡ºä¸å®‰å…¨çš„舉動,åƒæ˜¯åŸ·è¡Œ shell 指令等。"
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler data print interval. 0 = disable. Useful for developers."
+msgstr "分æžå™¨è³‡æ–™å°å‡ºé–“隔。0 = åœç”¨ã€‚å°é–‹ç™¼è€…有用。"
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr "分æžå™¨åˆ‡æ›éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Profiling print interval"
+msgstr "分æžåˆ—å°é–“éš”"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+"雲å€çš„åŠå¾‘,以雲立方體的 64 個節點的數目計算。\n"
+"大於 26 的值將會在雲的角è½æœ‰éŠ³è§’的產生。"
+
+#: 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 "Remote media"
+msgstr "é ç«¯åª’é«”"
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr "é ç«¯åŸ "
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr "以自訂é¸å–®å–代é è¨­ä¸»é¸å–®ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "å³éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "å³éµé»žæ“Šé‡è¦†é–“éš”"
+
+#: src/settings_translation_file.cpp
+msgid "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 noise -- rivers occur close to zero"
+msgstr "æ²³æµå™ªéŸ³ -- 會在接近河æµæœ€ä½Žé»žçš„地方é‡åˆ°"
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr "返回記錄"
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr "圓形å°åœ°åœ–"
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr "由客戶端儲存接收到的地圖到ç£ç¢Ÿä¸Šã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr "儲存從伺æœå™¨æŽ¥æ”¶åˆ°çš„地圖"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale gui by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+"由使用者指定一個值來作為放大圖形使用者介é¢çš„比例。\n"
+"使用最近相鄰與å鋸齒éŽæ¿¾å™¨ä»¥æ”¾å¤§åœ–形使用者介é¢ã€‚\n"
+"這將å¯ä»¥è®“一些粗糙的邊緣變得較圓滑,並當\n"
+"比例縮å°æ™‚會混åˆåƒç´ ï¼Œä»£åƒ¹æ˜¯åœ¨æ¨¡ç³Šä¸€äº›\n"
+"邊緣的åƒç´ æ™‚會以éžæ•´æ•¸çš„大å°ç¸®æ”¾ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr "螢幕高度"
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr "螢幕寬度"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "螢幕截圖"
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr "螢幕截圖資料夾"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Screenshot format"
+msgstr "螢幕截圖資料夾"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+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 "Security"
+msgstr "安全"
+
+#: src/settings_translation_file.cpp
+msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr "請見 http://www.sqlite.org/pragma.html#pragma_synchronous"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr "邊框é¡è‰² (R,G,B) é¸å–框。"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr "色彩é¸å–框"
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr "寬度é¸å–框"
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr "伺æœå™¨ï¼å–®äººéŠæˆ²"
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr "伺æœå™¨ URL"
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr "伺æœå™¨åœ°å€"
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr "伺æœå™¨æè¿°"
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr "伺æœå™¨å稱"
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr "伺æœå™¨åŸ "
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr "伺æœå™¨æ¸…å–® URL"
+
+#: 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 ""
+"設定語言。留空以使用系統語言。\n"
+"變更後必須é‡æ–°å•Ÿå‹•ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"設定為真以啟用擺動的樹葉。\n"
+"å¿…é ˆåŒæ™‚啟用著色器。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"設定為真以啟用擺動的æ¤ç‰©ã€‚\n"
+"å¿…é ˆåŒæ™‚啟用著色器。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true enables waving water.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"設定為真以啟用波動的水。\n"
+"å¿…é ˆåŒæ™‚啟用著色器。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visul effects and may increase performance on some "
+"video cards.\n"
+"Thy only work with the OpenGL video backend."
+msgstr ""
+"著色器讓您å¯ä»¥æœ‰é€²éšŽè¦–覺效果並å¯èƒ½æœƒåœ¨æŸäº›é¡¯ç¤ºå¡ä¸Šå¢žå¼·æ•ˆèƒ½ã€‚\n"
+"這僅在 OpenGL 視訊後端上æ‰èƒ½é‹ä½œã€‚"
+
+#: 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 chunks to be generated at once by mapgen, stated in mapblocks (16 "
+"nodes)."
+msgstr "è¦ç”± mapgen 生æˆçš„å€å¡Šå¤§å°ï¼Œä»¥åœ°åœ–å€å¡Šï¼ˆ16 個節電)。"
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights"
+msgstr "å¡åº¦èˆ‡å¡«å……一åŒé‹ä½œä¾†ä¿®æ”¹é«˜åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr "平滑光"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when moving and looking around.\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 "Sound"
+msgstr "è²éŸ³"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+"客戶端從指定的 URL 而ä¸æ˜¯ä½¿ç”¨ UDP 抓å–媒體。\n"
+"$filename 應該å¯ä»¥é€éŽ cURL 從 $remote_media$filename å­˜å–。\n"
+"(當然,remote_media 部份應以斜線çµæŸï¼‰ã€‚\n"
+"沒有在其中的檔案將會以平常的方å¼æŠ“å–。"
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr "éœæ…‹é‡ç”Ÿé»ž"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr "生æˆä¹‹ä¸€èˆ¬åœ°åœ–的強度。"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of parallax."
+msgstr "視差強度。"
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr "åš´æ ¼å”議檢查"
+
+#: src/settings_translation_file.cpp
+msgid "Support older servers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr "åŒæ­¥çš„ SQLite"
+
+#: src/settings_translation_file.cpp
+msgid "Terrain Height"
+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 ""
+"山丘的地形噪音閾值。\n"
+"控制山丘覆蓋世界的比例。\n"
+"å¾€ 0.0 調整一å–得較大的比例。"
+
+#: 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 ""
+"湖泊的地形噪音閾值。\n"
+"控制湖泊覆蓋世界的比例。\n"
+"å¾€ 0.0 調整一å–得較大的比例。"
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr "æ質路徑"
+
+#: src/settings_translation_file.cpp
+msgid "The altitude at which temperature drops by 20C"
+msgstr "會é™ä½Žæ”æ° 20 度的高度"
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other filler"
+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 ""
+"新使用者會自動å–得的特權。\n"
+"在éŠæˆ²ä¸­è«‹è¦‹ /privs 以å–得在您的伺æœå™¨ä¸Šèˆ‡ mod 設定的完整清單。"
+
+#: src/settings_translation_file.cpp
+msgid "The rendering back-end for Irrlicht."
+msgstr "Irrlicht çš„æˆåƒå¾Œç«¯ã€‚"
+
+#: 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 ""
+"節點環境光é®è”½çš„強度(暗度)。\n"
+"愈低愈暗,愈高愈亮。這個設定的\n"
+"值的有效範åœæ˜¯ 0.25 到 4.0 間。如果\n"
+"值超出範åœï¼Œå…¶å°‡æœƒè¢«è¨­å®šç‚ºæœ€è¿‘的有效值。"
+
+#: 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 ""
+"液體佇列å¯èƒ½æœƒè¶…出處ç†å®¹é‡çš„時間(以秒計)\n"
+"超éŽæ™‚將會嘗試é€éŽå‚¾å€’舊佇列項目減少其\n"
+"大å°ã€‚將值設為 0 以åœç”¨æ­¤åŠŸèƒ½ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right mouse button."
+msgstr "當按ä½æ»‘é¼ å³éµæ™‚,é‡è¦†å³éµé»žé¸çš„間隔以秒計。"
+
+#: src/settings_translation_file.cpp
+msgid "This font will be used for certain languages."
+msgstr "這個字型將會被用於特定的語言。"
+
+#: src/settings_translation_file.cpp
+msgid "Time in between active block management cycles"
+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 ""
+"物å“(丟棄的物å“)å¯ä»¥å­˜æ´»å¤šä¹…,以秒計。\n"
+"設定其為 -1 以åœç”¨é€™å€‹åŠŸèƒ½ã€‚"
+
+#: 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 ""
+"為了é™ä½Žå»¶é²ï¼Œå€å¡Šå‚³é€å°‡æœƒåœ¨çŽ©å®¶å»ºé€ æ±è¥¿æ™‚減速。\n"
+"這將會決定放置或移除節點後減速多久。"
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr "切æ›æ”影機模å¼æŒ‰éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr "工具æ示延é²"
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr "三線性éŽæ¿¾å™¨"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Useable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"å°æ–¼è®“迷你地圖在較慢的機器上變得æµæš¢æœ‰æ•ˆã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr "信任的 mod"
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr "會在多人éŠæˆ²åˆ†é ä¸­é¡¯ç¤ºçš„伺æœå™¨æ¸…單的 URL。"
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "ä¸é™åˆ¶çŽ©å®¶å‚³é€è·é›¢"
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr "å¸é™¤æœªä½¿ç”¨çš„伺æœå™¨è³‡æ–™"
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr "使用 3D 立體而éžæ‰å¹³çš„雲朵外觀。"
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr "在主é¸å–®çš„背景使用雲朵動畫。"
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr "當從æŸå€‹è§’度觀看時啟用å„å‘異性éŽæ¿¾ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr "當縮放æ質時使用雙線性éŽæ¿¾ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Use key"
+msgstr "使用按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Use mip mapping to scale textures. May slightly increase performance."
+msgstr "使用多é‡æ質貼圖來縮放æ質。å¯èƒ½æœƒç¨ç¨åœ°å¢žåŠ æ•ˆèƒ½ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr "當縮放æ質時使用三線性éŽæ¿¾ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Useful for mod developers."
+msgstr "å° mod 開發者很有用。"
+
+#: src/settings_translation_file.cpp
+msgid "V-Sync"
+msgstr "åž‚ç›´åŒæ­¥"
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr "VBO"
+
+#: 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 "Valleys C Flags"
+msgstr "山谷 C 旗標"
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr "垂直螢幕åŒæ­¥ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "顯示å¡é©…動程å¼"
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing"
+msgstr "視野晃動"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"View distance in nodes.\n"
+"Min = 20"
+msgstr ""
+"以節點數計算的視野è·é›¢ã€‚\n"
+"最å°å€¼ = 20"
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr "é™ä½Žè¦–野的按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr "增加視野的按éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr "視野"
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr "音é‡"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W co-ordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+"4D 碎形生æˆçš„ 3D 切片的 W 座標。\n"
+"決定了會生æˆæ€Žæ¨£çš„ 4D 形狀的 3D 切片。\n"
+"å° 3D 碎形沒有影響。\n"
+"範åœç´„在 -2 至 2 間。"
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr "走路速度"
+
+#: src/settings_translation_file.cpp
+msgid "Water Features"
+msgstr "水的特徵"
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "æ°´ä½"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "世界的水é¢é«˜åº¦ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr "擺動節點"
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "葉å­æ“ºå‹•"
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr "æ¤ç‰©æ“ºå‹•"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water"
+msgstr "波動的水"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water height"
+msgstr "波動的水高度"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water length"
+msgstr "波動的水長度"
+
+#: src/settings_translation_file.cpp
+msgid "Waving water speed"
+msgstr "波動的水速度"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+"當 gui_scaling_filter 被設定為真時,所有的圖形使用者介é¢çš„圖片\n"
+"都必須被軟體éŽæ¿¾ï¼Œä½†æ˜¯æœ‰ä¸€äº›åœ–片會被直接生æˆåˆ°\n"
+"硬體(例如在物å“欄中節點的繪圖至æ質)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"propery support downloading textures back from hardware."
+msgstr ""
+"當 gui_scaling_filter_txr2img 被設定為真,複製這些圖片\n"
+"從硬體到軟體以供縮放。當為å‡æ™‚,退回\n"
+"至舊的縮放方法,供從硬體下載æ質回\n"
+"來軟體支æ´ä¸ä½³çš„顯示å¡é©…動程å¼ä½¿ç”¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled."
+msgstr ""
+"當使用雙線性ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾å™¨æ™‚,低解æžåº¦æ質\n"
+"會被模糊,所以會自動將大å°ç¸®æ”¾è‡³æœ€è¿‘çš„å…§æ’值\n"
+"以讓åƒç´ ä¿æŒæ¸…晰。這會設定最å°æ質大å°\n"
+"供放大æ質使用;較高的值看起來較銳利,但需è¦æ›´å¤šçš„\n"
+"記憶體。建議為 2 的次方。將這個值設定高於 1 ä¸æœƒ\n"
+"有任何視覺效果,除éžé›™ç·šæ€§ï¼ä¸‰ç·šæ€§ï¼å„å‘異性éŽæ¿¾\n"
+"已啟用。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Where the map generator stops.\n"
+"Please note:\n"
+"- Limited to 31000 (setting above has no effect)\n"
+"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n"
+"- Those groups have an offset of -32, -32 nodes from the origin.\n"
+"- Only groups which are within the map_generation_limit are generated"
+msgstr ""
+"地圖產生器è¦åœ¨å“ªè£¡åœæ­¢ã€‚\n"
+"請注æ„:\n"
+"- é™åˆ¶ç‚º 31000(上é¢çš„設定沒有影響)\n"
+"- 地圖產生器以 80x80x80 個節點為一組的方å¼é‹ä½œï¼ˆ5x5x5 地圖å€å¡Šï¼‰ã€‚\n"
+"- 這些群組有 -32 çš„å移,從原點å移 -32 節點。\n"
+"- åªæœ‰åœ¨ map_generation_limit 內的群組會被生æˆ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether freetype fonts are used, requires freetype support to be compiled in."
+msgstr "是å¦ä½¿ç”¨ freetype 字型,需è¦å°‡ freetype 支æ´ç·¨è­¯é€²ä¾†ã€‚"
+
+#: 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 ""
+"玩家是å¦æ‡‰è©²åœ¨å®¢æˆ¶ç«¯ç„¡è·é›¢é™åˆ¶åœ°é¡¯ç¤ºã€‚\n"
+"已棄用,請用 setting player_transfer_distance 代替。"
+
+#: 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 ""
+"是å¦è¦åœ¨ (Lua) 當掉後詢å•å®¢æˆ¶ç«¯æ˜¯å¦é‡æ–°é€£ç·šã€‚\n"
+"如果您的伺æœå™¨è¢«è¨­å®šç‚ºæœƒè‡ªå‹•é‡æ–°é–‹å•Ÿï¼Œå°‡é€™å€‹è¨­å®šç‚ºçœŸã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr "是å¦å°‡å¯è¦–å€åŸŸå¤–模糊。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr "是å¦é¡¯ç¤ºå®¢æˆ¶ç«¯é™¤éŒ¯è³‡è¨Šï¼ˆèˆ‡æŒ‰ä¸‹ F5 有åŒæ¨£çš„效果)。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to support older servers before protocol version 25.\n"
+"Enable if you want to connect to 0.4.12 servers and before.\n"
+"Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.\n"
+"Disabling this option will protect your password better."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr "åˆå§‹è¦–窗大å°çš„寬度元素。"
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selectionbox's lines around nodes."
+msgstr "é¸å–框在節點周邊的é¸å–框線。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+"世界目錄(在世界中的æ¯å€‹æ±è¥¿éƒ½å„²å­˜åœ¨é€™è£¡ï¼‰ã€‚\n"
+"若從主é¸å–®å•Ÿå‹•å‰‡ä¸éœ€è¦ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr "æ‰å¹³åœ°é¢çš„ Y。"
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large pseudorandom caves."
+msgstr "大型å½éš¨æ©Ÿæ´žç©´çš„ Y 上é™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr "cURL 檔案下載逾時"
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr "cURL 並行é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr "cURL 逾時"
+
+#~ msgid ""
+#~ "Enable a bit lower water surface, so it doesn't \"fill\" the node "
+#~ "completely.\n"
+#~ "Note that this is not quite optimized and that smooth lighting on the\n"
+#~ "water surface doesn't work with this."
+#~ msgstr ""
+#~ "啟用略低的的水é¢ï¼Œæ‰€ä»¥å®ƒå°±ä¸æœƒå®Œå…¨ã€Œå¡«æ»¿ã€ç¯€é»žã€‚\n"
+#~ "注æ„,這個功能並未最佳化完æˆï¼Œæ°´é¢çš„\n"
+#~ "柔和光功能無法與此功能一åŒé‹ä½œã€‚"
+
+#~ msgid "Enable selection highlighting for nodes (disables selectionbox)."
+#~ msgstr "啟用節點é¸æ“‡çªé¡¯ï¼ˆåœç”¨é¸å–框)。"
+
+#~ msgid "Preload inventory textures"
+#~ msgstr "é å…ˆè¼‰å…¥ç‰©å“欄æ質"
+
+#~ msgid "Reset singleplayer world"
+#~ msgstr "é‡ç½®å–®äººéŠæˆ²ä¸–ç•Œ"
+
+#~ msgid "Scaling factor applied to menu elements: "
+#~ msgstr "套用在é¸å–®å…ƒç´ çš„縮放係數: "
+
+#~ msgid "Touch free target"
+#~ msgstr "碰觸自由目標"
+
+#~ msgid "If enabled, "
+#~ msgstr "若啟用, "
+
+#~ msgid "If disabled "
+#~ msgstr "è‹¥åœç”¨ "
+
+#~ msgid "Enable a bit lower water surface, so it doesn't "
+#~ msgstr "啟用較低的水é¢ï¼Œæ‰€ä»¥å®ƒä¸æœƒ "
+
+#~ msgid "\""
+#~ msgstr "\""
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen v7.\n"
+#~ "'ridges' are the rivers.\n"
+#~ "Flags that are not specified in the flag string are not modified from the "
+#~ "default.\n"
+#~ "Flags starting with \"no\" are used to explicitly disable them."
+#~ msgstr ""
+#~ "專用於 Mapgen v7 的地圖生æˆå±¬æ€§ã€‚\n"
+#~ "「ridgesã€ç‚ºæ²³æµã€‚\n"
+#~ "未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+#~ "以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。"
+
+#~ msgid ""
+#~ "Map generation attributes specific to Mapgen Valleys.\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.\n"
+#~ "\"altitude_chill\" makes higher elevations colder, which may cause biome "
+#~ "issues.\n"
+#~ "\"humid_rivers\" modifies the humidity around rivers and in areas where "
+#~ "water would tend to pool. It may interfere with delicately adjusted "
+#~ "biomes."
+#~ msgstr ""
+#~ "專用於 Mapgen 山谷的地圖生æˆå±¬æ€§ã€‚\n"
+#~ "未在旗標字串中指定的旗標將ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+#~ "以「noã€é–‹é ­çš„旗標字串將會用於明確的åœç”¨å®ƒå€‘。\n"
+#~ "「altitude_chillã€æœƒè®“較高的地方更寒冷,å¯èƒ½æœƒé€ æˆç”Ÿç‰©ç¾¤è½çš„å•é¡Œã€‚\n"
+#~ "「humid_riversã€æœƒä¿®æ”¹åœ¨æ²³æµé™„近的濕度,在那些å€åŸŸé™„近水將會傾å‘變為一池。"
+#~ "這å¯èƒ½æœƒå°å¾®å¦™èª¿æ•´éŽçš„生物群è½é€ æˆå¹²æ“¾ã€‚"
+
+#~ msgid "No!!!"
+#~ msgstr "å¦ï¼ï¼ï¼"
+
+#~ msgid "Generate Normalmaps"
+#~ msgstr "生æˆä¸€èˆ¬åœ°åœ–"
+
+#~ msgid "Public Serverlist"
+#~ msgstr "公共伺æœå™¨æ¸…å–®"
+
+#~ msgid "No of course not!"
+#~ msgstr "ä¸ï¼Œçµ•å°ä¸æ˜¯ï¼"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 614e81908..feca199c1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -27,6 +27,12 @@ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
+if(NOT (BUILD_CLIENT OR BUILD_SERVER))
+ message(WARNING "Neither BUILD_CLIENT nor BUILD_SERVER is set! Setting BUILD_SERVER=true")
+ set(BUILD_SERVER TRUE)
+endif()
+
+
option(ENABLE_CURL "Enable cURL support for fetching media" TRUE)
set(USE_CURL FALSE)
@@ -40,6 +46,15 @@ else()
mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
endif()
+if(NOT USE_CURL)
+ if(BUILD_CLIENT)
+ message(WARNING "cURL is required to load the server list")
+ endif()
+ if(BUILD_SERVER)
+ message(WARNING "cURL is required to announce to the server list")
+ endif()
+endif()
+
option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE)
set(USE_GETTEXT FALSE)
@@ -140,11 +155,40 @@ if(ENABLE_FREETYPE)
endif()
endif(ENABLE_FREETYPE)
-
-find_package(Lua REQUIRED)
+# LuaJIT
+option(ENABLE_LUAJIT "Enable LuaJIT support" TRUE)
+set(USE_LUAJIT FALSE)
+if(ENABLE_LUAJIT)
+ find_package(LuaJIT)
+ if(LUAJIT_FOUND)
+ set(USE_LUAJIT TRUE)
+ endif(LUAJIT_FOUND)
+else()
+ message (STATUS "LuaJIT detection disabled! (ENABLE_LUAJIT=0)")
+endif()
+if(NOT USE_LUAJIT)
+ message(STATUS "LuaJIT not found, using bundled Lua.")
+ set(LUA_LIBRARY "lua")
+ set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
+ add_subdirectory(lua)
+endif()
find_package(GMP REQUIRED)
+option(ENABLE_CURSES "Enable ncurses console" TRUE)
+set(USE_CURSES FALSE)
+
+if(ENABLE_CURSES)
+ find_package(Ncursesw)
+ if(CURSES_FOUND)
+ set(USE_CURSES TRUE)
+ message(STATUS "ncurses console enabled.")
+ include_directories(${CURSES_INCLUDE_DIRS})
+ else()
+ message(STATUS "ncurses not found!")
+ endif()
+endif(ENABLE_CURSES)
+
option(ENABLE_LEVELDB "Enable LevelDB backend" TRUE)
set(USE_LEVELDB FALSE)
@@ -297,16 +341,16 @@ add_custom_target(GenerateVersion
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
-add_subdirectory(jthread)
+add_subdirectory(threading)
add_subdirectory(network)
add_subdirectory(script)
add_subdirectory(unittest)
add_subdirectory(util)
set(common_SRCS
- areastore.cpp
ban.cpp
cavegen.cpp
+ chat.cpp
clientiface.cpp
collision.cpp
content_abm.cpp
@@ -337,10 +381,13 @@ set(common_SRCS
map.cpp
mapblock.cpp
mapgen.cpp
+ mapgen_flat.cpp
+ mapgen_fractal.cpp
mapgen_singlenode.cpp
mapgen_v5.cpp
mapgen_v6.cpp
mapgen_v7.cpp
+ mapgen_valleys.cpp
mapnode.cpp
mapsector.cpp
mg_biome.cpp
@@ -371,6 +418,7 @@ set(common_SRCS
sound.cpp
staticobject.cpp
subgame.cpp
+ terminal_chat_console.cpp
tool.cpp
treegen.cpp
version.cpp
@@ -415,7 +463,6 @@ set(client_SRCS
${sound_SRCS}
${client_network_SRCS}
camera.cpp
- chat.cpp
client.cpp
clientmap.cpp
clientmedia.cpp
@@ -542,6 +589,9 @@ if(BUILD_CLIENT)
${CGUITTFONT_LIBRARY}
)
endif()
+ if (USE_CURSES)
+ target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES})
+ endif()
if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
endif()
@@ -569,6 +619,9 @@ if(BUILD_SERVER)
)
set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER")
+ if (USE_CURSES)
+ target_link_libraries(${PROJECT_NAME}server ${CURSES_LIBRARIES})
+ endif()
if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
endif()
diff --git a/src/ban.cpp b/src/ban.cpp
index 7c1a68d45..5fa430702 100644
--- a/src/ban.cpp
+++ b/src/ban.cpp
@@ -19,10 +19,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "ban.h"
#include <fstream>
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#include <sstream>
#include <set>
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "util/string.h"
#include "log.h"
#include "filesys.h"
@@ -36,7 +36,7 @@ BanManager::BanManager(const std::string &banfilepath):
}
catch(SerializationError &e)
{
- infostream<<"WARNING: BanManager: creating "
+ warningstream<<"BanManager: creating "
<<m_banfilepath<<std::endl;
}
}
@@ -48,7 +48,7 @@ BanManager::~BanManager()
void BanManager::load()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
infostream<<"BanManager: loading from "<<m_banfilepath<<std::endl;
std::ifstream is(m_banfilepath.c_str(), std::ios::binary);
if(is.good() == false)
@@ -73,7 +73,7 @@ void BanManager::load()
void BanManager::save()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
infostream << "BanManager: saving to " << m_banfilepath << std::endl;
std::ostringstream ss(std::ios_base::binary);
@@ -90,13 +90,13 @@ void BanManager::save()
bool BanManager::isIpBanned(const std::string &ip)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
return m_ips.find(ip) != m_ips.end();
}
std::string BanManager::getBanDescription(const std::string &ip_or_name)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
std::string s = "";
for (StringMap::iterator it = m_ips.begin(); it != m_ips.end(); ++it) {
if (it->first == ip_or_name || it->second == ip_or_name
@@ -110,7 +110,7 @@ std::string BanManager::getBanDescription(const std::string &ip_or_name)
std::string BanManager::getBanName(const std::string &ip)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
StringMap::iterator it = m_ips.find(ip);
if (it == m_ips.end())
return "";
@@ -119,14 +119,14 @@ std::string BanManager::getBanName(const std::string &ip)
void BanManager::add(const std::string &ip, const std::string &name)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
m_ips[ip] = name;
m_modified = true;
}
void BanManager::remove(const std::string &ip_or_name)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) {
if ((it->first == ip_or_name) || (it->second == ip_or_name)) {
m_ips.erase(it++);
@@ -140,7 +140,7 @@ void BanManager::remove(const std::string &ip_or_name)
bool BanManager::isModified()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
return m_modified;
}
diff --git a/src/ban.h b/src/ban.h
index 5db7179de..d1a49cb15 100644
--- a/src/ban.h
+++ b/src/ban.h
@@ -21,9 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define BAN_HEADER
#include "util/string.h"
-#include "jthread/jthread.h"
-#include "jthread/jmutex.h"
+#include "threading/thread.h"
+#include "threading/mutex.h"
#include "exceptions.h"
+#include <map>
+#include <string>
class BanManager
{
@@ -40,7 +42,7 @@ public:
void remove(const std::string &ip_or_name);
bool isModified();
private:
- JMutex m_mutex;
+ Mutex m_mutex;
std::string m_banfilepath;
StringMap m_ips;
bool m_modified;
diff --git a/src/camera.cpp b/src/camera.cpp
index 0c6d03e4e..6893b8cbf 100644
--- a/src/camera.cpp
+++ b/src/camera.cpp
@@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include "util/mathconstants.h"
#include "constants.h"
+#include "fontengine.h"
#define CAMERA_OFFSET_STEP 200
@@ -59,13 +60,6 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
m_fov_x(1.0),
m_fov_y(1.0),
- m_added_busytime(0),
- m_added_frames(0),
- m_range_old(0),
- m_busytime_old(0),
- m_frametime_counter(0),
- m_time_per_range(30. / 50), // a sane default of 30ms per 50 nodes of range
-
m_view_bobbing_anim(0),
m_view_bobbing_state(0),
m_view_bobbing_speed(0),
@@ -79,8 +73,9 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
m_camera_mode(CAMERA_MODE_FIRST)
{
- //dstream<<__FUNCTION_NAME<<std::endl;
+ //dstream<<FUNCTION_NAME<<std::endl;
+ m_driver = smgr->getVideoDriver();
// note: making the camera node a child of the player node
// would lead to unexpected behaviour, so we don't do that.
m_playernode = smgr->addEmptySceneNode(smgr->getRootSceneNode());
@@ -107,9 +102,9 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
*/
m_cache_fall_bobbing_amount = g_settings->getFloat("fall_bobbing_amount");
m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount");
- m_cache_wanted_fps = g_settings->getFloat("wanted_fps");
m_cache_fov = g_settings->getFloat("fov");
m_cache_view_bobbing = g_settings->getBool("view_bobbing");
+ m_nametags.clear();
}
Camera::~Camera()
@@ -452,15 +447,15 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
m_wieldnode->setColor(player->light_color);
- // Render distance feedback loop
- updateViewingRange(frametime, busytime);
+ // Set render distance
+ updateViewingRange();
// If the player is walking, swimming, or climbing,
// view bobbing is enabled and free_move is off,
// start (or continue) the view bobbing animation.
v3f speed = player->getSpeed();
const bool movement_XZ = hypot(speed.X, speed.Z) > BS;
- const bool movement_Y = abs(speed.Y) > BS;
+ const bool movement_Y = fabs(speed.Y) > BS;
const bool walking = movement_XZ && player->touching_ground;
const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid;
@@ -481,143 +476,16 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
}
}
-void Camera::updateViewingRange(f32 frametime_in, f32 busytime_in)
+void Camera::updateViewingRange()
{
- if (m_draw_control.range_all)
- return;
-
- m_added_busytime += busytime_in;
- m_added_frames += 1;
-
- m_frametime_counter -= frametime_in;
- if (m_frametime_counter > 0)
+ if (m_draw_control.range_all) {
+ m_cameranode->setFarValue(100000.0);
return;
- m_frametime_counter = 0.2; // Same as ClientMap::updateDrawList interval
-
- /*dstream<<__FUNCTION_NAME
- <<": Collected "<<m_added_frames<<" frames, total of "
- <<m_added_busytime<<"s."<<std::endl;
-
- dstream<<"m_draw_control.blocks_drawn="
- <<m_draw_control.blocks_drawn
- <<", m_draw_control.blocks_would_have_drawn="
- <<m_draw_control.blocks_would_have_drawn
- <<std::endl;*/
-
- // Get current viewing range and FPS settings
- f32 viewing_range_min = g_settings->getFloat("viewing_range_nodes_min");
- viewing_range_min = MYMAX(15.0, viewing_range_min);
-
- f32 viewing_range_max = g_settings->getFloat("viewing_range_nodes_max");
- viewing_range_max = MYMAX(viewing_range_min, viewing_range_max);
-
- // Immediately apply hard limits
- if(m_draw_control.wanted_range < viewing_range_min)
- m_draw_control.wanted_range = viewing_range_min;
- if(m_draw_control.wanted_range > viewing_range_max)
- m_draw_control.wanted_range = viewing_range_max;
-
- // Just so big a value that everything rendered is visible
- // Some more allowance than viewing_range_max * BS because of clouds,
- // active objects, etc.
- if(viewing_range_max < 200*BS)
- m_cameranode->setFarValue(200 * BS * 10);
- else
- m_cameranode->setFarValue(viewing_range_max * BS * 10);
-
- f32 wanted_fps = m_cache_wanted_fps;
- wanted_fps = MYMAX(wanted_fps, 1.0);
- f32 wanted_frametime = 1.0 / wanted_fps;
-
- m_draw_control.wanted_min_range = viewing_range_min;
- m_draw_control.wanted_max_blocks = (2.0*m_draw_control.blocks_would_have_drawn)+1;
- if (m_draw_control.wanted_max_blocks < 10)
- m_draw_control.wanted_max_blocks = 10;
-
- f32 block_draw_ratio = 1.0;
- if (m_draw_control.blocks_would_have_drawn != 0)
- {
- block_draw_ratio = (f32)m_draw_control.blocks_drawn
- / (f32)m_draw_control.blocks_would_have_drawn;
}
- // Calculate the average frametime in the case that all wanted
- // blocks had been drawn
- f32 frametime = m_added_busytime / m_added_frames / block_draw_ratio;
-
- m_added_busytime = 0.0;
- m_added_frames = 0;
-
- f32 wanted_frametime_change = wanted_frametime - frametime;
- //dstream<<"wanted_frametime_change="<<wanted_frametime_change<<std::endl;
- g_profiler->avg("wanted_frametime_change", wanted_frametime_change);
-
- // If needed frametime change is small, just return
- // This value was 0.4 for many months until 2011-10-18 by c55;
- if (fabs(wanted_frametime_change) < wanted_frametime*0.33)
- {
- //dstream<<"ignoring small wanted_frametime_change"<<std::endl;
- return;
- }
-
- f32 range = m_draw_control.wanted_range;
- f32 new_range = range;
-
- f32 d_range = range - m_range_old;
- f32 d_busytime = busytime_in - m_busytime_old;
- if (d_range != 0)
- {
- m_time_per_range = d_busytime / d_range;
- }
- //dstream<<"time_per_range="<<m_time_per_range<<std::endl;
- g_profiler->avg("time_per_range", m_time_per_range);
-
- // The minimum allowed calculated frametime-range derivative:
- // Practically this sets the maximum speed of changing the range.
- // The lower this value, the higher the maximum changing speed.
- // A low value here results in wobbly range (0.001)
- // A low value can cause oscillation in very nonlinear time/range curves.
- // A high value here results in slow changing range (0.0025)
- // SUGG: This could be dynamically adjusted so that when
- // the camera is turning, this is lower
- //f32 min_time_per_range = 0.0010; // Up to 0.4.7
- f32 min_time_per_range = 0.0005;
- if(m_time_per_range < min_time_per_range)
- {
- m_time_per_range = min_time_per_range;
- //dstream<<"m_time_per_range="<<m_time_per_range<<" (min)"<<std::endl;
- }
- else
- {
- //dstream<<"m_time_per_range="<<m_time_per_range<<std::endl;
- }
-
- f32 wanted_range_change = wanted_frametime_change / m_time_per_range;
- // Dampen the change a bit to kill oscillations
- //wanted_range_change *= 0.9;
- //wanted_range_change *= 0.75;
- wanted_range_change *= 0.5;
- //dstream<<"wanted_range_change="<<wanted_range_change<<std::endl;
-
- // If needed range change is very small, just return
- if(fabs(wanted_range_change) < 0.001)
- {
- //dstream<<"ignoring small wanted_range_change"<<std::endl;
- return;
- }
-
- new_range += wanted_range_change;
-
- //f32 new_range_unclamped = new_range;
- new_range = MYMAX(new_range, viewing_range_min);
- new_range = MYMIN(new_range, viewing_range_max);
- /*dstream<<"new_range="<<new_range_unclamped
- <<", clamped to "<<new_range<<std::endl;*/
-
- m_range_old = m_draw_control.wanted_range;
- m_busytime_old = busytime_in;
-
- m_draw_control.wanted_range = new_range;
+ f32 viewing_range = g_settings->getFloat("viewing_range");
+ m_draw_control.wanted_range = viewing_range;
+ m_cameranode->setFarValue((viewing_range < 2000) ? 2000 * BS : viewing_range * BS);
}
void Camera::setDigging(s32 button)
@@ -646,7 +514,7 @@ void Camera::drawWieldedTool(irr::core::matrix4* translation)
scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
cam->setAspectRatio(m_cameranode->getAspectRatio());
cam->setFOV(72.0*M_PI/180.0);
- cam->setNearValue(0.1);
+ cam->setNearValue(10);
cam->setFarValue(1000);
if (translation != NULL)
{
@@ -662,3 +530,54 @@ void Camera::drawWieldedTool(irr::core::matrix4* translation)
}
m_wieldmgr->drawAll();
}
+
+void Camera::drawNametags()
+{
+ core::matrix4 trans = m_cameranode->getProjectionMatrix();
+ trans *= m_cameranode->getViewMatrix();
+
+ for (std::list<Nametag *>::const_iterator
+ i = m_nametags.begin();
+ i != m_nametags.end(); ++i) {
+ Nametag *nametag = *i;
+ if (nametag->nametag_color.getAlpha() == 0) {
+ // Enforce hiding nametag,
+ // because if freetype is enabled, a grey
+ // shadow can remain.
+ continue;
+ }
+ v3f pos = nametag->parent_node->getPosition() + v3f(0.0, 1.1 * BS, 0.0);
+ f32 transformed_pos[4] = { pos.X, pos.Y, pos.Z, 1.0f };
+ trans.multiplyWith1x4Matrix(transformed_pos);
+ if (transformed_pos[3] > 0) {
+ core::dimension2d<u32> textsize =
+ g_fontengine->getFont()->getDimension(
+ utf8_to_wide(nametag->nametag_text).c_str());
+ f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f :
+ core::reciprocal(transformed_pos[3]);
+ v2u32 screensize = m_driver->getScreenSize();
+ v2s32 screen_pos;
+ screen_pos.X = screensize.X *
+ (0.5 * transformed_pos[0] * zDiv + 0.5) - textsize.Width / 2;
+ screen_pos.Y = screensize.Y *
+ (0.5 - transformed_pos[1] * zDiv * 0.5) - textsize.Height / 2;
+ core::rect<s32> size(0, 0, textsize.Width, textsize.Height);
+ g_fontengine->getFont()->draw(utf8_to_wide(nametag->nametag_text).c_str(),
+ size + screen_pos, nametag->nametag_color);
+ }
+ }
+}
+
+Nametag *Camera::addNametag(scene::ISceneNode *parent_node,
+ std::string nametag_text, video::SColor nametag_color)
+{
+ Nametag *nametag = new Nametag(parent_node, nametag_text, nametag_color);
+ m_nametags.push_back(nametag);
+ return nametag;
+}
+
+void Camera::removeNametag(Nametag *nametag)
+{
+ m_nametags.remove(nametag);
+ delete nametag;
+}
diff --git a/src/camera.h b/src/camera.h
index 006f4b3ce..ce46c3190 100644
--- a/src/camera.h
+++ b/src/camera.h
@@ -26,6 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/tile.h"
#include "util/numeric.h"
#include <ICameraSceneNode.h>
+#include <ISceneNode.h>
+#include <list>
#include "client.h"
@@ -34,6 +36,20 @@ struct MapDrawControl;
class IGameDef;
class WieldMeshSceneNode;
+struct Nametag {
+ Nametag(scene::ISceneNode *a_parent_node,
+ const std::string &a_nametag_text,
+ const video::SColor &a_nametag_color):
+ parent_node(a_parent_node),
+ nametag_text(a_nametag_text),
+ nametag_color(a_nametag_color)
+ {
+ }
+ scene::ISceneNode *parent_node;
+ std::string nametag_text;
+ video::SColor nametag_color;
+};
+
enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
/*
@@ -84,7 +100,7 @@ public:
{
return m_camera_direction;
}
-
+
// Get the camera offset
inline v3s16 getOffset() const
{
@@ -120,8 +136,8 @@ public:
void update(LocalPlayer* player, f32 frametime, f32 busytime,
f32 tool_reload_ratio, ClientEnvironment &c_env);
- // Render distance feedback loop
- void updateViewingRange(f32 frametime_in, f32 busytime_in);
+ // Update render distance
+ void updateViewingRange();
// Start digging animation
// Pass 0 for left click, 1 for right click
@@ -151,6 +167,16 @@ public:
return m_camera_mode;
}
+ Nametag *addNametag(scene::ISceneNode *parent_node,
+ std::string nametag_text, video::SColor nametag_color);
+
+ void removeNametag(Nametag *nametag);
+
+ std::list<Nametag *> *getNametags()
+ { return &m_nametags; }
+
+ void drawNametags();
+
private:
// Nodes
scene::ISceneNode* m_playernode;
@@ -162,8 +188,9 @@ private:
// draw control
MapDrawControl& m_draw_control;
-
+
IGameDef *m_gamedef;
+ video::IVideoDriver *m_driver;
// Absolute camera position
v3f m_camera_position;
@@ -177,14 +204,6 @@ private:
f32 m_fov_x;
f32 m_fov_y;
- // Stuff for viewing range calculations
- f32 m_added_busytime;
- s16 m_added_frames;
- f32 m_range_old;
- f32 m_busytime_old;
- f32 m_frametime_counter;
- f32 m_time_per_range;
-
// View bobbing animation frame (0 <= m_view_bobbing_anim < 1)
f32 m_view_bobbing_anim;
// If 0, view bobbing is off (e.g. player is standing).
@@ -211,9 +230,10 @@ private:
f32 m_cache_fall_bobbing_amount;
f32 m_cache_view_bobbing_amount;
- f32 m_cache_wanted_fps;
f32 m_cache_fov;
bool m_cache_view_bobbing;
+
+ std::list<Nametag *> m_nametags;
};
#endif
diff --git a/src/cavegen.cpp b/src/cavegen.cpp
index 8372f70b5..b8abfbca5 100644
--- a/src/cavegen.cpp
+++ b/src/cavegen.cpp
@@ -31,17 +31,21 @@ NoiseParams nparams_caveliquids(0, 1, v3f(150.0, 150.0, 150.0), 776, 3, 0.6, 2.0
///////////////////////////////////////// Caves V5
-CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps)
+CaveV5::CaveV5(Mapgen *mg, PseudoRandom *ps)
{
this->mg = mg;
this->vm = mg->vm;
this->ndef = mg->ndef;
this->water_level = mg->water_level;
this->ps = ps;
- this->c_water_source = mg->c_water_source;
- this->c_lava_source = mg->c_lava_source;
- this->c_ice = mg->c_ice;
+ c_water_source = ndef->getId("mapgen_water_source");
+ c_lava_source = ndef->getId("mapgen_lava_source");
+ c_ice = ndef->getId("mapgen_ice");
this->np_caveliquids = &nparams_caveliquids;
+ this->ystride = mg->csize.X;
+
+ if (c_ice == CONTENT_IGNORE)
+ c_ice = CONTENT_AIR;
dswitchint = ps->range(1, 14);
flooded = ps->range(1, 2) == 2;
@@ -149,7 +153,7 @@ void CaveV5::makeTunnel(bool dirswitch)
p = orpi + veci + of + rs / 2;
if (p.Z >= node_min.Z && p.Z <= node_max.Z &&
p.X >= node_min.X && p.X <= node_max.X) {
- u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X);
+ u32 index = (p.Z - node_min.Z) * ystride + (p.X - node_min.X);
s16 h = mg->heightmap[index];
if (h < p.Y)
return;
@@ -160,7 +164,7 @@ void CaveV5::makeTunnel(bool dirswitch)
p = orpi + of + rs / 2;
if (p.Z >= node_min.Z && p.Z <= node_max.Z &&
p.X >= node_min.X && p.X <= node_max.X) {
- u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X);
+ u32 index = (p.Z - node_min.Z) * ystride + (p.X - node_min.X);
s16 h = mg->heightmap[index];
if (h < p.Y)
return;
@@ -214,7 +218,8 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz)
float nval = NoisePerlin3D(np_caveliquids, startp.X,
startp.Y, startp.Z, mg->seed);
- MapNode liquidnode = nval < 0.40 ? lavanode : waternode;
+ MapNode liquidnode = (nval < 0.40 && node_max.Y < MGV5_LAVA_DEPTH) ?
+ lavanode : waternode;
v3f fp = orp + vec * f;
fp.X += 0.1 * ps->range(-10, 10);
diff --git a/src/cavegen.h b/src/cavegen.h
index b9662587b..a1124711b 100644
--- a/src/cavegen.h
+++ b/src/cavegen.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define CAVEGEN_HEADER
#define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1
+#define MGV5_LAVA_DEPTH -256
#define MGV7_LAVA_DEPTH -256
class MapgenV5;
@@ -29,7 +30,7 @@ class MapgenV7;
class CaveV5 {
public:
- MapgenV5 *mg;
+ Mapgen *mg;
MMVManip *vm;
INodeDefManager *ndef;
@@ -64,9 +65,10 @@ public:
content_t c_ice;
int water_level;
+ int ystride;
CaveV5() {}
- CaveV5(MapgenV5 *mg, PseudoRandom *ps);
+ CaveV5(Mapgen *mg, PseudoRandom *ps);
void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height);
void makeTunnel(bool dirswitch);
void carveRoute(v3f vec, float f, bool randomize_xz);
diff --git a/src/cguittfont/CMakeLists.txt b/src/cguittfont/CMakeLists.txt
index 7717a2f91..6cd35f310 100644
--- a/src/cguittfont/CMakeLists.txt
+++ b/src/cguittfont/CMakeLists.txt
@@ -2,7 +2,7 @@
# Do not add CGUITTFont.cpp to the line below.
# xCGUITTFont.cpp is a wrapper file that includes
# additional required headers.
-add_library(cguittfont xCGUITTFont.cpp)
+add_library(cguittfont STATIC xCGUITTFont.cpp)
if(FREETYPE_PKGCONFIG_FOUND)
set_target_properties(cguittfont
diff --git a/src/chat.cpp b/src/chat.cpp
index 50391d39b..cebe31225 100644
--- a/src/chat.cpp
+++ b/src/chat.cpp
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "chat.h"
#include "debug.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include <cctype>
#include <sstream>
#include "util/string.h"
@@ -97,6 +97,8 @@ void ChatBuffer::step(f32 dtime)
void ChatBuffer::deleteOldest(u32 count)
{
+ bool at_bottom = (m_scroll == getBottomScrollPos());
+
u32 del_unformatted = 0;
u32 del_formatted = 0;
@@ -120,6 +122,11 @@ void ChatBuffer::deleteOldest(u32 count)
m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted);
m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted);
+
+ if (at_bottom)
+ m_scroll = getBottomScrollPos();
+ else
+ scrollAbsolute(m_scroll - del_formatted);
}
void ChatBuffer::deleteByAge(f32 maxAge)
@@ -390,6 +397,7 @@ ChatPrompt::ChatPrompt(std::wstring prompt, u32 history_limit):
m_cols(0),
m_view(0),
m_cursor(0),
+ m_cursor_len(0),
m_nick_completion_start(0),
m_nick_completion_end(0)
{
@@ -417,20 +425,13 @@ void ChatPrompt::input(const std::wstring &str)
m_nick_completion_end = 0;
}
-std::wstring ChatPrompt::submit()
+void ChatPrompt::addToHistory(std::wstring line)
{
- std::wstring line = m_line;
- m_line.clear();
if (!line.empty())
m_history.push_back(line);
if (m_history.size() > m_history_limit)
m_history.erase(m_history.begin());
m_history_index = m_history.size();
- m_view = 0;
- m_cursor = 0;
- m_nick_completion_start = 0;
- m_nick_completion_end = 0;
- return line;
}
void ChatPrompt::clear()
@@ -442,13 +443,15 @@ void ChatPrompt::clear()
m_nick_completion_end = 0;
}
-void ChatPrompt::replace(std::wstring line)
+std::wstring ChatPrompt::replace(std::wstring line)
{
+ std::wstring old_line = m_line;
m_line = line;
m_view = m_cursor = line.size();
clampView();
m_nick_completion_start = 0;
m_nick_completion_end = 0;
+ return old_line;
}
void ChatPrompt::historyPrev()
@@ -590,14 +593,12 @@ void ChatPrompt::cursorOperation(CursorOp op, CursorOpDir dir, CursorOpScope sco
s32 length = m_line.size();
s32 increment = (dir == CURSOROP_DIR_RIGHT) ? 1 : -1;
- if (scope == CURSOROP_SCOPE_CHARACTER)
- {
+ switch (scope) {
+ case CURSOROP_SCOPE_CHARACTER:
new_cursor += increment;
- }
- else if (scope == CURSOROP_SCOPE_WORD)
- {
- if (increment > 0)
- {
+ break;
+ case CURSOROP_SCOPE_WORD:
+ if (dir == CURSOROP_DIR_RIGHT) {
// skip one word to the right
while (new_cursor < length && isspace(m_line[new_cursor]))
new_cursor++;
@@ -605,39 +606,47 @@ void ChatPrompt::cursorOperation(CursorOp op, CursorOpDir dir, CursorOpScope sco
new_cursor++;
while (new_cursor < length && isspace(m_line[new_cursor]))
new_cursor++;
- }
- else
- {
+ } else {
// skip one word to the left
while (new_cursor >= 1 && isspace(m_line[new_cursor - 1]))
new_cursor--;
while (new_cursor >= 1 && !isspace(m_line[new_cursor - 1]))
new_cursor--;
}
- }
- else if (scope == CURSOROP_SCOPE_LINE)
- {
+ break;
+ case CURSOROP_SCOPE_LINE:
new_cursor += increment * length;
+ break;
+ case CURSOROP_SCOPE_SELECTION:
+ break;
}
new_cursor = MYMAX(MYMIN(new_cursor, length), 0);
- if (op == CURSOROP_MOVE)
- {
+ switch (op) {
+ case CURSOROP_MOVE:
m_cursor = new_cursor;
- }
- else if (op == CURSOROP_DELETE)
- {
- if (new_cursor < old_cursor)
- {
- m_line.erase(new_cursor, old_cursor - new_cursor);
- m_cursor = new_cursor;
+ m_cursor_len = 0;
+ break;
+ case CURSOROP_DELETE:
+ if (m_cursor_len > 0) { // Delete selected text first
+ m_line.erase(m_cursor, m_cursor_len);
+ } else {
+ m_cursor = MYMIN(new_cursor, old_cursor);
+ m_line.erase(m_cursor, abs(new_cursor - old_cursor));
}
- else if (new_cursor > old_cursor)
- {
- m_line.erase(old_cursor, new_cursor - old_cursor);
- m_cursor = old_cursor;
+ m_cursor_len = 0;
+ break;
+ case CURSOROP_SELECT:
+ if (scope == CURSOROP_SCOPE_LINE) {
+ m_cursor = 0;
+ m_cursor_len = length;
+ } else {
+ m_cursor = MYMIN(new_cursor, old_cursor);
+ m_cursor_len += abs(new_cursor - old_cursor);
+ m_cursor_len = MYMIN(m_cursor_len, length - m_cursor);
}
+ break;
}
clampView();
@@ -677,9 +686,12 @@ ChatBackend::~ChatBackend()
void ChatBackend::addMessage(std::wstring name, std::wstring text)
{
+ name = unescape_enriched(name);
+ text = unescape_enriched(text);
+
// Note: A message may consist of multiple lines, for example the MOTD.
WStrfnd fnd(text);
- while (!fnd.atend())
+ while (!fnd.at_end())
{
std::wstring line = fnd.next(L"\n");
m_console_buffer.addLine(name, line);
diff --git a/src/chat.h b/src/chat.h
index 82ce80875..db4146d35 100644
--- a/src/chat.h
+++ b/src/chat.h
@@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include <list>
-// Chat console related classes, only used by the client
+// Chat console related classes
struct ChatLine
{
@@ -123,7 +123,7 @@ private:
u32 m_scrollback;
// Array of unformatted chat lines
std::vector<ChatLine> m_unformatted;
-
+
// Number of character columns in console
u32 m_cols;
// Number of character rows in console
@@ -146,14 +146,21 @@ public:
void input(wchar_t ch);
void input(const std::wstring &str);
- // Submit, clear and return current line
- std::wstring submit();
+ // Add a string to the history
+ void addToHistory(std::wstring line);
+
+ // Get current line
+ std::wstring getLine() const { return m_line; }
+
+ // Get section of line that is currently selected
+ std::wstring getSelection() const
+ { return m_line.substr(m_cursor, m_cursor_len); }
// Clear the current line
void clear();
// Replace the current line with the given text
- void replace(std::wstring line);
+ std::wstring replace(std::wstring line);
// Select previous command from history
void historyPrev();
@@ -169,10 +176,13 @@ public:
std::wstring getVisiblePortion() const;
// Get cursor position (relative to visible portion). -1 if invalid
s32 getVisibleCursorPosition() const;
+ // Get length of cursor selection
+ s32 getCursorLength() const { return m_cursor_len; }
// Cursor operations
enum CursorOp {
CURSOROP_MOVE,
+ CURSOROP_SELECT,
CURSOROP_DELETE
};
@@ -186,7 +196,8 @@ public:
enum CursorOpScope {
CURSOROP_SCOPE_CHARACTER,
CURSOROP_SCOPE_WORD,
- CURSOROP_SCOPE_LINE
+ CURSOROP_SCOPE_LINE,
+ CURSOROP_SCOPE_SELECTION
};
// Cursor operation
@@ -213,7 +224,7 @@ private:
std::wstring m_line;
// History buffer
std::vector<std::wstring> m_history;
- // History index (0 <= m_history_index <= m_history.size())
+ // History index (0 <= m_history_index <= m_history.size())
u32 m_history_index;
// Maximum number of history entries
u32 m_history_limit;
@@ -224,6 +235,8 @@ private:
s32 m_view;
// Cursor (index into m_line)
s32 m_cursor;
+ // Cursor length (length of selected portion of line)
+ s32 m_cursor_len;
// Last nick completion start (index into m_line)
s32 m_nick_completion_start;
diff --git a/src/chat_interface.h b/src/chat_interface.h
new file mode 100644
index 000000000..4784821fc
--- /dev/null
+++ b/src/chat_interface.h
@@ -0,0 +1,82 @@
+/*
+Minetest
+Copyright (C) 2015 est31 <MTest31@outlook.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.
+*/
+
+#ifndef CHAT_INTERFACE_H
+#define CHAT_INTERFACE_H
+
+#include "util/container.h"
+#include <string>
+#include <queue>
+#include "irrlichttypes.h"
+
+enum ChatEventType {
+ CET_CHAT,
+ CET_NICK_ADD,
+ CET_NICK_REMOVE,
+ CET_TIME_INFO,
+};
+
+class ChatEvent {
+protected:
+ ChatEvent(ChatEventType a_type) { type = a_type; }
+public:
+ ChatEventType type;
+};
+
+struct ChatEventTimeInfo : public ChatEvent {
+ ChatEventTimeInfo(
+ u64 a_game_time,
+ u32 a_time) :
+ ChatEvent(CET_TIME_INFO),
+ game_time(a_game_time),
+ time(a_time)
+ {}
+
+ u64 game_time;
+ u32 time;
+};
+
+struct ChatEventNick : public ChatEvent {
+ ChatEventNick(ChatEventType a_type,
+ const std::string &a_nick) :
+ ChatEvent(a_type), // one of CET_NICK_ADD, CET_NICK_REMOVE
+ nick(a_nick)
+ {}
+
+ std::string nick;
+};
+
+struct ChatEventChat : public ChatEvent {
+ ChatEventChat(const std::string &a_nick,
+ const std::wstring &an_evt_msg) :
+ ChatEvent(CET_CHAT),
+ nick(a_nick),
+ evt_msg(an_evt_msg)
+ {}
+
+ std::string nick;
+ std::wstring evt_msg;
+};
+
+struct ChatInterface {
+ MutexedQueue<ChatEvent *> command_queue; // chat backend --> server
+ MutexedQueue<ChatEvent *> outgoing_queue; // server --> chat backend
+};
+
+#endif
diff --git a/src/client.cpp b/src/client.cpp
index 946f4f1c4..4ffcec6ba 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <algorithm>
#include <sstream>
#include <IFileSystem.h>
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#include "util/auth.h"
#include "util/directiontables.h"
#include "util/pointedthing.h"
@@ -82,11 +82,11 @@ MeshUpdateQueue::MeshUpdateQueue()
MeshUpdateQueue::~MeshUpdateQueue()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
for(std::vector<QueuedMeshUpdate*>::iterator
i = m_queue.begin();
- i != m_queue.end(); i++)
+ i != m_queue.end(); ++i)
{
QueuedMeshUpdate *q = *i;
delete q;
@@ -98,11 +98,11 @@ MeshUpdateQueue::~MeshUpdateQueue()
*/
void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_server, bool urgent)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
assert(data); // pre-condition
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
if(urgent)
m_urgents.insert(p);
@@ -113,7 +113,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se
*/
for(std::vector<QueuedMeshUpdate*>::iterator
i = m_queue.begin();
- i != m_queue.end(); i++)
+ i != m_queue.end(); ++i)
{
QueuedMeshUpdate *q = *i;
if(q->p == p)
@@ -141,12 +141,12 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se
// Returns NULL if queue is empty
QueuedMeshUpdate *MeshUpdateQueue::pop()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
bool must_be_urgent = !m_urgents.empty();
for(std::vector<QueuedMeshUpdate*>::iterator
i = m_queue.begin();
- i != m_queue.end(); i++)
+ i != m_queue.end(); ++i)
{
QueuedMeshUpdate *q = *i;
if(must_be_urgent && m_urgents.count(q->p) == 0)
@@ -228,17 +228,17 @@ Client::Client(
m_particle_manager(&m_env),
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this),
m_device(device),
+ m_camera(NULL),
+ m_minimap_disabled_by_server(false),
m_server_ser_ver(SER_FMT_VER_INVALID),
m_proto_ver(0),
m_playeritem(0),
m_inventory_updated(false),
m_inventory_from_server(NULL),
m_inventory_from_server_age(0.0),
- m_show_highlighted(false),
m_animation_time(0),
m_crack_level(-1),
m_crack_pos(0,0,0),
- m_highlighted_pos(0,0,0),
m_map_seed(0),
m_password(password),
m_chosen_auth_mech(AUTH_MECHANISM_NONE),
@@ -264,12 +264,15 @@ Client::Client(
m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
m_cache_enable_shaders = g_settings->getBool("enable_shaders");
+ m_cache_use_tangent_vertices = m_cache_enable_shaders && (
+ g_settings->getBool("enable_bumpmapping") ||
+ g_settings->getBool("enable_parallax_occlusion"));
}
void Client::Stop()
{
//request all client managed threads to stop
- m_mesh_update_thread.Stop();
+ m_mesh_update_thread.stop();
// Save local server map
if (m_localdb) {
infostream << "Local map saving ended." << std::endl;
@@ -280,7 +283,7 @@ void Client::Stop()
bool Client::isShutdown()
{
- if (!m_mesh_update_thread.IsRunning()) return true;
+ if (!m_mesh_update_thread.isRunning()) return true;
return false;
}
@@ -289,8 +292,8 @@ Client::~Client()
{
m_con.Disconnect();
- m_mesh_update_thread.Stop();
- m_mesh_update_thread.Wait();
+ m_mesh_update_thread.stop();
+ m_mesh_update_thread.wait();
while (!m_mesh_update_thread.m_queue_out.empty()) {
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx();
delete r.mesh;
@@ -322,7 +325,7 @@ void Client::connect(Address address,
const std::string &address_name,
bool is_local_server)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
initLocalMapSaving(address, address_name, is_local_server);
@@ -332,7 +335,7 @@ void Client::connect(Address address,
void Client::step(float dtime)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Limit a bit
if(dtime > 2.0)
@@ -383,25 +386,30 @@ void Client::step(float dtime)
Player *myplayer = m_env.getLocalPlayer();
FATAL_ERROR_IF(myplayer == NULL, "Local player not found in environment.");
- // Send TOSERVER_INIT_LEGACY
- // [0] u16 TOSERVER_INIT_LEGACY
- // [2] u8 SER_FMT_VER_HIGHEST_READ
- // [3] u8[20] player_name
- // [23] u8[28] password (new in some version)
- // [51] u16 minimum supported network protocol version (added sometime)
- // [53] u16 maximum supported network protocol version (added later than the previous one)
-
- char pName[PLAYERNAME_SIZE];
- char pPassword[PASSWORD_SIZE];
- memset(pName, 0, PLAYERNAME_SIZE * sizeof(char));
- memset(pPassword, 0, PASSWORD_SIZE * sizeof(char));
-
- std::string hashed_password = translatePassword(myplayer->getName(), m_password);
- snprintf(pName, PLAYERNAME_SIZE, "%s", myplayer->getName());
- snprintf(pPassword, PASSWORD_SIZE, "%s", hashed_password.c_str());
-
- sendLegacyInit(pName, pPassword);
- if (LATEST_PROTOCOL_VERSION >= 25)
+ u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
+ CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
+
+ if (proto_version_min < 25) {
+ // Send TOSERVER_INIT_LEGACY
+ // [0] u16 TOSERVER_INIT_LEGACY
+ // [2] u8 SER_FMT_VER_HIGHEST_READ
+ // [3] u8[20] player_name
+ // [23] u8[28] password (new in some version)
+ // [51] u16 minimum supported network protocol version (added sometime)
+ // [53] u16 maximum supported network protocol version (added later than the previous one)
+
+ char pName[PLAYERNAME_SIZE];
+ char pPassword[PASSWORD_SIZE];
+ memset(pName, 0, PLAYERNAME_SIZE * sizeof(char));
+ memset(pPassword, 0, PASSWORD_SIZE * sizeof(char));
+
+ std::string hashed_password = translate_password(myplayer->getName(), m_password);
+ snprintf(pName, PLAYERNAME_SIZE, "%s", myplayer->getName());
+ snprintf(pPassword, PASSWORD_SIZE, "%s", hashed_password.c_str());
+
+ sendLegacyInit(pName, pPassword);
+ }
+ if (CLIENT_PROTOCOL_VERSION_MAX >= 25)
sendInit(myplayer->getName());
}
@@ -617,7 +625,7 @@ void Client::step(float dtime)
{
for(std::map<int, u16>::iterator
i = m_sounds_to_objects.begin();
- i != m_sounds_to_objects.end(); i++)
+ i != m_sounds_to_objects.end(); ++i)
{
int client_id = i->first;
u16 object_id = i->second;
@@ -642,7 +650,7 @@ void Client::step(float dtime)
i != m_sounds_server_to_client.end();) {
s32 server_id = i->first;
int client_id = i->second;
- i++;
+ ++i;
if(!m_sound->soundExists(client_id)) {
m_sounds_server_to_client.erase(server_id);
m_sounds_client_to_server.erase(client_id);
@@ -823,7 +831,7 @@ void Client::initLocalMapSaving(const Address &address,
void Client::ReceiveAll()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
u32 start_ms = porting::getTimeMs();
for(;;)
{
@@ -849,7 +857,7 @@ void Client::ReceiveAll()
void Client::Receive()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt;
m_con.Receive(&pkt);
ProcessData(&pkt);
@@ -866,7 +874,7 @@ inline void Client::handleCommand(NetworkPacket* pkt)
*/
void Client::ProcessData(NetworkPacket *pkt)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
ToClientCommand command = (ToClientCommand) pkt->getCommand();
u32 sender_peer_id = pkt->getPeerId();
@@ -945,6 +953,7 @@ void Client::interact(u8 action, const PointedThing& pointed)
2: digging completed
3: place block or item (to abovesurface)
4: use item
+ 5: perform secondary action of item
*/
NetworkPacket pkt(TOSERVER_INTERACT, 1 + 2 + 0);
@@ -999,10 +1008,13 @@ void Client::sendLegacyInit(const char* playerName, const char* playerPassword)
NetworkPacket pkt(TOSERVER_INIT_LEGACY,
1 + PLAYERNAME_SIZE + PASSWORD_SIZE + 2 + 2);
+ u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
+ CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
+
pkt << (u8) SER_FMT_VER_HIGHEST_READ;
pkt.putRawString(playerName,PLAYERNAME_SIZE);
pkt.putRawString(playerPassword, PASSWORD_SIZE);
- pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX;
+ pkt << (u16) proto_version_min << (u16) CLIENT_PROTOCOL_VERSION_MAX;
Send(&pkt);
}
@@ -1013,8 +1025,12 @@ void Client::sendInit(const std::string &playerName)
// we don't support network compression yet
u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE;
+
+ u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
+ CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
+
pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes;
- pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX;
+ pkt << (u16) proto_version_min << (u16) CLIENT_PROTOCOL_VERSION_MAX;
pkt << playerName;
Send(&pkt);
@@ -1027,18 +1043,14 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism)
switch (chosen_auth_mechanism) {
case AUTH_MECHANISM_FIRST_SRP: {
// send srp verifier to server
+ std::string verifier;
+ std::string salt;
+ generate_srp_verifier_and_salt(getPlayerName(), m_password,
+ &verifier, &salt);
+
NetworkPacket resp_pkt(TOSERVER_FIRST_SRP, 0);
- char *salt, *bytes_v;
- std::size_t len_salt, len_v;
- salt = NULL;
- getSRPVerifier(getPlayerName(), m_password,
- &salt, &len_salt, &bytes_v, &len_v);
- resp_pkt
- << std::string((char*)salt, len_salt)
- << std::string((char*)bytes_v, len_v)
- << (u8)((m_password == "") ? 1 : 0);
- free(salt);
- free(bytes_v);
+ resp_pkt << salt << verifier << (u8)((m_password == "") ? 1 : 0);
+
Send(&resp_pkt);
break;
}
@@ -1047,7 +1059,7 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism)
u8 based_on = 1;
if (chosen_auth_mechanism == AUTH_MECHANISM_LEGACY_PASSWORD) {
- m_password = translatePassword(getPlayerName(), m_password);
+ m_password = translate_password(getPlayerName(), m_password);
based_on = 0;
}
@@ -1058,8 +1070,10 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism)
m_password.length(), NULL, NULL);
char *bytes_A = 0;
size_t len_A = 0;
- srp_user_start_authentication((struct SRPUser *) m_auth_data,
- NULL, NULL, 0, (unsigned char **) &bytes_A, &len_A);
+ SRP_Result res = srp_user_start_authentication(
+ (struct SRPUser *) m_auth_data, NULL, NULL, 0,
+ (unsigned char **) &bytes_A, &len_A);
+ FATAL_ERROR_IF(res != SRP_OK, "Creating local SRP user failed.");
NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0);
resp_pkt << std::string(bytes_A, len_A) << based_on;
@@ -1105,7 +1119,7 @@ void Client::sendRemovedSounds(std::vector<s32> &soundList)
pkt << (u16) (server_ids & 0xFFFF);
for(std::vector<s32>::iterator i = soundList.begin();
- i != soundList.end(); i++)
+ i != soundList.end(); ++i)
pkt << *i;
Send(&pkt);
@@ -1191,8 +1205,8 @@ void Client::sendChangePassword(const std::string &oldpassword,
m_new_password = newpassword;
startAuth(choseAuthMech(m_sudo_auth_methods));
} else {
- std::string oldpwd = translatePassword(playername, oldpassword);
- std::string newpwd = translatePassword(playername, newpassword);
+ std::string oldpwd = translate_password(playername, oldpassword);
+ std::string newpwd = translate_password(playername, newpassword);
NetworkPacket pkt(TOSERVER_PASSWORD_LEGACY, 2 * PASSWORD_SIZE);
@@ -1210,7 +1224,7 @@ void Client::sendChangePassword(const std::string &oldpassword,
void Client::sendDamage(u8 damage)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8));
pkt << damage;
@@ -1219,7 +1233,7 @@ void Client::sendDamage(u8 damage)
void Client::sendBreath(u16 breath)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOSERVER_BREATH, sizeof(u16));
pkt << breath;
@@ -1228,7 +1242,7 @@ void Client::sendBreath(u16 breath)
void Client::sendRespawn()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOSERVER_RESPAWN, 0);
Send(&pkt);
@@ -1236,7 +1250,7 @@ void Client::sendRespawn()
void Client::sendReady()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOSERVER_CLIENT_READY,
1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(g_version_hash));
@@ -1270,7 +1284,7 @@ void Client::sendPlayerPos()
u16 our_peer_id;
{
- //JMutexAutoLock lock(m_con_mutex); //bulk comment-out
+ //MutexAutoLock lock(m_con_mutex); //bulk comment-out
our_peer_id = m_con.GetPeerID();
}
@@ -1469,13 +1483,13 @@ ClientActiveObject * Client::getSelectedActiveObject(
{
ClientActiveObject *obj = objects[i].obj;
- core::aabbox3d<f32> *selection_box = obj->getSelectionBox();
+ aabb3f *selection_box = obj->getSelectionBox();
if(selection_box == NULL)
continue;
v3f pos = obj->getPosition();
- core::aabbox3d<f32> offsetted_box(
+ aabb3f offsetted_box(
selection_box->MinEdge + pos,
selection_box->MaxEdge + pos
);
@@ -1504,15 +1518,6 @@ int Client::getCrackLevel()
return m_crack_level;
}
-void Client::setHighlighted(v3s16 pos, bool show_highlighted)
-{
- m_show_highlighted = show_highlighted;
- v3s16 old_highlighted_pos = m_highlighted_pos;
- m_highlighted_pos = pos;
- addUpdateMeshTaskForNode(old_highlighted_pos, false, true);
- addUpdateMeshTaskForNode(m_highlighted_pos, false, true);
-}
-
void Client::setCrack(int level, v3s16 pos)
{
int old_crack_level = m_crack_level;
@@ -1589,7 +1594,8 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent)
Create a task to update the mesh of the block
*/
- MeshMakeData *data = new MeshMakeData(this, m_cache_enable_shaders);
+ MeshMakeData *data = new MeshMakeData(this, m_cache_enable_shaders,
+ m_cache_use_tangent_vertices);
{
//TimeTaker timer("data fill");
@@ -1597,7 +1603,6 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent)
// Debug: 1-6ms, avg=2ms
data->fill(b);
data->setCrack(m_crack_level, m_crack_pos);
- data->setHighlighted(m_highlighted_pos, m_show_highlighted);
data->setSmoothLighting(m_cache_smooth_lighting);
}
@@ -1769,32 +1774,9 @@ void Client::afterContentReceived(IrrlichtDevice *device)
m_nodedef->updateTextures(this, texture_update_progress, &tu_args);
delete[] tu_args.text_base;
- // Preload item textures and meshes if configured to
- if(g_settings->getBool("preload_item_visuals"))
- {
- verbosestream<<"Updating item textures and meshes"<<std::endl;
- text = wgettext("Item textures...");
- draw_load_screen(text, device, guienv, 0, 0);
- std::set<std::string> names = m_itemdef->getAll();
- size_t size = names.size();
- size_t count = 0;
- int percent = 0;
- for(std::set<std::string>::const_iterator
- i = names.begin(); i != names.end(); ++i)
- {
- // Asking for these caches the result
- m_itemdef->getInventoryTexture(*i, this);
- m_itemdef->getWieldMesh(*i, this);
- count++;
- percent = (count * 100 / size * 0.2) + 80;
- draw_load_screen(text, device, guienv, 0, percent);
- }
- delete[] text;
- }
-
// Start mesh update thread after setting up content definitions
infostream<<"- Starting mesh update thread"<<std::endl;
- m_mesh_update_thread.Start();
+ m_mesh_update_thread.start();
m_state = LC_Ready;
sendReady();
@@ -1839,9 +1821,12 @@ void Client::makeScreenshot(IrrlichtDevice *device)
+ DIR_DELIM
+ std::string("screenshot_")
+ std::string(timetstamp_c);
- std::string filename_ext = ".png";
+ std::string filename_ext = "." + g_settings->get("screenshot_format");
std::string filename;
+ u32 quality = (u32)g_settings->getS32("screenshot_quality");
+ quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
+
// Try to find a unique filename
unsigned serial = 0;
@@ -1863,7 +1848,7 @@ void Client::makeScreenshot(IrrlichtDevice *device)
raw_image->copyTo(image);
std::ostringstream sstr;
- if (driver->writeImageToFile(image, filename.c_str())) {
+ if (driver->writeImageToFile(image, filename.c_str(), quality)) {
sstr << "Saved screenshot to '" << filename << "'";
} else {
sstr << "Failed to save screenshot '" << filename << "'";
diff --git a/src/client.h b/src/client.h
index 547edfeab..cdadb9d3e 100644
--- a/src/client.h
+++ b/src/client.h
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "network/connection.h"
#include "environment.h"
#include "irrlichttypes_extrabloated.h"
-#include "jthread/jmutex.h"
+#include "threading/mutex.h"
#include <ostream>
#include <map>
#include <set>
@@ -50,6 +50,7 @@ struct PointedThing;
class Database;
class Mapper;
struct MinimapMapblock;
+class Camera;
struct QueuedMeshUpdate
{
@@ -89,14 +90,14 @@ public:
u32 size()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
return m_queue.size();
}
private:
std::vector<QueuedMeshUpdate*> m_queue;
std::set<v3s16> m_urgents;
- JMutex m_mutex;
+ Mutex m_mutex;
};
struct MeshUpdateResult
@@ -119,19 +120,14 @@ private:
MeshUpdateQueue m_queue_in;
protected:
- const char *getName()
- { return "MeshUpdateThread"; }
virtual void doUpdate();
public:
- MeshUpdateThread()
- {
- }
+ MeshUpdateThread() : UpdateThread("Mesh") {}
void enqueueUpdate(v3s16 p, MeshMakeData *data,
bool ack_block_to_server, bool urgent);
-
MutexedQueue<MeshUpdateResult> m_queue_out;
v3s16 m_camera_offset;
@@ -461,9 +457,6 @@ public:
int getCrackLevel();
void setCrack(int level, v3s16 pos);
- void setHighlighted(v3s16 pos, bool show_higlighted);
- v3s16 getHighlighted(){ return m_highlighted_pos; }
-
u16 getHP();
u16 getBreath();
@@ -515,6 +508,15 @@ public:
Mapper* getMapper ()
{ return m_mapper; }
+ void setCamera(Camera* camera)
+ { m_camera = camera; }
+
+ Camera* getCamera ()
+ { return m_camera; }
+
+ bool isMinimapDisabledByServer()
+ { return m_minimap_disabled_by_server; }
+
// IGameDef interface
virtual IItemDefManager* getItemDefManager();
virtual INodeDefManager* getNodeDefManager();
@@ -594,7 +596,9 @@ private:
ParticleManager m_particle_manager;
con::Connection m_con;
IrrlichtDevice *m_device;
+ Camera *m_camera;
Mapper *m_mapper;
+ bool m_minimap_disabled_by_server;
// Server serialization version
u8 m_server_ser_ver;
@@ -610,12 +614,10 @@ private:
Inventory *m_inventory_from_server;
float m_inventory_from_server_age;
PacketCounter m_packetcounter;
- bool m_show_highlighted;
// Block mesh animation parameters
float m_animation_time;
int m_crack_level;
v3s16 m_crack_pos;
- v3s16 m_highlighted_pos;
// 0 <= m_daynight_i < DAYNIGHT_CACHE_COUNT
//s32 m_daynight_i;
//u32 m_daynight_ratio;
@@ -683,6 +685,9 @@ private:
// TODO: Add callback to update these when g_settings changes
bool m_cache_smooth_lighting;
bool m_cache_enable_shaders;
+ bool m_cache_use_tangent_vertices;
+
+ DISABLE_CLASS_COPY(Client);
};
#endif // !CLIENT_HEADER
diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index bad5c384c..404a16310 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -89,7 +89,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
if (list_video_modes)
return print_video_modes();
- if (!init_engine(game_params.log_level)) {
+ if (!init_engine()) {
errorstream << "Could not initialize game engine." << std::endl;
return false;
}
@@ -201,6 +201,9 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
bool game_has_run = launch_game(error_message, reconnect_requested,
game_params, cmd_args);
+ // Reset the reconnect_requested flag
+ reconnect_requested = false;
+
// If skip_main_menu, we only want to startup once
if (skip_main_menu && !first_loop)
break;
@@ -321,10 +324,10 @@ void ClientLauncher::init_args(GameParams &game_params, const Settings &cmd_args
|| cmd_args.getFlag("random-input");
}
-bool ClientLauncher::init_engine(int log_level)
+bool ClientLauncher::init_engine()
{
receiver = new MyEventReceiver();
- create_engine_device(log_level);
+ create_engine_device();
return device != NULL;
}
@@ -336,6 +339,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
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;
@@ -455,7 +459,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
if (game_params.game_spec.isValid() &&
game_params.game_spec.id != worldspec.gameid) {
- errorstream << "WARNING: Overriding gamespec from \""
+ warningstream << "Overriding gamespec from \""
<< worldspec.gameid << "\" to \""
<< game_params.game_spec.id << "\"" << std::endl;
gamespec = game_params.game_spec;
@@ -500,20 +504,8 @@ void ClientLauncher::main_menu(MainMenuData *menudata)
smgr->clear(); /* leave scene manager in a clean state */
}
-bool ClientLauncher::create_engine_device(int log_level)
+bool ClientLauncher::create_engine_device()
{
- static const irr::ELOG_LEVEL irr_log_level[5] = {
- ELL_NONE,
- ELL_ERROR,
- ELL_WARNING,
- ELL_INFORMATION,
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
- ELL_INFORMATION
-#else
- ELL_DEBUG
-#endif
- };
-
// Resolution selection
bool fullscreen = g_settings->getBool("fullscreen");
u16 screenW = g_settings->getU16("screenW");
@@ -524,6 +516,9 @@ bool ClientLauncher::create_engine_device(int log_level)
u16 bits = g_settings->getU16("fullscreen_bpp");
u16 fsaa = g_settings->getU16("fsaa");
+ // stereo buffer required for pageflip stereo
+ bool stereo_buffer = g_settings->get("3d_mode") == "pageflip";
+
// Determine driver
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
std::string driverstring = g_settings->get("video_driver");
@@ -549,9 +544,11 @@ bool ClientLauncher::create_engine_device(int log_level)
params.AntiAlias = fsaa;
params.Fullscreen = fullscreen;
params.Stencilbuffer = false;
+ params.Stereobuffer = stereo_buffer;
params.Vsync = vsync;
params.EventReceiver = receiver;
params.HighPrecisionFPU = g_settings->getBool("high_precision_fpu");
+ params.ZBufferBits = 24;
#ifdef __ANDROID__
params.PrivateData = porting::app_global;
params.OGLES2ShaderPath = std::string(porting::path_user + DIR_DELIM +
@@ -561,10 +558,6 @@ bool ClientLauncher::create_engine_device(int log_level)
device = createDeviceEx(params);
if (device) {
- // Map our log level to irrlicht engine one.
- ILogger* irr_logger = device->getLogger();
- irr_logger->setLogLevel(irr_log_level[log_level]);
-
porting::initIrrlicht(device);
}
@@ -651,14 +644,14 @@ void ClientLauncher::speed_tests()
infostream << "Around 5000/ms should do well here." << std::endl;
TimeTaker timer("Testing mutex speed");
- JMutex m;
+ Mutex m;
u32 n = 0;
u32 i = 0;
do {
n += 10000;
for (; i < n; i++) {
- m.Lock();
- m.Unlock();
+ m.lock();
+ m.unlock();
}
}
// Do at least 10ms
@@ -696,7 +689,7 @@ bool ClientLauncher::print_video_modes()
return false;
}
- dstream << _("Available video modes (WxHxD):") << std::endl;
+ std::cout << _("Available video modes (WxHxD):") << std::endl;
video::IVideoModeList *videomode_list = nulldevice->getVideoModeList();
@@ -707,14 +700,14 @@ bool ClientLauncher::print_video_modes()
for (s32 i = 0; i < videomode_count; ++i) {
videomode_res = videomode_list->getVideoModeResolution(i);
videomode_depth = videomode_list->getVideoModeDepth(i);
- dstream << videomode_res.Width << "x" << videomode_res.Height
+ std::cout << videomode_res.Width << "x" << videomode_res.Height
<< "x" << videomode_depth << std::endl;
}
- dstream << _("Active video mode (WxHxD):") << std::endl;
+ std::cout << _("Active video mode (WxHxD):") << std::endl;
videomode_res = videomode_list->getDesktopResolution();
videomode_depth = videomode_list->getDesktopDepth();
- dstream << videomode_res.Width << "x" << videomode_res.Height
+ std::cout << videomode_res.Width << "x" << videomode_res.Height
<< "x" << videomode_depth << std::endl;
}
diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h
index 49ceefc52..b10bbebc9 100644
--- a/src/client/clientlauncher.h
+++ b/src/client/clientlauncher.h
@@ -90,13 +90,13 @@ public:
protected:
void init_args(GameParams &game_params, const Settings &cmd_args);
- bool init_engine(int log_level);
+ bool init_engine();
bool launch_game(std::string &error_message, bool reconnect_requested,
GameParams &game_params, const Settings &cmd_args);
void main_menu(MainMenuData *menudata);
- bool create_engine_device(int log_level);
+ bool create_engine_device();
void speed_tests();
bool print_video_modes();
diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h
index a894e35aa..69e4b25fa 100644
--- a/src/client/inputhandler.h
+++ b/src/client/inputhandler.h
@@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __INPUT_HANDLER_H__
-#define __INPUT_HANDLER_H__
+#ifndef INPUT_HANDLER_H
+#define INPUT_HANDLER_H
#include "irrlichttypes_extrabloated.h"
@@ -86,16 +86,16 @@ public:
}
}
} else if (event.EventType == irr::EET_LOG_TEXT_EVENT) {
- static const enum LogMessageLevel irr_loglev_conv[] = {
- LMT_VERBOSE, // ELL_DEBUG
- LMT_INFO, // ELL_INFORMATION
- LMT_ACTION, // ELL_WARNING
- LMT_ERROR, // ELL_ERROR
- LMT_ERROR, // ELL_NONE
+ static const LogLevel irr_loglev_conv[] = {
+ LL_VERBOSE, // ELL_DEBUG
+ LL_INFO, // ELL_INFORMATION
+ LL_WARNING, // ELL_WARNING
+ LL_ERROR, // ELL_ERROR
+ LL_NONE, // ELL_NONE
};
assert(event.LogEvent.Level < ARRLEN(irr_loglev_conv));
- log_printline(irr_loglev_conv[event.LogEvent.Level],
- std::string("Irrlicht: ") + (const char *)event.LogEvent.Text);
+ g_logger.log(irr_loglev_conv[event.LogEvent.Level],
+ std::string("Irrlicht: ") + (const char*) event.LogEvent.Text);
return true;
}
/* always return false in order to continue processing events */
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index a28b40c65..ec8c95f02 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mesh.h"
#include "log.h"
#include "gamedef.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "util/string.h" // for parseColorString()
#include "imagefilters.h"
#include "guiscalingfilter.h"
@@ -194,7 +194,7 @@ class SourceImageCache
public:
~SourceImageCache() {
for (std::map<std::string, video::IImage*>::iterator iter = m_images.begin();
- iter != m_images.end(); iter++) {
+ iter != m_images.end(); ++iter) {
iter->second->drop();
}
m_images.clear();
@@ -414,7 +414,7 @@ private:
// Maps a texture name to an index in the former.
std::map<std::string, u32> m_name_to_id;
// The two former containers are behind this mutex
- JMutex m_textureinfo_cache_mutex;
+ Mutex m_textureinfo_cache_mutex;
// Queued texture fetches (to be processed by the main thread)
RequestQueue<std::string, u32, u8, u8> m_get_texture_queue;
@@ -439,7 +439,7 @@ TextureSource::TextureSource(IrrlichtDevice *device):
{
assert(m_device); // Pre-condition
- m_main_thread = get_current_thread_id();
+ m_main_thread = thr_get_current_thread_id();
// Add a NULL TextureInfo as the first index, named ""
m_textureinfo_cache.push_back(TextureInfo(""));
@@ -461,7 +461,7 @@ TextureSource::~TextureSource()
for (std::vector<TextureInfo>::iterator iter =
m_textureinfo_cache.begin();
- iter != m_textureinfo_cache.end(); iter++)
+ iter != m_textureinfo_cache.end(); ++iter)
{
//cleanup texture
if (iter->texture)
@@ -471,7 +471,7 @@ TextureSource::~TextureSource()
for (std::vector<video::ITexture*>::iterator iter =
m_texture_trash.begin(); iter != m_texture_trash.end();
- iter++) {
+ ++iter) {
video::ITexture *t = *iter;
//cleanup trashed texture
@@ -490,7 +490,7 @@ u32 TextureSource::getTextureId(const std::string &name)
/*
See if texture already exists
*/
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
if (n != m_name_to_id.end())
@@ -502,7 +502,7 @@ u32 TextureSource::getTextureId(const std::string &name)
/*
Get texture
*/
- if (get_current_thread_id() == m_main_thread)
+ if (thr_is_current_thread(m_main_thread))
{
return generateTexture(name);
}
@@ -553,10 +553,12 @@ static void blit_with_alpha(video::IImage *src, video::IImage *dst,
static void blit_with_alpha_overlay(video::IImage *src, video::IImage *dst,
v2s32 src_pos, v2s32 dst_pos, v2u32 size);
-// Like blit_with_alpha overlay, but uses an int to calculate the ratio
-// and modifies any destination pixels that are not fully transparent
-static void blit_with_interpolate_overlay(video::IImage *src, video::IImage *dst,
- v2s32 src_pos, v2s32 dst_pos, v2u32 size, int ratio);
+// Apply a color to an image. Uses an int (0-255) to calculate the ratio.
+// If the ratio is 255 or -1 and keep_alpha is true, then it multiples the
+// color alpha with the destination alpha.
+// Otherwise, any pixels that are not fully transparent get the color alpha.
+static void apply_colorize(video::IImage *dst, v2u32 dst_pos, v2u32 size,
+ video::SColor color, int ratio, bool keep_alpha);
// Apply a mask to an image
static void apply_mask(video::IImage *mask, video::IImage *dst,
@@ -593,7 +595,7 @@ u32 TextureSource::generateTexture(const std::string &name)
/*
See if texture already exists
*/
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
if (n != m_name_to_id.end()) {
@@ -604,7 +606,7 @@ u32 TextureSource::generateTexture(const std::string &name)
/*
Calling only allowed from main thread
*/
- if (get_current_thread_id() != m_main_thread) {
+ if (!thr_is_current_thread(m_main_thread)) {
errorstream<<"TextureSource::generateTexture() "
"called not from main thread"<<std::endl;
return 0;
@@ -631,7 +633,7 @@ u32 TextureSource::generateTexture(const std::string &name)
Add texture to caches (add NULL textures too)
*/
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
u32 id = m_textureinfo_cache.size();
TextureInfo ti(name, tex);
@@ -643,7 +645,7 @@ u32 TextureSource::generateTexture(const std::string &name)
std::string TextureSource::getTextureName(u32 id)
{
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
if (id >= m_textureinfo_cache.size())
{
@@ -658,7 +660,7 @@ std::string TextureSource::getTextureName(u32 id)
video::ITexture* TextureSource::getTexture(u32 id)
{
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
if (id >= m_textureinfo_cache.size())
return NULL;
@@ -704,7 +706,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im
{
//infostream<<"TextureSource::insertSourceImage(): name="<<name<<std::endl;
- sanity_check(get_current_thread_id() == m_main_thread);
+ sanity_check(thr_is_current_thread(m_main_thread));
m_sourcecache.insert(name, img, true, m_device->getVideoDriver());
m_source_image_existence.set(name, true);
@@ -712,7 +714,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im
void TextureSource::rebuildImagesAndTextures()
{
- JMutexAutoLock lock(m_textureinfo_cache_mutex);
+ MutexAutoLock lock(m_textureinfo_cache_mutex);
video::IVideoDriver* driver = m_device->getVideoDriver();
sanity_check(driver);
@@ -1173,7 +1175,28 @@ bool TextureSource::generateImagePart(std::string part_of_name,
core::rect<s32>(pos_from, dim),
video::SColor(255,255,255,255),
NULL);*/
- blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
+
+ core::dimension2d<u32> dim_dst = baseimg->getDimension();
+ if (dim == dim_dst) {
+ blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
+ } else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) {
+ // Upscale overlying image
+ video::IImage* scaled_image = m_device->getVideoDriver()->
+ createImage(video::ECF_A8R8G8B8, dim_dst);
+ image->copyToScaling(scaled_image);
+
+ blit_with_alpha(scaled_image, baseimg, pos_from, pos_to, dim_dst);
+ scaled_image->drop();
+ } else {
+ // Upscale base image
+ video::IImage* scaled_base = m_device->getVideoDriver()->
+ createImage(video::ECF_A8R8G8B8, dim);
+ baseimg->copyToScaling(scaled_base);
+ baseimg->drop();
+ baseimg = scaled_base;
+
+ blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
+ }
}
//cleanup
image->drop();
@@ -1242,7 +1265,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
baseimg = driver->createImage(video::ECF_A8R8G8B8, dim);
baseimg->fill(video::SColor(0,0,0,0));
}
- while (sf.atend() == false) {
+ while (sf.at_end() == false) {
u32 x = stoi(sf.next(","));
u32 y = stoi(sf.next("="));
std::string filename = sf.next(":");
@@ -1329,7 +1352,6 @@ bool TextureSource::generateImagePart(std::string part_of_name,
u32 r1 = stoi(sf.next(","));
u32 g1 = stoi(sf.next(","));
u32 b1 = stoi(sf.next(""));
- std::string filename = sf.next("");
core::dimension2d<u32> dim = baseimg->getDimension();
@@ -1639,27 +1661,17 @@ bool TextureSource::generateImagePart(std::string part_of_name,
video::SColor color;
int ratio = -1;
+ bool keep_alpha = false;
if (!parseColorString(color_str, color, false))
return false;
if (is_number(ratio_str))
ratio = mystoi(ratio_str, 0, 255);
+ else if (ratio_str == "alpha")
+ keep_alpha = true;
- core::dimension2d<u32> dim = baseimg->getDimension();
- video::IImage *img = driver->createImage(video::ECF_A8R8G8B8, dim);
-
- if (!img) {
- errorstream << "generateImagePart(): Could not create image "
- << "for part_of_name=\"" << part_of_name
- << "\", cancelling." << std::endl;
- return false;
- }
-
- img->fill(video::SColor(color));
- // Overlay the colored image
- blit_with_interpolate_overlay(img, baseimg, v2s32(0,0), v2s32(0,0), dim, ratio);
- img->drop();
+ apply_colorize(baseimg, v2u32(0, 0), baseimg->getDimension(), color, ratio, keep_alpha);
}
else if (str_starts_with(part_of_name, "[applyfiltersformesh"))
{
@@ -1698,6 +1710,31 @@ bool TextureSource::generateImagePart(std::string part_of_name,
}
}
}
+ /*
+ [resize:WxH
+ Resizes the base image to the given dimensions
+ */
+ else if (str_starts_with(part_of_name, "[resize"))
+ {
+ if (baseimg == NULL) {
+ errorstream << "generateImagePart(): baseimg == NULL "
+ << "for part_of_name=\""<< part_of_name
+ << "\", cancelling." << std::endl;
+ return false;
+ }
+
+ Strfnd sf(part_of_name);
+ sf.next(":");
+ u32 width = stoi(sf.next("x"));
+ u32 height = stoi(sf.next(""));
+ core::dimension2d<u32> dim(width, height);
+
+ video::IImage* image = m_device->getVideoDriver()->
+ createImage(video::ECF_A8R8G8B8, dim);
+ baseimg->copyToScaling(image);
+ baseimg->drop();
+ baseimg = image;
+ }
else
{
errorstream << "generateImagePart(): Invalid "
@@ -1756,6 +1793,9 @@ static void blit_with_alpha_overlay(video::IImage *src, video::IImage *dst,
}
}
+// This function has been disabled because it is currently unused.
+// Feel free to re-enable if you find it handy.
+#if 0
/*
Draw an image on top of an another one, using the specified ratio
modify all partially-opaque pixels in the destination.
@@ -1782,6 +1822,45 @@ static void blit_with_interpolate_overlay(video::IImage *src, video::IImage *dst
}
}
}
+#endif
+
+/*
+ Apply color to destination
+*/
+static void apply_colorize(video::IImage *dst, v2u32 dst_pos, v2u32 size,
+ video::SColor color, int ratio, bool keep_alpha)
+{
+ u32 alpha = color.getAlpha();
+ video::SColor dst_c;
+ if ((ratio == -1 && alpha == 255) || ratio == 255) { // full replacement of color
+ if (keep_alpha) { // replace the color with alpha = dest alpha * color alpha
+ dst_c = color;
+ for (u32 y = dst_pos.Y; y < dst_pos.Y + size.Y; y++)
+ for (u32 x = dst_pos.X; x < dst_pos.X + size.X; x++) {
+ u32 dst_alpha = dst->getPixel(x, y).getAlpha();
+ if (dst_alpha > 0) {
+ dst_c.setAlpha(dst_alpha * alpha / 255);
+ dst->setPixel(x, y, dst_c);
+ }
+ }
+ } else { // replace the color including the alpha
+ for (u32 y = dst_pos.Y; y < dst_pos.Y + size.Y; y++)
+ for (u32 x = dst_pos.X; x < dst_pos.X + size.X; x++)
+ if (dst->getPixel(x, y).getAlpha() > 0)
+ dst->setPixel(x, y, color);
+ }
+ } else { // interpolate between the color and destination
+ float interp = (ratio == -1 ? color.getAlpha() / 255.0f : ratio / 255.0f);
+ for (u32 y = dst_pos.Y; y < dst_pos.Y + size.Y; y++)
+ for (u32 x = dst_pos.X; x < dst_pos.X + size.X; x++) {
+ dst_c = dst->getPixel(x, y);
+ if (dst_c.getAlpha() > 0) {
+ dst_c = color.getInterpolated(dst_c, interp);
+ dst->setPixel(x, y, dst_c);
+ }
+ }
+ }
+}
/*
Apply mask to destination
@@ -2057,7 +2136,7 @@ video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present)
{
std::string tname = "__shaderFlagsTexture";
tname += normalmap_present ? "1" : "0";
-
+
if (isKnownSourceImage(tname)) {
return getTexture(tname);
} else {
diff --git a/src/client/tile.h b/src/client/tile.h
index 7796e801d..b75916841 100644
--- a/src/client/tile.h
+++ b/src/client/tile.h
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define TILE_HEADER
#include "irrlichttypes.h"
-#include "irr_v2d.h"
#include "irr_v3d.h"
#include <ITexture.h>
#include <IrrlichtDevice.h>
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index 3330e0af9..a3a17d435 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -38,10 +38,12 @@ const char *ClientInterface::statenames[] = {
"Disconnecting",
"Denied",
"Created",
- "InitSent",
+ "AwaitingInit2",
+ "HelloSent",
"InitDone",
"DefinitionsSent",
- "Active"
+ "Active",
+ "SudoMode",
};
@@ -65,7 +67,7 @@ void RemoteClient::GetNextBlocks (
float dtime,
std::vector<PrioritySortedBlockTransfer> &dest)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Increment timers
@@ -368,17 +370,21 @@ queue_full_break:
void RemoteClient::GotBlock(v3s16 p)
{
- if(m_blocks_sending.find(p) != m_blocks_sending.end())
- m_blocks_sending.erase(p);
- else
- {
- m_excess_gotblocks++;
+ if (m_blocks_modified.find(p) == m_blocks_modified.end()) {
+ if (m_blocks_sending.find(p) != m_blocks_sending.end())
+ m_blocks_sending.erase(p);
+ else
+ m_excess_gotblocks++;
+
+ m_blocks_sent.insert(p);
}
- m_blocks_sent.insert(p);
}
void RemoteClient::SentBlock(v3s16 p)
{
+ if (m_blocks_modified.find(p) != m_blocks_modified.end())
+ m_blocks_modified.erase(p);
+
if(m_blocks_sending.find(p) == m_blocks_sending.end())
m_blocks_sending[p] = 0.0;
else
@@ -389,22 +395,26 @@ void RemoteClient::SentBlock(v3s16 p)
void RemoteClient::SetBlockNotSent(v3s16 p)
{
m_nearest_unsent_d = 0;
+ m_nothing_to_send_pause_timer = 0;
if(m_blocks_sending.find(p) != m_blocks_sending.end())
m_blocks_sending.erase(p);
if(m_blocks_sent.find(p) != m_blocks_sent.end())
m_blocks_sent.erase(p);
+ m_blocks_modified.insert(p);
}
void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
{
m_nearest_unsent_d = 0;
+ m_nothing_to_send_pause_timer = 0;
for(std::map<v3s16, MapBlock*>::iterator
i = blocks.begin();
i != blocks.end(); ++i)
{
v3s16 p = i->first;
+ m_blocks_modified.insert(p);
if(m_blocks_sending.find(p) != m_blocks_sending.end())
m_blocks_sending.erase(p);
@@ -593,7 +603,7 @@ ClientInterface::~ClientInterface()
Delete clients
*/
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
for(std::map<u16, RemoteClient*>::iterator
i = m_clients.begin();
@@ -609,7 +619,7 @@ ClientInterface::~ClientInterface()
std::vector<u16> ClientInterface::getClientIDs(ClientState min_state)
{
std::vector<u16> reply;
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
for(std::map<u16, RemoteClient*>::iterator
i = m_clients.begin();
@@ -660,7 +670,7 @@ void ClientInterface::UpdatePlayerList()
infostream << "* " << player->getName() << "\t";
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
RemoteClient* client = lockedGetClientNoEx(*i);
if(client != NULL)
client->PrintInfo(infostream);
@@ -680,7 +690,7 @@ void ClientInterface::send(u16 peer_id, u8 channelnum,
void ClientInterface::sendToAll(u16 channelnum,
NetworkPacket* pkt, bool reliable)
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
for(std::map<u16, RemoteClient*>::iterator
i = m_clients.begin();
i != m_clients.end(); ++i) {
@@ -694,7 +704,7 @@ void ClientInterface::sendToAll(u16 channelnum,
RemoteClient* ClientInterface::getClientNoEx(u16 peer_id, ClientState state_min)
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(peer_id);
// The client may not exist; clients are immediately removed if their
@@ -725,7 +735,7 @@ RemoteClient* ClientInterface::lockedGetClientNoEx(u16 peer_id, ClientState stat
ClientState ClientInterface::getClientState(u16 peer_id)
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(peer_id);
// The client may not exist; clients are immediately removed if their
@@ -738,7 +748,7 @@ ClientState ClientInterface::getClientState(u16 peer_id)
void ClientInterface::setPlayerName(u16 peer_id,std::string name)
{
- JMutexAutoLock clientslock(m_clients_mutex);
+ MutexAutoLock clientslock(m_clients_mutex);
std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(peer_id);
// The client may not exist; clients are immediately removed if their
@@ -749,7 +759,7 @@ void ClientInterface::setPlayerName(u16 peer_id,std::string name)
void ClientInterface::DeleteClient(u16 peer_id)
{
- JMutexAutoLock conlock(m_clients_mutex);
+ MutexAutoLock conlock(m_clients_mutex);
// Error check
std::map<u16, RemoteClient*>::iterator n;
@@ -784,7 +794,7 @@ void ClientInterface::DeleteClient(u16 peer_id)
void ClientInterface::CreateClient(u16 peer_id)
{
- JMutexAutoLock conlock(m_clients_mutex);
+ MutexAutoLock conlock(m_clients_mutex);
// Error check
std::map<u16, RemoteClient*>::iterator n;
@@ -801,7 +811,7 @@ void ClientInterface::CreateClient(u16 peer_id)
void ClientInterface::event(u16 peer_id, ClientStateEvent event)
{
{
- JMutexAutoLock clientlock(m_clients_mutex);
+ MutexAutoLock clientlock(m_clients_mutex);
// Error check
std::map<u16, RemoteClient*>::iterator n;
@@ -823,7 +833,7 @@ void ClientInterface::event(u16 peer_id, ClientStateEvent event)
u16 ClientInterface::getProtocolVersion(u16 peer_id)
{
- JMutexAutoLock conlock(m_clients_mutex);
+ MutexAutoLock conlock(m_clients_mutex);
// Error check
std::map<u16, RemoteClient*>::iterator n;
@@ -838,7 +848,7 @@ u16 ClientInterface::getProtocolVersion(u16 peer_id)
void ClientInterface::setClientVersion(u16 peer_id, u8 major, u8 minor, u8 patch, std::string full)
{
- JMutexAutoLock conlock(m_clients_mutex);
+ MutexAutoLock conlock(m_clients_mutex);
// Error check
std::map<u16, RemoteClient*>::iterator n;
diff --git a/src/clientiface.h b/src/clientiface.h
index f6c4294e2..c09942909 100644
--- a/src/clientiface.h
+++ b/src/clientiface.h
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "constants.h"
#include "serialization.h" // for SER_FMT_VER_INVALID
-#include "jthread/jmutex.h"
+#include "threading/mutex.h"
#include "network/networkpacket.h"
#include <list>
@@ -167,6 +167,9 @@ namespace con {
#define CI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
+// Also make sure to update the ClientInterface::statenames
+// array when modifying these enums
+
enum ClientState
{
CS_Invalid,
@@ -319,7 +322,6 @@ public:
/*
List of active objects that the client knows of.
- Value is dummy.
*/
std::set<u16> m_known_objects;
@@ -374,7 +376,7 @@ private:
- A block is cleared from here when client says it has
deleted it from it's memory
- Key is position, value is dummy.
+ List of block positions.
No MapBlock* is stored here because the blocks can get deleted.
*/
std::set<v3s16> m_blocks_sent;
@@ -393,6 +395,16 @@ private:
std::map<v3s16, float> m_blocks_sending;
/*
+ Blocks that have been modified since last sending them.
+ These blocks will not be marked as sent, even if the
+ client reports it has received them to account for blocks
+ that are being modified while on the line.
+
+ List of block positions.
+ */
+ std::set<v3s16> m_blocks_modified;
+
+ /*
Count of excess GotBlocks().
There is an excess amount because the client sometimes
gets a block so late that the server sends it again,
@@ -487,10 +499,8 @@ public:
protected:
//TODO find way to avoid this functions
- void Lock()
- { m_clients_mutex.Lock(); }
- void Unlock()
- { m_clients_mutex.Unlock(); }
+ void lock() { m_clients_mutex.lock(); }
+ void unlock() { m_clients_mutex.unlock(); }
std::map<u16, RemoteClient*>& getClientList()
{ return m_clients; }
@@ -501,14 +511,14 @@ private:
// Connection
con::Connection* m_con;
- JMutex m_clients_mutex;
+ Mutex m_clients_mutex;
// Connected clients (behind the con mutex)
std::map<u16, RemoteClient*> m_clients;
std::vector<std::string> m_clients_names; //for announcing masterserver
// Environment
ServerEnvironment *m_env;
- JMutex m_env_mutex;
+ Mutex m_env_mutex;
float m_print_info_timer;
diff --git a/src/clientmap.cpp b/src/clientmap.cpp
index 288a12135..a0a780250 100644
--- a/src/clientmap.cpp
+++ b/src/clientmap.cpp
@@ -50,7 +50,7 @@ ClientMap::ClientMap(
m_camera_direction(0,0,1),
m_camera_fov(M_PI)
{
- m_box = core::aabbox3d<f32>(-BS*1000000,-BS*1000000,-BS*1000000,
+ m_box = aabb3f(-BS*1000000,-BS*1000000,-BS*1000000,
BS*1000000,BS*1000000,BS*1000000);
/* TODO: Add a callback function so these can be updated when a setting
@@ -70,7 +70,7 @@ ClientMap::ClientMap(
ClientMap::~ClientMap()
{
- /*JMutexAutoLock lock(mesh_mutex);
+ /*MutexAutoLock lock(mesh_mutex);
if(mesh != NULL)
{
@@ -81,7 +81,7 @@ ClientMap::~ClientMap()
MapSector * ClientMap::emergeSector(v2s16 p2d)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Check that it doesn't exist already
try{
return getSectorNoGenerate(p2d);
@@ -94,7 +94,7 @@ MapSector * ClientMap::emergeSector(v2s16 p2d)
ClientMapSector *sector = new ClientMapSector(this, p2d, m_gamedef);
{
- //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
+ //MutexAutoLock lock(m_sector_mutex); // Bulk comment-out
m_sectors[p2d] = sector;
}
@@ -141,6 +141,33 @@ static bool isOccluded(Map *map, v3s16 p0, v3s16 p1, float step, float stepfac,
return false;
}
+void ClientMap::getBlocksInViewRange(v3s16 cam_pos_nodes,
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max)
+{
+ v3s16 box_nodes_d = m_control.wanted_range * v3s16(1, 1, 1);
+ // Define p_nodes_min/max as v3s32 because 'cam_pos_nodes -/+ box_nodes_d'
+ // can exceed the range of v3s16 when a large view range is used near the
+ // world edges.
+ v3s32 p_nodes_min(
+ cam_pos_nodes.X - box_nodes_d.X,
+ cam_pos_nodes.Y - box_nodes_d.Y,
+ cam_pos_nodes.Z - box_nodes_d.Z);
+ v3s32 p_nodes_max(
+ cam_pos_nodes.X + box_nodes_d.X,
+ cam_pos_nodes.Y + box_nodes_d.Y,
+ cam_pos_nodes.Z + box_nodes_d.Z);
+ // Take a fair amount as we will be dropping more out later
+ // Umm... these additions are a bit strange but they are needed.
+ *p_blocks_min = v3s16(
+ p_nodes_min.X / MAP_BLOCKSIZE - 3,
+ p_nodes_min.Y / MAP_BLOCKSIZE - 3,
+ p_nodes_min.Z / MAP_BLOCKSIZE - 3);
+ *p_blocks_max = v3s16(
+ p_nodes_max.X / MAP_BLOCKSIZE + 1,
+ p_nodes_max.Y / MAP_BLOCKSIZE + 1,
+ p_nodes_max.Z / MAP_BLOCKSIZE + 1);
+}
+
void ClientMap::updateDrawList(video::IVideoDriver* driver)
{
ScopeProfiler sp(g_profiler, "CM::updateDrawList()", SPT_AVG);
@@ -148,21 +175,16 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
INodeDefManager *nodemgr = m_gamedef->ndef();
- for(std::map<v3s16, MapBlock*>::iterator
- i = m_drawlist.begin();
- i != m_drawlist.end(); ++i)
- {
+ for (std::map<v3s16, MapBlock*>::iterator i = m_drawlist.begin();
+ i != m_drawlist.end(); ++i) {
MapBlock *block = i->second;
block->refDrop();
}
m_drawlist.clear();
- m_camera_mutex.Lock();
v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction;
f32 camera_fov = m_camera_fov;
- //v3s16 camera_offset = m_camera_offset;
- m_camera_mutex.Unlock();
// Use a higher fov to accomodate faster camera movements.
// Blocks are cropped better when they are drawn.
@@ -170,19 +192,9 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
camera_fov *= 1.2;
v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
- v3s16 box_nodes_d = m_control.wanted_range * v3s16(1,1,1);
- v3s16 p_nodes_min = cam_pos_nodes - box_nodes_d;
- v3s16 p_nodes_max = cam_pos_nodes + box_nodes_d;
- // Take a fair amount as we will be dropping more out later
- // Umm... these additions are a bit strange but they are needed.
- v3s16 p_blocks_min(
- p_nodes_min.X / MAP_BLOCKSIZE - 3,
- p_nodes_min.Y / MAP_BLOCKSIZE - 3,
- p_nodes_min.Z / MAP_BLOCKSIZE - 3);
- v3s16 p_blocks_max(
- p_nodes_max.X / MAP_BLOCKSIZE + 1,
- p_nodes_max.Y / MAP_BLOCKSIZE + 1,
- p_nodes_max.Z / MAP_BLOCKSIZE + 1);
+ v3s16 p_blocks_min;
+ v3s16 p_blocks_max;
+ getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max);
// Number of blocks in rendering range
u32 blocks_in_range = 0;
@@ -202,19 +214,14 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
// Distance to farthest drawn block
float farthest_drawn = 0;
- for(std::map<v2s16, MapSector*>::iterator
- si = m_sectors.begin();
- si != m_sectors.end(); ++si)
- {
+ for (std::map<v2s16, MapSector*>::iterator si = m_sectors.begin();
+ si != m_sectors.end(); ++si) {
MapSector *sector = si->second;
v2s16 sp = sector->getPos();
- if(m_control.range_all == false)
- {
- if(sp.X < p_blocks_min.X
- || sp.X > p_blocks_max.X
- || sp.Y < p_blocks_min.Z
- || sp.Y > p_blocks_max.Z)
+ if (m_control.range_all == false) {
+ if (sp.X < p_blocks_min.X || sp.X > p_blocks_max.X ||
+ sp.Y < p_blocks_min.Z || sp.Y > p_blocks_max.Z)
continue;
}
@@ -227,9 +234,8 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
u32 sector_blocks_drawn = 0;
- for(MapBlockVect::iterator i = sectorblocks.begin();
- i != sectorblocks.end(); i++)
- {
+ for (MapBlockVect::iterator i = sectorblocks.begin();
+ i != sectorblocks.end(); ++i) {
MapBlock *block = *i;
/*
@@ -241,16 +247,13 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
block->mesh->updateCameraOffset(m_camera_offset);
float range = 100000 * BS;
- if(m_control.range_all == false)
+ if (m_control.range_all == false)
range = m_control.wanted_range * BS;
float d = 0.0;
- if(isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov,
- range, &d) == false)
- {
+ if (!isBlockInSight(block->getPos(), camera_position,
+ camera_direction, camera_fov, range, &d))
continue;
- }
// This is ugly (spherical distance limit?)
/*if(m_control.range_all == false &&
@@ -263,9 +266,9 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
Ignore if mesh doesn't exist
*/
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
- if(block->mesh == NULL){
+ if (block->mesh == NULL) {
blocks_in_range_without_mesh++;
continue;
}
@@ -278,44 +281,41 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
// No occlusion culling when free_move is on and camera is
// inside ground
bool occlusion_culling_enabled = true;
- if(g_settings->getBool("free_move")){
+ if (g_settings->getBool("free_move")) {
MapNode n = getNodeNoEx(cam_pos_nodes);
- if(n.getContent() == CONTENT_IGNORE ||
+ if (n.getContent() == CONTENT_IGNORE ||
nodemgr->get(n).solidness == 2)
occlusion_culling_enabled = false;
}
v3s16 cpn = block->getPos() * MAP_BLOCKSIZE;
- cpn += v3s16(MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2);
- float step = BS*1;
+ cpn += v3s16(MAP_BLOCKSIZE / 2, MAP_BLOCKSIZE / 2, MAP_BLOCKSIZE / 2);
+ float step = BS * 1;
float stepfac = 1.1;
- float startoff = BS*1;
- float endoff = -BS*MAP_BLOCKSIZE*1.42*1.42;
- v3s16 spn = cam_pos_nodes + v3s16(0,0,0);
- s16 bs2 = MAP_BLOCKSIZE/2 + 1;
+ float startoff = BS * 1;
+ float endoff = -BS*MAP_BLOCKSIZE * 1.42 * 1.42;
+ v3s16 spn = cam_pos_nodes + v3s16(0, 0, 0);
+ s16 bs2 = MAP_BLOCKSIZE / 2 + 1;
u32 needed_count = 1;
- if(
- occlusion_culling_enabled &&
- isOccluded(this, spn, cpn + v3s16(0,0,0),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(bs2,bs2,bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(bs2,bs2,-bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(bs2,-bs2,bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(bs2,-bs2,-bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(-bs2,bs2,bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(-bs2,bs2,-bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr) &&
- isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,-bs2),
- step, stepfac, startoff, endoff, needed_count, nodemgr)
- )
- {
+ if (occlusion_culling_enabled &&
+ isOccluded(this, spn, cpn + v3s16(0, 0, 0),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(bs2,bs2,bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(bs2,bs2,-bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(bs2,-bs2,bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(bs2,-bs2,-bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(-bs2,bs2,bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(-bs2,bs2,-bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr) &&
+ isOccluded(this, spn, cpn + v3s16(-bs2,-bs2,-bs2),
+ step, stepfac, startoff, endoff, needed_count, nodemgr)) {
blocks_occlusion_culled++;
continue;
}
@@ -325,9 +325,9 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
// Limit block count in case of a sudden increase
blocks_would_have_drawn++;
- if(blocks_drawn >= m_control.wanted_max_blocks
- && m_control.range_all == false
- && d > m_control.wanted_min_range * BS)
+ if (blocks_drawn >= m_control.wanted_max_blocks &&
+ !m_control.range_all &&
+ d > m_control.wanted_range * BS)
continue;
// Add to set
@@ -336,12 +336,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
sector_blocks_drawn++;
blocks_drawn++;
- if(d/BS > farthest_drawn)
- farthest_drawn = d/BS;
+ if (d / BS > farthest_drawn)
+ farthest_drawn = d / BS;
} // foreach sectorblocks
- if(sector_blocks_drawn != 0)
+ if (sector_blocks_drawn != 0)
m_last_drawn_sectors.insert(sp);
}
@@ -351,9 +351,9 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
g_profiler->avg("CM: blocks in range", blocks_in_range);
g_profiler->avg("CM: blocks occlusion culled", blocks_occlusion_culled);
- if(blocks_in_range != 0)
+ if (blocks_in_range != 0)
g_profiler->avg("CM: blocks in range without mesh (frac)",
- (float)blocks_in_range_without_mesh/blocks_in_range);
+ (float)blocks_in_range_without_mesh / blocks_in_range);
g_profiler->avg("CM: blocks drawn", blocks_drawn);
g_profiler->avg("CM: farthest drawn", farthest_drawn);
g_profiler->avg("CM: wanted max blocks", m_control.wanted_max_blocks);
@@ -400,12 +400,12 @@ struct MeshBufListList
void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
bool is_transparent_pass = pass == scene::ESNRP_TRANSPARENT;
std::string prefix;
- if(pass == scene::ESNRP_SOLID)
+ if (pass == scene::ESNRP_SOLID)
prefix = "CM: solid: ";
else
prefix = "CM: transparent: ";
@@ -413,10 +413,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
/*
This is called two times per frame, reset on the non-transparent one
*/
- if(pass == scene::ESNRP_SOLID)
- {
+ if (pass == scene::ESNRP_SOLID)
m_last_drawn_sectors.clear();
- }
/*
Get time for measuring timeout.
@@ -433,33 +431,18 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
int crack = m_client->getCrackLevel();
u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
- m_camera_mutex.Lock();
v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction;
f32 camera_fov = m_camera_fov;
- m_camera_mutex.Unlock();
/*
Get all blocks and draw all visible ones
*/
v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
-
- v3s16 box_nodes_d = m_control.wanted_range * v3s16(1,1,1);
-
- v3s16 p_nodes_min = cam_pos_nodes - box_nodes_d;
- v3s16 p_nodes_max = cam_pos_nodes + box_nodes_d;
-
- // Take a fair amount as we will be dropping more out later
- // Umm... these additions are a bit strange but they are needed.
- v3s16 p_blocks_min(
- p_nodes_min.X / MAP_BLOCKSIZE - 3,
- p_nodes_min.Y / MAP_BLOCKSIZE - 3,
- p_nodes_min.Z / MAP_BLOCKSIZE - 3);
- v3s16 p_blocks_max(
- p_nodes_max.X / MAP_BLOCKSIZE + 1,
- p_nodes_max.Y / MAP_BLOCKSIZE + 1,
- p_nodes_max.Z / MAP_BLOCKSIZE + 1);
+ v3s16 p_blocks_min;
+ v3s16 p_blocks_max;
+ getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max);
u32 vertex_count = 0;
u32 meshbuffer_count = 0;
@@ -480,52 +463,40 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
*/
{
- ScopeProfiler sp(g_profiler, prefix+"drawing blocks", SPT_AVG);
+ ScopeProfiler sp(g_profiler, prefix + "drawing blocks", SPT_AVG);
MeshBufListList drawbufs;
- for(std::map<v3s16, MapBlock*>::iterator
- i = m_drawlist.begin();
- i != m_drawlist.end(); ++i)
- {
+ for (std::map<v3s16, MapBlock*>::iterator i = m_drawlist.begin();
+ i != m_drawlist.end(); ++i) {
MapBlock *block = i->second;
// If the mesh of the block happened to get deleted, ignore it
- if(block->mesh == NULL)
+ if (block->mesh == NULL)
continue;
float d = 0.0;
- if(isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov,
- 100000*BS, &d) == false)
- {
+ if (!isBlockInSight(block->getPos(), camera_position,
+ camera_direction, camera_fov, 100000 * BS, &d))
continue;
- }
// Mesh animation
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
// Pretty random but this should work somewhat nicely
- bool faraway = d >= BS*50;
+ bool faraway = d >= BS * 50;
//bool faraway = d >= m_control.wanted_range * BS;
- if(mapBlockMesh->isAnimationForced() ||
- !faraway ||
- mesh_animate_count_far < (m_control.range_all ? 200 : 50))
- {
- bool animated = mapBlockMesh->animate(
- faraway,
- animation_time,
- crack,
- daynight_ratio);
- if(animated)
+ if (mapBlockMesh->isAnimationForced() || !faraway ||
+ mesh_animate_count_far < (m_control.range_all ? 200 : 50)) {
+ bool animated = mapBlockMesh->animate(faraway, animation_time,
+ crack, daynight_ratio);
+ if (animated)
mesh_animate_count++;
- if(animated && faraway)
+ if (animated && faraway)
mesh_animate_count_far++;
- }
- else
- {
+ } else {
mapBlockMesh->decreaseAnimationForceTimer();
}
}
@@ -534,7 +505,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
Get the meshbuffers of the block
*/
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
@@ -543,7 +514,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
assert(mesh);
u32 c = mesh->getMeshBufferCount();
- for(u32 i=0; i<c; i++)
+ for (u32 i = 0; i < c; i++)
{
scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
@@ -555,11 +526,10 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
video::IMaterialRenderer* rnd =
driver->getMaterialRenderer(material.MaterialType);
bool transparent = (rnd && rnd->isTransparent());
- if(transparent == is_transparent_pass)
- {
- if(buf->getVertexCount() == 0)
- errorstream<<"Block ["<<analyze_block(block)
- <<"] contains an empty meshbuf"<<std::endl;
+ if (transparent == is_transparent_pass) {
+ if (buf->getVertexCount() == 0)
+ errorstream << "Block [" << analyze_block(block)
+ << "] contains an empty meshbuf" << std::endl;
drawbufs.add(buf);
}
}
@@ -569,13 +539,13 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
std::vector<MeshBufList> &lists = drawbufs.lists;
int timecheck_counter = 0;
- for(std::vector<MeshBufList>::iterator i = lists.begin();
+ for (std::vector<MeshBufList>::iterator i = lists.begin();
i != lists.end(); ++i) {
timecheck_counter++;
- if(timecheck_counter > 50) {
+ if (timecheck_counter > 50) {
timecheck_counter = 0;
int time2 = time(0);
- if(time2 > time1 + 4) {
+ if (time2 > time1 + 4) {
infostream << "ClientMap::renderMap(): "
"Rendering takes ages, returning."
<< std::endl;
@@ -587,7 +557,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
driver->setMaterial(list.m);
- for(std::vector<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
+ for (std::vector<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
j != list.bufs.end(); ++j) {
scene::IMeshBuffer *buf = *j;
driver->drawMeshBuffer(buf);
@@ -599,18 +569,18 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
} // ScopeProfiler
// Log only on solid pass because values are the same
- if(pass == scene::ESNRP_SOLID){
+ if (pass == scene::ESNRP_SOLID) {
g_profiler->avg("CM: animated meshes", mesh_animate_count);
g_profiler->avg("CM: animated meshes (far)", mesh_animate_count_far);
}
- g_profiler->avg(prefix+"vertices drawn", vertex_count);
- if(blocks_had_pass_meshbuf != 0)
- g_profiler->avg(prefix+"meshbuffers per block",
- (float)meshbuffer_count / (float)blocks_had_pass_meshbuf);
- if(blocks_drawn != 0)
- g_profiler->avg(prefix+"empty blocks (frac)",
- (float)blocks_without_stuff / blocks_drawn);
+ g_profiler->avg(prefix + "vertices drawn", vertex_count);
+ if (blocks_had_pass_meshbuf != 0)
+ g_profiler->avg(prefix + "meshbuffers per block",
+ (float)meshbuffer_count / (float)blocks_had_pass_meshbuf);
+ if (blocks_drawn != 0)
+ g_profiler->avg(prefix + "empty blocks (frac)",
+ (float)blocks_without_stuff / blocks_drawn);
/*infostream<<"renderMap(): is_transparent_pass="<<is_transparent_pass
<<", rendered "<<vertex_count<<" vertices."<<std::endl;*/
@@ -799,11 +769,7 @@ void ClientMap::renderPostFx(CameraMode cam_mode)
// Sadly ISceneManager has no "post effects" render pass, in that case we
// could just register for that and handle it in renderMap().
- m_camera_mutex.Lock();
- v3f camera_position = m_camera_position;
- m_camera_mutex.Unlock();
-
- MapNode n = getNodeNoEx(floatToInt(camera_position, BS));
+ MapNode n = getNodeNoEx(floatToInt(m_camera_position, BS));
// - If the player is in a solid node, make everything black.
// - If the player is in liquid, draw a semi-transparent overlay.
diff --git a/src/clientmap.h b/src/clientmap.h
index 492e23fa5..396e68f64 100644
--- a/src/clientmap.h
+++ b/src/clientmap.h
@@ -30,9 +30,8 @@ struct MapDrawControl
{
MapDrawControl():
range_all(false),
- wanted_range(50),
+ wanted_range(0),
wanted_max_blocks(0),
- wanted_min_range(0),
blocks_drawn(0),
blocks_would_have_drawn(0),
farthest_drawn(0)
@@ -44,8 +43,6 @@ struct MapDrawControl
float wanted_range;
// Maximum number of blocks to draw
u32 wanted_max_blocks;
- // Blocks in this range are drawn regardless of number of blocks drawn
- float wanted_min_range;
// Number of blocks rendered is written here by the renderer
u32 blocks_drawn;
// Number of blocks that would have been drawn in wanted_range
@@ -89,7 +86,6 @@ public:
void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset)
{
- JMutexAutoLock lock(m_camera_mutex);
m_camera_position = pos;
m_camera_direction = dir;
m_camera_fov = fov;
@@ -116,11 +112,13 @@ public:
renderMap(driver, SceneManager->getSceneNodeRenderPass());
}
- virtual const core::aabbox3d<f32>& getBoundingBox() const
+ virtual const aabb3f &getBoundingBox() const
{
return m_box;
}
+ void getBlocksInViewRange(v3s16 cam_pos_nodes,
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max);
void updateDrawList(video::IVideoDriver* driver);
void renderMap(video::IVideoDriver* driver, s32 pass);
@@ -141,7 +139,7 @@ public:
private:
Client *m_client;
- core::aabbox3d<f32> m_box;
+ aabb3f m_box;
MapDrawControl &m_control;
@@ -149,7 +147,6 @@ private:
v3f m_camera_direction;
f32 m_camera_fov;
v3s16 m_camera_offset;
- JMutex m_camera_mutex;
std::map<v3s16, MapBlock*> m_drawlist;
diff --git a/src/clientmedia.cpp b/src/clientmedia.cpp
index ea11ad239..bca3f67c2 100644
--- a/src/clientmedia.cpp
+++ b/src/clientmedia.cpp
@@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
static std::string getMediaCacheDir()
{
- return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "media";
+ return porting::path_cache + DIR_DELIM + "media";
}
/*
diff --git a/src/clientobject.cpp b/src/clientobject.cpp
index ae1be092f..a11757ea6 100644
--- a/src/clientobject.cpp
+++ b/src/clientobject.cpp
@@ -47,7 +47,7 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type,
n = m_types.find(type);
if(n == m_types.end()) {
// If factory is not found, just return.
- dstream<<"WARNING: ClientActiveObject: No factory for type="
+ warningstream<<"ClientActiveObject: No factory for type="
<<(int)type<<std::endl;
return NULL;
}
diff --git a/src/clientobject.h b/src/clientobject.h
index be24e1388..3cc7c2391 100644
--- a/src/clientobject.h
+++ b/src/clientobject.h
@@ -56,7 +56,7 @@ public:
virtual void updateLight(u8 light_at_pos){}
virtual void updateLightNoCheck(u8 light_at_pos){}
virtual v3s16 getLightPosition(){return v3s16(0,0,0);}
- virtual core::aabbox3d<f32>* getSelectionBox(){return NULL;}
+ virtual aabb3f *getSelectionBox() { return NULL; }
virtual bool getCollisionBox(aabb3f *toset){return false;}
virtual bool collideWithObjects(){return false;}
virtual v3f getPosition(){return v3f(0,0,0);}
diff --git a/src/clouds.cpp b/src/clouds.cpp
index 29210e2b4..82b63b6b3 100644
--- a/src/clouds.cpp
+++ b/src/clouds.cpp
@@ -62,7 +62,7 @@ Clouds::Clouds(
g_settings->registerChangedCallback("enable_3d_clouds",
&cloud_3d_setting_changed, this);
- m_box = core::aabbox3d<f32>(-BS*1000000,m_cloud_y-BS,-BS*1000000,
+ m_box = aabb3f(-BS*1000000,m_cloud_y-BS,-BS*1000000,
BS*1000000,m_cloud_y+BS,BS*1000000);
}
diff --git a/src/clouds.h b/src/clouds.h
index 195f48de0..9c6b41786 100644
--- a/src/clouds.h
+++ b/src/clouds.h
@@ -53,7 +53,7 @@ public:
virtual void render();
- virtual const core::aabbox3d<f32>& getBoundingBox() const
+ virtual const aabb3f &getBoundingBox() const
{
return m_box;
}
@@ -79,7 +79,7 @@ public:
void updateCameraOffset(v3s16 camera_offset)
{
m_camera_offset = camera_offset;
- m_box = core::aabbox3d<f32>(-BS * 1000000, m_cloud_y - BS - BS * camera_offset.Y, -BS * 1000000,
+ m_box = aabb3f(-BS * 1000000, m_cloud_y - BS - BS * camera_offset.Y, -BS * 1000000,
BS * 1000000, m_cloud_y + BS - BS * camera_offset.Y, BS * 1000000);
}
@@ -87,7 +87,7 @@ public:
private:
video::SMaterial m_material;
- core::aabbox3d<f32> m_box;
+ aabb3f m_box;
s16 m_passed_cloud_y;
float m_cloud_y;
u16 m_cloud_radius_i;
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index 04f368594..018532d13 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -12,18 +12,26 @@
#define VERSION_STRING "@VERSION_STRING@"
#define PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@"
#define STATIC_SHAREDIR "@SHAREDIR@"
+#define STATIC_LOCALEDIR "@LOCALEDIR@"
#define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#cmakedefine01 RUN_IN_PLACE
#cmakedefine01 USE_GETTEXT
#cmakedefine01 USE_CURL
#cmakedefine01 USE_SOUND
#cmakedefine01 USE_FREETYPE
+#cmakedefine01 USE_CURSES
#cmakedefine01 USE_LEVELDB
#cmakedefine01 USE_LUAJIT
#cmakedefine01 USE_SPATIAL
#cmakedefine01 USE_SYSTEM_GMP
#cmakedefine01 USE_REDIS
#cmakedefine01 HAVE_ENDIAN_H
+#cmakedefine01 CURSES_HAVE_CURSES_H
+#cmakedefine01 CURSES_HAVE_NCURSES_H
+#cmakedefine01 CURSES_HAVE_NCURSES_NCURSES_H
+#cmakedefine01 CURSES_HAVE_NCURSES_CURSES_H
+#cmakedefine01 CURSES_HAVE_NCURSESW_NCURSES_H
+#cmakedefine01 CURSES_HAVE_NCURSESW_CURSES_H
#endif
diff --git a/src/collision.cpp b/src/collision.cpp
index 6afc79ab7..74c0c25c3 100644
--- a/src/collision.cpp
+++ b/src/collision.cpp
@@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// The time after which the collision occurs is stored in dtime.
int axisAlignedCollision(
const aabb3f &staticbox, const aabb3f &movingbox,
- const v3f &speed, f32 d, f32 &dtime)
+ const v3f &speed, f32 d, f32 *dtime)
{
//TimeTaker tt("axisAlignedCollision");
@@ -59,13 +59,12 @@ int axisAlignedCollision(
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))
+ 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 0;
}
else if(relbox.MinEdge.X > xsize)
@@ -75,13 +74,12 @@ int axisAlignedCollision(
}
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))
+ 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 0;
}
else if(relbox.MaxEdge.X < 0)
@@ -94,13 +92,12 @@ int axisAlignedCollision(
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))
+ 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 1;
}
else if(relbox.MinEdge.Y > ysize)
@@ -110,13 +107,12 @@ int axisAlignedCollision(
}
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))
+ 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 1;
}
else if(relbox.MaxEdge.Y < 0)
@@ -129,13 +125,12 @@ int axisAlignedCollision(
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))
+ 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 2;
}
//else if(relbox.MinEdge.Z > zsize)
@@ -145,13 +140,12 @@ int axisAlignedCollision(
}
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))
+ 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 2;
}
//else if(relbox.MaxEdge.Z < 0)
@@ -176,7 +170,7 @@ bool wouldCollideWithCeiling(
for(std::vector<aabb3f>::const_iterator
i = staticboxes.begin();
- i != staticboxes.end(); i++)
+ i != staticboxes.end(); ++i)
{
const aabb3f& staticbox = *i;
if((movingbox.MaxEdge.Y - d <= staticbox.MinEdge.Y) &&
@@ -191,37 +185,51 @@ bool wouldCollideWithCeiling(
return false;
}
+static inline void getNeighborConnectingFace(v3s16 p, INodeDefManager *nodedef,
+ Map *map, MapNode n, int v, int *neighbors)
+{
+ MapNode n2 = map->getNodeNoEx(p);
+ if (nodedef->nodeboxConnects(n, n2, v))
+ *neighbors |= v;
+}
collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
f32 pos_max_d, const aabb3f &box_0,
f32 stepheight, f32 dtime,
- v3f &pos_f, v3f &speed_f,
- v3f &accel_f,ActiveObject* self,
+ v3f *pos_f, v3f *speed_f,
+ v3f accel_f, ActiveObject *self,
bool collideWithObjects)
{
+ static bool time_notification_done = false;
Map *map = &env->getMap();
//TimeTaker tt("collisionMoveSimple");
- ScopeProfiler sp(g_profiler, "collisionMoveSimple avg", SPT_AVG);
+ ScopeProfiler sp(g_profiler, "collisionMoveSimple avg", SPT_AVG);
collisionMoveResult result;
/*
Calculate new velocity
*/
- if( dtime > 0.5 ) {
- infostream<<"collisionMoveSimple: WARNING: maximum step interval exceeded, lost movement details!"<<std::endl;
+ if (dtime > 0.5) {
+ if (!time_notification_done) {
+ time_notification_done = true;
+ infostream << "collisionMoveSimple: maximum step interval exceeded,"
+ " lost movement details!"<<std::endl;
+ }
dtime = 0.5;
+ } else {
+ time_notification_done = false;
}
- speed_f += accel_f * dtime;
+ *speed_f += accel_f * dtime;
// If there is no speed, there are no collisions
- if(speed_f.getLength() == 0)
+ if (speed_f->getLength() == 0)
return result;
// Limit speed for avoiding hangs
- speed_f.Y=rangelim(speed_f.Y,-5000,5000);
- speed_f.X=rangelim(speed_f.X,-5000,5000);
- speed_f.Z=rangelim(speed_f.Z,-5000,5000);
+ speed_f->Y = rangelim(speed_f->Y, -5000, 5000);
+ speed_f->X = rangelim(speed_f->X, -5000, 5000);
+ speed_f->Z = rangelim(speed_f->Z, -5000, 5000);
/*
Collect node boxes in movement range
@@ -234,10 +242,10 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
std::vector<v3s16> node_positions;
{
//TimeTaker tt2("collisionMoveSimple collect boxes");
- ScopeProfiler sp(g_profiler, "collisionMoveSimple collect boxes avg", SPT_AVG);
+ ScopeProfiler sp(g_profiler, "collisionMoveSimple collect boxes avg", SPT_AVG);
- v3s16 oldpos_i = floatToInt(pos_f, BS);
- v3s16 newpos_i = floatToInt(pos_f + speed_f * dtime, BS);
+ v3s16 oldpos_i = floatToInt(*pos_f, BS);
+ v3s16 newpos_i = floatToInt(*pos_f + *speed_f * dtime, BS);
s16 min_x = MYMIN(oldpos_i.X, newpos_i.X) + (box_0.MinEdge.X / BS) - 1;
s16 min_y = MYMIN(oldpos_i.Y, newpos_i.Y) + (box_0.MinEdge.Y / BS) - 1;
s16 min_z = MYMIN(oldpos_i.Z, newpos_i.Z) + (box_0.MinEdge.Z / BS) - 1;
@@ -245,6 +253,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
s16 max_y = MYMAX(oldpos_i.Y, newpos_i.Y) + (box_0.MaxEdge.Y / BS) + 1;
s16 max_z = MYMAX(oldpos_i.Z, newpos_i.Z) + (box_0.MaxEdge.Z / BS) + 1;
+ bool any_position_valid = false;
+
for(s16 x = min_x; x <= max_x; x++)
for(s16 y = min_y; y <= max_y; y++)
for(s16 z = min_z; z <= max_z; z++)
@@ -257,15 +267,45 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
if (is_position_valid) {
// Object collides into walkable nodes
- const ContentFeatures &f = gamedef->getNodeDefManager()->get(n);
+ any_position_valid = true;
+ INodeDefManager *nodedef = gamedef->getNodeDefManager();
+ const ContentFeatures &f = nodedef->get(n);
if(f.walkable == false)
continue;
int n_bouncy_value = itemgroup_get(f.groups, "bouncy");
- std::vector<aabb3f> nodeboxes = n.getCollisionBoxes(gamedef->ndef());
+ int neighbors = 0;
+ if (f.drawtype == NDT_NODEBOX && f.node_box.type == NODEBOX_CONNECTED) {
+ v3s16 p2 = p;
+
+ p2.Y++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 1, &neighbors);
+
+ p2 = p;
+ p2.Y--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 2, &neighbors);
+
+ p2 = p;
+ p2.Z--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 4, &neighbors);
+
+ p2 = p;
+ p2.X--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 8, &neighbors);
+
+ p2 = p;
+ p2.Z++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 16, &neighbors);
+
+ p2 = p;
+ p2.X++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 32, &neighbors);
+ }
+ std::vector<aabb3f> nodeboxes;
+ n.getCollisionBoxes(gamedef->ndef(), &nodeboxes, neighbors);
for(std::vector<aabb3f>::iterator
i = nodeboxes.begin();
- i != nodeboxes.end(); i++)
+ i != nodeboxes.end(); ++i)
{
aabb3f box = *i;
box.MinEdge += v3f(x, y, z)*BS;
@@ -289,6 +329,14 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
is_object.push_back(false);
}
}
+
+ // Do not move if world has not loaded yet, since custom node boxes
+ // are not available for collision detection.
+ if (!any_position_valid) {
+ *speed_f = v3f(0, 0, 0);
+ return result;
+ }
+
} // tt2
if(collideWithObjects)
@@ -298,14 +346,13 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
/* add object boxes to cboxes */
-
std::vector<ActiveObject*> objects;
#ifndef SERVER
ClientEnvironment *c_env = dynamic_cast<ClientEnvironment*>(env);
if (c_env != 0) {
- f32 distance = speed_f.getLength();
+ f32 distance = speed_f->getLength();
std::vector<DistanceSortedActiveObject> clientobjects;
- c_env->getActiveObjects(pos_f,distance * 1.5,clientobjects);
+ c_env->getActiveObjects(*pos_f, distance * 1.5, clientobjects);
for (size_t i=0; i < clientobjects.size(); i++) {
if ((self == 0) || (self != clientobjects[i].obj)) {
objects.push_back((ActiveObject*)clientobjects[i].obj);
@@ -317,10 +364,10 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
{
ServerEnvironment *s_env = dynamic_cast<ServerEnvironment*>(env);
if (s_env != 0) {
- f32 distance = speed_f.getLength();
+ f32 distance = speed_f->getLength();
std::vector<u16> s_objects;
- s_env->getObjectsInsideRadius(s_objects, pos_f, distance * 1.5);
- for (std::vector<u16>::iterator iter = s_objects.begin(); iter != s_objects.end(); iter++) {
+ s_env->getObjectsInsideRadius(s_objects, *pos_f, distance * 1.5);
+ for (std::vector<u16>::iterator iter = s_objects.begin(); iter != s_objects.end(); ++iter) {
ServerActiveObject *current = s_env->getActiveObject(*iter);
if ((self == 0) || (self != current)) {
objects.push_back((ActiveObject*)current);
@@ -371,33 +418,29 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
int loopcount = 0;
- while(dtime > BS*1e-10)
- {
+ while(dtime > BS * 1e-10) {
//TimeTaker tt3("collisionMoveSimple dtime loop");
- ScopeProfiler sp(g_profiler, "collisionMoveSimple dtime loop avg", SPT_AVG);
+ ScopeProfiler sp(g_profiler, "collisionMoveSimple dtime loop avg", SPT_AVG);
// Avoid infinite loop
loopcount++;
- if(loopcount >= 100)
- {
- infostream<<"collisionMoveSimple: WARNING: Loop count exceeded, aborting to avoid infiniite loop"<<std::endl;
- dtime = 0;
+ if (loopcount >= 100) {
+ warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop" << std::endl;
break;
}
aabb3f movingbox = box_0;
- movingbox.MinEdge += pos_f;
- movingbox.MaxEdge += pos_f;
+ movingbox.MinEdge += *pos_f;
+ movingbox.MaxEdge += *pos_f;
int nearest_collided = -1;
f32 nearest_dtime = dtime;
- u32 nearest_boxindex = -1;
+ int nearest_boxindex = -1;
/*
Go through every nodebox, find nearest collision
*/
- for(u32 boxindex = 0; boxindex < cboxes.size(); boxindex++)
- {
+ for (u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) {
// Ignore if already stepped up this nodebox.
if(is_step_up[boxindex])
continue;
@@ -405,9 +448,9 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
// Find nearest collision of the two boxes (raytracing-like)
f32 dtime_tmp;
int collided = axisAlignedCollision(
- cboxes[boxindex], movingbox, speed_f, d, dtime_tmp);
+ cboxes[boxindex], movingbox, *speed_f, d, &dtime_tmp);
- if(collided == -1 || dtime_tmp >= nearest_dtime)
+ if (collided == -1 || dtime_tmp >= nearest_dtime)
continue;
nearest_dtime = dtime_tmp;
@@ -415,18 +458,14 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
nearest_boxindex = boxindex;
}
- if(nearest_collided == -1)
- {
+ if (nearest_collided == -1) {
// No collision with any collision box.
- pos_f += speed_f * dtime;
+ *pos_f += *speed_f * dtime;
dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers
- }
- else
- {
+ } else {
// Otherwise, a collision occurred.
const aabb3f& cbox = cboxes[nearest_boxindex];
-
// Check for stairs.
bool step_up = (nearest_collided != 1) && // must not be Y direction
(movingbox.MinEdge.Y < cbox.MaxEdge.Y) &&
@@ -440,79 +479,68 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
float bounce = -(float)bouncy_values[nearest_boxindex] / 100.0;
// Move to the point of collision and reduce dtime by nearest_dtime
- if(nearest_dtime < 0)
- {
+ if (nearest_dtime < 0) {
// Handle negative nearest_dtime (can be caused by the d allowance)
- if(!step_up)
- {
- if(nearest_collided == 0)
- pos_f.X += speed_f.X * nearest_dtime;
- if(nearest_collided == 1)
- pos_f.Y += speed_f.Y * nearest_dtime;
- if(nearest_collided == 2)
- pos_f.Z += speed_f.Z * nearest_dtime;
+ if (!step_up) {
+ if (nearest_collided == 0)
+ pos_f->X += speed_f->X * nearest_dtime;
+ if (nearest_collided == 1)
+ pos_f->Y += speed_f->Y * nearest_dtime;
+ if (nearest_collided == 2)
+ pos_f->Z += speed_f->Z * nearest_dtime;
}
- }
- else
- {
- pos_f += speed_f * nearest_dtime;
+ } else {
+ *pos_f += *speed_f * nearest_dtime;
dtime -= nearest_dtime;
}
bool is_collision = true;
- if(is_unloaded[nearest_boxindex])
+ if (is_unloaded[nearest_boxindex])
is_collision = false;
CollisionInfo info;
- if (is_object[nearest_boxindex]) {
+ if (is_object[nearest_boxindex])
info.type = COLLISION_OBJECT;
- }
- else {
+ else
info.type = COLLISION_NODE;
- }
+
info.node_p = node_positions[nearest_boxindex];
info.bouncy = bouncy;
- info.old_speed = speed_f;
+ info.old_speed = *speed_f;
// Set the speed component that caused the collision to zero
- if(step_up)
- {
+ if (step_up) {
// Special case: Handle stairs
is_step_up[nearest_boxindex] = true;
is_collision = false;
- }
- else if(nearest_collided == 0) // X
- {
- if(fabs(speed_f.X) > BS*3)
- speed_f.X *= bounce;
+ } else if(nearest_collided == 0) { // X
+ if (fabs(speed_f->X) > BS * 3)
+ speed_f->X *= bounce;
else
- speed_f.X = 0;
+ speed_f->X = 0;
result.collides = true;
result.collides_xz = true;
}
- else if(nearest_collided == 1) // Y
- {
- if(fabs(speed_f.Y) > BS*3)
- speed_f.Y *= bounce;
+ else if(nearest_collided == 1) { // Y
+ if (fabs(speed_f->Y) > BS * 3)
+ speed_f->Y *= bounce;
else
- speed_f.Y = 0;
+ speed_f->Y = 0;
result.collides = true;
- }
- else if(nearest_collided == 2) // Z
- {
- if(fabs(speed_f.Z) > BS*3)
- speed_f.Z *= bounce;
+ } else if(nearest_collided == 2) { // Z
+ if (fabs(speed_f->Z) > BS * 3)
+ speed_f->Z *= bounce;
else
- speed_f.Z = 0;
+ speed_f->Z = 0;
result.collides = true;
result.collides_xz = true;
}
- info.new_speed = speed_f;
- if(info.new_speed.getDistanceFrom(info.old_speed) < 0.1*BS)
+ info.new_speed = *speed_f;
+ if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1 * BS)
is_collision = false;
- if(is_collision){
+ if (is_collision) {
result.collisions.push_back(info);
}
}
@@ -522,10 +550,9 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
Final touches: Check if standing on ground, step up stairs.
*/
aabb3f box = box_0;
- box.MinEdge += pos_f;
- box.MaxEdge += pos_f;
- for(u32 boxindex = 0; boxindex < cboxes.size(); boxindex++)
- {
+ box.MinEdge += *pos_f;
+ box.MaxEdge += *pos_f;
+ for (u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) {
const aabb3f& cbox = cboxes[boxindex];
/*
@@ -537,23 +564,21 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
Use 0.15*BS so that it is easier to get on a node.
*/
- if(
- cbox.MaxEdge.X-d > box.MinEdge.X &&
- cbox.MinEdge.X+d < box.MaxEdge.X &&
- cbox.MaxEdge.Z-d > box.MinEdge.Z &&
- cbox.MinEdge.Z+d < box.MaxEdge.Z
- ){
- if(is_step_up[boxindex])
- {
- pos_f.Y += (cbox.MaxEdge.Y - box.MinEdge.Y);
+ if (cbox.MaxEdge.X - d > box.MinEdge.X && cbox.MinEdge.X + d < box.MaxEdge.X &&
+ cbox.MaxEdge.Z - d > box.MinEdge.Z &&
+ cbox.MinEdge.Z + d < box.MaxEdge.Z) {
+ if (is_step_up[boxindex]) {
+ pos_f->Y += (cbox.MaxEdge.Y - box.MinEdge.Y);
box = box_0;
- box.MinEdge += pos_f;
- box.MaxEdge += pos_f;
+ box.MinEdge += *pos_f;
+ box.MaxEdge += *pos_f;
}
- if(fabs(cbox.MaxEdge.Y-box.MinEdge.Y) < 0.15*BS)
- {
+ if (fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.15 * BS) {
result.touching_ground = true;
- if(is_unloaded[boxindex])
+
+ if (is_object[boxindex])
+ result.standing_on_object = true;
+ if (is_unloaded[boxindex])
result.standing_on_unloaded = true;
}
}
diff --git a/src/collision.h b/src/collision.h
index fc4187eda..1ceaba81c 100644
--- a/src/collision.h
+++ b/src/collision.h
@@ -57,13 +57,15 @@ struct collisionMoveResult
bool collides;
bool collides_xz;
bool standing_on_unloaded;
+ bool standing_on_object;
std::vector<CollisionInfo> collisions;
collisionMoveResult():
touching_ground(false),
collides(false),
collides_xz(false),
- standing_on_unloaded(false)
+ standing_on_unloaded(false),
+ standing_on_object(false)
{}
};
@@ -71,8 +73,8 @@ struct collisionMoveResult
collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef,
f32 pos_max_d, const aabb3f &box_0,
f32 stepheight, f32 dtime,
- v3f &pos_f, v3f &speed_f,
- v3f &accel_f,ActiveObject* self=0,
+ v3f *pos_f, v3f *speed_f,
+ v3f accel_f, ActiveObject *self=NULL,
bool collideWithObjects=true);
// Helper function:
@@ -81,7 +83,7 @@ collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef,
// dtime receives time until first collision, invalid if -1 is returned
int axisAlignedCollision(
const aabb3f &staticbox, const aabb3f &movingbox,
- const v3f &speed, f32 d, f32 &dtime);
+ const v3f &speed, f32 d, f32 *dtime);
// Helper function:
// Checks if moving the movingbox up by the given distance would hit a ceiling.
diff --git a/src/content_cao.cpp b/src/content_cao.cpp
index 0293b7983..d701e4f72 100644
--- a/src/content_cao.cpp
+++ b/src/content_cao.cpp
@@ -309,7 +309,7 @@ public:
void initialize(const std::string &data);
- core::aabbox3d<f32>* getSelectionBox()
+ aabb3f *getSelectionBox()
{return &m_selection_box;}
v3f getPosition()
{return m_position;}
@@ -319,7 +319,7 @@ public:
bool getCollisionBox(aabb3f *toset) { return false; }
private:
- core::aabbox3d<f32> m_selection_box;
+ aabb3f m_selection_box;
scene::IMeshSceneNode *m_node;
v3f m_position;
std::string m_itemstring;
@@ -465,7 +465,7 @@ void ItemCAO::updateTexture()
}
catch(SerializationError &e)
{
- infostream<<"WARNING: "<<__FUNCTION_NAME
+ warningstream<<FUNCTION_NAME
<<": error deSerializing itemstring \""
<<m_itemstring<<std::endl;
}
@@ -546,13 +546,14 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
//
m_smgr(NULL),
m_irr(NULL),
+ m_camera(NULL),
+ m_gamedef(NULL),
m_selection_box(-BS/3.,-BS/3.,-BS/3., BS/3.,BS/3.,BS/3.),
m_meshnode(NULL),
m_animated_meshnode(NULL),
m_wield_meshnode(NULL),
m_spritenode(NULL),
- m_nametag_color(video::SColor(255, 255, 255, 255)),
- m_textnode(NULL),
+ m_nametag(NULL),
m_position(v3f(0,10*BS,0)),
m_velocity(v3f(0,0,0)),
m_acceleration(v3f(0,0,0)),
@@ -581,8 +582,11 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
m_last_light(255),
m_is_visible(false)
{
- if(gamedef == NULL)
+ if (gamedef == NULL) {
ClientActiveObject::registerType(getType(), create);
+ } else {
+ m_gamedef = gamedef;
+ }
}
bool GenericCAO::getCollisionBox(aabb3f *toset)
@@ -668,14 +672,13 @@ void GenericCAO::initialize(const std::string &data)
GenericCAO::~GenericCAO()
{
- if(m_is_player)
- {
+ if (m_is_player) {
m_env->removePlayerName(m_name.c_str());
}
removeFromScene(true);
}
-core::aabbox3d<f32>* GenericCAO::getSelectionBox()
+aabb3f *GenericCAO::getSelectionBox()
{
if(!m_prop.is_visible || !m_is_visible || m_is_local_player || getParent() != NULL)
return NULL;
@@ -696,14 +699,15 @@ v3f GenericCAO::getPosition()
scene::ISceneNode* GenericCAO::getSceneNode()
{
- if (m_meshnode)
+ if (m_meshnode) {
return m_meshnode;
- if (m_animated_meshnode)
+ } else if (m_animated_meshnode) {
return m_animated_meshnode;
- if (m_wield_meshnode)
+ } else if (m_wield_meshnode) {
return m_wield_meshnode;
- if (m_spritenode)
+ } else if (m_spritenode) {
return m_spritenode;
+ }
return NULL;
}
@@ -776,56 +780,47 @@ void GenericCAO::removeFromScene(bool permanent)
}
}
- if(m_meshnode)
- {
+ if (m_meshnode) {
m_meshnode->remove();
m_meshnode->drop();
m_meshnode = NULL;
- }
- if(m_animated_meshnode)
- {
+ } else if (m_animated_meshnode) {
m_animated_meshnode->remove();
m_animated_meshnode->drop();
m_animated_meshnode = NULL;
- }
- if(m_wield_meshnode)
- {
+ } else if (m_wield_meshnode) {
m_wield_meshnode->remove();
m_wield_meshnode->drop();
m_wield_meshnode = NULL;
- }
- if(m_spritenode)
- {
+ } else if (m_spritenode) {
m_spritenode->remove();
m_spritenode->drop();
m_spritenode = NULL;
}
- if (m_textnode)
- {
- m_textnode->remove();
- m_textnode->drop();
- m_textnode = NULL;
+
+ if (m_nametag) {
+ m_gamedef->getCamera()->removeNametag(m_nametag);
+ m_nametag = NULL;
}
}
-void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
- IrrlichtDevice *irr)
+void GenericCAO::addToScene(scene::ISceneManager *smgr,
+ ITextureSource *tsrc, IrrlichtDevice *irr)
{
m_smgr = smgr;
m_irr = irr;
- if (getSceneNode() != NULL)
+ if (getSceneNode() != NULL) {
return;
+ }
m_visuals_expired = false;
- if(!m_prop.is_visible)
+ if (!m_prop.is_visible) {
return;
+ }
- //video::IVideoDriver* driver = smgr->getVideoDriver();
-
- if(m_prop.visual == "sprite")
- {
+ if (m_prop.visual == "sprite") {
infostream<<"GenericCAO::addToScene(): single_sprite"<<std::endl;
m_spritenode = smgr->addBillboardSceneNode(
NULL, v2f(1, 1), v3f(0,0,0), -1);
@@ -934,10 +929,15 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
u8 li = m_last_light;
setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li));
+ bool backface_culling = m_prop.backface_culling;
+ if (m_is_player)
+ backface_culling = false;
+
m_animated_meshnode->setMaterialFlag(video::EMF_LIGHTING, false);
m_animated_meshnode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
m_animated_meshnode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
m_animated_meshnode->setMaterialFlag(video::EMF_FOG_ENABLE, true);
+ m_animated_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, backface_culling);
}
else
errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
@@ -967,14 +967,10 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
updateTextures("");
scene::ISceneNode *node = getSceneNode();
- if (node && m_is_player && !m_is_local_player) {
- // Add a text node for showing the name
- gui::IGUIEnvironment* gui = irr->getGUIEnvironment();
- std::wstring wname = utf8_to_wide(m_name);
- m_textnode = smgr->addTextSceneNode(gui->getSkin()->getFont(),
- wname.c_str(), m_nametag_color, node);
- m_textnode->grab();
- m_textnode->setPosition(v3f(0, BS*1.1, 0));
+ if (node && m_prop.nametag != "" && !m_is_local_player) {
+ // Add nametag
+ m_nametag = m_gamedef->getCamera()->addNametag(node,
+ m_prop.nametag, m_prop.nametag_color);
}
updateNodePos();
@@ -1176,22 +1172,20 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
if(m_prop.physical)
{
- core::aabbox3d<f32> box = m_prop.collisionbox;
+ aabb3f box = m_prop.collisionbox;
box.MinEdge *= BS;
box.MaxEdge *= BS;
collisionMoveResult moveresult;
f32 pos_max_d = BS*0.125; // Distance per iteration
v3f p_pos = m_position;
v3f p_velocity = m_velocity;
- v3f p_acceleration = m_acceleration;
moveresult = collisionMoveSimple(env,env->getGameDef(),
pos_max_d, box, m_prop.stepheight, dtime,
- p_pos, p_velocity, p_acceleration,
+ &p_pos, &p_velocity, m_acceleration,
this, m_prop.collideWithObjects);
// Apply results
m_position = p_pos;
m_velocity = p_velocity;
- m_acceleration = p_acceleration;
bool is_end_position = moveresult.collides;
pos_translator.update(m_position, is_end_position, dtime);
@@ -1251,8 +1245,18 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
if (getParent() == NULL && m_prop.automatic_face_movement_dir &&
(fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
{
- m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
+ float optimal_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
+ m_prop.automatic_face_movement_dir_offset;
+ float max_rotation_delta =
+ dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
+
+ if ((m_prop.automatic_face_movement_max_rotation_per_sec > 0) &&
+ (fabs(m_yaw - optimal_yaw) > max_rotation_delta)) {
+
+ m_yaw = optimal_yaw < m_yaw ? m_yaw - max_rotation_delta : m_yaw + max_rotation_delta;
+ } else {
+ m_yaw = optimal_yaw;
+ }
updateNodePos();
}
}
@@ -1584,6 +1588,9 @@ void GenericCAO::processMessage(const std::string &data)
m_tx_basepos = m_prop.initial_sprite_basepos;
}
+ if ((m_is_player && !m_is_local_player) && m_prop.nametag == "")
+ m_prop.nametag = m_name;
+
expireVisuals();
}
else if(cmd == GENERIC_CMD_UPDATE_POSITION)
@@ -1762,15 +1769,11 @@ void GenericCAO::processMessage(const std::string &data)
m_armor_groups[name] = rating;
}
} else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) {
+ // Deprecated, for backwards compatibility only.
readU8(is); // version
- m_nametag_color = readARGB8(is);
- if (m_textnode != NULL) {
- m_textnode->setTextColor(m_nametag_color);
-
- // Enforce hiding nametag,
- // because if freetype is enabled, a grey
- // shadow can remain.
- m_textnode->setVisible(m_nametag_color.getAlpha() > 0);
+ m_prop.nametag_color = readARGB8(is);
+ if (m_nametag != NULL) {
+ m_nametag->nametag_color = m_prop.nametag_color;
}
}
}
@@ -1820,7 +1823,7 @@ std::string GenericCAO::debugInfoText()
os<<"GenericCAO hp="<<m_hp<<"\n";
os<<"armor={";
for(ItemGroupList::const_iterator i = m_armor_groups.begin();
- i != m_armor_groups.end(); i++)
+ i != m_armor_groups.end(); ++i)
{
os<<i->first<<"="<<i->second<<", ";
}
diff --git a/src/content_cao.h b/src/content_cao.h
index 299d6c73e..a166ff494 100644
--- a/src/content_cao.h
+++ b/src/content_cao.h
@@ -26,6 +26,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "object_properties.h"
#include "itemgroup.h"
+class Camera;
+struct Nametag;
+
/*
SmoothTranslator
*/
@@ -65,13 +68,14 @@ private:
//
scene::ISceneManager *m_smgr;
IrrlichtDevice *m_irr;
- core::aabbox3d<f32> m_selection_box;
+ Camera* m_camera;
+ IGameDef *m_gamedef;
+ aabb3f m_selection_box;
scene::IMeshSceneNode *m_meshnode;
scene::IAnimatedMeshSceneNode *m_animated_meshnode;
WieldMeshSceneNode *m_wield_meshnode;
scene::IBillboardSceneNode *m_spritenode;
- video::SColor m_nametag_color;
- scene::ITextSceneNode* m_textnode;
+ Nametag* m_nametag;
v3f m_position;
v3f m_velocity;
v3f m_acceleration;
@@ -128,7 +132,7 @@ public:
bool collideWithObjects();
- core::aabbox3d<f32>* getSelectionBox();
+ aabb3f *getSelectionBox();
v3f getPosition();
@@ -202,6 +206,11 @@ public:
float time_from_last_punch=1000000);
std::string debugInfoText();
+
+ std::string infoText()
+ {
+ return m_prop.infotext;
+ }
};
diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp
index 8fa041312..6a83bd8f3 100644
--- a/src/content_mapblock.cpp
+++ b/src/content_mapblock.cpp
@@ -50,9 +50,9 @@ void makeCuboid(MeshCollector *collector, const aabb3f &box,
v3f min = box.MinEdge;
v3f max = box.MaxEdge;
-
-
-
+
+
+
if(txc == NULL) {
static const f32 txc_default[24] = {
0,0,1,1,
@@ -163,6 +163,14 @@ void makeCuboid(MeshCollector *collector, const aabb3f &box,
}
}
+static inline void getNeighborConnectingFace(v3s16 p, INodeDefManager *nodedef,
+ MeshMakeData *data, MapNode n, int v, int *neighbors)
+{
+ MapNode n2 = data->m_vmanip.getNodeNoEx(p);
+ if (nodedef->nodeboxConnects(n, n2, v))
+ *neighbors |= v;
+}
+
/*
TODO: Fix alpha blending for special nodes
Currently only the last element rendered is blended correct
@@ -171,7 +179,6 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
MeshCollector &collector)
{
INodeDefManager *nodedef = data->m_gamedef->ndef();
- ITextureSource *tsrc = data->m_gamedef->tsrc();
scene::ISceneManager* smgr = data->m_gamedef->getSceneManager();
scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator();
@@ -182,11 +189,6 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
Some settings
*/
bool enable_mesh_cache = g_settings->getBool("enable_mesh_cache");
- bool new_style_water = g_settings->getBool("new_style_water");
-
- float node_liquid_level = 1.0;
- if (new_style_water)
- node_liquid_level = 0.85;
v3s16 blockpos_nodes = data->m_blockpos*MAP_BLOCKSIZE;
@@ -288,35 +290,29 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
If our topside is liquid, set upper border of face
at upper border of node
*/
- if(top_is_same_liquid)
- {
- vertices[2].Pos.Y = 0.5*BS;
- vertices[3].Pos.Y = 0.5*BS;
- }
+ if (top_is_same_liquid) {
+ vertices[2].Pos.Y = 0.5 * BS;
+ vertices[3].Pos.Y = 0.5 * BS;
+ } else {
/*
Otherwise upper position of face is liquid level
*/
- else
- {
- vertices[2].Pos.Y = (node_liquid_level-0.5)*BS;
- vertices[3].Pos.Y = (node_liquid_level-0.5)*BS;
+ vertices[2].Pos.Y = 0.5 * BS;
+ vertices[3].Pos.Y = 0.5 * BS;
}
/*
If neighbor is liquid, lower border of face is liquid level
*/
- if(neighbor_is_same_liquid)
- {
- vertices[0].Pos.Y = (node_liquid_level-0.5)*BS;
- vertices[1].Pos.Y = (node_liquid_level-0.5)*BS;
- }
+ if (neighbor_is_same_liquid) {
+ vertices[0].Pos.Y = 0.5 * BS;
+ vertices[1].Pos.Y = 0.5 * BS;
+ } else {
/*
If neighbor is not liquid, lower border of face is
lower border of node
*/
- else
- {
- vertices[0].Pos.Y = -0.5*BS;
- vertices[1].Pos.Y = -0.5*BS;
+ vertices[0].Pos.Y = -0.5 * BS;
+ vertices[1].Pos.Y = -0.5 * BS;
}
for(s32 j=0; j<4; j++)
@@ -350,7 +346,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
*/
if(top_is_same_liquid)
continue;
-
+
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1),
@@ -359,7 +355,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,0),
};
- v3f offset(p.X*BS, p.Y*BS + (-0.5+node_liquid_level)*BS, p.Z*BS);
+ v3f offset(p.X * BS, (p.Y + 0.5) * BS, p.Z * BS);
for(s32 i=0; i<4; i++)
{
vertices[i].Pos += offset;
@@ -383,7 +379,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
content_t c_source = nodedef->getId(f.liquid_alternative_source);
if(ntop.getContent() == c_flowing || ntop.getContent() == c_source)
top_is_same_liquid = true;
-
+
u16 l = 0;
// If this liquid emits light and doesn't contain light, draw
// it at what it emits, for an increased effect
@@ -399,7 +395,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
else
l = getInteriorLight(n, 0, nodedef);
video::SColor c = MapBlock_LightColor(f.alpha, l, f.light_source);
-
+
u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 1, 8);
// Neighbor liquid levels (key = relative position)
@@ -432,14 +428,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
content = n2.getContent();
if(n2.getContent() == c_source)
- level = (-0.5+node_liquid_level) * BS;
+ level = 0.5 * BS;
else if(n2.getContent() == c_flowing){
u8 liquid_level = (n2.param2&LIQUID_LEVEL_MASK);
if (liquid_level <= LIQUID_LEVEL_MAX+1-range)
liquid_level = 0;
else
liquid_level -= (LIQUID_LEVEL_MAX+1-range);
- level = (-0.5 + ((float)liquid_level+ 0.5) / (float)range * node_liquid_level) * BS;
+ level = (-0.5 + ((float)liquid_level + 0.5) / (float)range) * BS;
}
// Check node above neighbor.
@@ -451,7 +447,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
n2.getContent() == c_flowing)
flags |= neighborflag_top_is_same_liquid;
}
-
+
neighbor_levels[neighbor_dirs[i]] = level;
neighbor_contents[neighbor_dirs[i]] = content;
neighbor_flags[neighbor_dirs[i]] = flags;
@@ -459,7 +455,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
// Corner heights (average between four liquids)
f32 corner_levels[4];
-
+
v3s16 halfdirs[4] = {
v3s16(0,0,0),
v3s16(1,0,0),
@@ -487,7 +483,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
// Source is always the same height
else if(content == c_source)
{
- cornerlevel = (-0.5+node_liquid_level)*BS;
+ cornerlevel = 0.5 * BS;
valid_count = 1;
break;
}
@@ -539,14 +535,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
content_t neighbor_content = neighbor_contents[dir];
const ContentFeatures &n_feat = nodedef->get(neighbor_content);
-
+
// Don't draw face if neighbor is blocking the view
if(n_feat.solidness == 2)
continue;
-
+
bool neighbor_is_same_liquid = (neighbor_content == c_source
|| neighbor_content == c_flowing);
-
+
// Don't draw any faces if neighbor same is liquid and top is
// same liquid
if(neighbor_is_same_liquid == true
@@ -558,7 +554,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
const TileSpec *current_tile = &tile_liquid;
if(n_feat.solidness != 0 || n_feat.visual_solidness != 0)
current_tile = &tile_liquid_bfculled;
-
+
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1),
@@ -566,7 +562,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::S3DVertex(BS/2,0,BS/2, 0,0,0, c, 1,0),
video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,0),
};
-
+
/*
If our topside is liquid, set upper border of face
at upper border of node
@@ -584,7 +580,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
vertices[2].Pos.Y = corner_levels[side_corners[i][0]];
vertices[3].Pos.Y = corner_levels[side_corners[i][1]];
}
-
+
/*
If neighbor is liquid, lower border of face is corner
liquid levels
@@ -603,7 +599,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
vertices[0].Pos.Y = -0.5*BS;
vertices[1].Pos.Y = -0.5*BS;
}
-
+
for(s32 j=0; j<4; j++)
{
if(dir == v3s16(0,0,1))
@@ -614,7 +610,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
vertices[j].Pos.rotateXZBy(90);
if(dir == v3s16(1,0,-0))
vertices[j].Pos.rotateXZBy(-90);
-
+
// Do this to not cause glitches when two liquids are
// side-by-side
/*if(neighbor_is_same_liquid == false){
@@ -629,11 +625,11 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
// Add to mesh collector
collector.append(*current_tile, vertices, 4, indices, 6);
}
-
+
/*
Generate top side, if appropriate
*/
-
+
if(top_is_same_liquid == false)
{
video::S3DVertex vertices[4] =
@@ -643,7 +639,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c, 1,0),
video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,0),
};
-
+
// To get backface culling right, the vertices need to go
// clockwise around the front of the face. And we happened to
// calculate corner levels in exact reverse order.
@@ -657,8 +653,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
vertices[i].Pos.Y += corner_levels[j];
vertices[i].Pos += intToFloat(p, BS);
}
-
- // Default downwards-flowing texture animation goes from
+
+ // Default downwards-flowing texture animation goes from
// -Z towards +Z, thus the direction is +Z.
// Rotate texture to make animation go in flow direction
// Positive if liquid moves towards +Z
@@ -721,7 +717,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::S3DVertex(BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 0,0),
video::S3DVertex(-BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 1,0),
};
-
+
// Rotations in the g_6dirs format
if(j == 0) // Z+
for(u16 i=0; i<4; i++)
@@ -770,7 +766,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
TileSpec tiles[6];
for (i = 0; i < 6; i++)
tiles[i] = getNodeTile(n, p, dirs[i], data);
-
+
TileSpec glass_tiles[6];
if (tiles[1].texture && tiles[2].texture && tiles[3].texture) {
glass_tiles[0] = tiles[2];
@@ -781,21 +777,21 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
glass_tiles[5] = tiles[1];
} else {
for (i = 0; i < 6; i++)
- glass_tiles[i] = tiles[1];
+ glass_tiles[i] = tiles[1];
}
-
+
u8 param2 = n.getParam2();
bool H_merge = ! bool(param2 & 128);
bool V_merge = ! bool(param2 & 64);
param2 = param2 & 63;
-
+
u16 l = getInteriorLight(n, 1, nodedef);
video::SColor c = MapBlock_LightColor(255, l, f.light_source);
v3f pos = intToFloat(p, BS);
static const float a = BS / 2;
static const float g = a - 0.003;
static const float b = .876 * ( BS / 2 );
-
+
static const aabb3f frame_edges[12] = {
aabb3f( b, b,-a, a, a, a), // y+
aabb3f(-a, b,-a,-b, a, a), // y+
@@ -818,16 +814,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
aabb3f(-g,-g, g, g, g, g), // z+
aabb3f(-g,-g,-g, g, g,-g) // z-
};
-
+
// table of node visible faces, 0 = invisible
int visible_faces[6] = {0,0,0,0,0,0};
-
+
// table of neighbours, 1 = same type, checked with g_26dirs
int nb[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-
+
// g_26dirs to check when only horizontal merge is allowed
int nb_H_dirs[8] = {0,2,3,5,10,11,12,13};
-
+
content_t current = n.getContent();
content_t n2c;
MapNode n2;
@@ -845,14 +841,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
n2 = data->m_vmanip.getNodeNoEx(n2p);
n2c = n2.getContent();
if (n2c == current || n2c == CONTENT_IGNORE)
- nb[4] = 1;
+ nb[4] = 1;
} else if (H_merge && !V_merge) {
for(i = 0; i < 8; i++) {
n2p = blockpos_nodes + p + g_26dirs[nb_H_dirs[i]];
n2 = data->m_vmanip.getNodeNoEx(n2p);
n2c = n2.getContent();
if (n2c == current || n2c == CONTENT_IGNORE)
- nb[nb_H_dirs[i]] = 1;
+ nb[nb_H_dirs[i]] = 1;
}
} else if (H_merge && V_merge) {
for(i = 0; i < 18; i++) {
@@ -878,7 +874,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
visible_faces[i] = 1;
}
}
-
+
if (!H_merge) {
visible_faces[2] = 1;
visible_faces[3] = 1;
@@ -893,7 +889,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
visible_faces[i] = 1;
}
}
-
+
static const u8 nb_triplet[12*3] = {
1,2, 7, 1,5, 6, 4,2,15, 4,5,14,
2,0,11, 2,3,13, 5,0,10, 5,3,12,
@@ -1010,7 +1006,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
case NDT_TORCHLIKE:
{
v3s16 dir = n.getWallMountedDir(nodedef);
-
+
u8 tileindex = 0;
if(dir == v3s16(0,-1,0)){
tileindex = 0; // floor
@@ -1070,7 +1066,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u16 l = getInteriorLight(n, 0, nodedef);
video::SColor c = MapBlock_LightColor(255, l, f.light_source);
-
+
float d = (float)BS/16;
float s = BS/2*f.visual_scale;
// Wall at X+ of node
@@ -1113,7 +1109,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u16 l = getInteriorLight(n, 1, nodedef);
video::SColor c = MapBlock_LightColor(255, l, f.light_source);
-
+
float s = BS / 2 * f.visual_scale;
for (int j = 0; j < 2; j++)
@@ -1125,16 +1121,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0),
video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0),
};
+ float rotate_degree = 0;
+ if (f.param_type_2 == CPT2_DEGROTATE)
+ rotate_degree = n.param2 * 2;
- if(j == 0)
- {
+ if (j == 0) {
for(u16 i = 0; i < 4; i++)
- vertices[i].Pos.rotateXZBy(46 + n.param2 * 2);
- }
- else if(j == 1)
- {
+ vertices[i].Pos.rotateXZBy(46 + rotate_degree);
+ } else if (j == 1) {
for(u16 i = 0; i < 4; i++)
- vertices[i].Pos.rotateXZBy(-44 + n.param2 * 2);
+ vertices[i].Pos.rotateXZBy(-44 + rotate_degree);
}
for (int i = 0; i < 4; i++)
@@ -1157,7 +1153,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
u16 l = getInteriorLight(n, 1, nodedef);
video::SColor c = MapBlock_LightColor(255, l, f.light_source);
- float s = BS/2*f.visual_scale;
+ float s = BS / 2 * f.visual_scale;
content_t current = n.getContent();
content_t n2c;
@@ -1165,148 +1161,116 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
v3s16 n2p;
static const v3s16 dirs[6] = {
- v3s16( 0, 1, 0),
- v3s16( 0,-1, 0),
- v3s16( 1, 0, 0),
- v3s16(-1, 0, 0),
- v3s16( 0, 0, 1),
- v3s16( 0, 0,-1)
+ v3s16( 0, 1, 0),
+ v3s16( 0, -1, 0),
+ v3s16( 1, 0, 0),
+ v3s16(-1, 0, 0),
+ v3s16( 0, 0, 1),
+ v3s16( 0, 0, -1)
};
- int doDraw[6] = {0,0,0,0,0,0};
+ int doDraw[6] = {0, 0, 0, 0, 0, 0};
bool drawAllFaces = true;
- bool drawBottomFacesOnly = false; // Currently unused
-
// Check for adjacent nodes
- for(int i = 0; i < 6; i++)
- {
+ for (int i = 0; i < 6; i++) {
n2p = blockpos_nodes + p + dirs[i];
n2 = data->m_vmanip.getNodeNoEx(n2p);
n2c = n2.getContent();
if (n2c != CONTENT_IGNORE && n2c != CONTENT_AIR && n2c != current) {
doDraw[i] = 1;
- if(drawAllFaces)
+ if (drawAllFaces)
drawAllFaces = false;
}
}
- for(int j = 0; j < 6; j++)
- {
- int vOffset = 0; // Vertical offset of faces after rotation
- int hOffset = 4; // Horizontal offset of faces to reach the edge
+ for (int j = 0; j < 6; j++) {
- video::S3DVertex vertices[4] =
- {
- video::S3DVertex(-s,-BS/2, 0, 0,0,0, c, 0,1),
- video::S3DVertex( s,-BS/2, 0, 0,0,0, c, 1,1),
- video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0),
- video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0),
+ video::S3DVertex vertices[4] = {
+ video::S3DVertex(-s, -BS / 2, 0, 0, 0, 0, c, 0, 1),
+ video::S3DVertex( s, -BS / 2, 0, 0, 0, 0, c, 1, 1),
+ video::S3DVertex( s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 1, 0),
+ video::S3DVertex(-s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 0, 0),
};
// Calculate which faces should be drawn, (top or sides)
- if(j == 0 && (drawAllFaces || (doDraw[3] == 1 || doDraw[1] == 1)))
- {
- for(int i = 0; i < 4; i++) {
- vertices[i].Pos.rotateXZBy(90 + n.param2 * 2);
+ if (j == 0 && (drawAllFaces ||
+ (doDraw[3] == 1 || doDraw[1] == 1))) {
+ for (int i = 0; i < 4; i++) {
+ vertices[i].Pos.rotateXZBy(90);
vertices[i].Pos.rotateXYBy(-10);
- vertices[i].Pos.Y -= vOffset;
- vertices[i].Pos.X -= hOffset;
+ vertices[i].Pos.X -= 4.0;
}
- }
- else if(j == 1 && (drawAllFaces || (doDraw[5] == 1 || doDraw[1] == 1)))
- {
- for(int i = 0; i < 4; i++) {
- vertices[i].Pos.rotateXZBy(180 + n.param2 * 2);
+ } else if (j == 1 && (drawAllFaces ||
+ (doDraw[5] == 1 || doDraw[1] == 1))) {
+ for (int i = 0; i < 4; i++) {
+ vertices[i].Pos.rotateXZBy(180);
vertices[i].Pos.rotateYZBy(10);
- vertices[i].Pos.Y -= vOffset;
- vertices[i].Pos.Z -= hOffset;
+ vertices[i].Pos.Z -= 4.0;
}
- }
- else if(j == 2 && (drawAllFaces || (doDraw[2] == 1 || doDraw[1] == 1)))
- {
- for(int i = 0; i < 4; i++) {
- vertices[i].Pos.rotateXZBy(270 + n.param2 * 2);
+ } else if (j == 2 && (drawAllFaces ||
+ (doDraw[2] == 1 || doDraw[1] == 1))) {
+ for (int i = 0; i < 4; i++) {
+ vertices[i].Pos.rotateXZBy(270);
vertices[i].Pos.rotateXYBy(10);
- vertices[i].Pos.Y -= vOffset;
- vertices[i].Pos.X += hOffset;
+ vertices[i].Pos.X += 4.0;
}
- }
- else if(j == 3 && (drawAllFaces || (doDraw[4] == 1 || doDraw[1] == 1)))
- {
- for(int i = 0; i < 4; i++) {
+ } else if (j == 3 && (drawAllFaces ||
+ (doDraw[4] == 1 || doDraw[1] == 1))) {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos.rotateYZBy(-10);
- vertices[i].Pos.Y -= vOffset;
- vertices[i].Pos.Z += hOffset;
+ vertices[i].Pos.Z += 4.0;
}
- }
-
// Center cross-flames
- else if(j == 4 && (drawAllFaces || doDraw[1] == 1))
- {
- for(int i=0; i<4; i++) {
- vertices[i].Pos.rotateXZBy(45 + n.param2 * 2);
- vertices[i].Pos.Y -= vOffset;
+ } else if (j == 4 && (drawAllFaces || doDraw[1] == 1)) {
+ for (int i = 0; i < 4; i++) {
+ vertices[i].Pos.rotateXZBy(45);
}
- }
- else if(j == 5 && (drawAllFaces || doDraw[1] == 1))
- {
- for(int i=0; i<4; i++) {
- vertices[i].Pos.rotateXZBy(-45 + n.param2 * 2);
- vertices[i].Pos.Y -= vOffset;
+ } else if (j == 5 && (drawAllFaces || doDraw[1] == 1)) {
+ for (int i = 0; i < 4; i++) {
+ vertices[i].Pos.rotateXZBy(-45);
}
- }
-
- // Render flames on bottom
- else if(j == 0 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0)))
- {
- for(int i = 0; i < 4; i++) {
+ // Render flames on bottom of node above
+ } else if (j == 0 && doDraw[0] == 1 && doDraw[1] == 0) {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos.rotateYZBy(70);
- vertices[i].Pos.rotateXZBy(90 + n.param2 * 2);
+ vertices[i].Pos.rotateXZBy(90);
vertices[i].Pos.Y += 4.84;
- vertices[i].Pos.X -= hOffset+0.7;
+ vertices[i].Pos.X -= 4.7;
}
- }
- else if(j == 1 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0)))
- {
- for(int i = 0; i < 4; i++) {
+ } else if (j == 1 && doDraw[0] == 1 && doDraw[1] == 0) {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos.rotateYZBy(70);
- vertices[i].Pos.rotateXZBy(180 + n.param2 * 2);
+ vertices[i].Pos.rotateXZBy(180);
vertices[i].Pos.Y += 4.84;
- vertices[i].Pos.Z -= hOffset+0.7;
+ vertices[i].Pos.Z -= 4.7;
}
- }
- else if(j == 2 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0)))
- {
- for(int i = 0; i < 4; i++) {
+ } else if (j == 2 && doDraw[0] == 1 && doDraw[1] == 0) {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos.rotateYZBy(70);
- vertices[i].Pos.rotateXZBy(270 + n.param2 * 2);
+ vertices[i].Pos.rotateXZBy(270);
vertices[i].Pos.Y += 4.84;
- vertices[i].Pos.X += hOffset+0.7;
+ vertices[i].Pos.X += 4.7;
}
- }
- else if(j == 3 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0)))
- {
- for(int i = 0; i < 4; i++) {
+ } else if (j == 3 && doDraw[0] == 1 && doDraw[1] == 0) {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos.rotateYZBy(70);
vertices[i].Pos.Y += 4.84;
- vertices[i].Pos.Z += hOffset+0.7;
+ vertices[i].Pos.Z += 4.7;
}
- }
- else {
+ } else {
// Skip faces that aren't adjacent to a node
continue;
}
- for(int i=0; i<4; i++)
- {
+ for (int i = 0; i < 4; i++) {
vertices[i].Pos *= f.visual_scale;
vertices[i].Pos += intToFloat(p, BS);
}
- u16 indices[] = {0,1,2,2,3,0};
+ u16 indices[] = {0, 1, 2, 2, 3, 0};
// Add to mesh collector
collector.append(tile, vertices, 4, indices, 6);
}
@@ -1539,16 +1503,47 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
v3s16(0, 0, -1)
};
TileSpec tiles[6];
-
+
u16 l = getInteriorLight(n, 1, nodedef);
video::SColor c = MapBlock_LightColor(255, l, f.light_source);
v3f pos = intToFloat(p, BS);
- std::vector<aabb3f> boxes = n.getNodeBoxes(nodedef);
+ int neighbors = 0;
+
+ // locate possible neighboring nodes to connect to
+ if (f.node_box.type == NODEBOX_CONNECTED) {
+ v3s16 p2 = p;
+
+ p2.Y++;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 1, &neighbors);
+
+ p2 = p;
+ p2.Y--;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 2, &neighbors);
+
+ p2 = p;
+ p2.Z--;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 4, &neighbors);
+
+ p2 = p;
+ p2.X--;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 8, &neighbors);
+
+ p2 = p;
+ p2.Z++;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 16, &neighbors);
+
+ p2 = p;
+ p2.X++;
+ getNeighborConnectingFace(blockpos_nodes + p2, nodedef, data, n, 32, &neighbors);
+ }
+
+ std::vector<aabb3f> boxes;
+ n.getNodeBoxes(nodedef, &boxes, neighbors);
for(std::vector<aabb3f>::iterator
i = boxes.begin();
- i != boxes.end(); i++)
+ i != boxes.end(); ++i)
{
for(int j = 0; j < 6; j++)
{
@@ -1558,7 +1553,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
aabb3f box = *i;
box.MinEdge += pos;
box.MaxEdge += pos;
-
+
f32 temp;
if (box.MinEdge.X > box.MaxEdge.X)
{
@@ -1647,55 +1642,5 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
break;}
}
}
-
- /*
- Caused by incorrect alpha blending, selection mesh needs to be created as
- last element to ensure it gets blended correct over nodes with alpha channel
- */
- // Create selection mesh
- v3s16 p = data->m_highlighted_pos_relative;
- if (data->m_show_hud &&
- (p.X >= 0) && (p.X < MAP_BLOCKSIZE) &&
- (p.Y >= 0) && (p.Y < MAP_BLOCKSIZE) &&
- (p.Z >= 0) && (p.Z < MAP_BLOCKSIZE)) {
-
- MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + p);
- if(n.getContent() != CONTENT_AIR) {
- // Get selection mesh light level
- static const v3s16 dirs[7] = {
- v3s16( 0, 0, 0),
- v3s16( 0, 1, 0),
- v3s16( 0,-1, 0),
- v3s16( 1, 0, 0),
- v3s16(-1, 0, 0),
- v3s16( 0, 0, 1),
- v3s16( 0, 0,-1)
- };
-
- u16 l = 0;
- u16 l1 = 0;
- for (u8 i = 0; i < 7; i++) {
- MapNode n1 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dirs[i]);
- l1 = getInteriorLight(n1, -4, nodedef);
- if (l1 > l)
- l = l1;
- }
- video::SColor c = MapBlock_LightColor(255, l, 0);
- data->m_highlight_mesh_color = c;
- std::vector<aabb3f> boxes = n.getSelectionBoxes(nodedef);
- TileSpec h_tile;
- h_tile.material_flags |= MATERIAL_FLAG_HIGHLIGHTED;
- h_tile.texture = tsrc->getTextureForMesh("halo.png",&h_tile.texture_id);
- v3f pos = intToFloat(p, BS);
- f32 d = 0.05 * BS;
- for (std::vector<aabb3f>::iterator i = boxes.begin();
- i != boxes.end(); i++) {
- aabb3f box = *i;
- box.MinEdge += v3f(-d, -d, -d) + pos;
- box.MaxEdge += v3f(d, d, d) + pos;
- makeCuboid(&collector, box, &h_tile, 1, c, NULL);
- }
- }
- }
}
diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp
index 3a4a4652a..a6bf0a82d 100644
--- a/src/content_mapnode.cpp
+++ b/src/content_mapnode.cpp
@@ -167,69 +167,3 @@ void content_mapnode_get_name_id_mapping(NameIdMapping *nimap)
nimap->set(CONTENT_AIR, "air");
}
-class NewNameGetter
-{
-public:
- NewNameGetter()
- {
- old_to_new["CONTENT_STONE"] = "default:stone";
- old_to_new["CONTENT_WATER"] = "default:water_flowing";
- old_to_new["CONTENT_TORCH"] = "default:torch";
- old_to_new["CONTENT_WATERSOURCE"] = "default:water_source";
- old_to_new["CONTENT_SIGN_WALL"] = "default:sign_wall";
- old_to_new["CONTENT_CHEST"] = "default:chest";
- old_to_new["CONTENT_FURNACE"] = "default:furnace";
- old_to_new["CONTENT_LOCKABLE_CHEST"] = "default:locked_chest";
- old_to_new["CONTENT_FENCE"] = "default:wooden_fence";
- old_to_new["CONTENT_RAIL"] = "default:rail";
- old_to_new["CONTENT_LADDER"] = "default:ladder";
- old_to_new["CONTENT_LAVA"] = "default:lava_flowing";
- old_to_new["CONTENT_LAVASOURCE"] = "default:lava_source";
- old_to_new["CONTENT_GRASS"] = "default:dirt_with_grass";
- old_to_new["CONTENT_TREE"] = "default:tree";
- old_to_new["CONTENT_LEAVES"] = "default:leaves";
- old_to_new["CONTENT_GRASS_FOOTSTEPS"] = "default:dirt_with_grass_footsteps";
- old_to_new["CONTENT_MESE"] = "default:mese";
- old_to_new["CONTENT_MUD"] = "default:dirt";
- old_to_new["CONTENT_CLOUD"] = "default:cloud";
- old_to_new["CONTENT_COALSTONE"] = "default:coalstone";
- old_to_new["CONTENT_WOOD"] = "default:wood";
- old_to_new["CONTENT_SAND"] = "default:sand";
- old_to_new["CONTENT_COBBLE"] = "default:cobble";
- old_to_new["CONTENT_STEEL"] = "default:steel";
- old_to_new["CONTENT_GLASS"] = "default:glass";
- old_to_new["CONTENT_MOSSYCOBBLE"] = "default:mossycobble";
- old_to_new["CONTENT_GRAVEL"] = "default:gravel";
- old_to_new["CONTENT_SANDSTONE"] = "default:sandstone";
- old_to_new["CONTENT_CACTUS"] = "default:cactus";
- old_to_new["CONTENT_BRICK"] = "default:brick";
- old_to_new["CONTENT_CLAY"] = "default:clay";
- old_to_new["CONTENT_PAPYRUS"] = "default:papyrus";
- old_to_new["CONTENT_BOOKSHELF"] = "default:bookshelf";
- old_to_new["CONTENT_JUNGLETREE"] = "default:jungletree";
- old_to_new["CONTENT_JUNGLEGRASS"] = "default:junglegrass";
- old_to_new["CONTENT_NC"] = "default:nyancat";
- old_to_new["CONTENT_NC_RB"] = "default:nyancat_rainbow";
- old_to_new["CONTENT_APPLE"] = "default:apple";
- old_to_new["CONTENT_SAPLING"] = "default:sapling";
- // Just in case
- old_to_new["CONTENT_IGNORE"] = "ignore";
- old_to_new["CONTENT_AIR"] = "air";
- }
- std::string get(const std::string &old)
- {
- StringMap::const_iterator it = old_to_new.find(old);
- if (it == old_to_new.end())
- return "";
- return it->second;
- }
-private:
- StringMap old_to_new;
-};
-
-NewNameGetter newnamegetter;
-
-std::string content_mapnode_get_new_name(const std::string &oldname)
-{
- return newnamegetter.get(oldname);
-}
diff --git a/src/content_mapnode.h b/src/content_mapnode.h
index 5d68afe59..9fa4e6d13 100644
--- a/src/content_mapnode.h
+++ b/src/content_mapnode.h
@@ -34,8 +34,4 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version);
class NameIdMapping;
void content_mapnode_get_name_id_mapping(NameIdMapping *nimap);
-// Convert "CONTENT_STONE"-style names to dynamic ids
-std::string content_mapnode_get_new_name(const std::string &oldname);
-class INodeDefManager;
-
#endif
diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp
index f504924f9..7f4264d8e 100644
--- a/src/content_nodemeta.cpp
+++ b/src/content_nodemeta.cpp
@@ -79,7 +79,7 @@ static bool content_nodemeta_deserialize_legacy_body(
inv->getList("0")->setName("main");
}
assert(inv->getList("main") && !inv->getList("0"));
-
+
meta->setString("formspec","size[8,9]"
"list[current_name;main;0,0;8,4;]"
"list[current_player;main;0,5;8,4;]");
@@ -96,7 +96,7 @@ static bool content_nodemeta_deserialize_legacy_body(
inv->getList("0")->setName("main");
}
assert(inv->getList("main") && !inv->getList("0"));
-
+
meta->setString("formspec","size[8,9]"
"list[current_name;main;0,0;8,4;]"
"list[current_player;main;0,5;8,4;]");
@@ -145,7 +145,7 @@ static bool content_nodemeta_deserialize_legacy_meta(
void content_nodemeta_deserialize_legacy(std::istream &is,
NodeMetadataList *meta, NodeTimerList *timers,
- IGameDef *gamedef)
+ IItemDefManager *item_def_mgr)
{
meta->clear();
timers->clear();
@@ -154,9 +154,9 @@ void content_nodemeta_deserialize_legacy(std::istream &is,
if(version > 1)
{
- infostream<<__FUNCTION_NAME<<": version "<<version<<" not supported"
+ infostream<<FUNCTION_NAME<<": version "<<version<<" not supported"
<<std::endl;
- throw SerializationError(__FUNCTION_NAME);
+ throw SerializationError(FUNCTION_NAME);
}
u16 count = readU16(is);
@@ -174,14 +174,14 @@ void content_nodemeta_deserialize_legacy(std::istream &is,
if(meta->get(p) != NULL)
{
- infostream<<"WARNING: "<<__FUNCTION_NAME<<": "
+ warningstream<<FUNCTION_NAME<<": "
<<"already set data at position"
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring."
<<std::endl;
continue;
}
- NodeMetadata *data = new NodeMetadata(gamedef);
+ NodeMetadata *data = new NodeMetadata(item_def_mgr);
bool need_timer = content_nodemeta_deserialize_legacy_meta(is, data);
meta->set(p, data);
diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h
index 0b08bc6a1..ebc01d9a8 100644
--- a/src/content_nodemeta.h
+++ b/src/content_nodemeta.h
@@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class NodeMetadataList;
class NodeTimerList;
-class IGameDef;
+class IItemDefManager;
/*
Legacy nodemeta definitions
@@ -32,7 +32,7 @@ class IGameDef;
void content_nodemeta_deserialize_legacy(std::istream &is,
NodeMetadataList *meta, NodeTimerList *timers,
- IGameDef *gamedef);
+ IItemDefManager *item_def_mgr);
void content_nodemeta_serialize_legacy(std::ostream &os, NodeMetadataList *meta);
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index add1726fc..53bf3154f 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -259,7 +259,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
else
{
if(m_prop.physical){
- core::aabbox3d<f32> box = m_prop.collisionbox;
+ aabb3f box = m_prop.collisionbox;
box.MinEdge *= BS;
box.MaxEdge *= BS;
collisionMoveResult moveresult;
@@ -269,7 +269,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
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,
+ &p_pos, &p_velocity, p_acceleration,
this, m_prop.collideWithObjects);
// Apply results
@@ -283,8 +283,20 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
}
if((m_prop.automatic_face_movement_dir) &&
- (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
- m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
+ (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001))
+ {
+ float optimal_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI
+ + m_prop.automatic_face_movement_dir_offset;
+ float max_rotation_delta =
+ dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
+
+ if ((m_prop.automatic_face_movement_max_rotation_per_sec > 0) &&
+ (fabs(m_yaw - optimal_yaw) > max_rotation_delta)) {
+
+ m_yaw = optimal_yaw < m_yaw ? m_yaw - max_rotation_delta : m_yaw + max_rotation_delta;
+ } else {
+ m_yaw = optimal_yaw;
+ }
}
}
@@ -393,7 +405,7 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
std::string LuaEntitySAO::getStaticData()
{
- verbosestream<<__FUNCTION_NAME<<std::endl;
+ verbosestream<<FUNCTION_NAME<<std::endl;
std::ostringstream os(std::ios::binary);
// version
writeU8(os, 1);
@@ -757,8 +769,6 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
m_bone_position_sent(false),
m_attachment_parent_id(0),
m_attachment_sent(false),
- m_nametag_color(video::SColor(255, 255, 255, 255)),
- m_nametag_sent(false),
// public
m_physics_override_speed(1),
m_physics_override_jump(1),
@@ -776,7 +786,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
m_prop.hp_max = PLAYER_MAX_HP;
m_prop.physical = false;
m_prop.weight = 75;
- m_prop.collisionbox = core::aabbox3d<f32>(-1/3.,-1.0,-1/3., 1/3.,1.0,1/3.);
+ m_prop.collisionbox = aabb3f(-1/3.,-1.0,-1/3., 1/3.,1.0,1/3.);
// start of default appearance, this should be overwritten by LUA
m_prop.visual = "upright_sprite";
m_prop.visual_size = v2f(1, 2);
@@ -821,8 +831,8 @@ void PlayerSAO::removingFromEnvironment()
{
m_player->setPlayerSAO(NULL);
m_player->peer_id = 0;
- m_env->savePlayer(m_player->getName());
- m_env->removePlayer(m_player->getName());
+ m_env->savePlayer((RemotePlayer*)m_player);
+ m_env->removePlayer(m_player);
}
}
@@ -857,7 +867,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
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)); // 5
- os << serializeLongString(gob_cmd_update_nametag_attributes(m_nametag_color)); // 6
+ os << serializeLongString(gob_cmd_update_nametag_attributes(m_prop.nametag_color)); // 6 (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only.
}
else
{
@@ -1012,14 +1022,6 @@ void PlayerSAO::step(float dtime, bool send_recommended)
ActiveObjectMessage aom(getId(), true, str);
m_messages_out.push(aom);
}
-
- if (m_nametag_sent == false) {
- m_nametag_sent = true;
- std::string str = gob_cmd_update_nametag_attributes(m_nametag_color);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
}
void PlayerSAO::setBasePosition(const v3f &position)
@@ -1270,17 +1272,6 @@ void PlayerSAO::notifyObjectPropertiesModified()
m_properties_sent = false;
}
-void PlayerSAO::setNametagColor(video::SColor color)
-{
- m_nametag_color = color;
- m_nametag_sent = false;
-}
-
-video::SColor PlayerSAO::getNametagColor()
-{
- return m_nametag_color;
-}
-
Inventory* PlayerSAO::getInventory()
{
return m_inventory;
@@ -1396,4 +1387,3 @@ bool PlayerSAO::getCollisionBox(aabb3f *toset) {
bool PlayerSAO::collideWithObjects(){
return true;
}
-
diff --git a/src/content_sao.h b/src/content_sao.h
index 1f0a68cd8..44d40d332 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -91,13 +91,13 @@ private:
std::string m_init_state;
bool m_registered;
struct ObjectProperties m_prop;
-
+
s16 m_hp;
v3f m_velocity;
v3f m_acceleration;
float m_yaw;
ItemGroupList m_armor_groups;
-
+
bool m_properties_sent;
float m_last_sent_yaw;
v3f m_last_sent_position;
@@ -213,8 +213,6 @@ public:
std::set<int> getAttachmentChildIds();
ObjectProperties* accessObjectProperties();
void notifyObjectPropertiesModified();
- void setNametagColor(video::SColor color);
- video::SColor getNametagColor();
/*
Inventory interface
@@ -292,7 +290,7 @@ public:
private:
std::string getPropertyPacket();
-
+
Player *m_player;
u16 m_peer_id;
Inventory *m_inventory;
@@ -333,8 +331,6 @@ private:
v3f m_attachment_rotation;
bool m_attachment_sent;
- video::SColor m_nametag_color;
- bool m_nametag_sent;
public:
float m_physics_override_speed;
@@ -346,4 +342,3 @@ public:
};
#endif
-
diff --git a/src/convert_json.cpp b/src/convert_json.cpp
index e03508e21..e548c45f5 100644
--- a/src/convert_json.cpp
+++ b/src/convert_json.cpp
@@ -52,7 +52,13 @@ Json::Value fetchJsonValue(const std::string &url,
if (!reader.parse(stream, root)) {
errorstream << "URL: " << url << std::endl;
errorstream << "Failed to parse json data " << reader.getFormattedErrorMessages();
- errorstream << "data: \"" << fetch_result.data << "\"" << std::endl;
+ if (fetch_result.data.size() > 100) {
+ errorstream << "Data (" << fetch_result.data.size()
+ << " bytes) printed to warningstream." << std::endl;
+ warningstream << "data: \"" << fetch_result.data << "\"" << std::endl;
+ } else {
+ errorstream << "data: \"" << fetch_result.data << "\"" << std::endl;
+ }
return Json::Value();
}
diff --git a/src/craftdef.cpp b/src/craftdef.cpp
index 409481e64..d3f1edaf9 100644
--- a/src/craftdef.cpp
+++ b/src/craftdef.cpp
@@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#include "util/string.h"
#include "util/numeric.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "exceptions.h"
inline bool isGroupRecipeStr(const std::string &rec_name)
@@ -90,7 +90,7 @@ static bool inputItemMatchesRecipe(const std::string &inp_name,
all_groups_match = false;
break;
}
- } while (!f.atend());
+ } while (!f.at_end());
if (all_groups_match)
return true;
}
@@ -214,7 +214,7 @@ static void craftDecrementOrReplaceInput(CraftInput &input,
for (std::vector<std::pair<std::string, std::string> >::iterator
j = pairs.begin();
j != pairs.end(); ++j) {
- if (item.name == craftGetItemName(j->first, gamedef)) {
+ if (inputItemMatchesRecipe(item.name, j->first, gamedef->idef())) {
if (item.count == 1) {
item.deSerialize(j->second, gamedef->idef());
found_replacement = true;
@@ -964,10 +964,10 @@ public:
{
std::ostringstream os(std::ios::binary);
os << "Crafting definitions:\n";
- for (int type = 0; type <= craft_hash_type_max; type++) {
+ for (int type = 0; type <= craft_hash_type_max; ++type) {
for (std::map<u64, std::vector<CraftDefinition*> >::const_iterator
it = (m_craft_defs[type]).begin();
- it != (m_craft_defs[type]).end(); it++) {
+ it != (m_craft_defs[type]).end(); ++it) {
for (std::vector<CraftDefinition*>::size_type i = 0;
i < it->second.size(); i++) {
os << "type " << type
@@ -992,10 +992,10 @@ public:
}
virtual void clear()
{
- for (int type = 0; type <= craft_hash_type_max; type++) {
+ for (int type = 0; type <= craft_hash_type_max; ++type) {
for (std::map<u64, std::vector<CraftDefinition*> >::iterator
it = m_craft_defs[type].begin();
- it != m_craft_defs[type].end(); it++) {
+ it != m_craft_defs[type].end(); ++it) {
for (std::vector<CraftDefinition*>::iterator
iit = it->second.begin();
iit != it->second.end(); ++iit) {
diff --git a/src/database-dummy.cpp b/src/database-dummy.cpp
index 2e5de5ed1..b38db1fb9 100644
--- a/src/database-dummy.cpp
+++ b/src/database-dummy.cpp
@@ -47,6 +47,7 @@ bool Database_Dummy::deleteBlock(const v3s16 &pos)
void Database_Dummy::listAllLoadableBlocks(std::vector<v3s16> &dst)
{
+ dst.reserve(m_database.size());
for (std::map<s64, std::string>::const_iterator x = m_database.begin();
x != m_database.end(); ++x) {
dst.push_back(getIntegerAsBlock(x->first));
diff --git a/src/database-leveldb.cpp b/src/database-leveldb.cpp
index e895354a4..acd0fd1eb 100644
--- a/src/database-leveldb.cpp
+++ b/src/database-leveldb.cpp
@@ -57,7 +57,7 @@ bool Database_LevelDB::saveBlock(const v3s16 &pos, const std::string &data)
leveldb::Status status = m_database->Put(leveldb::WriteOptions(),
i64tos(getBlockAsInteger(pos)), data);
if (!status.ok()) {
- errorstream << "WARNING: saveBlock: LevelDB error saving block "
+ warningstream << "saveBlock: LevelDB error saving block "
<< PP(pos) << ": " << status.ToString() << std::endl;
return false;
}
@@ -82,7 +82,7 @@ bool Database_LevelDB::deleteBlock(const v3s16 &pos)
leveldb::Status status = m_database->Delete(leveldb::WriteOptions(),
i64tos(getBlockAsInteger(pos)));
if (!status.ok()) {
- errorstream << "WARNING: deleteBlock: LevelDB error deleting block "
+ warningstream << "deleteBlock: LevelDB error deleting block "
<< PP(pos) << ": " << status.ToString() << std::endl;
return false;
}
diff --git a/src/database-redis.cpp b/src/database-redis.cpp
index cc4e5bade..498e9d39a 100644
--- a/src/database-redis.cpp
+++ b/src/database-redis.cpp
@@ -84,15 +84,15 @@ bool Database_Redis::saveBlock(const v3s16 &pos, const std::string &data)
redisReply *reply = static_cast<redisReply *>(redisCommand(ctx, "HSET %s %s %b",
hash.c_str(), tmp.c_str(), data.c_str(), data.size()));
if (!reply) {
- errorstream << "WARNING: saveBlock: redis command 'HSET' failed on "
+ warningstream << "saveBlock: redis command 'HSET' failed on "
"block " << PP(pos) << ": " << ctx->errstr << std::endl;
freeReplyObject(reply);
return false;
}
if (reply->type == REDIS_REPLY_ERROR) {
- errorstream << "WARNING: saveBlock: saving block " << PP(pos)
- << " failed: " << reply->str << std::endl;
+ warningstream << "saveBlock: saving block " << PP(pos)
+ << " failed: " << std::string(reply->str, reply->len) << std::endl;
freeReplyObject(reply);
return false;
}
@@ -118,12 +118,26 @@ std::string Database_Redis::loadBlock(const v3s16 &pos)
freeReplyObject(reply);
return str;
}
- case REDIS_REPLY_ERROR:
- errorstream << "WARNING: loadBlock: loading block " << PP(pos)
- << " failed: " << reply->str << std::endl;
+ case REDIS_REPLY_ERROR: {
+ std::string errstr(reply->str, reply->len);
+ freeReplyObject(reply);
+ errorstream << "loadBlock: loading block " << PP(pos)
+ << " failed: " << errstr << std::endl;
+ throw FileNotGoodException(std::string(
+ "Redis command 'HGET %s %s' errored: ") + errstr);
+ }
+ case REDIS_REPLY_NIL: {
+ // block not found in database
+ freeReplyObject(reply);
+ return "";
+ }
}
+ errorstream << "loadBlock: loading block " << PP(pos)
+ << " returned invalid reply type " << reply->type
+ << ": " << std::string(reply->str, reply->len) << std::endl;
freeReplyObject(reply);
- return "";
+ throw FileNotGoodException(std::string(
+ "Redis command 'HGET %s %s' gave invalid reply."));
}
bool Database_Redis::deleteBlock(const v3s16 &pos)
@@ -136,8 +150,8 @@ bool Database_Redis::deleteBlock(const v3s16 &pos)
throw FileNotGoodException(std::string(
"Redis command 'HDEL %s %s' failed: ") + ctx->errstr);
} else if (reply->type == REDIS_REPLY_ERROR) {
- errorstream << "WARNING: deleteBlock: deleting block " << PP(pos)
- << " failed: " << reply->str << std::endl;
+ warningstream << "deleteBlock: deleting block " << PP(pos)
+ << " failed: " << std::string(reply->str, reply->len) << std::endl;
freeReplyObject(reply);
return false;
}
@@ -155,13 +169,16 @@ void Database_Redis::listAllLoadableBlocks(std::vector<v3s16> &dst)
}
switch (reply->type) {
case REDIS_REPLY_ARRAY:
+ dst.reserve(reply->elements);
for (size_t i = 0; i < reply->elements; i++) {
assert(reply->element[i]->type == REDIS_REPLY_STRING);
dst.push_back(getIntegerAsBlock(stoi64(reply->element[i]->str)));
}
+ break;
case REDIS_REPLY_ERROR:
throw FileNotGoodException(std::string(
- "Failed to get keys from database: ") + reply->str);
+ "Failed to get keys from database: ") +
+ std::string(reply->str, reply->len));
}
freeReplyObject(reply);
}
diff --git a/src/database-sqlite3.cpp b/src/database-sqlite3.cpp
index 84b1a7122..56f937bf2 100644
--- a/src/database-sqlite3.cpp
+++ b/src/database-sqlite3.cpp
@@ -31,31 +31,79 @@ SQLite format specification:
#include "filesys.h"
#include "exceptions.h"
#include "settings.h"
+#include "porting.h"
#include "util/string.h"
#include <cassert>
+// When to print messages when the database is being held locked by another process
+// Note: I've seen occasional delays of over 250ms while running minetestmapper.
+#define BUSY_INFO_TRESHOLD 100 // Print first informational message after 100ms.
+#define BUSY_WARNING_TRESHOLD 250 // Print warning message after 250ms. Lag is increased.
+#define BUSY_ERROR_TRESHOLD 1000 // Print error message after 1000ms. Significant lag.
+#define BUSY_FATAL_TRESHOLD 3000 // Allow SQLITE_BUSY to be returned, which will cause a minetest crash.
+#define BUSY_ERROR_INTERVAL 10000 // Safety net: report again every 10 seconds
-#define SQLRES(s, r) \
+
+#define SQLRES(s, r, m) \
if ((s) != (r)) { \
- throw FileNotGoodException(std::string(\
- "SQLite3 database error (" \
- __FILE__ ":" TOSTRING(__LINE__) \
- "): ") +\
+ throw FileNotGoodException(std::string(m) + ": " +\
sqlite3_errmsg(m_database)); \
}
-#define SQLOK(s) SQLRES(s, SQLITE_OK)
+#define SQLOK(s, m) SQLRES(s, SQLITE_OK, m)
#define PREPARE_STATEMENT(name, query) \
- SQLOK(sqlite3_prepare_v2(m_database, query, -1, &m_stmt_##name, NULL))
+ SQLOK(sqlite3_prepare_v2(m_database, query, -1, &m_stmt_##name, NULL),\
+ "Failed to prepare query '" query "'")
#define FINALIZE_STATEMENT(statement) \
- if (sqlite3_finalize(statement) != SQLITE_OK) { \
- throw FileNotGoodException(std::string( \
- "SQLite3: Failed to finalize " #statement ": ") + \
- sqlite3_errmsg(m_database)); \
+ SQLOK(sqlite3_finalize(statement), "Failed to finalize " #statement)
+
+int Database_SQLite3::busyHandler(void *data, int count)
+{
+ s64 &first_time = reinterpret_cast<s64 *>(data)[0];
+ s64 &prev_time = reinterpret_cast<s64 *>(data)[1];
+ s64 cur_time = getTimeMs();
+
+ if (count == 0) {
+ first_time = cur_time;
+ prev_time = first_time;
+ } else {
+ while (cur_time < prev_time)
+ cur_time += s64(1)<<32;
}
+ if (cur_time - first_time < BUSY_INFO_TRESHOLD) {
+ ; // do nothing
+ } else if (cur_time - first_time >= BUSY_INFO_TRESHOLD &&
+ prev_time - first_time < BUSY_INFO_TRESHOLD) {
+ infostream << "SQLite3 database has been locked for "
+ << cur_time - first_time << " ms." << std::endl;
+ } else if (cur_time - first_time >= BUSY_WARNING_TRESHOLD &&
+ prev_time - first_time < BUSY_WARNING_TRESHOLD) {
+ warningstream << "SQLite3 database has been locked for "
+ << cur_time - first_time << " ms." << std::endl;
+ } else if (cur_time - first_time >= BUSY_ERROR_TRESHOLD &&
+ prev_time - first_time < BUSY_ERROR_TRESHOLD) {
+ errorstream << "SQLite3 database has been locked for "
+ << cur_time - first_time << " ms; this causes lag." << std::endl;
+ } else if (cur_time - first_time >= BUSY_FATAL_TRESHOLD &&
+ prev_time - first_time < BUSY_FATAL_TRESHOLD) {
+ errorstream << "SQLite3 database has been locked for "
+ << cur_time - first_time << " ms - giving up!" << std::endl;
+ } else if ((cur_time - first_time) / BUSY_ERROR_INTERVAL !=
+ (prev_time - first_time) / BUSY_ERROR_INTERVAL) {
+ // Safety net: keep reporting every BUSY_ERROR_INTERVAL
+ errorstream << "SQLite3 database has been locked for "
+ << (cur_time - first_time) / 1000 << " seconds!" << std::endl;
+ }
+
+ prev_time = cur_time;
+
+ // Make sqlite transaction fail if delay exceeds BUSY_FATAL_TRESHOLD
+ return cur_time - first_time < BUSY_FATAL_TRESHOLD;
+}
+
Database_SQLite3::Database_SQLite3(const std::string &savedir) :
m_initialized(false),
@@ -72,13 +120,15 @@ Database_SQLite3::Database_SQLite3(const std::string &savedir) :
void Database_SQLite3::beginSave() {
verifyDatabase();
- SQLRES(sqlite3_step(m_stmt_begin), SQLITE_DONE);
+ SQLRES(sqlite3_step(m_stmt_begin), SQLITE_DONE,
+ "Failed to start SQLite3 transaction");
sqlite3_reset(m_stmt_begin);
}
void Database_SQLite3::endSave() {
verifyDatabase();
- SQLRES(sqlite3_step(m_stmt_end), SQLITE_DONE);
+ SQLRES(sqlite3_step(m_stmt_end), SQLITE_DONE,
+ "Failed to commit SQLite3 transaction");
sqlite3_reset(m_stmt_end);
}
@@ -99,13 +149,12 @@ void Database_SQLite3::openDatabase()
bool needs_create = !fs::PathExists(dbp);
- if (sqlite3_open_v2(dbp.c_str(), &m_database,
- SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
- NULL) != SQLITE_OK) {
- errorstream << "SQLite3 database failed to open: "
- << sqlite3_errmsg(m_database) << std::endl;
- throw FileNotGoodException("Cannot open database file");
- }
+ SQLOK(sqlite3_open_v2(dbp.c_str(), &m_database,
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL),
+ std::string("Failed to open SQLite3 database file ") + dbp);
+
+ SQLOK(sqlite3_busy_handler(m_database, Database_SQLite3::busyHandler,
+ m_busy_handler_data), "Failed to set SQLite3 busy handler");
if (needs_create) {
createDatabase();
@@ -113,7 +162,8 @@ void Database_SQLite3::openDatabase()
std::string query_str = std::string("PRAGMA synchronous = ")
+ itos(g_settings->getU16("sqlite_synchronous"));
- SQLOK(sqlite3_exec(m_database, query_str.c_str(), NULL, NULL, NULL));
+ SQLOK(sqlite3_exec(m_database, query_str.c_str(), NULL, NULL, NULL),
+ "Failed to modify sqlite3 synchronous mode");
}
void Database_SQLite3::verifyDatabase()
@@ -140,7 +190,8 @@ void Database_SQLite3::verifyDatabase()
inline void Database_SQLite3::bindPos(sqlite3_stmt *stmt, const v3s16 &pos, int index)
{
- SQLOK(sqlite3_bind_int64(stmt, index, getBlockAsInteger(pos)));
+ SQLOK(sqlite3_bind_int64(stmt, index, getBlockAsInteger(pos)),
+ "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
}
bool Database_SQLite3::deleteBlock(const v3s16 &pos)
@@ -153,7 +204,7 @@ bool Database_SQLite3::deleteBlock(const v3s16 &pos)
sqlite3_reset(m_stmt_delete);
if (!good) {
- errorstream << "WARNING: deleteBlock: Block failed to delete "
+ warningstream << "deleteBlock: Block failed to delete "
<< PP(pos) << ": " << sqlite3_errmsg(m_database) << std::endl;
}
return good;
@@ -177,9 +228,10 @@ bool Database_SQLite3::saveBlock(const v3s16 &pos, const std::string &data)
#endif
bindPos(m_stmt_write, pos);
- SQLOK(sqlite3_bind_blob(m_stmt_write, 2, data.data(), data.size(), NULL));
+ SQLOK(sqlite3_bind_blob(m_stmt_write, 2, data.data(), data.size(), NULL),
+ "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
- SQLRES(sqlite3_step(m_stmt_write), SQLITE_DONE)
+ SQLRES(sqlite3_step(m_stmt_write), SQLITE_DONE, "Failed to save block")
sqlite3_reset(m_stmt_write);
return true;
@@ -217,7 +269,8 @@ void Database_SQLite3::createDatabase()
" `pos` INT PRIMARY KEY,\n"
" `data` BLOB\n"
");\n",
- NULL, NULL, NULL));
+ NULL, NULL, NULL),
+ "Failed to create database table");
}
void Database_SQLite3::listAllLoadableBlocks(std::vector<v3s16> &dst)
@@ -239,10 +292,6 @@ Database_SQLite3::~Database_SQLite3()
FINALIZE_STATEMENT(m_stmt_end)
FINALIZE_STATEMENT(m_stmt_delete)
- if (sqlite3_close(m_database) != SQLITE_OK) {
- errorstream << "Database_SQLite3::~Database_SQLite3(): "
- << "Failed to close database: "
- << sqlite3_errmsg(m_database) << std::endl;
- }
+ SQLOK(sqlite3_close(m_database), "Failed to close database");
}
diff --git a/src/database-sqlite3.h b/src/database-sqlite3.h
index a775742be..04a1825d9 100644
--- a/src/database-sqlite3.h
+++ b/src/database-sqlite3.h
@@ -63,6 +63,10 @@ private:
sqlite3_stmt *m_stmt_delete;
sqlite3_stmt *m_stmt_begin;
sqlite3_stmt *m_stmt_end;
+
+ s64 m_busy_handler_data[2];
+
+ static int busyHandler(void *data, int count);
};
#endif
diff --git a/src/debug.cpp b/src/debug.cpp
index ae2ffadc3..8647160b1 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -26,8 +26,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <stdlib.h>
#include <cstring>
#include <map>
-#include "jthread/jmutex.h"
-#include "jthread/jmutexautolock.h"
+#include <sstream>
+#include "threading/mutex.h"
+#include "threading/mutex_auto_lock.h"
#include "config.h"
#ifdef _MSC_VER
@@ -36,98 +37,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#endif
-/*
- Debug output
-*/
-
-#define DEBUGSTREAM_COUNT 2
-
-FILE *g_debugstreams[DEBUGSTREAM_COUNT] = {stderr, NULL};
-
-#define DEBUGPRINT(...)\
-{\
- for(int i=0; i<DEBUGSTREAM_COUNT; i++)\
- {\
- if(g_debugstreams[i] != NULL){\
- fprintf(g_debugstreams[i], __VA_ARGS__);\
- fflush(g_debugstreams[i]);\
- }\
- }\
-}
-
-void debugstreams_init(bool disable_stderr, const char *filename)
-{
- if(disable_stderr)
- g_debugstreams[0] = NULL;
- else
- g_debugstreams[0] = stderr;
-
- if(filename)
- g_debugstreams[1] = fopen(filename, "a");
-
- if(g_debugstreams[1])
- {
- fprintf(g_debugstreams[1], "\n\n-------------\n");
- fprintf(g_debugstreams[1], " Separator \n");
- fprintf(g_debugstreams[1], "-------------\n\n");
- }
-}
-
-void debugstreams_deinit()
-{
- if(g_debugstreams[1] != NULL)
- fclose(g_debugstreams[1]);
-}
-
-class Debugbuf : public std::streambuf
-{
-public:
- Debugbuf(bool disable_stderr)
- {
- m_disable_stderr = disable_stderr;
- }
-
- int overflow(int c)
- {
- for(int i=0; i<DEBUGSTREAM_COUNT; i++)
- {
- if(g_debugstreams[i] == stderr && m_disable_stderr)
- continue;
- if(g_debugstreams[i] != NULL)
- (void)fwrite(&c, 1, 1, g_debugstreams[i]);
- //TODO: Is this slow?
- fflush(g_debugstreams[i]);
- }
-
- return c;
- }
- std::streamsize xsputn(const char *s, std::streamsize n)
- {
-#ifdef __ANDROID__
- __android_log_print(ANDROID_LOG_VERBOSE, PROJECT_NAME, "%s", s);
+#if USE_CURSES
+ #include "terminal_chat_console.h"
#endif
- for(int i=0; i<DEBUGSTREAM_COUNT; i++)
- {
- if(g_debugstreams[i] == stderr && m_disable_stderr)
- continue;
- if(g_debugstreams[i] != NULL)
- (void)fwrite(s, 1, n, g_debugstreams[i]);
- //TODO: Is this slow?
- fflush(g_debugstreams[i]);
- }
-
- return n;
- }
-
-private:
- bool m_disable_stderr;
-};
-
-Debugbuf debugbuf(false);
-std::ostream dstream(&debugbuf);
-Debugbuf debugbuf_no_stderr(true);
-std::ostream dstream_no_stderr(&debugbuf_no_stderr);
-Nullstream dummyout;
/*
Assert
@@ -136,15 +48,16 @@ Nullstream dummyout;
void sanity_check_fn(const char *assertion, const char *file,
unsigned int line, const char *function)
{
- DEBUGPRINT("\nIn thread %lx:\n"
- "%s:%u: %s: An engine assumption '%s' failed.\n",
- (unsigned long)get_current_thread_id(),
- file, line, function, assertion);
+#if USE_CURSES
+ g_term_console.stopAndWaitforThread();
+#endif
- debug_stacks_print();
+ errorstream << std::endl << "In thread " << std::hex
+ << thr_get_current_thread_id() << ":" << std::endl;
+ errorstream << file << ":" << line << ": " << function
+ << ": An engine assumption '" << assertion << "' failed." << std::endl;
- if(g_debugstreams[1])
- fclose(g_debugstreams[1]);
+ debug_stacks_print_to(errorstream);
abort();
}
@@ -152,15 +65,16 @@ void sanity_check_fn(const char *assertion, const char *file,
void fatal_error_fn(const char *msg, const char *file,
unsigned int line, const char *function)
{
- DEBUGPRINT("\nIn thread %lx:\n"
- "%s:%u: %s: A fatal error occurred: %s\n",
- (unsigned long)get_current_thread_id(),
- file, line, function, msg);
+#if USE_CURSES
+ g_term_console.stopAndWaitforThread();
+#endif
- debug_stacks_print();
+ errorstream << std::endl << "In thread " << std::hex
+ << thr_get_current_thread_id() << ":" << std::endl;
+ errorstream << file << ":" << line << ": " << function
+ << ": A fatal error occured: " << msg << std::endl;
- if(g_debugstreams[1])
- fclose(g_debugstreams[1]);
+ debug_stacks_print_to(errorstream);
abort();
}
@@ -191,8 +105,10 @@ DebugStack::DebugStack(threadid_t id)
void DebugStack::print(FILE *file, bool everything)
{
- fprintf(file, "DEBUG STACK FOR THREAD %lx:\n",
- (unsigned long)threadid);
+ std::ostringstream os;
+ os << threadid;
+ fprintf(file, "DEBUG STACK FOR THREAD %s:\n",
+ os.str().c_str());
for(int i=0; i<stack_max_i; i++)
{
@@ -211,7 +127,7 @@ void DebugStack::print(FILE *file, bool everything)
void DebugStack::print(std::ostream &os, bool everything)
{
- os<<"DEBUG STACK FOR THREAD "<<(unsigned long)threadid<<": "<<std::endl;
+ os<<"DEBUG STACK FOR THREAD "<<threadid<<": "<<std::endl;
for(int i=0; i<stack_max_i; i++)
{
@@ -228,8 +144,15 @@ void DebugStack::print(std::ostream &os, bool everything)
os<<"Probably overflown."<<std::endl;
}
+// Note: Using pthread_t (that is, threadid_t on POSIX platforms) as the key to
+// a std::map is naughty. Formally, a pthread_t may only be compared using
+// pthread_equal() - pthread_t lacks the well-ordered property needed for
+// comparisons in binary searches. This should be fixed at some point by
+// defining a custom comparator with an arbitrary but stable ordering of
+// pthread_t, but it isn't too important since none of our supported platforms
+// implement pthread_t as a non-ordinal type.
std::map<threadid_t, DebugStack*> g_debug_stacks;
-JMutex g_debug_stacks_mutex;
+Mutex g_debug_stacks_mutex;
void debug_stacks_init()
{
@@ -237,7 +160,7 @@ void debug_stacks_init()
void debug_stacks_print_to(std::ostream &os)
{
- JMutexAutoLock lock(g_debug_stacks_mutex);
+ MutexAutoLock lock(g_debug_stacks_mutex);
os<<"Debug stacks:"<<std::endl;
@@ -251,29 +174,14 @@ void debug_stacks_print_to(std::ostream &os)
void debug_stacks_print()
{
- JMutexAutoLock lock(g_debug_stacks_mutex);
-
- DEBUGPRINT("Debug stacks:\n");
-
- for(std::map<threadid_t, DebugStack*>::iterator
- i = g_debug_stacks.begin();
- i != g_debug_stacks.end(); ++i)
- {
- DebugStack *stack = i->second;
-
- for(int i=0; i<DEBUGSTREAM_COUNT; i++)
- {
- if(g_debugstreams[i] != NULL)
- stack->print(g_debugstreams[i], true);
- }
- }
+ debug_stacks_print_to(errorstream);
}
DebugStacker::DebugStacker(const char *text)
{
- threadid_t threadid = get_current_thread_id();
+ threadid_t threadid = thr_get_current_thread_id();
- JMutexAutoLock lock(g_debug_stacks_mutex);
+ MutexAutoLock lock(g_debug_stacks_mutex);
std::map<threadid_t, DebugStack*>::iterator n;
n = g_debug_stacks.find(threadid);
@@ -307,7 +215,7 @@ DebugStacker::DebugStacker(const char *text)
DebugStacker::~DebugStacker()
{
- JMutexAutoLock lock(g_debug_stacks_mutex);
+ MutexAutoLock lock(g_debug_stacks_mutex);
if(m_overflowed == true)
return;
diff --git a/src/debug.h b/src/debug.h
index 9684aa2df..2098942db 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <exception>
#include <assert.h>
#include "gettime.h"
+#include "log.h"
#if (defined(WIN32) || defined(_WIN32_WCE))
#define WIN32_LEAN_AND_MEAN
@@ -34,15 +35,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifdef _MSC_VER
#include <eh.h>
#endif
- #define __NORETURN __declspec(noreturn)
- #define __FUNCTION_NAME __FUNCTION__
+ #define NORETURN __declspec(noreturn)
+ #define FUNCTION_NAME __FUNCTION__
#else
- #define __NORETURN __attribute__ ((__noreturn__))
- #define __FUNCTION_NAME __PRETTY_FUNCTION__
+ #define NORETURN __attribute__ ((__noreturn__))
+ #define FUNCTION_NAME __PRETTY_FUNCTION__
#endif
// Whether to catch all std::exceptions.
-// Assert will be called on such an event.
+// When "catching", the program will abort with an error message.
// In debug mode, leave these for the debugger and don't catch them.
#ifdef NDEBUG
#define CATCH_UNHANDLED_EXCEPTIONS 1
@@ -50,42 +51,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define CATCH_UNHANDLED_EXCEPTIONS 0
#endif
-/*
- Debug output
-*/
-
-#define DTIME (getTimestamp()+": ")
-
-extern void debugstreams_init(bool disable_stderr, const char *filename);
-extern void debugstreams_deinit();
-
-// This is used to redirect output to /dev/null
-class Nullstream : public std::ostream {
-public:
- Nullstream():
- std::ostream(0)
- {
- }
-private:
-};
-
-extern std::ostream dstream;
-extern std::ostream dstream_no_stderr;
-extern Nullstream dummyout;
-
-
/* Abort program execution immediately
*/
-__NORETURN extern void fatal_error_fn(
+NORETURN extern void fatal_error_fn(
const char *msg, const char *file,
unsigned int line, const char *function);
#define FATAL_ERROR(msg) \
- fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME)
+ fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME)
#define FATAL_ERROR_IF(expr, msg) \
((expr) \
- ? fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) \
+ ? fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME) \
: (void)(0))
/*
@@ -94,14 +71,14 @@ __NORETURN extern void fatal_error_fn(
defined)
*/
-__NORETURN extern void sanity_check_fn(
+NORETURN extern void sanity_check_fn(
const char *assertion, const char *file,
unsigned int line, const char *function);
#define SANITY_CHECK(expr) \
((expr) \
? (void)(0) \
- : sanity_check_fn(#expr, __FILE__, __LINE__, __FUNCTION_NAME))
+ : sanity_check_fn(#expr, __FILE__, __LINE__, FUNCTION_NAME))
#define sanity_check(expr) SANITY_CHECK(expr)
@@ -145,16 +122,16 @@ private:
#if CATCH_UNHANDLED_EXCEPTIONS == 1
#define BEGIN_DEBUG_EXCEPTION_HANDLER try {
- #define END_DEBUG_EXCEPTION_HANDLER(logstream) \
- } catch (std::exception &e) { \
- logstream << "ERROR: An unhandled exception occurred: " \
- << e.what() << std::endl; \
- assert(0); \
+ #define END_DEBUG_EXCEPTION_HANDLER \
+ } catch (std::exception &e) { \
+ errorstream << "An unhandled exception occurred: " \
+ << e.what() << std::endl; \
+ FATAL_ERROR(e.what()); \
}
#else
// Dummy ones
#define BEGIN_DEBUG_EXCEPTION_HANDLER
- #define END_DEBUG_EXCEPTION_HANDLER(logstream)
+ #define END_DEBUG_EXCEPTION_HANDLER
#endif
#endif // DEBUG_HEADER
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index f0b02b2d9..e8b652c17 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -33,6 +33,7 @@ void set_default_settings(Settings *settings)
// Client stuff
settings->setDefault("remote_port", "30000");
settings->setDefault("keymap_forward", "KEY_KEY_W");
+ settings->setDefault("keymap_autorun", "");
settings->setDefault("keymap_backward", "KEY_KEY_S");
settings->setDefault("keymap_left", "KEY_KEY_A");
settings->setDefault("keymap_right", "KEY_KEY_D");
@@ -88,12 +89,9 @@ void set_default_settings(Settings *settings)
settings->setDefault("show_debug", "true");
#endif
- settings->setDefault("wanted_fps", "30");
settings->setDefault("fps_max", "60");
settings->setDefault("pause_fps_max", "20");
- // A bit more than the server will send around the player, to make fog blend well
- settings->setDefault("viewing_range_nodes_max", "240");
- settings->setDefault("viewing_range_nodes_min", "35");
+ settings->setDefault("viewing_range", "100");
settings->setDefault("map_generation_limit", "31000");
settings->setDefault("screenW", "800");
settings->setDefault("screenH", "600");
@@ -108,7 +106,6 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_fog", "true");
settings->setDefault("fov", "72");
settings->setDefault("view_bobbing", "true");
- settings->setDefault("new_style_water", "false");
settings->setDefault("leaves_style", "fancy");
settings->setDefault("connected_glass", "false");
settings->setDefault("smooth_lighting", "true");
@@ -126,6 +123,8 @@ void set_default_settings(Settings *settings)
settings->setDefault("invert_mouse", "false");
settings->setDefault("enable_clouds", "true");
settings->setDefault("screenshot_path", ".");
+ settings->setDefault("screenshot_format", "png");
+ settings->setDefault("screenshot_quality", "0");
settings->setDefault("view_bobbing_amount", "1.0");
settings->setDefault("fall_bobbing_amount", "0.0");
settings->setDefault("enable_3d_clouds", "true");
@@ -136,7 +135,9 @@ void set_default_settings(Settings *settings)
settings->setDefault("console_color", "(0,0,0)");
settings->setDefault("console_alpha", "200");
settings->setDefault("selectionbox_color", "(0,0,0)");
- settings->setDefault("enable_node_highlighting", "false");
+ settings->setDefault("selectionbox_width", "2");
+ settings->setDefault("inventory_items_animations", "false");
+ settings->setDefault("node_highlighting", "box");
settings->setDefault("crosshair_color", "(255,255,255)");
settings->setDefault("crosshair_alpha", "255");
settings->setDefault("hud_scaling", "1.0");
@@ -147,9 +148,9 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_sound", "true");
settings->setDefault("sound_volume", "0.8");
settings->setDefault("desynchronize_mapblock_texture_animation", "true");
- settings->setDefault("selectionbox_width","2");
- settings->setDefault("hud_hotbar_max_width","1.0");
+ settings->setDefault("hud_hotbar_max_width", "1.0");
settings->setDefault("enable_local_map_saving", "false");
+ settings->setDefault("show_entity_selectionbox", "true");
settings->setDefault("mip_map", "false");
settings->setDefault("anisotropic_filter", "false");
@@ -157,7 +158,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("trilinear_filter", "false");
settings->setDefault("texture_clean_transparent", "false");
settings->setDefault("texture_min_size", "64");
- settings->setDefault("preload_item_visuals", "false");
+ settings->setDefault("tone_mapping", "false");
settings->setDefault("enable_bumpmapping", "false");
settings->setDefault("enable_parallax_occlusion", "false");
settings->setDefault("generate_normalmaps", "false");
@@ -178,11 +179,14 @@ void set_default_settings(Settings *settings)
settings->setDefault("repeat_rightclick_time", "0.25");
settings->setDefault("enable_particles", "true");
settings->setDefault("enable_mesh_cache", "false");
+ settings->setDefault("enable_vbo", "true");
settings->setDefault("enable_minimap", "true");
settings->setDefault("minimap_shape_round", "true");
settings->setDefault("minimap_double_scan_height", "true");
+ settings->setDefault("send_pre_v25_init", "true");
+
settings->setDefault("curl_timeout", "5000");
settings->setDefault("curl_parallel_limit", "8");
settings->setDefault("curl_file_download_timeout", "300000");
@@ -277,15 +281,19 @@ void set_default_settings(Settings *settings)
settings->setDefault("sqlite_synchronous", "2");
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
settings->setDefault("dedicated_server_step", "0.1");
+ settings->setDefault("active_block_mgmt_interval", "2.0");
+ settings->setDefault("abm_interval", "1.0");
+ settings->setDefault("nodetimer_interval", "1.0");
settings->setDefault("ignore_world_load_errors", "false");
settings->setDefault("remote_media", "");
- settings->setDefault("debug_log_level", "2");
+ settings->setDefault("debug_log_level", "action");
settings->setDefault("emergequeue_limit_total", "256");
settings->setDefault("emergequeue_limit_diskonly", "32");
settings->setDefault("emergequeue_limit_generate", "32");
settings->setDefault("num_emerge_threads", "1");
settings->setDefault("secure.enable_security", "false");
settings->setDefault("secure.trusted_mods", "");
+ settings->setDefault("secure.http_mods", "");
// physics stuff
settings->setDefault("movement_acceleration_default", "3");
@@ -311,8 +319,6 @@ void set_default_settings(Settings *settings)
settings->setDefault("water_level", "1");
settings->setDefault("chunksize", "5");
settings->setDefault("mg_flags", "dungeons");
- settings->setDefault("mgv6_spflags", "jungles, snowbiomes");
- settings->setDefault("enable_floating_dungeons", "true");
// IPv6
settings->setDefault("enable_ipv6", "true");
@@ -334,7 +340,6 @@ void set_default_settings(Settings *settings)
settings->setDefault("screenH", "0");
settings->setDefault("enable_shaders", "false");
settings->setDefault("fullscreen", "true");
- settings->setDefault("enable_particles", "false");
settings->setDefault("video_driver", "ogles1");
settings->setDefault("touchtarget", "true");
settings->setDefault("TMPFolder","/sdcard/" PROJECT_NAME_C "/tmp/");
@@ -343,10 +348,19 @@ void set_default_settings(Settings *settings)
settings->setDefault("max_simultaneous_block_sends_per_client", "3");
settings->setDefault("emergequeue_limit_diskonly", "8");
settings->setDefault("emergequeue_limit_generate", "8");
- settings->setDefault("preload_item_visuals", "false");
-
- settings->setDefault("viewing_range_nodes_max", "50");
- settings->setDefault("viewing_range_nodes_min", "20");
+ settings->setDefault("max_block_generate_distance", "3");
+ settings->setDefault("enable_3d_clouds", "false");
+ settings->setDefault("fps_max", "30");
+ settings->setDefault("pause_fps_max", "10");
+ settings->setDefault("max_objects_per_block", "20");
+ settings->setDefault("sqlite_synchronous", "1");
+ settings->setDefault("gui_scaling", "1.1");
+ settings->setDefault("server_map_save_interval", "15");
+ settings->setDefault("client_mapblock_limit", "500");
+ settings->setDefault("active_block_range", "1");
+ settings->setDefault("chunksize", "3");
+
+ settings->setDefault("viewing_range", "25");
settings->setDefault("inventory_image_hack", "false");
//check for device with small screen
diff --git a/src/drawscene.cpp b/src/drawscene.cpp
index 509f341d5..c6abda4ac 100644
--- a/src/drawscene.cpp
+++ b/src/drawscene.cpp
@@ -31,27 +31,9 @@ typedef enum {
EYECOUNT = 2
} paralax_sign;
-
-void draw_selectionbox(video::IVideoDriver* driver, Hud& hud,
- std::vector<aabb3f>& hilightboxes, bool show_hud)
-{
- static const s16 selectionbox_width = rangelim(g_settings->getS16("selectionbox_width"), 1, 5);
-
- if (!show_hud)
- return;
-
- video::SMaterial oldmaterial = driver->getMaterial2D();
- video::SMaterial m;
- m.Thickness = selectionbox_width;
- m.Lighting = false;
- driver->setMaterial(m);
- hud.drawSelectionBoxes(hilightboxes);
- driver->setMaterial(oldmaterial);
-}
-
void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud,
- std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
- scene::ISceneManager* smgr, bool draw_wield_tool, Client& client,
+ video::IVideoDriver* driver, scene::ISceneManager* smgr,
+ bool draw_wield_tool, Client& client,
gui::IGUIEnvironment* guienv )
{
@@ -85,10 +67,8 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud,
camera.getCameraNode()->setTarget(focusPoint);
smgr->drawAll();
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if (show_hud)
- {
- draw_selectionbox(driver, hud, hilightboxes, show_hud);
-
+ if (show_hud) {
+ hud.drawSelectionMesh();
if (draw_wield_tool)
camera.drawWieldedTool(&leftMove);
}
@@ -115,10 +95,8 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud,
camera.getCameraNode()->setTarget(focusPoint);
smgr->drawAll();
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if (show_hud)
- {
- draw_selectionbox(driver, hud, hilightboxes, show_hud);
-
+ if (show_hud) {
+ hud.drawSelectionMesh();
if (draw_wield_tool)
camera.drawWieldedTool(&rightMove);
}
@@ -144,16 +122,15 @@ void init_texture(video::IVideoDriver* driver, const v2u32& screensize,
irr::video::ECF_A8R8G8B8);
}
-video::ITexture* draw_image(const v2u32& screensize,
- paralax_sign psign, const irr::core::matrix4& startMatrix,
- const irr::core::vector3df& focusPoint, bool show_hud,
- video::IVideoDriver* driver, Camera& camera, scene::ISceneManager* smgr,
- Hud& hud, std::vector<aabb3f>& hilightboxes,
- bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv,
- video::SColor skycolor )
+video::ITexture* draw_image(const v2u32 &screensize,
+ paralax_sign psign, const irr::core::matrix4 &startMatrix,
+ const irr::core::vector3df &focusPoint, bool show_hud,
+ video::IVideoDriver *driver, Camera &camera, scene::ISceneManager *smgr,
+ Hud &hud, bool draw_wield_tool, Client &client,
+ gui::IGUIEnvironment *guienv, const video::SColor &skycolor)
{
static video::ITexture* images[2] = { NULL, NULL };
- static v2u32 last_screensize = v2u32(0,0);
+ static v2u32 last_screensize = v2u32(0, 0);
video::ITexture* image = NULL;
@@ -187,10 +164,8 @@ video::ITexture* draw_image(const v2u32& screensize,
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if (show_hud)
- {
- draw_selectionbox(driver, hud, hilightboxes, show_hud);
-
+ if (show_hud) {
+ hud.drawSelectionMesh();
if (draw_wield_tool)
camera.drawWieldedTool(&movement);
}
@@ -220,7 +195,7 @@ video::ITexture* draw_hud(video::IVideoDriver* driver, const v2u32& screensize,
hud.drawCrosshair();
hud.drawHotbar(client.getPlayerItem());
hud.drawLuaElements(camera.getOffset());
-
+ camera.drawNametags();
guienv->drawAll();
}
@@ -232,7 +207,7 @@ video::ITexture* draw_hud(video::IVideoDriver* driver, const v2u32& screensize,
}
void draw_interlaced_3d_mode(Camera& camera, bool show_hud,
- Hud& hud, std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
+ Hud& hud, video::IVideoDriver* driver,
scene::ISceneManager* smgr, const v2u32& screensize,
bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv,
video::SColor skycolor )
@@ -248,7 +223,7 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud,
/* create left view */
video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix,
- focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes,
+ focusPoint, show_hud, driver, camera, smgr, hud,
draw_wield_tool, client, guienv, skycolor);
//Right eye...
@@ -267,10 +242,8 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud,
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if (show_hud)
- {
- draw_selectionbox(driver, hud, hilightboxes, show_hud);
-
+ if (show_hud) {
+ hud.drawSelectionMesh();
if(draw_wield_tool)
camera.drawWieldedTool(&rightMove);
}
@@ -293,7 +266,7 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud,
}
void draw_sidebyside_3d_mode(Camera& camera, bool show_hud,
- Hud& hud, std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
+ Hud& hud, video::IVideoDriver* driver,
scene::ISceneManager* smgr, const v2u32& screensize,
bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv,
video::SColor skycolor )
@@ -309,12 +282,12 @@ void draw_sidebyside_3d_mode(Camera& camera, bool show_hud,
/* create left view */
video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix,
- focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes,
+ focusPoint, show_hud, driver, camera, smgr, hud,
draw_wield_tool, client, guienv, skycolor);
/* create right view */
video::ITexture* right_image = draw_image(screensize, RIGHT, startMatrix,
- focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes,
+ focusPoint, show_hud, driver, camera, smgr, hud,
draw_wield_tool, client, guienv, skycolor);
/* create hud overlay */
@@ -349,7 +322,7 @@ void draw_sidebyside_3d_mode(Camera& camera, bool show_hud,
}
void draw_top_bottom_3d_mode(Camera& camera, bool show_hud,
- Hud& hud, std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
+ Hud& hud, video::IVideoDriver* driver,
scene::ISceneManager* smgr, const v2u32& screensize,
bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv,
video::SColor skycolor )
@@ -365,12 +338,12 @@ void draw_top_bottom_3d_mode(Camera& camera, bool show_hud,
/* create left view */
video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix,
- focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes,
+ focusPoint, show_hud, driver, camera, smgr, hud,
draw_wield_tool, client, guienv, skycolor);
/* create right view */
video::ITexture* right_image = draw_image(screensize, RIGHT, startMatrix,
- focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes,
+ focusPoint, show_hud, driver, camera, smgr, hud,
draw_wield_tool, client, guienv, skycolor);
/* create hud overlay */
@@ -404,23 +377,100 @@ void draw_top_bottom_3d_mode(Camera& camera, bool show_hud,
camera.getCameraNode()->setTarget(oldTarget);
}
-void draw_plain(Camera& camera, bool show_hud, Hud& hud,
- std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
- bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv)
+void draw_pageflip_3d_mode(Camera& camera, bool show_hud,
+ Hud& hud, video::IVideoDriver* driver,
+ scene::ISceneManager* smgr, const v2u32& screensize,
+ bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv,
+ video::SColor skycolor)
{
+ /* preserve old setup*/
+ irr::core::vector3df oldPosition = camera.getCameraNode()->getPosition();
+ irr::core::vector3df oldTarget = camera.getCameraNode()->getTarget();
+
+ irr::core::matrix4 startMatrix =
+ camera.getCameraNode()->getAbsoluteTransformation();
+ irr::core::vector3df focusPoint = (camera.getCameraNode()->getTarget()
+ - camera.getCameraNode()->getAbsolutePosition()).setLength(1)
+ + camera.getCameraNode()->getAbsolutePosition();
+
+ //Left eye...
+ driver->setRenderTarget(irr::video::ERT_STEREO_LEFT_BUFFER);
+
+ irr::core::vector3df leftEye;
+ irr::core::matrix4 leftMove;
+ leftMove.setTranslation(
+ irr::core::vector3df(-g_settings->getFloat("3d_paralax_strength"),
+ 0.0f, 0.0f));
+ leftEye = (startMatrix * leftMove).getTranslation();
+
+ //clear the depth buffer, and color
+ driver->beginScene(true, true, irr::video::SColor(200, 200, 200, 255));
+ camera.getCameraNode()->setPosition(leftEye);
+ camera.getCameraNode()->setTarget(focusPoint);
+ smgr->drawAll();
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- draw_selectionbox(driver, hud, hilightboxes, show_hud);
+ if (show_hud) {
+ hud.drawSelectionMesh();
+ if (draw_wield_tool)
+ camera.drawWieldedTool(&leftMove);
+ hud.drawHotbar(client.getPlayerItem());
+ hud.drawLuaElements(camera.getOffset());
+ camera.drawNametags();
+ }
+
+ guienv->drawAll();
+
+ //Right eye...
+ driver->setRenderTarget(irr::video::ERT_STEREO_RIGHT_BUFFER);
+
+ irr::core::vector3df rightEye;
+ irr::core::matrix4 rightMove;
+ rightMove.setTranslation(
+ irr::core::vector3df(g_settings->getFloat("3d_paralax_strength"),
+ 0.0f, 0.0f));
+ rightEye = (startMatrix * rightMove).getTranslation();
+
+ //clear the depth buffer, and color
+ driver->beginScene(true, true, irr::video::SColor(200, 200, 200, 255));
+ camera.getCameraNode()->setPosition(rightEye);
+ camera.getCameraNode()->setTarget(focusPoint);
+ smgr->drawAll();
+ driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if(draw_wield_tool)
- camera.drawWieldedTool();
+ if (show_hud) {
+ hud.drawSelectionMesh();
+ if (draw_wield_tool)
+ camera.drawWieldedTool(&rightMove);
+ hud.drawHotbar(client.getPlayerItem());
+ hud.drawLuaElements(camera.getOffset());
+ camera.drawNametags();
+ }
+
+ guienv->drawAll();
+
+ camera.getCameraNode()->setPosition(oldPosition);
+ camera.getCameraNode()->setTarget(oldTarget);
+}
+
+void draw_plain(Camera &camera, bool show_hud, Hud &hud,
+ video::IVideoDriver *driver, bool draw_wield_tool,
+ Client &client, gui::IGUIEnvironment *guienv)
+{
+ driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
+ if (show_hud) {
+ hud.drawSelectionMesh();
+ if (draw_wield_tool) {
+ camera.drawWieldedTool();
+ }
+ }
}
void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
Camera &camera, Client& client, LocalPlayer *player, Hud &hud,
Mapper &mapper, gui::IGUIEnvironment *guienv,
- std::vector<aabb3f> hilightboxes, const v2u32 &screensize,
- video::SColor skycolor, bool show_hud, bool show_minimap)
+ const v2u32 &screensize, const video::SColor &skycolor,
+ bool show_hud, bool show_minimap)
{
TimeTaker timer("smgr");
@@ -444,30 +494,37 @@ void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
if (draw_mode == "anaglyph")
{
- draw_anaglyph_3d_mode(camera, show_hud, hud, hilightboxes, driver,
+ draw_anaglyph_3d_mode(camera, show_hud, hud, driver,
smgr, draw_wield_tool, client, guienv);
draw_crosshair = false;
}
else if (draw_mode == "interlaced")
{
- draw_interlaced_3d_mode(camera, show_hud, hud, hilightboxes, driver,
+ draw_interlaced_3d_mode(camera, show_hud, hud, driver,
smgr, screensize, draw_wield_tool, client, guienv, skycolor);
draw_crosshair = false;
}
else if (draw_mode == "sidebyside")
{
- draw_sidebyside_3d_mode(camera, show_hud, hud, hilightboxes, driver,
+ draw_sidebyside_3d_mode(camera, show_hud, hud, driver,
smgr, screensize, draw_wield_tool, client, guienv, skycolor);
show_hud = false;
}
else if (draw_mode == "topbottom")
{
- draw_top_bottom_3d_mode(camera, show_hud, hud, hilightboxes, driver,
+ draw_top_bottom_3d_mode(camera, show_hud, hud, driver,
smgr, screensize, draw_wield_tool, client, guienv, skycolor);
show_hud = false;
}
+ else if (draw_mode == "pageflip")
+ {
+ draw_pageflip_3d_mode(camera, show_hud, hud, driver,
+ smgr, screensize, draw_wield_tool, client, guienv, skycolor);
+ draw_crosshair = false;
+ show_hud = false;
+ }
else {
- draw_plain(camera, show_hud, hud, hilightboxes, driver,
+ draw_plain(camera, show_hud, hud, driver,
draw_wield_tool, client, guienv);
}
@@ -483,8 +540,11 @@ void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
{
if (draw_crosshair)
hud.drawCrosshair();
+
hud.drawHotbar(client.getPlayerItem());
hud.drawLuaElements(camera.getOffset());
+ camera.drawNametags();
+
if (show_minimap)
mapper.drawMinimap();
}
diff --git a/src/drawscene.h b/src/drawscene.h
index 0630f2970..364fcd499 100644
--- a/src/drawscene.h
+++ b/src/drawscene.h
@@ -31,9 +31,9 @@ void draw_load_screen(const std::wstring &text, IrrlichtDevice *device,
bool clouds = true);
void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr,
- Camera &camera, Client &client, LocalPlayer *player, Hud &hud,
- Mapper &mapper, gui::IGUIEnvironment *guienv,
- std::vector<aabb3f> hilightboxes, const v2u32 &screensize,
- video::SColor skycolor, bool show_hud, bool show_minimap);
+ Camera &camera, Client &client, LocalPlayer *player,
+ Hud &hud, Mapper &mapper, gui::IGUIEnvironment *guienv,
+ const v2u32 &screensize, const video::SColor &skycolor,
+ bool show_hud, bool show_minimap);
#endif /* DRAWSCENE_H_ */
diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp
index 8ce64e1e1..5bfc320c9 100644
--- a/src/dungeongen.cpp
+++ b/src/dungeongen.cpp
@@ -44,7 +44,7 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams)
this->vm = mapgen->vm;
#ifdef DGEN_USE_TORCHES
- c_torch = ndef->getId("default:torch");
+ c_torch = mg->ndef->getId("default:torch");
#endif
if (dparams) {
@@ -65,6 +65,11 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams)
dp.np_wetness = nparams_dungeon_wetness;
dp.np_density = nparams_dungeon_density;
}
+
+ // For mapgens using river water
+ dp.c_river_water = mg->ndef->getId("mapgen_river_water_source");
+ if (dp.c_river_water == CONTENT_IGNORE)
+ dp.c_river_water = mg->ndef->getId("mapgen_water_source");
}
@@ -80,17 +85,14 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax)
// Dungeon generator doesn't modify places which have this set
vm->clearFlag(VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE);
- bool no_float = !g_settings->getBool("enable_floating_dungeons");
-
- // Set all air and water (and optionally ignore) to be untouchable
+ // Set all air and water to be untouchable
// to make dungeons open to caves and open air
for (s16 z = nmin.Z; z <= nmax.Z; z++) {
for (s16 y = nmin.Y; y <= nmax.Y; y++) {
u32 i = vm->m_area.index(nmin.X, y, z);
for (s16 x = nmin.X; x <= nmax.X; x++) {
content_t c = vm->m_data[i].getContent();
- if (c == CONTENT_AIR || c == dp.c_water ||
- (no_float && c == CONTENT_IGNORE))
+ if (c == CONTENT_AIR || c == dp.c_water || c == dp.c_river_water)
vm->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE;
i++;
}
@@ -141,21 +143,21 @@ void DungeonGen::makeDungeon(v3s16 start_padding)
// start_padding is used to disallow starting the generation of
// a dungeon in a neighboring generation chunk
roomplace = vm->m_area.MinEdge + start_padding + v3s16(
- random.range(0, areasize.X - roomsize.X - 1 - start_padding.X),
- random.range(0, areasize.Y - roomsize.Y - 1 - start_padding.Y),
- random.range(0, areasize.Z - roomsize.Z - 1 - start_padding.Z));
+ random.range(0, areasize.X - roomsize.X - start_padding.X),
+ random.range(0, areasize.Y - roomsize.Y - start_padding.Y),
+ random.range(0, areasize.Z - roomsize.Z - start_padding.Z));
/*
Check that we're not putting the room to an unknown place,
otherwise it might end up floating in the air
*/
fits = true;
- for (s16 z = 1; z < roomsize.Z - 1; z++)
- for (s16 y = 1; y < roomsize.Y - 1; y++)
- for (s16 x = 1; x < roomsize.X - 1; x++) {
+ for (s16 z = 0; z < roomsize.Z; z++)
+ for (s16 y = 0; y < roomsize.Y; y++)
+ for (s16 x = 0; x < roomsize.X; x++) {
v3s16 p = roomplace + v3s16(x, y, z);
u32 vi = vm->m_area.index(p);
- if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_INSIDE) ||
+ if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) ||
vm->m_data[vi].getContent() == CONTENT_IGNORE) {
fits = false;
break;
@@ -392,7 +394,8 @@ void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir,
if (partcount != 0)
p.Y += make_stairs;
- if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) {
+ if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0)) &&
+ vm->m_area.contains(v3s16(p.X - dir.X, p.Y - 1, p.Z - dir.Z))) {
if (make_stairs) {
makeFill(p + v3s16(-1, -1, -1),
dp.holesize + v3s16(2, 3, 2),
diff --git a/src/dungeongen.h b/src/dungeongen.h
index 4e1201d82..d209dd4bf 100644
--- a/src/dungeongen.h
+++ b/src/dungeongen.h
@@ -40,6 +40,7 @@ int dir_to_facedir(v3s16 d);
struct DungeonParams {
content_t c_water;
+ content_t c_river_water;
content_t c_cobble;
content_t c_moss;
content_t c_stair;
diff --git a/src/emerge.cpp b/src/emerge.cpp
index d6bda731a..93e8f2b30 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -20,77 +20,102 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "emerge.h"
-#include "server.h"
+
#include <iostream>
#include <queue>
-#include "jthread/jevent.h"
-#include "map.h"
-#include "environment.h"
+
#include "util/container.h"
#include "util/thread.h"
-#include "constants.h"
-#include "voxel.h"
+#include "threading/event.h"
+
#include "config.h"
-#include "mapblock.h"
-#include "serverobject.h"
-#include "settings.h"
-#include "scripting_game.h"
-#include "profiler.h"
+#include "constants.h"
+#include "environment.h"
#include "log.h"
-#include "nodedef.h"
-#include "mg_biome.h"
-#include "mg_ore.h"
-#include "mg_decoration.h"
-#include "mg_schematic.h"
+#include "map.h"
+#include "mapblock.h"
+#include "mapgen_flat.h"
+#include "mapgen_fractal.h"
#include "mapgen_v5.h"
#include "mapgen_v6.h"
#include "mapgen_v7.h"
+#include "mapgen_valleys.h"
#include "mapgen_singlenode.h"
+#include "mg_biome.h"
+#include "mg_ore.h"
+#include "mg_decoration.h"
+#include "mg_schematic.h"
+#include "nodedef.h"
+#include "profiler.h"
+#include "scripting_game.h"
+#include "server.h"
+#include "serverobject.h"
+#include "settings.h"
+#include "voxel.h"
+
struct MapgenDesc {
const char *name;
MapgenFactory *factory;
+ bool is_user_visible;
};
-MapgenDesc reg_mapgens[] = {
- {"v5", new MapgenFactoryV5},
- {"v6", new MapgenFactoryV6},
- {"v7", new MapgenFactoryV7},
- {"singlenode", new MapgenFactorySinglenode},
-};
-
-class EmergeThread : public JThread
-{
+class EmergeThread : public Thread {
public:
- Server *m_server;
- ServerMap *map;
- EmergeManager *emerge;
- Mapgen *mapgen;
bool enable_mapgen_debug_info;
int id;
- Event qevent;
- std::queue<v3s16> blockqueue;
-
- EmergeThread(Server *server, int ethreadid):
- JThread(),
- m_server(server),
- map(NULL),
- emerge(NULL),
- mapgen(NULL),
- enable_mapgen_debug_info(false),
- id(ethreadid)
- {
- }
+ EmergeThread(Server *server, int ethreadid);
+ ~EmergeThread();
+
+ void *run();
+ void signal();
+
+ // Requires queue mutex held
+ bool pushBlock(v3s16 pos);
+
+ void cancelPendingItems();
+
+ static void runCompletionCallbacks(
+ v3s16 pos, EmergeAction action,
+ const EmergeCallbackList &callbacks);
+
+private:
+ Server *m_server;
+ ServerMap *m_map;
+ EmergeManager *m_emerge;
+ Mapgen *m_mapgen;
+
+ Event m_queue_event;
+ std::queue<v3s16> m_block_queue;
+
+ bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata);
+
+ EmergeAction getBlockOrStartGen(
+ v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *data);
+ MapBlock *finishGen(v3s16 pos, BlockMakeData *bmdata,
+ std::map<v3s16, MapBlock *> *modified_blocks);
- void *Thread();
- bool popBlockEmerge(v3s16 *pos, u8 *flags);
- bool getBlockOrStartGen(v3s16 p, MapBlock **b,
- BlockMakeData *data, bool allow_generate);
+ friend class EmergeManager;
};
+////
+//// Built-in mapgens
+////
+
+MapgenDesc g_reg_mapgens[] = {
+ {"v5", new MapgenFactoryV5, true},
+ {"v6", new MapgenFactoryV6, true},
+ {"v7", new MapgenFactoryV7, true},
+ {"flat", new MapgenFactoryFlat, true},
+ {"fractal", new MapgenFactoryFractal, true},
+ {"valleys", new MapgenFactoryValleys, true},
+ {"singlenode", new MapgenFactorySinglenode, false},
+};
-/////////////////////////////// Emerge Manager ////////////////////////////////
+////
+//// EmergeManager
+////
EmergeManager::EmergeManager(IGameDef *gamedef)
{
@@ -104,34 +129,34 @@ EmergeManager::EmergeManager(IGameDef *gamedef)
// Note that accesses to this variable are not synchronized.
// This is because the *only* thread ever starting or stopping
// EmergeThreads should be the ServerThread.
- this->threads_active = false;
+ this->m_threads_active = false;
- mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
+ enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
- // if unspecified, leave a proc for the main thread and one for
+ // If unspecified, leave a proc for the main thread and one for
// some other misc thread
s16 nthreads = 0;
if (!g_settings->getS16NoEx("num_emerge_threads", nthreads))
- nthreads = porting::getNumberOfProcessors() - 2;
+ nthreads = Thread::getNumberOfProcessors() - 2;
if (nthreads < 1)
nthreads = 1;
- qlimit_total = g_settings->getU16("emergequeue_limit_total");
- if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", qlimit_diskonly))
- qlimit_diskonly = nthreads * 5 + 1;
- if (!g_settings->getU16NoEx("emergequeue_limit_generate", qlimit_generate))
- qlimit_generate = nthreads + 1;
+ m_qlimit_total = g_settings->getU16("emergequeue_limit_total");
+ if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
+ m_qlimit_diskonly = nthreads * 5 + 1;
+ if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate))
+ m_qlimit_generate = nthreads + 1;
// don't trust user input for something very important like this
- if (qlimit_total < 1)
- qlimit_total = 1;
- if (qlimit_diskonly < 1)
- qlimit_diskonly = 1;
- if (qlimit_generate < 1)
- qlimit_generate = 1;
+ if (m_qlimit_total < 1)
+ m_qlimit_total = 1;
+ if (m_qlimit_diskonly < 1)
+ m_qlimit_diskonly = 1;
+ if (m_qlimit_generate < 1)
+ m_qlimit_generate = 1;
for (s16 i = 0; i < nthreads; i++)
- emergethread.push_back(new EmergeThread((Server *) gamedef, i));
+ m_threads.push_back(new EmergeThread((Server *)gamedef, i));
infostream << "EmergeManager: using " << nthreads << " threads" << std::endl;
}
@@ -139,27 +164,25 @@ EmergeManager::EmergeManager(IGameDef *gamedef)
EmergeManager::~EmergeManager()
{
- for (u32 i = 0; i != emergethread.size(); i++) {
- if (threads_active) {
- emergethread[i]->Stop();
- emergethread[i]->qevent.signal();
- emergethread[i]->Wait();
+ for (u32 i = 0; i != m_threads.size(); i++) {
+ EmergeThread *thread = m_threads[i];
+
+ if (m_threads_active) {
+ thread->stop();
+ thread->signal();
+ thread->wait();
}
- delete emergethread[i];
- delete mapgen[i];
+
+ delete thread;
+ delete m_mapgens[i];
}
- emergethread.clear();
- mapgen.clear();
delete biomemgr;
delete oremgr;
delete decomgr;
delete schemmgr;
- if (params.sparams) {
- delete params.sparams;
- params.sparams = NULL;
- }
+ delete params.sparams;
}
@@ -171,33 +194,37 @@ void EmergeManager::loadMapgenParams()
void EmergeManager::initMapgens()
{
- if (mapgen.size())
+ if (m_mapgens.size())
return;
+ MapgenFactory *mgfactory = getMapgenFactory(params.mg_name);
+ if (!mgfactory) {
+ errorstream << "EmergeManager: mapgen " << params.mg_name <<
+ " not registered; falling back to " << DEFAULT_MAPGEN << std::endl;
+
+ params.mg_name = DEFAULT_MAPGEN;
+
+ mgfactory = getMapgenFactory(params.mg_name);
+ FATAL_ERROR_IF(mgfactory == NULL, "Couldn't use any mapgen!");
+ }
+
if (!params.sparams) {
- params.sparams = createMapgenParams(params.mg_name);
- if (!params.sparams) {
- params.mg_name = DEFAULT_MAPGEN;
- params.sparams = createMapgenParams(params.mg_name);
- assert(params.sparams);
- }
+ params.sparams = mgfactory->createMapgenParams();
params.sparams->readParams(g_settings);
}
- // Create the mapgens
- for (u32 i = 0; i != emergethread.size(); i++) {
- Mapgen *mg = createMapgen(params.mg_name, i, &params);
- assert(mg);
- mapgen.push_back(mg);
+ for (u32 i = 0; i != m_threads.size(); i++) {
+ Mapgen *mg = mgfactory->createMapgen(i, &params, this);
+ m_mapgens.push_back(mg);
}
}
Mapgen *EmergeManager::getCurrentMapgen()
{
- for (u32 i = 0; i != emergethread.size(); i++) {
- if (emergethread[i]->IsSameThread())
- return emergethread[i]->mapgen;
+ for (u32 i = 0; i != m_threads.size(); i++) {
+ if (m_threads[i]->isCurrentThread())
+ return m_threads[i]->m_mapgen;
}
return NULL;
@@ -206,329 +233,486 @@ Mapgen *EmergeManager::getCurrentMapgen()
void EmergeManager::startThreads()
{
- if (threads_active)
+ if (m_threads_active)
return;
- for (u32 i = 0; i != emergethread.size(); i++)
- emergethread[i]->Start();
+ for (u32 i = 0; i != m_threads.size(); i++)
+ m_threads[i]->start();
- threads_active = true;
+ m_threads_active = true;
}
void EmergeManager::stopThreads()
{
- if (!threads_active)
+ if (!m_threads_active)
return;
// Request thread stop in parallel
- for (u32 i = 0; i != emergethread.size(); i++) {
- emergethread[i]->Stop();
- emergethread[i]->qevent.signal();
+ for (u32 i = 0; i != m_threads.size(); i++) {
+ m_threads[i]->stop();
+ m_threads[i]->signal();
}
// Then do the waiting for each
- for (u32 i = 0; i != emergethread.size(); i++)
- emergethread[i]->Wait();
+ for (u32 i = 0; i != m_threads.size(); i++)
+ m_threads[i]->wait();
- threads_active = false;
+ m_threads_active = false;
}
-bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate)
+bool EmergeManager::isRunning()
{
- std::map<v3s16, BlockEmergeData *>::const_iterator iter;
- BlockEmergeData *bedata;
- u16 count;
- u8 flags = 0;
- int idx = 0;
+ return m_threads_active;
+}
+
+bool EmergeManager::enqueueBlockEmerge(
+ u16 peer_id,
+ v3s16 blockpos,
+ bool allow_generate,
+ bool ignore_queue_limits)
+{
+ u16 flags = 0;
if (allow_generate)
- flags |= BLOCK_EMERGE_ALLOWGEN;
+ flags |= BLOCK_EMERGE_ALLOW_GEN;
+ if (ignore_queue_limits)
+ flags |= BLOCK_EMERGE_FORCE_QUEUE;
- {
- JMutexAutoLock queuelock(queuemutex);
+ return enqueueBlockEmergeEx(blockpos, peer_id, flags, NULL, NULL);
+}
- count = blocks_enqueued.size();
- if (count >= qlimit_total)
- return false;
- count = peer_queue_count[peer_id];
- u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly;
- if (count >= qlimit_peer)
+bool EmergeManager::enqueueBlockEmergeEx(
+ v3s16 blockpos,
+ u16 peer_id,
+ u16 flags,
+ EmergeCompletionCallback callback,
+ void *callback_param)
+{
+ EmergeThread *thread = NULL;
+ bool entry_already_exists = false;
+
+ {
+ MutexAutoLock queuelock(m_queue_mutex);
+
+ if (!pushBlockEmergeData(blockpos, peer_id, flags,
+ callback, callback_param, &entry_already_exists))
return false;
- iter = blocks_enqueued.find(p);
- if (iter != blocks_enqueued.end()) {
- bedata = iter->second;
- bedata->flags |= flags;
+ if (entry_already_exists)
return true;
- }
- bedata = new BlockEmergeData;
- bedata->flags = flags;
- bedata->peer_requested = peer_id;
- blocks_enqueued.insert(std::make_pair(p, bedata));
+ thread = getOptimalThread();
+ thread->pushBlock(blockpos);
+ }
- peer_queue_count[peer_id] = count + 1;
+ thread->signal();
- // insert into the EmergeThread queue with the least items
- int lowestitems = emergethread[0]->blockqueue.size();
- for (u32 i = 1; i != emergethread.size(); i++) {
- int nitems = emergethread[i]->blockqueue.size();
- if (nitems < lowestitems) {
- idx = i;
- lowestitems = nitems;
- }
- }
+ return true;
+}
- emergethread[idx]->blockqueue.push(p);
+
+//
+// Mapgen-related helper functions
+//
+
+v3s16 EmergeManager::getContainingChunk(v3s16 blockpos)
+{
+ return getContainingChunk(blockpos, params.chunksize);
+}
+
+
+v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize)
+{
+ s16 coff = -chunksize / 2;
+ v3s16 chunk_offset(coff, coff, coff);
+
+ return getContainerPos(blockpos - chunk_offset, chunksize)
+ * chunksize + chunk_offset;
+}
+
+
+int EmergeManager::getSpawnLevelAtPoint(v2s16 p)
+{
+ if (m_mapgens.size() == 0 || !m_mapgens[0]) {
+ errorstream << "EmergeManager: getSpawnLevelAtPoint() called"
+ " before mapgen init" << std::endl;
+ return 0;
}
- emergethread[idx]->qevent.signal();
- return true;
+ return m_mapgens[0]->getSpawnLevelAtPoint(p);
}
int EmergeManager::getGroundLevelAtPoint(v2s16 p)
{
- if (mapgen.size() == 0 || !mapgen[0]) {
+ if (m_mapgens.size() == 0 || !m_mapgens[0]) {
errorstream << "EmergeManager: getGroundLevelAtPoint() called"
- " before mapgen initialized" << std::endl;
+ " before mapgen init" << std::endl;
return 0;
}
- return mapgen[0]->getGroundLevelAtPoint(p);
+ return m_mapgens[0]->getGroundLevelAtPoint(p);
}
bool EmergeManager::isBlockUnderground(v3s16 blockpos)
{
- /*
+#if 0
v2s16 p = v2s16((blockpos.X * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2,
(blockpos.Y * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2);
int ground_level = getGroundLevelAtPoint(p);
return blockpos.Y * (MAP_BLOCKSIZE + 1) <= min(water_level, ground_level);
- */
+#endif
- //yuck, but then again, should i bother being accurate?
- //the height of the nodes in a single block is quite variable
+ // Use a simple heuristic; the above method is wildly inaccurate anyway.
return blockpos.Y * (MAP_BLOCKSIZE + 1) <= params.water_level;
}
-void EmergeManager::getMapgenNames(std::list<const char *> &mgnames)
+void EmergeManager::getMapgenNames(
+ std::vector<const char *> *mgnames, bool include_hidden)
{
- for (u32 i = 0; i != ARRLEN(reg_mapgens); i++)
- mgnames.push_back(reg_mapgens[i].name);
+ for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) {
+ if (include_hidden || g_reg_mapgens[i].is_user_visible)
+ mgnames->push_back(g_reg_mapgens[i].name);
+ }
}
-Mapgen *EmergeManager::createMapgen(const std::string &mgname, int mgid,
- MapgenParams *mgparams)
+MapgenFactory *EmergeManager::getMapgenFactory(const std::string &mgname)
{
- u32 i;
- for (i = 0; i != ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++);
- if (i == ARRLEN(reg_mapgens)) {
- errorstream << "EmergeManager; mapgen " << mgname <<
- " not registered" << std::endl;
- return NULL;
+ for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) {
+ if (mgname == g_reg_mapgens[i].name)
+ return g_reg_mapgens[i].factory;
}
- MapgenFactory *mgfactory = reg_mapgens[i].factory;
- return mgfactory->createMapgen(mgid, mgparams, this);
+ return NULL;
}
-MapgenSpecificParams *EmergeManager::createMapgenParams(const std::string &mgname)
+bool EmergeManager::pushBlockEmergeData(
+ v3s16 pos,
+ u16 peer_requested,
+ u16 flags,
+ EmergeCompletionCallback callback,
+ void *callback_param,
+ bool *entry_already_exists)
{
- u32 i;
- for (i = 0; i < ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++);
- if (i == ARRLEN(reg_mapgens)) {
- errorstream << "EmergeManager: Mapgen " << mgname <<
- " not registered" << std::endl;
- return NULL;
+ u16 &count_peer = m_peer_queue_count[peer_requested];
+
+ if ((flags & BLOCK_EMERGE_FORCE_QUEUE) == 0) {
+ if (m_blocks_enqueued.size() >= m_qlimit_total)
+ return false;
+
+ if (peer_requested != PEER_ID_INEXISTENT) {
+ u16 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ?
+ m_qlimit_generate : m_qlimit_diskonly;
+ if (count_peer >= qlimit_peer)
+ return false;
+ }
}
- MapgenFactory *mgfactory = reg_mapgens[i].factory;
- return mgfactory->createMapgenParams();
-}
+ std::pair<std::map<v3s16, BlockEmergeData>::iterator, bool> findres;
+ findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData()));
+
+ BlockEmergeData &bedata = findres.first->second;
+ *entry_already_exists = !findres.second;
+ if (callback)
+ bedata.callbacks.push_back(std::make_pair(callback, callback_param));
-////////////////////////////// Emerge Thread //////////////////////////////////
+ if (*entry_already_exists) {
+ bedata.flags |= flags;
+ } else {
+ bedata.flags = flags;
+ bedata.peer_requested = peer_requested;
+
+ count_peer++;
+ }
+
+ return true;
+}
-bool EmergeThread::popBlockEmerge(v3s16 *pos, u8 *flags)
+
+bool EmergeManager::popBlockEmergeData(
+ v3s16 pos,
+ BlockEmergeData *bedata)
{
- std::map<v3s16, BlockEmergeData *>::iterator iter;
- JMutexAutoLock queuelock(emerge->queuemutex);
+ std::map<v3s16, BlockEmergeData>::iterator it;
+ std::map<u16, u16>::iterator it2;
+
+ it = m_blocks_enqueued.find(pos);
+ if (it == m_blocks_enqueued.end())
+ return false;
- if (blockqueue.empty())
+ *bedata = it->second;
+
+ it2 = m_peer_queue_count.find(bedata->peer_requested);
+ if (it2 == m_peer_queue_count.end())
return false;
- v3s16 p = blockqueue.front();
- blockqueue.pop();
- *pos = p;
+ u16 &count_peer = it2->second;
+ assert(count_peer != 0);
+ count_peer--;
+
+ m_blocks_enqueued.erase(it);
+
+ return true;
+}
+
+
+EmergeThread *EmergeManager::getOptimalThread()
+{
+ size_t nthreads = m_threads.size();
+
+ FATAL_ERROR_IF(nthreads == 0, "No emerge threads!");
+
+ size_t index = 0;
+ size_t nitems_lowest = m_threads[0]->m_block_queue.size();
+
+ for (size_t i = 1; i < nthreads; i++) {
+ size_t nitems = m_threads[i]->m_block_queue.size();
+ if (nitems < nitems_lowest) {
+ index = i;
+ nitems_lowest = nitems;
+ }
+ }
+
+ return m_threads[index];
+}
+
+
+////
+//// EmergeThread
+////
+
+EmergeThread::EmergeThread(Server *server, int ethreadid) :
+ enable_mapgen_debug_info(false),
+ id(ethreadid),
+ m_server(server),
+ m_map(NULL),
+ m_emerge(NULL),
+ m_mapgen(NULL)
+{
+ m_name = "Emerge-" + itos(ethreadid);
+}
+
+
+EmergeThread::~EmergeThread()
+{
+ //cancelPendingItems();
+}
+
+
+void EmergeThread::signal()
+{
+ m_queue_event.signal();
+}
+
+
+bool EmergeThread::pushBlock(v3s16 pos)
+{
+ m_block_queue.push(pos);
+ return true;
+}
+
+
+void EmergeThread::cancelPendingItems()
+{
+ MutexAutoLock queuelock(m_emerge->m_queue_mutex);
+
+ while (!m_block_queue.empty()) {
+ BlockEmergeData bedata;
+ v3s16 pos;
+
+ pos = m_block_queue.front();
+ m_block_queue.pop();
+
+ m_emerge->popBlockEmergeData(pos, &bedata);
- iter = emerge->blocks_enqueued.find(p);
- if (iter == emerge->blocks_enqueued.end())
- return false; //uh oh, queue and map out of sync!!
+ runCompletionCallbacks(pos, EMERGE_CANCELLED, bedata.callbacks);
+ }
+}
- BlockEmergeData *bedata = iter->second;
- *flags = bedata->flags;
- emerge->peer_queue_count[bedata->peer_requested]--;
+void EmergeThread::runCompletionCallbacks(
+ v3s16 pos,
+ EmergeAction action,
+ const EmergeCallbackList &callbacks)
+{
+ for (size_t i = 0; i != callbacks.size(); i++) {
+ EmergeCompletionCallback callback;
+ void *param;
+
+ callback = callbacks[i].first;
+ param = callbacks[i].second;
+
+ callback(pos, action, param);
+ }
+}
+
+
+bool EmergeThread::popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata)
+{
+ MutexAutoLock queuelock(m_emerge->m_queue_mutex);
+
+ if (m_block_queue.empty())
+ return false;
+
+ *pos = m_block_queue.front();
+ m_block_queue.pop();
- delete bedata;
- emerge->blocks_enqueued.erase(iter);
+ m_emerge->popBlockEmergeData(*pos, bedata);
return true;
}
-bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b,
- BlockMakeData *data, bool allow_gen)
+EmergeAction EmergeThread::getBlockOrStartGen(
+ v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata)
{
- v2s16 p2d(p.X, p.Z);
- //envlock: usually takes <=1ms, sometimes 90ms or ~400ms to acquire
- JMutexAutoLock envlock(m_server->m_env_mutex);
-
- // Load sector if it isn't loaded
- if (map->getSectorNoGenerateNoEx(p2d) == NULL)
- map->loadSectorMeta(p2d);
-
- // Attempt to load block
- MapBlock *block = map->getBlockNoCreateNoEx(p);
- if (!block || block->isDummy() || !block->isGenerated()) {
- EMERGE_DBG_OUT("not in memory, attempting to load from disk");
- block = map->loadBlock(p);
- if (block && block->isGenerated())
- map->prepareBlock(block);
+ MutexAutoLock envlock(m_server->m_env_mutex);
+
+ // 1). Attempt to fetch block from memory
+ *block = m_map->getBlockNoCreateNoEx(pos);
+ if (*block && !(*block)->isDummy() && (*block)->isGenerated())
+ return EMERGE_FROM_MEMORY;
+
+ // 2). Attempt to load block from disk
+ *block = m_map->loadBlock(pos);
+ if (*block && (*block)->isGenerated())
+ return EMERGE_FROM_DISK;
+
+ // 3). Attempt to start generation
+ if (allow_gen && m_map->initBlockMake(pos, bmdata))
+ return EMERGE_GENERATED;
+
+ // All attempts failed; cancel this block emerge
+ return EMERGE_CANCELLED;
+}
+
+
+MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata,
+ std::map<v3s16, MapBlock *> *modified_blocks)
+{
+ MutexAutoLock envlock(m_server->m_env_mutex);
+ ScopeProfiler sp(g_profiler,
+ "EmergeThread: after Mapgen::makeChunk", SPT_AVG);
+
+ /*
+ Perform post-processing on blocks (invalidate lighting, queue liquid
+ transforms, etc.) to finish block make
+ */
+ m_map->finishBlockMake(bmdata, modified_blocks);
+
+ MapBlock *block = m_map->getBlockNoCreateNoEx(pos);
+ if (!block) {
+ errorstream << "EmergeThread::finishGen: Couldn't grab block we "
+ "just generated: " << PP(pos) << std::endl;
+ return NULL;
}
- // If could not load and allowed to generate,
- // start generation inside this same envlock
- if (allow_gen && (block == NULL || !block->isGenerated())) {
- EMERGE_DBG_OUT("generating");
- *b = block;
- return map->initBlockMake(data, p);
+ v3s16 minp = bmdata->blockpos_min * MAP_BLOCKSIZE;
+ v3s16 maxp = bmdata->blockpos_max * MAP_BLOCKSIZE +
+ v3s16(1,1,1) * (MAP_BLOCKSIZE - 1);
+
+ // Ignore map edit events, they will not need to be sent
+ // to anybody because the block hasn't been sent to anybody
+ MapEditEventAreaIgnorer ign(
+ &m_server->m_ignore_map_edit_events_area,
+ VoxelArea(minp, maxp));
+
+ /*
+ Run Lua on_generated callbacks
+ */
+ try {
+ m_server->getScriptIface()->environment_OnGenerated(
+ minp, maxp, m_mapgen->blockseed);
+ } catch (LuaError &e) {
+ m_server->setAsyncFatalError("Lua: " + std::string(e.what()));
}
- *b = block;
- return false;
+ EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
+
+ /*
+ Activate the block
+ */
+ m_server->m_env->activateBlock(block, 0);
+
+ return block;
}
-void *EmergeThread::Thread()
+void *EmergeThread::run()
{
- ThreadStarted();
- log_register_thread("EmergeThread" + itos(id));
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
BEGIN_DEBUG_EXCEPTION_HANDLER
- v3s16 last_tried_pos(-32768,-32768,-32768); // For error output
- v3s16 p;
- u8 flags = 0;
-
- map = (ServerMap *)&(m_server->m_env->getMap());
- emerge = m_server->m_emerge;
- mapgen = emerge->mapgen[id];
- enable_mapgen_debug_info = emerge->mapgen_debug_info;
+ v3s16 pos;
- porting::setThreadName("EmergeThread");
+ m_map = (ServerMap *)&(m_server->m_env->getMap());
+ m_emerge = m_server->m_emerge;
+ m_mapgen = m_emerge->m_mapgens[id];
+ enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info;
- while (!StopRequested())
try {
- if (!popBlockEmerge(&p, &flags)) {
- qevent.wait();
+ while (!stopRequested()) {
+ std::map<v3s16, MapBlock *> modified_blocks;
+ BlockEmergeData bedata;
+ BlockMakeData bmdata;
+ EmergeAction action;
+ MapBlock *block;
+
+ if (!popBlockEmerge(&pos, &bedata)) {
+ m_queue_event.wait();
continue;
}
- last_tried_pos = p;
- if (blockpos_over_limit(p))
+ if (blockpos_over_limit(pos))
continue;
- bool allow_generate = flags & BLOCK_EMERGE_ALLOWGEN;
- EMERGE_DBG_OUT("p=" PP(p) " allow_generate=" << allow_generate);
-
- /*
- Try to fetch block from memory or disk.
- If not found and asked to generate, initialize generator.
- */
- BlockMakeData data;
- MapBlock *block = NULL;
- std::map<v3s16, MapBlock *> modified_blocks;
+ bool allow_gen = bedata.flags & BLOCK_EMERGE_ALLOW_GEN;
+ EMERGE_DBG_OUT("pos=" PP(pos) " allow_gen=" << allow_gen);
- if (getBlockOrStartGen(p, &block, &data, allow_generate) && mapgen) {
+ action = getBlockOrStartGen(pos, allow_gen, &block, &bmdata);
+ if (action == EMERGE_GENERATED) {
{
- ScopeProfiler sp(g_profiler, "EmergeThread: Mapgen::makeChunk", SPT_AVG);
+ ScopeProfiler sp(g_profiler,
+ "EmergeThread: Mapgen::makeChunk", SPT_AVG);
TimeTaker t("mapgen::make_block()");
- mapgen->makeChunk(&data);
+ m_mapgen->makeChunk(&bmdata);
if (enable_mapgen_debug_info == false)
t.stop(true); // Hide output
}
- {
- //envlock: usually 0ms, but can take either 30 or 400ms to acquire
- JMutexAutoLock envlock(m_server->m_env_mutex);
- ScopeProfiler sp(g_profiler, "EmergeThread: after "
- "Mapgen::makeChunk (envlock)", SPT_AVG);
-
- map->finishBlockMake(&data, modified_blocks);
-
- block = map->getBlockNoCreateNoEx(p);
- if (block) {
- /*
- Do some post-generate stuff
- */
- v3s16 minp = data.blockpos_min * MAP_BLOCKSIZE;
- v3s16 maxp = data.blockpos_max * MAP_BLOCKSIZE +
- v3s16(1,1,1) * (MAP_BLOCKSIZE - 1);
-
- // Ignore map edit events, they will not need to be sent
- // to anybody because the block hasn't been sent to anybody
- MapEditEventAreaIgnorer
- ign(&m_server->m_ignore_map_edit_events_area,
- VoxelArea(minp, maxp));
- try { // takes about 90ms with -O1 on an e3-1230v2
- m_server->getScriptIface()->environment_OnGenerated(
- minp, maxp, mapgen->blockseed);
- } catch (LuaError &e) {
- m_server->setAsyncFatalError("Lua: " + std::string(e.what()));
- }
-
- EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
-
- m_server->m_env->activateBlock(block, 0);
- }
- }
+ block = finishGen(pos, &bmdata, &modified_blocks);
}
- /*
- Set sent status of modified blocks on clients
- */
- // Add the originally fetched block to the modified list
+ runCompletionCallbacks(pos, action, bedata.callbacks);
+
if (block)
- modified_blocks[p] = block;
+ modified_blocks[pos] = block;
- if (modified_blocks.size() > 0) {
+ if (modified_blocks.size() > 0)
m_server->SetBlocksNotSent(modified_blocks);
- }
}
- catch (VersionMismatchException &e) {
+ } catch (VersionMismatchException &e) {
std::ostringstream err;
- err << "World data version mismatch in MapBlock " << PP(last_tried_pos) << std::endl
+ err << "World data version mismatch in MapBlock " << PP(pos) << std::endl
<< "----" << std::endl
<< "\"" << e.what() << "\"" << std::endl
<< "See debug.txt." << std::endl
<< "World probably saved by a newer version of " PROJECT_NAME_C "."
<< std::endl;
m_server->setAsyncFatalError(err.str());
- }
- catch (SerializationError &e) {
+ } catch (SerializationError &e) {
std::ostringstream err;
- err << "Invalid data in MapBlock " << PP(last_tried_pos) << std::endl
+ err << "Invalid data in MapBlock " << PP(pos) << std::endl
<< "----" << std::endl
<< "\"" << e.what() << "\"" << std::endl
<< "See debug.txt." << std::endl
@@ -537,24 +721,6 @@ void *EmergeThread::Thread()
m_server->setAsyncFatalError(err.str());
}
- {
- JMutexAutoLock queuelock(emerge->queuemutex);
- while (!blockqueue.empty())
- {
- v3s16 p = blockqueue.front();
- blockqueue.pop();
-
- std::map<v3s16, BlockEmergeData *>::iterator iter;
- iter = emerge->blocks_enqueued.find(p);
- if (iter == emerge->blocks_enqueued.end())
- continue; //uh oh, queue and map out of sync!!
-
- BlockEmergeData *bedata = iter->second;
- delete bedata;
- }
- }
-
- END_DEBUG_EXCEPTION_HANDLER(errorstream)
- log_deregister_thread();
+ END_DEBUG_EXCEPTION_HANDLER
return NULL;
}
diff --git a/src/emerge.h b/src/emerge.h
index 1653199ec..825ac1c0f 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -26,13 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen.h" // for MapgenParams
#include "map.h"
-#define BLOCK_EMERGE_ALLOWGEN (1<<0)
+#define BLOCK_EMERGE_ALLOW_GEN (1 << 0)
+#define BLOCK_EMERGE_FORCE_QUEUE (1 << 1)
-#define EMERGE_DBG_OUT(x) \
- do { \
- if (enable_mapgen_debug_info) \
- infostream << "EmergeThread: " x << std::endl; \
- } while (0)
+#define EMERGE_DBG_OUT(x) do { \
+ if (enable_mapgen_debug_info) \
+ infostream << "EmergeThread: " x << std::endl; \
+} while (0)
class EmergeThread;
class INodeDefManager;
@@ -43,6 +43,7 @@ class OreManager;
class DecorationManager;
class SchematicManager;
+// Structure containing inputs/outputs for chunk generation
struct BlockMakeData {
MMVManip *vmanip;
u64 seed;
@@ -61,60 +62,118 @@ struct BlockMakeData {
~BlockMakeData() { delete vmanip; }
};
+// Result from processing an item on the emerge queue
+enum EmergeAction {
+ EMERGE_CANCELLED,
+ EMERGE_ERRORED,
+ EMERGE_FROM_MEMORY,
+ EMERGE_FROM_DISK,
+ EMERGE_GENERATED,
+};
+
+// Callback
+typedef void (*EmergeCompletionCallback)(
+ v3s16 blockpos, EmergeAction action, void *param);
+
+typedef std::vector<
+ std::pair<
+ EmergeCompletionCallback,
+ void *
+ >
+> EmergeCallbackList;
+
struct BlockEmergeData {
u16 peer_requested;
- u8 flags;
+ u16 flags;
+ EmergeCallbackList callbacks;
};
class EmergeManager {
public:
INodeDefManager *ndef;
+ bool enable_mapgen_debug_info;
- std::vector<Mapgen *> mapgen;
- std::vector<EmergeThread *> emergethread;
-
- bool threads_active;
-
- //settings
- MapgenParams params;
- bool mapgen_debug_info;
- u16 qlimit_total;
- u16 qlimit_diskonly;
- u16 qlimit_generate;
-
+ // Generation Notify
u32 gen_notify_on;
std::set<u32> gen_notify_on_deco_ids;
- //// Block emerge queue data structures
- JMutex queuemutex;
- std::map<v3s16, BlockEmergeData *> blocks_enqueued;
- std::map<u16, u16> peer_queue_count;
+ // Map generation parameters
+ MapgenParams params;
- //// Managers of map generation-related components
+ // Managers of various map generation-related components
BiomeManager *biomemgr;
OreManager *oremgr;
DecorationManager *decomgr;
SchematicManager *schemmgr;
- //// Methods
+ // Methods
EmergeManager(IGameDef *gamedef);
~EmergeManager();
void loadMapgenParams();
- static MapgenSpecificParams *createMapgenParams(const std::string &mgname);
void initMapgens();
- Mapgen *getCurrentMapgen();
- Mapgen *createMapgen(const std::string &mgname, int mgid,
- MapgenParams *mgparams);
- static void getMapgenNames(std::list<const char *> &mgnames);
+
void startThreads();
void stopThreads();
- bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate);
+ bool isRunning();
+
+ bool enqueueBlockEmerge(
+ u16 peer_id,
+ v3s16 blockpos,
+ bool allow_generate,
+ bool ignore_queue_limits=false);
+
+ bool enqueueBlockEmergeEx(
+ v3s16 blockpos,
+ u16 peer_id,
+ u16 flags,
+ EmergeCompletionCallback callback,
+ void *callback_param);
- //mapgen helper methods
+ v3s16 getContainingChunk(v3s16 blockpos);
+
+ Mapgen *getCurrentMapgen();
+
+ // Mapgen helpers methods
Biome *getBiomeAtPoint(v3s16 p);
+ int getSpawnLevelAtPoint(v2s16 p);
int getGroundLevelAtPoint(v2s16 p);
bool isBlockUnderground(v3s16 blockpos);
+
+ static MapgenFactory *getMapgenFactory(const std::string &mgname);
+ static void getMapgenNames(
+ std::vector<const char *> *mgnames, bool include_hidden);
+ static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize);
+
+private:
+ std::vector<Mapgen *> m_mapgens;
+ std::vector<EmergeThread *> m_threads;
+ bool m_threads_active;
+
+ Mutex m_queue_mutex;
+ std::map<v3s16, BlockEmergeData> m_blocks_enqueued;
+ std::map<u16, u16> m_peer_queue_count;
+
+ u16 m_qlimit_total;
+ u16 m_qlimit_diskonly;
+ u16 m_qlimit_generate;
+
+ // Requires m_queue_mutex held
+ EmergeThread *getOptimalThread();
+
+ bool pushBlockEmergeData(
+ v3s16 pos,
+ u16 peer_requested,
+ u16 flags,
+ EmergeCompletionCallback callback,
+ void *callback_param,
+ bool *entry_already_exists);
+
+ bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
+
+ friend class EmergeThread;
+
+ DISABLE_CLASS_COPY(EmergeManager);
};
#endif
diff --git a/src/environment.cpp b/src/environment.cpp
index dbbfc6f1f..413bc7ff1 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -44,19 +44,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "map.h"
#include "emerge.h"
#include "util/serialize.h"
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
+#define LBM_NAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_:"
+
+// A number that is much smaller than the timeout for particle spawners should/could ever be
+#define PARTICLE_SPAWNER_NO_EXPIRY -1024.f
+
Environment::Environment():
+ m_time_of_day_speed(0),
m_time_of_day(9000),
m_time_of_day_f(9000./24000),
- m_time_of_day_speed(0),
- m_time_counter(0),
+ m_time_conversion_skew(0.0f),
m_enable_day_night_ratio_override(false),
m_day_night_ratio_override(0.0f)
{
m_cache_enable_shaders = g_settings->getBool("enable_shaders");
+ m_cache_active_block_mgmt_interval = g_settings->getFloat("active_block_mgmt_interval");
+ m_cache_abm_interval = g_settings->getFloat("abm_interval");
+ m_cache_nodetimer_interval = g_settings->getFloat("nodetimer_interval");
}
Environment::~Environment()
@@ -70,7 +78,7 @@ Environment::~Environment()
void Environment::addPlayer(Player *player)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
/*
Check that peer_ids are unique.
Also check that names are unique.
@@ -85,28 +93,11 @@ void Environment::addPlayer(Player *player)
m_players.push_back(player);
}
-void Environment::removePlayer(u16 peer_id)
-{
- DSTACK(__FUNCTION_NAME);
-
- for(std::vector<Player*>::iterator i = m_players.begin();
- i != m_players.end();)
- {
- Player *player = *i;
- if(player->peer_id == peer_id) {
- delete player;
- i = m_players.erase(i);
- } else {
- ++i;
- }
- }
-}
-
-void Environment::removePlayer(const char *name)
+void Environment::removePlayer(Player* player)
{
for (std::vector<Player*>::iterator it = m_players.begin();
it != m_players.end(); ++it) {
- if (strcmp((*it)->getName(), name) == 0) {
+ if ((*it) == player) {
delete *it;
m_players.erase(it);
return;
@@ -197,74 +188,91 @@ std::vector<Player*> Environment::getPlayers(bool ignore_disconnected)
u32 Environment::getDayNightRatio()
{
- if(m_enable_day_night_ratio_override)
+ MutexAutoLock lock(this->m_time_lock);
+ if (m_enable_day_night_ratio_override)
return m_day_night_ratio_override;
- return time_to_daynight_ratio(m_time_of_day_f*24000, m_cache_enable_shaders);
+ return time_to_daynight_ratio(m_time_of_day_f * 24000, m_cache_enable_shaders);
}
void Environment::setTimeOfDaySpeed(float speed)
{
- JMutexAutoLock(this->m_timeofday_lock);
m_time_of_day_speed = speed;
}
float Environment::getTimeOfDaySpeed()
{
- JMutexAutoLock(this->m_timeofday_lock);
- float retval = m_time_of_day_speed;
- return retval;
+ return m_time_of_day_speed;
+}
+
+void Environment::setDayNightRatioOverride(bool enable, u32 value)
+{
+ MutexAutoLock lock(this->m_time_lock);
+ m_enable_day_night_ratio_override = enable;
+ m_day_night_ratio_override = value;
}
void Environment::setTimeOfDay(u32 time)
{
- JMutexAutoLock(this->m_time_lock);
+ MutexAutoLock lock(this->m_time_lock);
+ if (m_time_of_day > time)
+ m_day_count++;
m_time_of_day = time;
m_time_of_day_f = (float)time / 24000.0;
}
u32 Environment::getTimeOfDay()
{
- JMutexAutoLock(this->m_time_lock);
- u32 retval = m_time_of_day;
- return retval;
+ MutexAutoLock lock(this->m_time_lock);
+ return m_time_of_day;
}
float Environment::getTimeOfDayF()
{
- JMutexAutoLock(this->m_time_lock);
- float retval = m_time_of_day_f;
- return retval;
+ MutexAutoLock lock(this->m_time_lock);
+ return m_time_of_day_f;
}
void Environment::stepTimeOfDay(float dtime)
{
- // getTimeOfDaySpeed lock the value we need to prevent MT problems
- float day_speed = getTimeOfDaySpeed();
+ MutexAutoLock lock(this->m_time_lock);
+
+ // Cached in order to prevent the two reads we do to give
+ // different results (can be written by code not under the lock)
+ f32 cached_time_of_day_speed = m_time_of_day_speed;
- m_time_counter += dtime;
- f32 speed = day_speed * 24000./(24.*3600);
- u32 units = (u32)(m_time_counter*speed);
+ f32 speed = cached_time_of_day_speed * 24000. / (24. * 3600);
+ m_time_conversion_skew += dtime;
+ u32 units = (u32)(m_time_conversion_skew * speed);
bool sync_f = false;
- if(units > 0){
+ if (units > 0) {
// Sync at overflow
- if(m_time_of_day + units >= 24000)
+ if (m_time_of_day + units >= 24000) {
sync_f = true;
+ m_day_count++;
+ }
m_time_of_day = (m_time_of_day + units) % 24000;
- if(sync_f)
+ if (sync_f)
m_time_of_day_f = (float)m_time_of_day / 24000.0;
}
if (speed > 0) {
- m_time_counter -= (f32)units / speed;
+ m_time_conversion_skew -= (f32)units / speed;
}
- if(!sync_f){
- m_time_of_day_f += day_speed/24/3600*dtime;
- if(m_time_of_day_f > 1.0)
+ if (!sync_f) {
+ m_time_of_day_f += cached_time_of_day_speed / 24 / 3600 * dtime;
+ if (m_time_of_day_f > 1.0)
m_time_of_day_f -= 1.0;
- if(m_time_of_day_f < 0.0)
+ if (m_time_of_day_f < 0.0)
m_time_of_day_f += 1.0;
}
}
+u32 Environment::getDayCount()
+{
+ // Atomic<u32> counter
+ return m_day_count;
+}
+
+
/*
ABMWithState
*/
@@ -282,6 +290,223 @@ ABMWithState::ABMWithState(ActiveBlockModifier *abm_):
}
/*
+ LBMManager
+*/
+
+void LBMContentMapping::deleteContents()
+{
+ for (std::vector<LoadingBlockModifierDef *>::iterator it = lbm_list.begin();
+ it != lbm_list.end(); ++it) {
+ delete *it;
+ }
+}
+
+void LBMContentMapping::addLBM(LoadingBlockModifierDef *lbm_def, IGameDef *gamedef)
+{
+ // Add the lbm_def to the LBMContentMapping.
+ // Unknown names get added to the global NameIdMapping.
+ INodeDefManager *nodedef = gamedef->ndef();
+
+ lbm_list.push_back(lbm_def);
+
+ for (std::set<std::string>::const_iterator it = lbm_def->trigger_contents.begin();
+ it != lbm_def->trigger_contents.end(); ++it) {
+ std::set<content_t> c_ids;
+ bool found = nodedef->getIds(*it, c_ids);
+ if (!found) {
+ content_t c_id = gamedef->allocateUnknownNodeId(*it);
+ if (c_id == CONTENT_IGNORE) {
+ // Seems it can't be allocated.
+ warningstream << "Could not internalize node name \"" << *it
+ << "\" while loading LBM \"" << lbm_def->name << "\"." << std::endl;
+ continue;
+ }
+ c_ids.insert(c_id);
+ }
+
+ for (std::set<content_t>::const_iterator iit =
+ c_ids.begin(); iit != c_ids.end(); ++iit) {
+ content_t c_id = *iit;
+ map[c_id].push_back(lbm_def);
+ }
+ }
+}
+
+const std::vector<LoadingBlockModifierDef *> *
+ LBMContentMapping::lookup(content_t c) const
+{
+ container_map::const_iterator it = map.find(c);
+ if (it == map.end())
+ return NULL;
+ // This first dereferences the iterator, returning
+ // a std::vector<LoadingBlockModifierDef *>
+ // reference, then we convert it to a pointer.
+ return &(it->second);
+}
+
+LBMManager::~LBMManager()
+{
+ for (std::map<std::string, LoadingBlockModifierDef *>::iterator it =
+ m_lbm_defs.begin(); it != m_lbm_defs.end(); ++it) {
+ delete it->second;
+ }
+ for (lbm_lookup_map::iterator it = m_lbm_lookup.begin();
+ it != m_lbm_lookup.end(); ++it) {
+ (it->second).deleteContents();
+ }
+}
+
+void LBMManager::addLBMDef(LoadingBlockModifierDef *lbm_def)
+{
+ // Precondition, in query mode the map isn't used anymore
+ FATAL_ERROR_IF(m_query_mode == true,
+ "attempted to modify LBMManager in query mode");
+
+ if (!string_allowed(lbm_def->name, LBM_NAME_ALLOWED_CHARS)) {
+ throw ModError("Error adding LBM \"" + lbm_def->name +
+ "\": Does not follow naming conventions: "
+ "Only chararacters [a-z0-9_:] are allowed.");
+ }
+
+ m_lbm_defs[lbm_def->name] = lbm_def;
+}
+
+void LBMManager::loadIntroductionTimes(const std::string &times,
+ IGameDef *gamedef, u32 now)
+{
+ m_query_mode = true;
+
+ // name -> time map.
+ // Storing it in a map first instead of
+ // handling the stuff directly in the loop
+ // removes all duplicate entries.
+ // TODO make this std::unordered_map
+ std::map<std::string, u32> introduction_times;
+
+ /*
+ The introduction times string consists of name~time entries,
+ with each entry terminated by a semicolon. The time is decimal.
+ */
+
+ size_t idx = 0;
+ size_t idx_new;
+ while ((idx_new = times.find(";", idx)) != std::string::npos) {
+ std::string entry = times.substr(idx, idx_new - idx);
+ std::vector<std::string> components = str_split(entry, '~');
+ if (components.size() != 2)
+ throw SerializationError("Introduction times entry \""
+ + entry + "\" requires exactly one '~'!");
+ const std::string &name = components[0];
+ u32 time = from_string<u32>(components[1]);
+ introduction_times[name] = time;
+ idx = idx_new + 1;
+ }
+
+ // Put stuff from introduction_times into m_lbm_lookup
+ for (std::map<std::string, u32>::const_iterator it = introduction_times.begin();
+ it != introduction_times.end(); ++it) {
+ const std::string &name = it->first;
+ u32 time = it->second;
+
+ std::map<std::string, LoadingBlockModifierDef *>::iterator def_it =
+ m_lbm_defs.find(name);
+ if (def_it == m_lbm_defs.end()) {
+ // This seems to be an LBM entry for
+ // an LBM we haven't loaded. Discard it.
+ continue;
+ }
+ LoadingBlockModifierDef *lbm_def = def_it->second;
+ if (lbm_def->run_at_every_load) {
+ // This seems to be an LBM entry for
+ // an LBM that runs at every load.
+ // Don't add it just yet.
+ continue;
+ }
+
+ m_lbm_lookup[time].addLBM(lbm_def, gamedef);
+
+ // Erase the entry so that we know later
+ // what elements didn't get put into m_lbm_lookup
+ m_lbm_defs.erase(name);
+ }
+
+ // Now also add the elements from m_lbm_defs to m_lbm_lookup
+ // that weren't added in the previous step.
+ // They are introduced first time to this world,
+ // or are run at every load (introducement time hardcoded to U32_MAX).
+
+ LBMContentMapping &lbms_we_introduce_now = m_lbm_lookup[now];
+ LBMContentMapping &lbms_running_always = m_lbm_lookup[U32_MAX];
+
+ for (std::map<std::string, LoadingBlockModifierDef *>::iterator it =
+ m_lbm_defs.begin(); it != m_lbm_defs.end(); ++it) {
+ if (it->second->run_at_every_load) {
+ lbms_running_always.addLBM(it->second, gamedef);
+ } else {
+ lbms_we_introduce_now.addLBM(it->second, gamedef);
+ }
+ }
+
+ // Clear the list, so that we don't delete remaining elements
+ // twice in the destructor
+ m_lbm_defs.clear();
+}
+
+std::string LBMManager::createIntroductionTimesString()
+{
+ // Precondition, we must be in query mode
+ FATAL_ERROR_IF(m_query_mode == false,
+ "attempted to query on non fully set up LBMManager");
+
+ std::ostringstream oss;
+ for (lbm_lookup_map::iterator it = m_lbm_lookup.begin();
+ it != m_lbm_lookup.end(); ++it) {
+ u32 time = it->first;
+ std::vector<LoadingBlockModifierDef *> &lbm_list = it->second.lbm_list;
+ for (std::vector<LoadingBlockModifierDef *>::iterator iit = lbm_list.begin();
+ iit != lbm_list.end(); ++iit) {
+ // Don't add if the LBM runs at every load,
+ // then introducement time is hardcoded
+ // and doesn't need to be stored
+ if ((*iit)->run_at_every_load)
+ continue;
+ oss << (*iit)->name << "~" << time << ";";
+ }
+ }
+ return oss.str();
+}
+
+void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp)
+{
+ // Precondition, we need m_lbm_lookup to be initialized
+ FATAL_ERROR_IF(m_query_mode == false,
+ "attempted to query on non fully set up LBMManager");
+ v3s16 pos_of_block = block->getPosRelative();
+ v3s16 pos;
+ MapNode n;
+ content_t c;
+ lbm_lookup_map::const_iterator it = getLBMsIntroducedAfter(stamp);
+ for (pos.X = 0; pos.X < MAP_BLOCKSIZE; pos.X++)
+ for (pos.Y = 0; pos.Y < MAP_BLOCKSIZE; pos.Y++)
+ for (pos.Z = 0; pos.Z < MAP_BLOCKSIZE; pos.Z++)
+ {
+ n = block->getNodeNoEx(pos);
+ c = n.getContent();
+ for (LBMManager::lbm_lookup_map::const_iterator iit = it;
+ iit != m_lbm_lookup.end(); ++iit) {
+ const std::vector<LoadingBlockModifierDef *> *lbm_list =
+ iit->second.lookup(c);
+ if (!lbm_list)
+ continue;
+ for (std::vector<LoadingBlockModifierDef *>::const_iterator iit =
+ lbm_list->begin(); iit != lbm_list->end(); ++iit) {
+ (*iit)->trigger(env, pos + pos_of_block, n);
+ }
+ }
+ }
+}
+
+/*
ActiveBlockList
*/
@@ -365,6 +590,7 @@ ServerEnvironment::ServerEnvironment(ServerMap *map,
m_active_block_interval_overload_skip(0),
m_game_time(0),
m_game_time_fraction_counter(0),
+ m_last_clear_objects_time(0),
m_recommended_send_interval(0.1),
m_max_lag_estimate(0.1)
{
@@ -453,15 +679,12 @@ void ServerEnvironment::saveLoadedPlayers()
}
}
-void ServerEnvironment::savePlayer(const std::string &playername)
+void ServerEnvironment::savePlayer(RemotePlayer *player)
{
std::string players_path = m_path_world + DIR_DELIM "players";
fs::CreateDir(players_path);
- RemotePlayer *player = static_cast<RemotePlayer*>(getPlayer(playername.c_str()));
- if (player) {
- player->save(players_path);
- }
+ player->save(players_path);
}
Player *ServerEnvironment::loadPlayer(const std::string &playername)
@@ -517,6 +740,11 @@ void ServerEnvironment::saveMeta()
Settings args;
args.setU64("game_time", m_game_time);
args.setU64("time_of_day", getTimeOfDay());
+ args.setU64("last_clear_objects_time", m_last_clear_objects_time);
+ args.setU64("lbm_introduction_times_version", 1);
+ args.set("lbm_introduction_times",
+ m_lbm_mgr.createIntroductionTimesString());
+ args.setU64("day_count", m_day_count);
args.writeLines(ss);
ss<<"EnvArgsEnd\n";
@@ -554,12 +782,35 @@ void ServerEnvironment::loadMeta()
throw SerializationError("Couldn't load env meta game_time");
}
+ setTimeOfDay(args.exists("time_of_day") ?
+ // set day to morning by default
+ args.getU64("time_of_day") : 9000);
+
+ m_last_clear_objects_time = args.exists("last_clear_objects_time") ?
+ // If missing, do as if clearObjects was never called
+ args.getU64("last_clear_objects_time") : 0;
+
+ std::string lbm_introduction_times = "";
try {
- m_time_of_day = args.getU64("time_of_day");
+ u64 ver = args.getU64("lbm_introduction_times_version");
+ if (ver == 1) {
+ lbm_introduction_times = args.get("lbm_introduction_times");
+ } else {
+ infostream << "ServerEnvironment::loadMeta(): Non-supported"
+ << " introduction time version " << ver << std::endl;
+ }
} catch (SettingNotFoundException &e) {
- // This is not as important
- m_time_of_day = 9000;
+ // No problem, this is expected. Just continue with an empty string
}
+ m_lbm_mgr.loadIntroductionTimes(lbm_introduction_times, m_gamedef, m_game_time);
+
+ m_day_count = args.exists("day_count") ?
+ args.getU64("day_count") : 0;
+}
+
+void ServerEnvironment::loadDefaultMeta()
+{
+ m_lbm_mgr.loadIntroductionTimes("", m_gamedef, m_game_time);
}
struct ActiveABM
@@ -597,35 +848,39 @@ public:
i->timer -= trigger_interval;
actual_interval = trigger_interval;
}
- float intervals = actual_interval / trigger_interval;
- if(intervals == 0)
- continue;
float chance = abm->getTriggerChance();
if(chance == 0)
chance = 1;
ActiveABM aabm;
aabm.abm = abm;
- aabm.chance = chance / intervals;
- if(aabm.chance == 0)
- aabm.chance = 1;
+ if(abm->getSimpleCatchUp()) {
+ float intervals = actual_interval / trigger_interval;
+ if(intervals == 0)
+ continue;
+ aabm.chance = chance / intervals;
+ if(aabm.chance == 0)
+ aabm.chance = 1;
+ } else {
+ aabm.chance = chance;
+ }
// Trigger neighbors
std::set<std::string> required_neighbors_s
= abm->getRequiredNeighbors();
for(std::set<std::string>::iterator
i = required_neighbors_s.begin();
- i != required_neighbors_s.end(); i++)
+ i != required_neighbors_s.end(); ++i)
{
ndef->getIds(*i, aabm.required_neighbors);
}
// Trigger contents
std::set<std::string> contents_s = abm->getTriggerContents();
for(std::set<std::string>::iterator
- i = contents_s.begin(); i != contents_s.end(); i++)
+ i = contents_s.begin(); i != contents_s.end(); ++i)
{
std::set<content_t> ids;
ndef->getIds(*i, ids);
for(std::set<content_t>::const_iterator k = ids.begin();
- k != ids.end(); k++)
+ k != ids.end(); ++k)
{
content_t c = *k;
std::map<content_t, std::vector<ActiveABM> >::iterator j;
@@ -694,7 +949,7 @@ public:
continue;
for(std::vector<ActiveABM>::iterator
- i = j->second.begin(); i != j->second.end(); i++) {
+ i = j->second.begin(); i != j->second.end(); ++i) {
if(myrand() % i->chance != 0)
continue;
@@ -749,13 +1004,19 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
// Get time difference
u32 dtime_s = 0;
u32 stamp = block->getTimestamp();
- if(m_game_time > stamp && stamp != BLOCK_TIMESTAMP_UNDEFINED)
- dtime_s = m_game_time - block->getTimestamp();
+ if (m_game_time > stamp && stamp != BLOCK_TIMESTAMP_UNDEFINED)
+ dtime_s = m_game_time - stamp;
dtime_s += additional_dtime;
/*infostream<<"ServerEnvironment::activateBlock(): block timestamp: "
<<stamp<<", game time: "<<m_game_time<<std::endl;*/
+ // Remove stored static objects if clearObjects was called since block's timestamp
+ if (stamp == BLOCK_TIMESTAMP_UNDEFINED || stamp < m_last_clear_objects_time) {
+ block->m_static_objects.m_stored.clear();
+ // do not set changed flag to avoid unnecessary mapblock writes
+ }
+
// Set current time as timestamp
block->setTimestampNoChangedFlag(m_game_time);
@@ -765,6 +1026,9 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
// Activate stored objects
activateObjects(block, dtime_s);
+ /* Handle LoadingBlockModifiers */
+ m_lbm_mgr.applyLBMs(this, block, stamp);
+
// Run node timers
std::map<v3s16, NodeTimer> elapsed_timers =
block->m_node_timers.step((float)dtime_s);
@@ -772,7 +1036,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
MapNode n;
for(std::map<v3s16, NodeTimer>::iterator
i = elapsed_timers.begin();
- i != elapsed_timers.end(); i++){
+ i != elapsed_timers.end(); ++i){
n = block->getNodeNoEx(i->first);
v3s16 p = i->first + block->getPosRelative();
if(m_script->node_on_timer(p,n,i->second.elapsed))
@@ -790,6 +1054,11 @@ void ServerEnvironment::addActiveBlockModifier(ActiveBlockModifier *abm)
m_abms.push_back(ABMWithState(abm));
}
+void ServerEnvironment::addLoadingBlockModifierDef(LoadingBlockModifierDef *lbm)
+{
+ m_lbm_mgr.addLBMDef(lbm);
+}
+
bool ServerEnvironment::setNode(v3s16 p, const MapNode &n)
{
INodeDefManager *ndef = m_gamedef->ndef();
@@ -868,22 +1137,22 @@ void ServerEnvironment::getObjectsInsideRadius(std::vector<u16> &objects, v3f po
}
}
-void ServerEnvironment::clearAllObjects()
+void ServerEnvironment::clearObjects(ClearObjectsMode mode)
{
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Removing all active objects"<<std::endl;
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Removing all active objects" << std::endl;
std::vector<u16> objects_to_remove;
- for(std::map<u16, ServerActiveObject*>::iterator
+ for (std::map<u16, ServerActiveObject*>::iterator
i = m_active_objects.begin();
i != m_active_objects.end(); ++i) {
ServerActiveObject* obj = i->second;
- if(obj->getType() == ACTIVEOBJECT_TYPE_PLAYER)
+ if (obj->getType() == ACTIVEOBJECT_TYPE_PLAYER)
continue;
u16 id = i->first;
// Delete static object if block is loaded
- if(obj->m_static_exists){
+ if (obj->m_static_exists) {
MapBlock *block = m_map->getBlockNoCreateNoEx(obj->m_static_block);
- if(block){
+ if (block) {
block->m_static_objects.remove(id);
block->raiseModified(MOD_STATE_WRITE_NEEDED,
MOD_REASON_CLEAR_ALL_OBJECTS);
@@ -891,7 +1160,7 @@ void ServerEnvironment::clearAllObjects()
}
}
// If known by some client, don't delete immediately
- if(obj->m_known_by_count > 0){
+ if (obj->m_known_by_count > 0) {
obj->m_pending_deactivation = true;
obj->m_removed = true;
continue;
@@ -903,39 +1172,46 @@ void ServerEnvironment::clearAllObjects()
m_script->removeObjectReference(obj);
// Delete active object
- if(obj->environmentDeletes())
+ if (obj->environmentDeletes())
delete obj;
// Id to be removed from m_active_objects
objects_to_remove.push_back(id);
}
// Remove references from m_active_objects
- for(std::vector<u16>::iterator i = objects_to_remove.begin();
+ for (std::vector<u16>::iterator i = objects_to_remove.begin();
i != objects_to_remove.end(); ++i) {
m_active_objects.erase(*i);
}
// Get list of loaded blocks
std::vector<v3s16> loaded_blocks;
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Listing all loaded blocks"<<std::endl;
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Listing all loaded blocks" << std::endl;
m_map->listAllLoadedBlocks(loaded_blocks);
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Done listing all loaded blocks: "
- <<loaded_blocks.size()<<std::endl;
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Done listing all loaded blocks: "
+ << loaded_blocks.size()<<std::endl;
// Get list of loadable blocks
std::vector<v3s16> loadable_blocks;
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Listing all loadable blocks"<<std::endl;
- m_map->listAllLoadableBlocks(loadable_blocks);
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Done listing all loadable blocks: "
- <<loadable_blocks.size()
- <<", now clearing"<<std::endl;
+ if (mode == CLEAR_OBJECTS_MODE_FULL) {
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Listing all loadable blocks" << std::endl;
+ m_map->listAllLoadableBlocks(loadable_blocks);
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Done listing all loadable blocks: "
+ << loadable_blocks.size() << std::endl;
+ } else {
+ loadable_blocks = loaded_blocks;
+ }
+
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Now clearing objects in " << loadable_blocks.size()
+ << " blocks" << std::endl;
// Grab a reference on each loaded block to avoid unloading it
- for(std::vector<v3s16>::iterator i = loaded_blocks.begin();
+ for (std::vector<v3s16>::iterator i = loaded_blocks.begin();
i != loaded_blocks.end(); ++i) {
v3s16 p = *i;
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
@@ -944,24 +1220,27 @@ void ServerEnvironment::clearAllObjects()
}
// Remove objects in all loadable blocks
- u32 unload_interval = g_settings->getS32("max_clearobjects_extra_loaded_blocks");
- unload_interval = MYMAX(unload_interval, 1);
+ u32 unload_interval = U32_MAX;
+ if (mode == CLEAR_OBJECTS_MODE_FULL) {
+ unload_interval = g_settings->getS32("max_clearobjects_extra_loaded_blocks");
+ unload_interval = MYMAX(unload_interval, 1);
+ }
u32 report_interval = loadable_blocks.size() / 10;
u32 num_blocks_checked = 0;
u32 num_blocks_cleared = 0;
u32 num_objs_cleared = 0;
- for(std::vector<v3s16>::iterator i = loadable_blocks.begin();
+ for (std::vector<v3s16>::iterator i = loadable_blocks.begin();
i != loadable_blocks.end(); ++i) {
v3s16 p = *i;
MapBlock *block = m_map->emergeBlock(p, false);
- if(!block){
- errorstream<<"ServerEnvironment::clearAllObjects(): "
- <<"Failed to emerge block "<<PP(p)<<std::endl;
+ if (!block) {
+ errorstream << "ServerEnvironment::clearObjects(): "
+ << "Failed to emerge block " << PP(p) << std::endl;
continue;
}
u32 num_stored = block->m_static_objects.m_stored.size();
u32 num_active = block->m_static_objects.m_active.size();
- if(num_stored != 0 || num_active != 0){
+ if (num_stored != 0 || num_active != 0) {
block->m_static_objects.m_stored.clear();
block->m_static_objects.m_active.clear();
block->raiseModified(MOD_STATE_WRITE_NEEDED,
@@ -971,23 +1250,23 @@ void ServerEnvironment::clearAllObjects()
}
num_blocks_checked++;
- if(report_interval != 0 &&
- num_blocks_checked % report_interval == 0){
+ if (report_interval != 0 &&
+ num_blocks_checked % report_interval == 0) {
float percent = 100.0 * (float)num_blocks_checked /
- loadable_blocks.size();
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Cleared "<<num_objs_cleared<<" objects"
- <<" in "<<num_blocks_cleared<<" blocks ("
- <<percent<<"%)"<<std::endl;
+ loadable_blocks.size();
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Cleared " << num_objs_cleared << " objects"
+ << " in " << num_blocks_cleared << " blocks ("
+ << percent << "%)" << std::endl;
}
- if(num_blocks_checked % unload_interval == 0){
+ if (num_blocks_checked % unload_interval == 0) {
m_map->unloadUnreferencedBlocks();
}
}
m_map->unloadUnreferencedBlocks();
// Drop references that were added above
- for(std::vector<v3s16>::iterator i = loaded_blocks.begin();
+ for (std::vector<v3s16>::iterator i = loaded_blocks.begin();
i != loaded_blocks.end(); ++i) {
v3s16 p = *i;
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
@@ -995,14 +1274,16 @@ void ServerEnvironment::clearAllObjects()
block->refDrop();
}
- infostream<<"ServerEnvironment::clearAllObjects(): "
- <<"Finished: Cleared "<<num_objs_cleared<<" objects"
- <<" in "<<num_blocks_cleared<<" blocks"<<std::endl;
+ m_last_clear_objects_time = m_game_time;
+
+ infostream << "ServerEnvironment::clearObjects(): "
+ << "Finished: Cleared " << num_objs_cleared << " objects"
+ << " in " << num_blocks_cleared << " blocks" << std::endl;
}
void ServerEnvironment::step(float dtime)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
//TimeTaker timer("ServerEnv step");
@@ -1012,7 +1293,8 @@ void ServerEnvironment::step(float dtime)
// Update this one
// NOTE: This is kind of funny on a singleplayer game, but doesn't
// really matter that much.
- m_recommended_send_interval = g_settings->getFloat("dedicated_server_step");
+ static const float server_step = g_settings->getFloat("dedicated_server_step");
+ m_recommended_send_interval = server_step;
/*
Increment game time
@@ -1046,9 +1328,8 @@ void ServerEnvironment::step(float dtime)
/*
Manage active block list
*/
- if(m_active_blocks_management_interval.step(dtime, 2.0))
- {
- ScopeProfiler sp(g_profiler, "SEnv: manage act. block list avg /2s", SPT_AVG);
+ if (m_active_blocks_management_interval.step(dtime, m_cache_active_block_mgmt_interval)) {
+ ScopeProfiler sp(g_profiler, "SEnv: manage act. block list avg per interval", SPT_AVG);
/*
Get player block positions
*/
@@ -1069,7 +1350,7 @@ void ServerEnvironment::step(float dtime)
/*
Update list of active blocks, collecting changes
*/
- const s16 active_block_range = g_settings->getS16("active_block_range");
+ static const s16 active_block_range = g_settings->getS16("active_block_range");
std::set<v3s16> blocks_removed;
std::set<v3s16> blocks_added;
m_active_blocks.update(players_blockpos, active_block_range,
@@ -1084,8 +1365,7 @@ void ServerEnvironment::step(float dtime)
for(std::set<v3s16>::iterator
i = blocks_removed.begin();
- i != blocks_removed.end(); ++i)
- {
+ i != blocks_removed.end(); ++i) {
v3s16 p = *i;
/* infostream<<"Server: Block " << PP(p)
@@ -1124,11 +1404,10 @@ void ServerEnvironment::step(float dtime)
/*
Mess around in active blocks
*/
- if(m_active_blocks_nodemetadata_interval.step(dtime, 1.0))
- {
- ScopeProfiler sp(g_profiler, "SEnv: mess in act. blocks avg /1s", SPT_AVG);
+ if (m_active_blocks_nodemetadata_interval.step(dtime, m_cache_nodetimer_interval)) {
+ ScopeProfiler sp(g_profiler, "SEnv: mess in act. blocks avg per interval", SPT_AVG);
- float dtime = 1.0;
+ float dtime = m_cache_nodetimer_interval;
for(std::set<v3s16>::iterator
i = m_active_blocks.m_list.begin();
@@ -1161,7 +1440,7 @@ void ServerEnvironment::step(float dtime)
MapNode n;
for(std::map<v3s16, NodeTimer>::iterator
i = elapsed_timers.begin();
- i != elapsed_timers.end(); i++){
+ i != elapsed_timers.end(); ++i){
n = block->getNodeNoEx(i->first);
p = i->first + block->getPosRelative();
if(m_script->node_on_timer(p,n,i->second.elapsed))
@@ -1171,19 +1450,18 @@ void ServerEnvironment::step(float dtime)
}
}
- const float abm_interval = 1.0;
- if(m_active_block_modifier_interval.step(dtime, abm_interval))
+ if (m_active_block_modifier_interval.step(dtime, m_cache_abm_interval))
do{ // breakable
if(m_active_block_interval_overload_skip > 0){
ScopeProfiler sp(g_profiler, "SEnv: ABM overload skips");
m_active_block_interval_overload_skip--;
break;
}
- ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg /1s", SPT_AVG);
- TimeTaker timer("modify in active blocks");
+ ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg per interval", SPT_AVG);
+ TimeTaker timer("modify in active blocks per interval");
// Initialize handling of ActiveBlockModifiers
- ABMHandler abmhandler(m_abms, abm_interval, this, true);
+ ABMHandler abmhandler(m_abms, m_cache_abm_interval, this, true);
for(std::set<v3s16>::iterator
i = m_active_blocks.m_list.begin();
@@ -1208,7 +1486,7 @@ void ServerEnvironment::step(float dtime)
u32 time_ms = timer.stop(true);
u32 max_time_ms = 200;
if(time_ms > max_time_ms){
- infostream<<"WARNING: active block modifiers took "
+ warningstream<<"active block modifiers took "
<<time_ms<<"ms (longer than "
<<max_time_ms<<"ms)"<<std::endl;
m_active_block_interval_overload_skip = (time_ms / max_time_ms) + 1;
@@ -1269,6 +1547,49 @@ void ServerEnvironment::step(float dtime)
*/
removeRemovedObjects();
}
+
+ /*
+ Manage particle spawner expiration
+ */
+ if (m_particle_management_interval.step(dtime, 1.0)) {
+ for (std::map<u32, float>::iterator i = m_particle_spawners.begin();
+ i != m_particle_spawners.end(); ) {
+ //non expiring spawners
+ if (i->second == PARTICLE_SPAWNER_NO_EXPIRY) {
+ ++i;
+ continue;
+ }
+
+ i->second -= 1.0f;
+ if (i->second <= 0.f)
+ m_particle_spawners.erase(i++);
+ else
+ ++i;
+ }
+ }
+}
+
+u32 ServerEnvironment::addParticleSpawner(float exptime)
+{
+ // Timers with lifetime 0 do not expire
+ float time = exptime > 0.f ? exptime : PARTICLE_SPAWNER_NO_EXPIRY;
+
+ u32 id = 0;
+ for (;;) { // look for unused particlespawner id
+ id++;
+ std::map<u32, float>::iterator f;
+ f = m_particle_spawners.find(id);
+ if (f == m_particle_spawners.end()) {
+ m_particle_spawners[id] = time;
+ break;
+ }
+ }
+ return id;
+}
+
+void ServerEnvironment::deleteParticleSpawner(u32 id)
+{
+ m_particle_spawners.erase(id);
}
ServerActiveObject* ServerEnvironment::getActiveObject(u16 id)
@@ -1318,12 +1639,11 @@ u16 ServerEnvironment::addActiveObject(ServerActiveObject *object)
Finds out what new objects have been added to
inside a radius around a position
*/
-void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius,
+void ServerEnvironment::getAddedActiveObjects(Player *player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
- std::set<u16> &added_objects)
+ std::queue<u16> &added_objects)
{
- v3f pos_f = intToFloat(pos, BS);
f32 radius_f = radius * BS;
f32 player_radius_f = player_radius * BS;
@@ -1339,18 +1659,19 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius,
*/
for(std::map<u16, ServerActiveObject*>::iterator
i = m_active_objects.begin();
- i != m_active_objects.end(); ++i)
- {
+ i != m_active_objects.end(); ++i) {
u16 id = i->first;
+
// Get object
ServerActiveObject *object = i->second;
if(object == NULL)
continue;
+
// Discard if removed or deactivating
if(object->m_removed || object->m_pending_deactivation)
continue;
- f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f);
+ f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition());
if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
// Discard if too far
if (distance_f > player_radius_f && player_radius_f != 0)
@@ -1364,7 +1685,7 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius,
if(n != current_objects.end())
continue;
// Add to added_objects
- added_objects.insert(id);
+ added_objects.push(id);
}
}
@@ -1372,12 +1693,11 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius,
Finds out what objects have been removed from
inside a radius around a position
*/
-void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius,
+void ServerEnvironment::getRemovedActiveObjects(Player *player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
- std::set<u16> &removed_objects)
+ std::queue<u16> &removed_objects)
{
- v3f pos_f = intToFloat(pos, BS);
f32 radius_f = radius * BS;
f32 player_radius_f = player_radius * BS;
@@ -1399,20 +1719,19 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius,
u16 id = *i;
ServerActiveObject *object = getActiveObject(id);
- if(object == NULL){
- infostream<<"ServerEnvironment::getRemovedActiveObjects():"
- <<" object in current_objects is NULL"<<std::endl;
- removed_objects.insert(id);
+ if (object == NULL) {
+ infostream << "ServerEnvironment::getRemovedActiveObjects():"
+ << " object in current_objects is NULL" << std::endl;
+ removed_objects.push(id);
continue;
}
- if(object->m_removed || object->m_pending_deactivation)
- {
- removed_objects.insert(id);
+ if (object->m_removed || object->m_pending_deactivation) {
+ removed_objects.push(id);
continue;
}
- f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f);
+ f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition());
if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
if (distance_f <= player_radius_f || player_radius_f == 0)
continue;
@@ -1420,7 +1739,7 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius,
continue;
// Object is no longer visible
- removed_objects.insert(id);
+ removed_objects.push(id);
}
}
@@ -1493,6 +1812,17 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
delete object;
return 0;
}
+
+ if (objectpos_over_limit(object->getBasePosition())) {
+ v3f p = object->getBasePosition();
+ errorstream << "ServerEnvironment::addActiveObjectRaw(): "
+ << "object position (" << p.X << "," << p.Y << "," << p.Z
+ << ") outside maximum range" << std::endl;
+ if (object->environmentDeletes())
+ delete object;
+ return 0;
+ }
+
/*infostream<<"ServerEnvironment::addActiveObjectRaw(): "
<<"added (id="<<object->getId()<<")"<<std::endl;*/
@@ -1921,7 +2251,7 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
// reason. Unsuccessful attempts have been made to find
// said reason.
if(id && block->m_static_objects.m_active.find(id) != block->m_static_objects.m_active.end()){
- infostream<<"ServerEnv: WARNING: Performing hack #83274"
+ warningstream<<"ServerEnv: Performing hack #83274"
<<std::endl;
block->m_static_objects.remove(id);
}
@@ -2039,7 +2369,7 @@ ClientMap & ClientEnvironment::getClientMap()
void ClientEnvironment::addPlayer(Player *player)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
/*
It is a failure if player is local and there already is a local
player
@@ -2063,7 +2393,7 @@ LocalPlayer * ClientEnvironment::getLocalPlayer()
void ClientEnvironment::step(float dtime)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
/* Step time of day */
stepTimeOfDay(dtime);
@@ -2562,7 +2892,7 @@ void ClientEnvironment::damageLocalPlayer(u8 damage, bool handle_hp)
event.type = CEE_PLAYER_DAMAGE;
event.player_damage.amount = damage;
event.player_damage.send_to_server = handle_hp;
- m_client_event_queue.push_back(event);
+ m_client_event_queue.push(event);
}
void ClientEnvironment::updateLocalPlayerBreath(u16 breath)
@@ -2570,7 +2900,7 @@ void ClientEnvironment::updateLocalPlayerBreath(u16 breath)
ClientEnvEvent event;
event.type = CEE_PLAYER_BREATH;
event.player_breath.amount = breath;
- m_client_event_queue.push_back(event);
+ m_client_event_queue.push(event);
}
/*
@@ -2604,11 +2934,9 @@ ClientEnvEvent ClientEnvironment::getClientEvent()
event.type = CEE_NONE;
else {
event = m_client_event_queue.front();
- m_client_event_queue.pop_front();
+ m_client_event_queue.pop();
}
return event;
}
#endif // #ifndef SERVER
-
-
diff --git a/src/environment.h b/src/environment.h
index c70694316..c6786faed 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -39,7 +39,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include "mapnode.h"
#include "mapblock.h"
-#include "jthread/jmutex.h"
+#include "threading/mutex.h"
+#include "threading/atomic.h"
#include "network/networkprotocol.h" // for AccessDeniedCode
class ServerEnvironment;
@@ -52,6 +53,7 @@ class ServerMap;
class ClientMap;
class GameScripting;
class Player;
+class RemotePlayer;
class Environment
{
@@ -71,8 +73,7 @@ public:
virtual Map & getMap() = 0;
virtual void addPlayer(Player *player);
- void removePlayer(u16 peer_id);
- void removePlayer(const char *name);
+ void removePlayer(Player *player);
Player * getPlayer(u16 peer_id);
Player * getPlayer(const char *name);
Player * getRandomConnectedPlayer();
@@ -92,11 +93,9 @@ public:
void setTimeOfDaySpeed(float speed);
float getTimeOfDaySpeed();
- void setDayNightRatioOverride(bool enable, u32 value)
- {
- m_enable_day_night_ratio_override = enable;
- m_day_night_ratio_override = value;
- }
+ void setDayNightRatioOverride(bool enable, u32 value);
+
+ u32 getDayCount();
// counter used internally when triggering ABMs
u32 m_added_objects;
@@ -104,16 +103,28 @@ public:
protected:
// peer_ids in here should be unique, except that there may be many 0s
std::vector<Player*> m_players;
+
+ GenericAtomic<float> m_time_of_day_speed;
+
+ /*
+ * Below: values managed by m_time_lock
+ */
// Time of day in milli-hours (0-23999); determines day and night
u32 m_time_of_day;
// Time of day in 0...1
float m_time_of_day_f;
- float m_time_of_day_speed;
- // Used to buffer dtime for adding to m_time_of_day
- float m_time_counter;
+ // Stores the skew created by the float -> u32 conversion
+ // to be applied at next conversion, so that there is no real skew.
+ float m_time_conversion_skew;
// Overriding the day-night ratio is useful for custom sky visuals
bool m_enable_day_night_ratio_override;
u32 m_day_night_ratio_override;
+ // Days from the server start, accounts for time shift
+ // in game (e.g. /time or bed usage)
+ Atomic<u32> m_day_count;
+ /*
+ * Above: values managed by m_time_lock
+ */
/* TODO: Add a callback function so these can be updated when a setting
* changes. At this point in time it doesn't matter (e.g. /set
@@ -125,15 +136,18 @@ protected:
* a later release.
*/
bool m_cache_enable_shaders;
+ float m_cache_active_block_mgmt_interval;
+ float m_cache_abm_interval;
+ float m_cache_nodetimer_interval;
private:
- JMutex m_timeofday_lock;
- JMutex m_time_lock;
+ Mutex m_time_lock;
+ DISABLE_CLASS_COPY(Environment);
};
/*
- Active block modifier interface.
+ {Active, Loading} block modifier interface.
These are fed into ServerEnvironment at initialization time;
ServerEnvironment handles deleting them.
@@ -155,6 +169,8 @@ public:
virtual float getTriggerInterval() = 0;
// Random chance of (1 / return value), 0 is disallowed
virtual u32 getTriggerChance() = 0;
+ // Whether to modify chance to simulate time lost by an unnattended block
+ virtual bool getSimpleCatchUp() = 0;
// This is called usually at interval for 1/chance of the nodes
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n,
@@ -169,6 +185,77 @@ struct ABMWithState
ABMWithState(ActiveBlockModifier *abm_);
};
+struct LoadingBlockModifierDef
+{
+ // Set of contents to trigger on
+ std::set<std::string> trigger_contents;
+ std::string name;
+ bool run_at_every_load;
+
+ virtual ~LoadingBlockModifierDef() {}
+ virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
+};
+
+struct LBMContentMapping
+{
+ typedef std::map<content_t, std::vector<LoadingBlockModifierDef *> > container_map;
+ container_map map;
+
+ std::vector<LoadingBlockModifierDef *> lbm_list;
+
+ // Needs to be separate method (not inside destructor),
+ // because the LBMContentMapping may be copied and destructed
+ // many times during operation in the lbm_lookup_map.
+ void deleteContents();
+ void addLBM(LoadingBlockModifierDef *lbm_def, IGameDef *gamedef);
+ const std::vector<LoadingBlockModifierDef *> *lookup(content_t c) const;
+};
+
+class LBMManager
+{
+public:
+ LBMManager():
+ m_query_mode(false)
+ {}
+
+ ~LBMManager();
+
+ // Don't call this after loadIntroductionTimes() ran.
+ void addLBMDef(LoadingBlockModifierDef *lbm_def);
+
+ void loadIntroductionTimes(const std::string &times,
+ IGameDef *gamedef, u32 now);
+
+ // Don't call this before loadIntroductionTimes() ran.
+ std::string createIntroductionTimesString();
+
+ // Don't call this before loadIntroductionTimes() ran.
+ void applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp);
+
+ // Warning: do not make this std::unordered_map, order is relevant here
+ typedef std::map<u32, LBMContentMapping> lbm_lookup_map;
+
+private:
+ // Once we set this to true, we can only query,
+ // not modify
+ bool m_query_mode;
+
+ // For m_query_mode == false:
+ // The key of the map is the LBM def's name.
+ // TODO make this std::unordered_map
+ std::map<std::string, LoadingBlockModifierDef *> m_lbm_defs;
+
+ // For m_query_mode == true:
+ // The key of the map is the LBM def's first introduction time.
+ lbm_lookup_map m_lbm_lookup;
+
+ // Returns an iterator to the LBMs that were introduced
+ // after the given time. This is guaranteed to return
+ // valid values for everything
+ lbm_lookup_map::const_iterator getLBMsIntroducedAfter(u32 time)
+ { return m_lbm_lookup.lower_bound(time); }
+};
+
/*
List of active blocks, used by ServerEnvironment
*/
@@ -196,6 +283,18 @@ private:
};
/*
+ Operation mode for ServerEnvironment::clearObjects()
+*/
+enum ClearObjectsMode {
+ // Load and go through every mapblock, clearing objects
+ CLEAR_OBJECTS_MODE_FULL,
+
+ // Clear objects immediately in loaded mapblocks;
+ // clear objects in unloaded mapblocks only when the mapblocks are next activated.
+ CLEAR_OBJECTS_MODE_QUICK,
+};
+
+/*
The server-side environment.
This is not thread-safe. Server uses an environment mutex.
@@ -226,7 +325,7 @@ public:
const std::string &str_reason, bool reconnect);
// Save players
void saveLoadedPlayers();
- void savePlayer(const std::string &playername);
+ void savePlayer(RemotePlayer *player);
Player *loadPlayer(const std::string &playername);
/*
@@ -234,6 +333,12 @@ public:
*/
void saveMeta();
void loadMeta();
+ // to be called instead of loadMeta if
+ // env_meta.txt doesn't exist (e.g. new world)
+ void loadDefaultMeta();
+
+ u32 addParticleSpawner(float exptime);
+ void deleteParticleSpawner(u32 id);
/*
External ActiveObject interface
@@ -265,19 +370,19 @@ public:
Find out what new objects have been added to
inside a radius around a position
*/
- void getAddedActiveObjects(v3s16 pos, s16 radius,
+ void getAddedActiveObjects(Player *player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
- std::set<u16> &added_objects);
+ std::queue<u16> &added_objects);
/*
Find out what new objects have been removed from
inside a radius around a position
*/
- void getRemovedActiveObjects(v3s16 pos, s16 radius,
+ void getRemovedActiveObjects(Player* player, s16 radius,
s16 player_radius,
std::set<u16> &current_objects,
- std::set<u16> &removed_objects);
+ std::queue<u16> &removed_objects);
/*
Get the next message emitted by some active object.
@@ -292,11 +397,12 @@ public:
void activateBlock(MapBlock *block, u32 additional_dtime=0);
/*
- ActiveBlockModifiers
+ {Active,Loading}BlockModifiers
-------------------------------------------
*/
void addActiveBlockModifier(ActiveBlockModifier *abm);
+ void addLoadingBlockModifierDef(LoadingBlockModifierDef *lbm);
/*
Other stuff
@@ -311,8 +417,8 @@ public:
// Find all active objects inside a radius around a point
void getObjectsInsideRadius(std::vector<u16> &objects, v3f pos, float radius);
- // Clear all objects, loading and going through every MapBlock
- void clearAllObjects();
+ // Clear objects, loading and going through every MapBlock
+ void clearObjects(ClearObjectsMode mode);
// This makes stuff happen
void step(f32 dtime);
@@ -402,12 +508,21 @@ private:
u32 m_game_time;
// A helper variable for incrementing the latter
float m_game_time_fraction_counter;
+ // Time of last clearObjects call (game time).
+ // When a mapblock older than this is loaded, its objects are cleared.
+ u32 m_last_clear_objects_time;
+ // Active block modifiers
std::vector<ABMWithState> m_abms;
+ LBMManager m_lbm_mgr;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
// Estimate for general maximum lag as determined by server.
// Can raise to high values like 15s with eg. map generation mods.
float m_max_lag_estimate;
+
+ // Particles
+ IntervalLimiter m_particle_management_interval;
+ std::map<u32, float> m_particle_spawners;
};
#ifndef SERVER
@@ -534,7 +649,7 @@ private:
IrrlichtDevice *m_irr;
std::map<u16, ClientActiveObject*> m_active_objects;
std::vector<ClientSimpleObject*> m_simple_objects;
- std::list<ClientEnvEvent> m_client_event_queue;
+ std::queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
IntervalLimiter m_drowning_interval;
diff --git a/src/event_manager.h b/src/event_manager.h
index 33d99b28c..f926922f5 100644
--- a/src/event_manager.h
+++ b/src/event_manager.h
@@ -53,7 +53,7 @@ public:
if(i != m_dest.end()){
std::list<FuncSpec> &funcs = i->second.funcs;
for(std::list<FuncSpec>::iterator i = funcs.begin();
- i != funcs.end(); i++){
+ i != funcs.end(); ++i){
(*(i->f))(e, i->d);
}
}
@@ -83,12 +83,12 @@ public:
if(remove)
funcs.erase(j++);
else
- j++;
+ ++j;
}
}
} else{
for(std::map<std::string, Dest>::iterator
- i = m_dest.begin(); i != m_dest.end(); i++){
+ i = m_dest.begin(); i != m_dest.end(); ++i){
std::list<FuncSpec> &funcs = i->second.funcs;
std::list<FuncSpec>::iterator j = funcs.begin();
while(j != funcs.end()){
@@ -96,7 +96,7 @@ public:
if(remove)
funcs.erase(j++);
else
- j++;
+ ++j;
}
}
}
diff --git a/src/exceptions.h b/src/exceptions.h
index 6bf832828..4f18f70d9 100644
--- a/src/exceptions.h
+++ b/src/exceptions.h
@@ -125,6 +125,12 @@ public:
PrngException(std::string s): BaseException(s) {}
};
+class ModError : public BaseException {
+public:
+ ModError(const std::string &s): BaseException(s) {}
+};
+
+
/*
Some "old-style" interrupts:
*/
diff --git a/src/filesys.cpp b/src/filesys.cpp
index 4cefdb807..b4c52ab79 100644
--- a/src/filesys.cpp
+++ b/src/filesys.cpp
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <fstream>
#include "log.h"
#include "config.h"
+#include "porting.h"
namespace fs
{
@@ -693,18 +694,47 @@ bool safeWriteToFile(const std::string &path, const std::string &content)
os.flush();
os.close();
if (os.fail()) {
+ // Remove the temporary file because writing it failed and it's useless.
remove(tmp_file.c_str());
return false;
}
- // Copy file
- remove(path.c_str());
- if(rename(tmp_file.c_str(), path.c_str())) {
+ bool rename_success = false;
+
+ // Move the finished temporary file over the real file
+#ifdef _WIN32
+ // When creating the file, it can cause Windows Search indexer, virus scanners and other apps
+ // to query the file. This can make the move file call below fail.
+ // We retry up to 5 times, with a 1ms sleep between, before we consider the whole operation failed
+ int number_attempts = 0;
+ while (number_attempts < 5) {
+ rename_success = MoveFileEx(tmp_file.c_str(), path.c_str(),
+ MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH);
+ if (rename_success)
+ break;
+ sleep_ms(1);
+ ++number_attempts;
+ }
+#else
+ // On POSIX compliant systems rename() is specified to be able to swap the
+ // file in place of the destination file, making this a truly error-proof
+ // transaction.
+ rename_success = rename(tmp_file.c_str(), path.c_str()) == 0;
+#endif
+ if (!rename_success) {
+ warningstream << "Failed to write to file: " << path.c_str() << std::endl;
+ // Remove the temporary file because moving it over the target file
+ // failed.
remove(tmp_file.c_str());
return false;
- } else {
- return true;
}
+
+ return true;
+}
+
+bool Rename(const std::string &from, const std::string &to)
+{
+ return rename(from.c_str(), to.c_str()) == 0;
}
} // namespace fs
diff --git a/src/filesys.h b/src/filesys.h
index 19fcbb673..94d0c874d 100644
--- a/src/filesys.h
+++ b/src/filesys.h
@@ -28,10 +28,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define DIR_DELIM "\\"
#define DIR_DELIM_CHAR '\\'
#define FILESYS_CASE_INSENSITIVE 1
+#define PATH_DELIM ";"
#else // POSIX
#define DIR_DELIM "/"
#define DIR_DELIM_CHAR '/'
#define FILESYS_CASE_INSENSITIVE 0
+#define PATH_DELIM ":"
#endif
namespace fs
@@ -113,6 +115,8 @@ const char *GetFilenameFromPath(const char *path);
bool safeWriteToFile(const std::string &path, const std::string &content);
+bool Rename(const std::string &from, const std::string &to);
+
} // namespace fs
#endif
diff --git a/src/fontengine.cpp b/src/fontengine.cpp
index f881701e0..55ff001e7 100644
--- a/src/fontengine.cpp
+++ b/src/fontengine.cpp
@@ -122,7 +122,7 @@ void FontEngine::cleanCache()
for (std::map<unsigned int, irr::gui::IGUIFont*>::iterator iter
= m_font_cache[i].begin();
- iter != m_font_cache[i].end(); iter++) {
+ iter != m_font_cache[i].end(); ++iter) {
iter->second->drop();
iter->second = NULL;
}
diff --git a/src/game.cpp b/src/game.cpp
index 11e868a80..23f261cfd 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiPasswordChange.h"
#include "guiVolumeChange.h"
#include "hud.h"
-#include "logoutputbuffer.h"
#include "mainmenumanager.h"
#include "mapblock.h"
#include "nodedef.h" // Needed for determining pointing to nodes
@@ -58,6 +57,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/pointedthing.h"
#include "version.h"
#include "minimap.h"
+#include "mapblock_mesh.h"
#include "sound.h"
@@ -176,19 +176,6 @@ struct LocalFormspecHandler : public TextDest {
}
}
- if (m_formname == "MT_CHAT_MENU") {
- assert(m_client != 0);
-
- if ((fields.find("btn_send") != fields.end()) ||
- (fields.find("quit") != fields.end())) {
- StringMap::const_iterator it = fields.find("f_text");
- if (it != fields.end())
- m_client->typeChatMessage(utf8_to_wide(it->second));
-
- return;
- }
- }
-
if (m_formname == "MT_DEATH_SCREEN") {
assert(m_client != 0);
@@ -286,23 +273,70 @@ inline bool isPointableNode(const MapNode &n,
(liquids_pointable && features.isLiquid());
}
+static inline void getNeighborConnectingFace(v3s16 p, INodeDefManager *nodedef,
+ ClientMap *map, MapNode n, u8 bitmask, u8 *neighbors)
+{
+ MapNode n2 = map->getNodeNoEx(p);
+ if (nodedef->nodeboxConnects(n, n2, bitmask))
+ *neighbors |= bitmask;
+}
+
+static inline u8 getNeighbors(v3s16 p, INodeDefManager *nodedef, ClientMap *map, MapNode n)
+{
+ u8 neighbors = 0;
+ const ContentFeatures &f = nodedef->get(n);
+ // locate possible neighboring nodes to connect to
+ if (f.drawtype == NDT_NODEBOX && f.node_box.type == NODEBOX_CONNECTED) {
+ v3s16 p2 = p;
+
+ p2.Y++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 1, &neighbors);
+
+ p2 = p;
+ p2.Y--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 2, &neighbors);
+
+ p2 = p;
+ p2.Z--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 4, &neighbors);
+
+ p2 = p;
+ p2.X--;
+ getNeighborConnectingFace(p2, nodedef, map, n, 8, &neighbors);
+
+ p2 = p;
+ p2.Z++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 16, &neighbors);
+
+ p2 = p;
+ p2.X++;
+ getNeighborConnectingFace(p2, nodedef, map, n, 32, &neighbors);
+ }
+
+ return neighbors;
+}
+
/*
Find what the player is pointing at
*/
-PointedThing getPointedThing(Client *client, v3f player_position,
- v3f camera_direction, v3f camera_position, core::line3d<f32> shootline,
- f32 d, bool liquids_pointable, bool look_for_object, v3s16 camera_offset,
- std::vector<aabb3f> &hilightboxes, ClientActiveObject *&selected_object)
+PointedThing getPointedThing(Client *client, Hud *hud, const v3f &player_position,
+ const v3f &camera_direction, const v3f &camera_position,
+ core::line3d<f32> shootline, f32 d, bool liquids_pointable,
+ bool look_for_object, const v3s16 &camera_offset,
+ ClientActiveObject *&selected_object)
{
PointedThing result;
- hilightboxes.clear();
+ std::vector<aabb3f> *selectionboxes = hud->getSelectionBoxes();
+ selectionboxes->clear();
+ static const bool show_entity_selectionbox = g_settings->getBool("show_entity_selectionbox");
+
selected_object = NULL;
INodeDefManager *nodedef = client->getNodeDefManager();
ClientMap &map = client->getEnv().getClientMap();
- f32 mindistance = BS * 1001;
+ f32 min_distance = BS * 1001;
// First try to find a pointed at active object
if (look_for_object) {
@@ -310,19 +344,20 @@ PointedThing getPointedThing(Client *client, v3f player_position,
camera_position, shootline);
if (selected_object != NULL) {
- if (selected_object->doShowSelectionBox()) {
+ if (show_entity_selectionbox &&
+ selected_object->doShowSelectionBox()) {
aabb3f *selection_box = selected_object->getSelectionBox();
// Box should exist because object was
// returned in the first place
assert(selection_box);
v3f pos = selected_object->getPosition();
- hilightboxes.push_back(aabb3f(
- selection_box->MinEdge + pos - intToFloat(camera_offset, BS),
- selection_box->MaxEdge + pos - intToFloat(camera_offset, BS)));
+ selectionboxes->push_back(aabb3f(
+ selection_box->MinEdge, selection_box->MaxEdge));
+ hud->setSelectionPos(pos, camera_offset);
}
- mindistance = (selected_object->getPosition() - camera_position).getLength();
+ min_distance = (selected_object->getPosition() - camera_position).getLength();
result.type = POINTEDTHING_OBJECT;
result.object_id = selected_object->getId();
@@ -331,14 +366,13 @@ PointedThing getPointedThing(Client *client, v3f player_position,
// That didn't work, try to find a pointed at node
-
v3s16 pos_i = floatToInt(player_position, BS);
/*infostream<<"pos_i=("<<pos_i.X<<","<<pos_i.Y<<","<<pos_i.Z<<")"
<<std::endl;*/
s16 a = d;
- s16 ystart = pos_i.Y + 0 - (camera_direction.Y < 0 ? a : 1);
+ s16 ystart = pos_i.Y - (camera_direction.Y < 0 ? a : 1);
s16 zstart = pos_i.Z - (camera_direction.Z < 0 ? a : 1);
s16 xstart = pos_i.X - (camera_direction.X < 0 ? a : 1);
s16 yend = pos_i.Y + 1 + (camera_direction.Y > 0 ? a : 1);
@@ -355,82 +389,139 @@ PointedThing getPointedThing(Client *client, v3f player_position,
if (xend == 32767)
xend = 32766;
- for (s16 y = ystart; y <= yend; y++)
- for (s16 z = zstart; z <= zend; z++)
+ v3s16 pointed_pos(0, 0, 0);
+
+ for (s16 y = ystart; y <= yend; y++) {
+ for (s16 z = zstart; z <= zend; z++) {
for (s16 x = xstart; x <= xend; x++) {
MapNode n;
bool is_valid_position;
+ v3s16 p(x, y, z);
- n = map.getNodeNoEx(v3s16(x, y, z), &is_valid_position);
- if (!is_valid_position)
+ n = map.getNodeNoEx(p, &is_valid_position);
+ if (!is_valid_position) {
continue;
-
- if (!isPointableNode(n, client, liquids_pointable))
+ }
+ if (!isPointableNode(n, client, liquids_pointable)) {
continue;
+ }
- std::vector<aabb3f> boxes = n.getSelectionBoxes(nodedef);
+ std::vector<aabb3f> boxes;
+ n.getSelectionBoxes(nodedef, &boxes, getNeighbors(p, nodedef, &map, n));
v3s16 np(x, y, z);
v3f npf = intToFloat(np, BS);
-
for (std::vector<aabb3f>::const_iterator
i = boxes.begin();
- i != boxes.end(); i++) {
+ i != boxes.end(); ++i) {
aabb3f box = *i;
box.MinEdge += npf;
box.MaxEdge += npf;
- for (u16 j = 0; j < 6; j++) {
- v3s16 facedir = g_6dirs[j];
- aabb3f facebox = box;
-
- f32 d = 0.001 * BS;
-
- if (facedir.X > 0)
- facebox.MinEdge.X = facebox.MaxEdge.X - d;
- else if (facedir.X < 0)
- facebox.MaxEdge.X = facebox.MinEdge.X + d;
- else if (facedir.Y > 0)
- facebox.MinEdge.Y = facebox.MaxEdge.Y - d;
- else if (facedir.Y < 0)
- facebox.MaxEdge.Y = facebox.MinEdge.Y + d;
- else if (facedir.Z > 0)
- facebox.MinEdge.Z = facebox.MaxEdge.Z - d;
- else if (facedir.Z < 0)
- facebox.MaxEdge.Z = facebox.MinEdge.Z + d;
-
- v3f centerpoint = facebox.getCenter();
- f32 distance = (centerpoint - camera_position).getLength();
-
- if (distance >= mindistance)
- continue;
-
- if (!facebox.intersectsWithLine(shootline))
- continue;
-
- v3s16 np_above = np + facedir;
-
- result.type = POINTEDTHING_NODE;
- result.node_undersurface = np;
- result.node_abovesurface = np_above;
- mindistance = distance;
-
- hilightboxes.clear();
-
- if (!g_settings->getBool("enable_node_highlighting")) {
- for (std::vector<aabb3f>::const_iterator
- i2 = boxes.begin();
- i2 != boxes.end(); i2++) {
- aabb3f box = *i2;
- box.MinEdge += npf + v3f(-d, -d, -d) - intToFloat(camera_offset, BS);
- box.MaxEdge += npf + v3f(d, d, d) - intToFloat(camera_offset, BS);
- hilightboxes.push_back(box);
- }
- }
+ v3f centerpoint = box.getCenter();
+ f32 distance = (centerpoint - camera_position).getLength();
+ if (distance >= min_distance) {
+ continue;
+ }
+ if (!box.intersectsWithLine(shootline)) {
+ continue;
}
+ result.type = POINTEDTHING_NODE;
+ min_distance = distance;
+ pointed_pos = np;
+ }
+ }
+ }
+ }
+
+ if (result.type == POINTEDTHING_NODE) {
+ f32 d = 0.001 * BS;
+ MapNode n = map.getNodeNoEx(pointed_pos);
+ v3f npf = intToFloat(pointed_pos, BS);
+ std::vector<aabb3f> boxes;
+ n.getSelectionBoxes(nodedef, &boxes, getNeighbors(pointed_pos, nodedef, &map, n));
+ f32 face_min_distance = 1000 * BS;
+ for (std::vector<aabb3f>::const_iterator
+ i = boxes.begin();
+ i != boxes.end(); ++i) {
+ aabb3f box = *i;
+ box.MinEdge += npf;
+ box.MaxEdge += npf;
+ for (u16 j = 0; j < 6; j++) {
+ v3s16 facedir = g_6dirs[j];
+ aabb3f facebox = box;
+ if (facedir.X > 0) {
+ facebox.MinEdge.X = facebox.MaxEdge.X - d;
+ } else if (facedir.X < 0) {
+ facebox.MaxEdge.X = facebox.MinEdge.X + d;
+ } else if (facedir.Y > 0) {
+ facebox.MinEdge.Y = facebox.MaxEdge.Y - d;
+ } else if (facedir.Y < 0) {
+ facebox.MaxEdge.Y = facebox.MinEdge.Y + d;
+ } else if (facedir.Z > 0) {
+ facebox.MinEdge.Z = facebox.MaxEdge.Z - d;
+ } else if (facedir.Z < 0) {
+ facebox.MaxEdge.Z = facebox.MinEdge.Z + d;
}
- } // for coords
+ v3f centerpoint = facebox.getCenter();
+ f32 distance = (centerpoint - camera_position).getLength();
+ if (distance >= face_min_distance)
+ continue;
+ if (!facebox.intersectsWithLine(shootline))
+ continue;
+ result.node_abovesurface = pointed_pos + facedir;
+ face_min_distance = distance;
+ }
+ }
+ selectionboxes->clear();
+ for (std::vector<aabb3f>::const_iterator
+ i = boxes.begin();
+ i != boxes.end(); ++i) {
+ aabb3f box = *i;
+ box.MinEdge += v3f(-d, -d, -d);
+ box.MaxEdge += v3f(d, d, d);
+ selectionboxes->push_back(box);
+ }
+ hud->setSelectionPos(intToFloat(pointed_pos, BS), camera_offset);
+ result.node_undersurface = pointed_pos;
+ }
+
+ // Update selection mesh light level and vertex colors
+ if (selectionboxes->size() > 0) {
+ v3f pf = hud->getSelectionPos();
+ v3s16 p = floatToInt(pf, BS);
+
+ // Get selection mesh light level
+ MapNode n = map.getNodeNoEx(p);
+ u16 node_light = getInteriorLight(n, -1, nodedef);
+ u16 light_level = node_light;
+ for (u8 i = 0; i < 6; i++) {
+ n = map.getNodeNoEx(p + g_6dirs[i]);
+ node_light = getInteriorLight(n, -1, nodedef);
+ if (node_light > light_level)
+ light_level = node_light;
+ }
+
+ video::SColor c = MapBlock_LightColor(255, light_level, 0);
+ u8 day = c.getRed();
+ u8 night = c.getGreen();
+ u32 daynight_ratio = client->getEnv().getDayNightRatio();
+ finalColorBlend(c, day, night, daynight_ratio);
+
+ // Modify final color a bit with time
+ u32 timer = porting::getTimeMs() % 5000;
+ float timerf = (float)(irr::core::PI * ((timer / 2500.0) - 0.5));
+ float sin_r = 0.08 * sin(timerf);
+ float sin_g = 0.08 * sin(timerf + irr::core::PI * 0.5);
+ float sin_b = 0.08 * sin(timerf + irr::core::PI);
+ c.setRed(core::clamp(core::round32(c.getRed() * (0.8 + sin_r)), 0, 255));
+ c.setGreen(core::clamp(core::round32(c.getGreen() * (0.8 + sin_g)), 0, 255));
+ c.setBlue(core::clamp(core::round32(c.getBlue() * (0.8 + sin_b)), 0, 255));
+
+ // Set mesh final color
+ hud->setSelectionMeshColor(c);
+ }
return result;
}
@@ -490,7 +581,7 @@ private:
color(color)
{}
};
- std::vector<Piece> m_log;
+ std::deque<Piece> m_log;
public:
u32 m_log_max_size;
@@ -513,12 +604,12 @@ public:
{
std::map<std::string, Meta> m_meta;
- for (std::vector<Piece>::const_iterator k = m_log.begin();
- k != m_log.end(); k++) {
+ for (std::deque<Piece>::const_iterator k = m_log.begin();
+ k != m_log.end(); ++k) {
const Piece &piece = *k;
for (Profiler::GraphValues::const_iterator i = piece.values.begin();
- i != piece.values.end(); i++) {
+ i != piece.values.end(); ++i) {
const std::string &id = i->first;
const float &value = i->second;
std::map<std::string, Meta>::iterator j =
@@ -550,7 +641,7 @@ public:
u32 next_color_i = 0;
for (std::map<std::string, Meta>::iterator i = m_meta.begin();
- i != m_meta.end(); i++) {
+ i != m_meta.end(); ++i) {
Meta &meta = i->second;
video::SColor color(255, 200, 200, 200);
@@ -566,7 +657,7 @@ public:
s32 meta_i = 0;
for (std::map<std::string, Meta>::const_iterator i = m_meta.begin();
- i != m_meta.end(); i++) {
+ i != m_meta.end(); ++i) {
const std::string &id = i->first;
const Meta &meta = i->second;
s32 x = x_left;
@@ -601,8 +692,8 @@ public:
float lastscaledvalue = 0.0;
bool lastscaledvalue_exists = false;
- for (std::vector<Piece>::const_iterator j = m_log.begin();
- j != m_log.end(); j++) {
+ for (std::deque<Piece>::const_iterator j = m_log.begin();
+ j != m_log.end(); ++j) {
const Piece &piece = *j;
float value = 0;
bool value_exists = false;
@@ -871,15 +962,18 @@ public:
services->setPixelShaderConstant("yawVec", (irr::f32 *)&minimap_yaw_vec, 3);
// Uniform sampler layers
- int layer0 = 0;
- int layer1 = 1;
- int layer2 = 2;
// before 1.8 there isn't a "integer interface", only float
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
+ f32 layer0 = 0;
+ f32 layer1 = 1;
+ f32 layer2 = 2;
services->setPixelShaderConstant("baseTexture" , (irr::f32 *)&layer0, 1);
services->setPixelShaderConstant("normalTexture" , (irr::f32 *)&layer1, 1);
services->setPixelShaderConstant("textureFlags" , (irr::f32 *)&layer2, 1);
#else
+ s32 layer0 = 0;
+ s32 layer1 = 1;
+ s32 layer2 = 2;
services->setPixelShaderConstant("baseTexture" , (irr::s32 *)&layer0, 1);
services->setPixelShaderConstant("normalTexture" , (irr::s32 *)&layer1, 1);
services->setPixelShaderConstant("textureFlags" , (irr::s32 *)&layer2, 1);
@@ -1040,27 +1134,6 @@ static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
#define SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop
#endif
-static void show_chat_menu(GUIFormSpecMenu **cur_formspec,
- InventoryManager *invmgr, IGameDef *gamedef,
- IWritableTextureSource *tsrc, IrrlichtDevice *device,
- Client *client, std::string text)
-{
- std::string formspec =
- FORMSPEC_VERSION_STRING
- SIZE_TAG
- "field[3,2.35;6,0.5;f_text;;" + text + "]"
- "button_exit[4,3;3,0.5;btn_send;" + wide_to_utf8(wstrgettext("Proceed")) + "]"
- ;
-
- /* Create menu */
- /* Note: FormspecFormSource and LocalFormspecHandler
- * are deleted by guiFormSpecMenu */
- FormspecFormSource *fs_src = new FormspecFormSource(formspec);
- LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_CHAT_MENU", client);
-
- create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device, fs_src, txt_dst, NULL);
-}
-
static void show_deathscreen(GUIFormSpecMenu **cur_formspec,
InventoryManager *invmgr, IGameDef *gamedef,
IWritableTextureSource *tsrc, IrrlichtDevice *device, Client *client)
@@ -1089,32 +1162,32 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
bool singleplayermode)
{
#ifdef __ANDROID__
- std::string control_text = wide_to_utf8(wstrgettext("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"
- ));
+ std::string control_text = strgettext("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"
+ );
#else
- std::string control_text = wide_to_utf8(wstrgettext("Default Controls:\n"
- "- WASD: move\n"
- "- Space: jump/climb\n"
- "- Shift: sneak/go down\n"
- "- Q: drop item\n"
- "- I: inventory\n"
- "- Mouse: turn/look\n"
- "- Mouse left: dig/punch\n"
- "- Mouse right: place/use\n"
- "- Mouse wheel: select item\n"
- "- T: chat\n"
- ));
+ std::string control_text = strgettext("Default Controls:\n"
+ "- WASD: move\n"
+ "- Space: jump/climb\n"
+ "- Shift: sneak/go down\n"
+ "- Q: drop item\n"
+ "- I: inventory\n"
+ "- Mouse: turn/look\n"
+ "- Mouse left: dig/punch\n"
+ "- Mouse right: place/use\n"
+ "- Mouse wheel: select item\n"
+ "- T: chat\n"
+ );
#endif
float ypos = singleplayermode ? 0.5 : 0.1;
@@ -1122,23 +1195,23 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
os << FORMSPEC_VERSION_STRING << SIZE_TAG
<< "button_exit[4," << (ypos++) << ";3,0.5;btn_continue;"
- << wide_to_utf8(wstrgettext("Continue")) << "]";
+ << strgettext("Continue") << "]";
if (!singleplayermode) {
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_change_password;"
- << wide_to_utf8(wstrgettext("Change Password")) << "]";
+ << strgettext("Change Password") << "]";
}
#ifndef __ANDROID__
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
- << wide_to_utf8(wstrgettext("Sound Volume")) << "]";
+ << strgettext("Sound Volume") << "]";
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;"
- << wide_to_utf8(wstrgettext("Change Keys")) << "]";
+ << strgettext("Change Keys") << "]";
#endif
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;"
- << wide_to_utf8(wstrgettext("Exit to Menu")) << "]";
+ << strgettext("Exit to Menu") << "]";
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;"
- << wide_to_utf8(wstrgettext("Exit to OS")) << "]"
+ << strgettext("Exit to OS") << "]"
<< "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]"
<< "textarea[0.4,0.25;3.5,6;;" << PROJECT_NAME_C "\n"
<< g_build_info << "\n"
@@ -1163,7 +1236,7 @@ static void updateChat(Client &client, f32 dtime, bool show_debug,
ChatBackend &chat_backend, gui::IGUIStaticText *guitext_chat)
{
// Add chat log output for errors to be shown in chat
- static LogOutputBuffer chat_log_error_buf(LMT_ERROR);
+ static LogOutputBuffer chat_log_error_buf(g_logger, LL_ERROR);
// Get new messages from error log buffer
while (!chat_log_error_buf.empty()) {
@@ -1235,6 +1308,7 @@ struct KeyCache {
KEYMAP_ID_JUMP,
KEYMAP_ID_SPECIAL1,
KEYMAP_ID_SNEAK,
+ KEYMAP_ID_AUTORUN,
// Other
KEYMAP_ID_DROP,
@@ -1287,6 +1361,8 @@ void KeyCache::populate()
key[KEYMAP_ID_SPECIAL1] = getKeySetting("keymap_special1");
key[KEYMAP_ID_SNEAK] = getKeySetting("keymap_sneak");
+ key[KEYMAP_ID_AUTORUN] = getKeySetting("keymap_autorun");
+
key[KEYMAP_ID_DROP] = getKeySetting("keymap_drop");
key[KEYMAP_ID_INVENTORY] = getKeySetting("keymap_inventory");
key[KEYMAP_ID_CHAT] = getKeySetting("keymap_chat");
@@ -1488,12 +1564,13 @@ protected:
void dropSelectedItem();
void openInventory();
- void openConsole();
+ void openConsole(float height, const wchar_t *line=NULL);
void toggleFreeMove(float *statustext_time);
void toggleFreeMoveAlt(float *statustext_time, float *jump_timer);
void toggleFast(float *statustext_time);
void toggleNoClip(float *statustext_time);
void toggleCinematic(float *statustext_time);
+ void toggleAutorun(float *statustext_time);
void toggleChat(float *statustext_time, bool *flag);
void toggleHud(float *statustext_time, bool *flag);
@@ -1519,9 +1596,9 @@ protected:
void updateCamera(VolatileRunFlags *flags, u32 busy_time, f32 dtime,
float time_from_last_punch);
void updateSound(f32 dtime);
- void processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
- GameRunData *runData, f32 dtime, bool show_hud,
+ void processPlayerInteraction(GameRunData *runData, f32 dtime, bool show_hud,
bool show_debug);
+ void handlePointingAtNothing(GameRunData *runData, const ItemStack &playerItem);
void handlePointingAtNode(GameRunData *runData,
const PointedThing &pointed, const ItemDefinition &playeritem_def,
const ToolCapabilities &playeritem_toolcap, f32 dtime);
@@ -1531,8 +1608,7 @@ protected:
void handleDigging(GameRunData *runData, const PointedThing &pointed,
const v3s16 &nodepos, const ToolCapabilities &playeritem_toolcap,
f32 dtime);
- void updateFrame(std::vector<aabb3f> &highlight_boxes, ProfilerGraph *graph,
- RunStats *stats, GameRunData *runData,
+ void updateFrame(ProfilerGraph *graph, RunStats *stats, GameRunData *runData,
f32 dtime, const VolatileRunFlags &flags, const CameraOrientation &cam);
void updateGui(float *statustext_time, const RunStats &stats,
const GameRunData& runData, f32 dtime, const VolatileRunFlags &flags,
@@ -1548,6 +1624,10 @@ protected:
static void settingChangedCallback(const std::string &setting_name, void *data);
void readSettings();
+#ifdef __ANDROID__
+ void handleAndroidChatInput();
+#endif
+
private:
InputHandler *input;
@@ -1626,7 +1706,6 @@ private:
* a later release.
*/
bool m_cache_doubletap_jump;
- bool m_cache_enable_node_highlighting;
bool m_cache_enable_clouds;
bool m_cache_enable_particles;
bool m_cache_enable_fog;
@@ -1635,8 +1714,8 @@ private:
#ifdef __ANDROID__
bool m_cache_hold_aux1;
+ bool m_android_chat_open;
#endif
-
};
Game::Game() :
@@ -1664,8 +1743,6 @@ Game::Game() :
{
g_settings->registerChangedCallback("doubletap_jump",
&settingChangedCallback, this);
- g_settings->registerChangedCallback("enable_node_highlighting",
- &settingChangedCallback, this);
g_settings->registerChangedCallback("enable_clouds",
&settingChangedCallback, this);
g_settings->registerChangedCallback("enable_particles",
@@ -1715,8 +1792,6 @@ Game::~Game()
g_settings->deregisterChangedCallback("doubletap_jump",
&settingChangedCallback, this);
- g_settings->deregisterChangedCallback("enable_node_highlighting",
- &settingChangedCallback, this);
g_settings->deregisterChangedCallback("enable_clouds",
&settingChangedCallback, this);
g_settings->deregisterChangedCallback("enable_particles",
@@ -1803,8 +1878,6 @@ void Game::run()
&runData.fog_range,
client));
- std::vector<aabb3f> highlight_boxes;
-
set_light_table(g_settings->getFloat("display_gamma"));
#ifdef __ANDROID__
@@ -1812,7 +1885,9 @@ void Game::run()
&& client->checkPrivilege("fast");
#endif
- while (device->run() && !(*kill || g_gamecallback->shutdown_requested)) {
+ while (device->run()
+ && !(*kill || g_gamecallback->shutdown_requested
+ || (server && server->getShutdownRequested()))) {
/* Must be called immediately after a device->run() call because it
* uses device->getTimer()->getTime()
@@ -1852,17 +1927,23 @@ void Game::run()
updateCamera(&flags, draw_times.busy_time, dtime,
runData.time_from_last_punch);
updateSound(dtime);
- processPlayerInteraction(highlight_boxes, &runData, dtime,
- flags.show_hud, flags.show_debug);
- updateFrame(highlight_boxes, &graph, &stats, &runData, dtime,
- flags, cam_view);
+ processPlayerInteraction(&runData, dtime, flags.show_hud,
+ flags.show_debug);
+ updateFrame(&graph, &stats, &runData, dtime, flags, cam_view);
updateProfilerGraphs(&graph);
+
+ // Update if minimap has been disabled by the server
+ flags.show_minimap &= !client->isMinimapDisabledByServer();
}
}
void Game::shutdown()
{
+ if (g_settings->get("3d_mode") == "pageflip") {
+ driver->setRenderTarget(irr::video::ERT_STEREO_BOTH_BUFFERS);
+ }
+
showOverlayMessage(wgettext("Shutting down..."), 0, 0, false);
if (clouds)
@@ -2044,6 +2125,7 @@ bool Game::createClient(const std::string &playername,
camera = new Camera(smgr, *draw_control, gamedef);
if (!camera || !camera->successfullyCreated(*error_message))
return false;
+ client->setCamera(camera);
/* Clouds
*/
@@ -2147,7 +2229,7 @@ bool Game::initGui()
// Chat backend and console
gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(),
- -1, chat_backend, client);
+ -1, chat_backend, client, &g_menumgr);
if (!gui_chat_console) {
*error_message = "Could not allocate memory for chat console";
errorstream << *error_message << std::endl;
@@ -2166,7 +2248,7 @@ bool Game::initGui()
#ifdef HAVE_TOUCHSCREENGUI
if (g_touchscreengui)
- g_touchscreengui->init(texture_src, porting::getDisplayDensity());
+ g_touchscreengui->init(texture_src);
#endif
@@ -2562,7 +2644,17 @@ void Game::processUserInput(VolatileRunFlags *flags,
|| noMenuActive() == false
|| guienv->hasFocus(gui_chat_console)) {
input->clear();
+#ifdef HAVE_TOUCHSCREENGUI
+ g_touchscreengui->hide();
+#endif
+ }
+#ifdef HAVE_TOUCHSCREENGUI
+ else if (g_touchscreengui) {
+ /* on touchscreengui step may generate own input events which ain't
+ * what we want in case we just did clear them */
+ g_touchscreengui->step(dtime);
}
+#endif
if (!guienv->hasFocus(gui_chat_console) && gui_chat_console->isOpen()) {
gui_chat_console->closeConsoleAtOnce();
@@ -2571,18 +2663,11 @@ void Game::processUserInput(VolatileRunFlags *flags,
// Input handler step() (used by the random input generator)
input->step(dtime);
-#ifdef HAVE_TOUCHSCREENGUI
-
- if (g_touchscreengui) {
- g_touchscreengui->step(dtime);
- }
-
-#endif
#ifdef __ANDROID__
-
- if (current_formspec != 0)
+ if (current_formspec != NULL)
current_formspec->getAndroidUIInput();
-
+ else
+ handleAndroidChatInput();
#endif
// Increase timer for double tap of "keymap_jump"
@@ -2613,19 +2698,21 @@ void Game::processKeyboardInput(VolatileRunFlags *flags,
if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_DROP])) {
dropSelectedItem();
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_AUTORUN])) {
+ toggleAutorun(statustext_time);
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_INVENTORY])) {
openInventory();
} else if (input->wasKeyDown(EscapeKey) || input->wasKeyDown(CancelKey)) {
- show_pause_menu(&current_formspec, client, gamedef, texture_src, device,
- simple_singleplayer_mode);
+ if (!gui_chat_console->isOpenInhibited()) {
+ show_pause_menu(&current_formspec, client, gamedef,
+ texture_src, device, simple_singleplayer_mode);
+ }
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_CHAT])) {
- show_chat_menu(&current_formspec, client, gamedef, texture_src, device,
- client, "");
+ openConsole(0.2, L"");
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_CMD])) {
- show_chat_menu(&current_formspec, client, gamedef, texture_src, device,
- client, "/");
+ openConsole(0.2, L"/");
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_CONSOLE])) {
- openConsole();
+ openConsole(1);
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_FREEMOVE])) {
toggleFreeMove(statustext_time);
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_JUMP])) {
@@ -2660,19 +2747,19 @@ void Game::processKeyboardInput(VolatileRunFlags *flags,
decreaseViewRange(statustext_time);
} else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_RANGESELECT])) {
toggleFullViewRange(statustext_time);
- } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_NEXT]))
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_NEXT])) {
quicktune->next();
- else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_PREV]))
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_PREV])) {
quicktune->prev();
- else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_INC]))
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_INC])) {
quicktune->inc();
- else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_DEC]))
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_QUICKTUNE_DEC])) {
quicktune->dec();
- else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_DEBUG_STACKS])) {
+ } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_DEBUG_STACKS])) {
// Print debug stacks
dstream << "-----------------------------------------"
<< std::endl;
- dstream << DTIME << "Printing debug stacks:" << std::endl;
+ dstream << "Printing debug stacks:" << std::endl;
dstream << "-----------------------------------------"
<< std::endl;
debug_stacks_print();
@@ -2768,15 +2855,32 @@ void Game::openInventory()
}
-void Game::openConsole()
+void Game::openConsole(float height, const wchar_t *line)
{
- if (!gui_chat_console->isOpenInhibited()) {
- // Open up to over half of the screen
- gui_chat_console->openConsole(0.6);
- guienv->setFocus(gui_chat_console);
+#ifdef __ANDROID__
+ porting::showInputDialog(gettext("ok"), "", "", 2);
+ m_android_chat_open = true;
+#else
+ if (gui_chat_console->isOpenInhibited())
+ return;
+ gui_chat_console->openConsole(height);
+ if (line) {
+ gui_chat_console->setCloseOnEnter(true);
+ gui_chat_console->replaceAndAddToHistory(line);
}
+#endif
}
+#ifdef __ANDROID__
+void Game::handleAndroidChatInput()
+{
+ if (m_android_chat_open && porting::getInputDialogState() == 0) {
+ std::string text = porting::getInputDialogValue();
+ client->typeChatMessage(utf8_to_wide(text));
+ }
+}
+#endif
+
void Game::toggleFreeMove(float *statustext_time)
{
@@ -2842,6 +2946,16 @@ void Game::toggleCinematic(float *statustext_time)
statustext = msg[cinematic];
}
+// Add WoW-style autorun by toggling continuous forward.
+void Game::toggleAutorun(float *statustext_time)
+{
+ static const wchar_t *msg[] = { L"autorun disabled", L"autorun enabled" };
+ bool autorun_enabled = !g_settings->getBool("continuous_forward");
+ g_settings->set("continuous_forward", bool_to_cstr(autorun_enabled));
+
+ *statustext_time = 0;
+ statustext = msg[autorun_enabled ? 1 : 0];
+}
void Game::toggleChat(float *statustext_time, bool *flag)
{
@@ -2860,8 +2974,6 @@ void Game::toggleHud(float *statustext_time, bool *flag)
*flag = !*flag;
*statustext_time = 0;
statustext = msg[*flag];
- if (g_settings->getBool("enable_node_highlighting"))
- client->setHighlighted(client->getHighlighted(), *flag);
}
void Game::toggleMinimap(float *statustext_time, bool *flag,
@@ -2982,10 +3094,10 @@ void Game::toggleProfiler(float *statustext_time, u32 *profiler_current_page,
void Game::increaseViewRange(float *statustext_time)
{
- s16 range = g_settings->getS16("viewing_range_nodes_min");
+ s16 range = g_settings->getS16("viewing_range");
s16 range_new = range + 10;
- g_settings->set("viewing_range_nodes_min", itos(range_new));
- statustext = utf8_to_wide("Minimum viewing range changed to "
+ g_settings->set("viewing_range", itos(range_new));
+ statustext = utf8_to_wide("Viewing range changed to "
+ itos(range_new));
*statustext_time = 0;
}
@@ -2993,14 +3105,14 @@ void Game::increaseViewRange(float *statustext_time)
void Game::decreaseViewRange(float *statustext_time)
{
- s16 range = g_settings->getS16("viewing_range_nodes_min");
+ s16 range = g_settings->getS16("viewing_range");
s16 range_new = range - 10;
- if (range_new < 0)
- range_new = range;
+ if (range_new < 20)
+ range_new = 20;
- g_settings->set("viewing_range_nodes_min", itos(range_new));
- statustext = utf8_to_wide("Minimum viewing range changed to "
+ g_settings->set("viewing_range", itos(range_new));
+ statustext = utf8_to_wide("Viewing range changed to "
+ itos(range_new));
*statustext_time = 0;
}
@@ -3447,8 +3559,8 @@ void Game::updateSound(f32 dtime)
}
-void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
- GameRunData *runData, f32 dtime, bool show_hud, bool show_debug)
+void Game::processPlayerInteraction(GameRunData *runData,
+ f32 dtime, bool show_hud, bool show_debug)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
@@ -3506,25 +3618,17 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
PointedThing pointed = getPointedThing(
// input
- client, player_position, camera_direction,
+ client, hud, player_position, camera_direction,
camera_position, shootline, d,
playeritem_def.liquids_pointable,
!runData->ldown_for_dig,
camera_offset,
// output
- highlight_boxes,
runData->selected_object);
if (pointed != runData->pointed_old) {
infostream << "Pointing at " << pointed.dump() << std::endl;
-
- if (m_cache_enable_node_highlighting) {
- if (pointed.type == POINTEDTHING_NODE) {
- client->setHighlighted(pointed.node_undersurface, show_hud);
- } else {
- client->setHighlighted(pointed.node_undersurface, false);
- }
- }
+ hud->updateSelectionMesh(camera_offset);
}
/*
@@ -3548,6 +3652,7 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
infostream << "Pointing away from node"
<< " (stopped digging)" << std::endl;
runData->digging = false;
+ hud->updateSelectionMesh(camera_offset);
}
}
@@ -3585,6 +3690,8 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
} else if (input->getLeftState()) {
// When button is held down in air, show continuous animation
runData->left_punch = true;
+ } else if (input->getRightClicked()) {
+ handlePointingAtNothing(runData, playeritem);
}
runData->pointed_old = pointed;
@@ -3600,6 +3707,15 @@ void Game::processPlayerInteraction(std::vector<aabb3f> &highlight_boxes,
}
+void Game::handlePointingAtNothing(GameRunData *runData, const ItemStack &playerItem)
+{
+ infostream << "Right Clicked in Air" << std::endl;
+ PointedThing fauxPointed;
+ fauxPointed.type = POINTEDTHING_NOTHING;
+ client->interact(5, fauxPointed);
+}
+
+
void Game::handlePointingAtNode(GameRunData *runData,
const PointedThing &pointed, const ItemDefinition &playeritem_def,
const ToolCapabilities &playeritem_toolcap, f32 dtime)
@@ -3615,7 +3731,7 @@ void Game::handlePointingAtNode(GameRunData *runData,
NodeMetadata *meta = map.getNodeMetadata(nodepos);
if (meta) {
- infotext = utf8_to_wide(meta->getString("infotext"));
+ infotext = unescape_enriched(utf8_to_wide(meta->getString("infotext")));
} else {
MapNode n = map.getNodeNoEx(nodepos);
@@ -3671,11 +3787,15 @@ void Game::handlePointingAtNode(GameRunData *runData,
} else {
soundmaker->m_player_rightpunch_sound =
SimpleSoundSpec();
- }
- if (playeritem_def.node_placement_prediction == "" ||
- nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable)
- client->interact(3, pointed); // Report to server
+ if (playeritem_def.node_placement_prediction == "" ||
+ nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable) {
+ client->interact(3, pointed); // Report to server
+ } else {
+ soundmaker->m_player_rightpunch_sound =
+ playeritem_def.sound_place_failed;
+ }
+ }
}
}
}
@@ -3687,10 +3807,15 @@ void Game::handlePointingAtObject(GameRunData *runData,
const v3f &player_position,
bool show_debug)
{
- infotext = utf8_to_wide(runData->selected_object->infoText());
+ infotext = unescape_enriched(
+ utf8_to_wide(runData->selected_object->infoText()));
- if (infotext == L"" && show_debug) {
- infotext = utf8_to_wide(runData->selected_object->debugInfoText());
+ if (show_debug) {
+ if (infotext != L"") {
+ infotext += L"\n";
+ }
+ infotext += unescape_enriched(utf8_to_wide(
+ runData->selected_object->debugInfoText()));
}
if (input->getLeftState()) {
@@ -3854,9 +3979,9 @@ void Game::handleDigging(GameRunData *runData,
}
-void Game::updateFrame(std::vector<aabb3f> &highlight_boxes,
- ProfilerGraph *graph, RunStats *stats, GameRunData *runData,
- f32 dtime, const VolatileRunFlags &flags, const CameraOrientation &cam)
+void Game::updateFrame(ProfilerGraph *graph, RunStats *stats,
+ GameRunData *runData, f32 dtime, const VolatileRunFlags &flags,
+ const CameraOrientation &cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
@@ -3867,12 +3992,7 @@ void Game::updateFrame(std::vector<aabb3f> &highlight_boxes,
if (draw_control->range_all) {
runData->fog_range = 100000 * BS;
} else {
- runData->fog_range = draw_control->wanted_range * BS
- + 0.0 * MAP_BLOCKSIZE * BS;
- runData->fog_range = MYMIN(
- runData->fog_range,
- (draw_control->farthest_drawn + 20) * BS);
- runData->fog_range *= 0.9;
+ runData->fog_range = 0.9 * draw_control->wanted_range * BS;
}
/*
@@ -4048,7 +4168,7 @@ void Game::updateFrame(std::vector<aabb3f> &highlight_boxes,
}
draw_scene(driver, smgr, *camera, *client, player, *hud, *mapper,
- guienv, highlight_boxes, screensize, skycolor, flags.show_hud,
+ guienv, screensize, skycolor, flags.show_hud,
flags.show_minimap);
/*
@@ -4328,7 +4448,6 @@ void Game::settingChangedCallback(const std::string &setting_name, void *data)
void Game::readSettings()
{
m_cache_doubletap_jump = g_settings->getBool("doubletap_jump");
- m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting");
m_cache_enable_clouds = g_settings->getBool("enable_clouds");
m_cache_enable_particles = g_settings->getBool("enable_particles");
m_cache_enable_fog = g_settings->getBool("enable_fog");
@@ -4420,4 +4539,3 @@ void the_game(bool *kill,
errorstream << "ModError: " << error_message << std::endl;
}
}
-
diff --git a/src/gamedef.h b/src/gamedef.h
index a5f6b5968..7e3da4cac 100644
--- a/src/gamedef.h
+++ b/src/gamedef.h
@@ -32,6 +32,8 @@ class IShaderSource;
class MtEventManager;
class IRollbackManager;
class EmergeManager;
+class Camera;
+
namespace irr { namespace scene {
class IAnimatedMesh;
class ISceneManager;
@@ -67,6 +69,10 @@ public:
{ return NULL; }
virtual scene::ISceneManager* getSceneManager()=0;
+ virtual Camera* getCamera()
+ { return NULL; }
+ virtual void setCamera(Camera *camera) {}
+
// Only usable on the server, and NOT thread-safe. It is usable from the
// environment thread.
virtual IRollbackManager* getRollbackManager(){return NULL;}
diff --git a/src/gameparams.h b/src/gameparams.h
index b50e943d2..bf9953c39 100644
--- a/src/gameparams.h
+++ b/src/gameparams.h
@@ -17,17 +17,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __GAME_PARAMS_H__
-#define __GAME_PARAMS_H__
+#ifndef GAME_PARAMS_H
+#define GAME_PARAMS_H
-#include "irrlichttypes_extrabloated.h"
+#include "irrlichttypes.h"
+
+struct SubgameSpec;
struct GameParams {
u16 socket_port;
std::string world_path;
SubgameSpec game_spec;
bool is_dedicated_server;
- int log_level;
};
#endif
diff --git a/src/genericobject.cpp b/src/genericobject.cpp
index 90e8cf3d3..368cae1ff 100644
--- a/src/genericobject.cpp
+++ b/src/genericobject.cpp
@@ -110,7 +110,7 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups)
writeU8(os, GENERIC_CMD_UPDATE_ARMOR_GROUPS);
writeU16(os, armor_groups.size());
for(ItemGroupList::const_iterator i = armor_groups.begin();
- i != armor_groups.end(); i++){
+ i != armor_groups.end(); ++i){
os<<serializeString(i->first);
writeS16(os, i->second);
}
diff --git a/src/gettext.cpp b/src/gettext.cpp
index 0fd6b574e..81d93fef3 100644
--- a/src/gettext.cpp
+++ b/src/gettext.cpp
@@ -117,107 +117,87 @@ const char* MSVC_LocaleLookup(const char* raw_shortname) {
#endif
/******************************************************************************/
-#ifdef _MSC_VER
-void init_gettext(const char *path, const std::string &configured_language, int argc, char** argv) {
-#else
-void init_gettext(const char *path, const std::string &configured_language) {
-#endif
+void init_gettext(const char *path, const std::string &configured_language,
+ int argc, char *argv[])
+{
#if USE_GETTEXT
- /** first try to set user override environment **/
- if (configured_language.length() != 0) {
+ // First, try to set user override environment
+ if (!configured_language.empty()) {
#ifndef _WIN32
- /* add user specified locale to environment */
+ // Add user specified locale to environment
setenv("LANGUAGE", configured_language.c_str(), 1);
- /* reload locale with changed environment */
+ // Reload locale with changed environment
setlocale(LC_ALL, "");
#elif defined(_MSC_VER)
- std::string current_language_var("");
- if (getenv("LANGUAGE") != 0) {
- current_language_var = std::string(getenv("LANGUAGE"));
- }
-
- char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char));
- strcat(lang_str, "LANGUAGE=");
- strcat(lang_str, configured_language.c_str());
- putenv(lang_str);
+ std::string current_language;
+ const char *env_lang = getenv("LANGUAGE");
+ if (env_lang)
+ current_language = env_lang;
- SetEnvironmentVariableA("LANGUAGE",configured_language.c_str());
+ _putenv(("LANGUAGE=" + configured_language).c_str());
+ SetEnvironmentVariableA("LANGUAGE", configured_language.c_str());
#ifndef SERVER
- //very very dirty workaround to force gettext to see the right environment
- if (current_language_var != configured_language) {
- STARTUPINFO startupinfo;
- PROCESS_INFORMATION processinfo;
- memset(&startupinfo, 0, sizeof(startupinfo));
- memset(&processinfo, 0, sizeof(processinfo));
- errorstream << "MSVC localization workaround active restating minetest in new environment!" << std::endl;
-
- std::string parameters = "";
-
- for (unsigned int i=1;i < argc; i++) {
- if (parameters != "") {
- parameters += " ";
- }
+ // Hack to force gettext to see the right environment
+ if (current_language != configured_language) {
+ errorstream << "MSVC localization workaround active. "
+ "Restarting " PROJECT_NAME_C " in a new environment!" << std::endl;
+
+ std::string parameters;
+
+ for (unsigned int i = 1; i < argc; i++) {
+ if (!parameters.empty())
+ parameters += ' ';
+
parameters += argv[i];
}
- const char* ptr_parameters = 0;
+ const char *ptr_parameters = NULL;
- if (parameters != "") {
+ if (!parameters.empty())
ptr_parameters = parameters.c_str();
- }
-
- /** users may start by short name in commandline without extention **/
- std::string appname = argv[0];
- if (appname.substr(appname.length() - 4) != ".exe") {
- appname += ".exe";
- }
- if (!CreateProcess(appname.c_str(),
- (char*) ptr_parameters,
- NULL,
- NULL,
- false,
- DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT,
- NULL,
- NULL,
- &startupinfo,
- &processinfo)) {
- char buffer[1024];
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
- buffer,
- sizeof(buffer)-1,
- NULL);
+ // Allow calling without an extension
+ std::string app_name = argv[0];
+ if (app_name.compare(app_name.size() - 4, 4, ".exe") != 0)
+ app_name += ".exe";
+
+ STARTUPINFO startup_info = {0};
+ PROCESS_INFORMATION process_info = {0};
+
+ bool success = CreateProcess(app_name.c_str(), (char *)ptr_parameters,
+ NULL, NULL, false, DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT,
+ NULL, NULL, &startup_info, &process_info);
+
+ if (success) {
+ exit(0);
+ // NOTREACHED
+ } else {
+ char buffer[1024];
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
+ MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), buffer,
+ sizeof(buffer) - 1, NULL);
+
errorstream << "*******************************************************" << std::endl;
- errorstream << "CMD: " << appname << std::endl;
+ errorstream << "CMD: " << app_name << std::endl;
errorstream << "Failed to restart with current locale: " << std::endl;
errorstream << buffer;
errorstream << "Expect language to be broken!" << std::endl;
errorstream << "*******************************************************" << std::endl;
}
- else {
- exit(0);
- }
+ }
#else
- errorstream << "*******************************************************" << std::endl;
- errorstream << "Can't apply locale workaround for server!" << std::endl;
- errorstream << "Expect language to be broken!" << std::endl;
- errorstream << "*******************************************************" << std::endl;
-
+ errorstream << "*******************************************************" << std::endl;
+ errorstream << "Can't apply locale workaround for server!" << std::endl;
+ errorstream << "Expect language to be broken!" << std::endl;
+ errorstream << "*******************************************************" << std::endl;
#endif
- }
- setlocale(LC_ALL,configured_language.c_str());
+ setlocale(LC_ALL, configured_language.c_str());
#else // Mingw
- char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char));
- strcat(lang_str, "LANGUAGE=");
- strcat(lang_str, configured_language.c_str());
- putenv(lang_str);
-
+ _putenv(("LANGUAGE=" + configured_language).c_str());
setlocale(LC_ALL, "");
#endif // ifndef _WIN32
}
@@ -266,4 +246,3 @@ void init_gettext(const char *path, const std::string &configured_language) {
infostream << "Message locale is now set to: "
<< setlocale(LC_ALL, 0) << std::endl;
}
-
diff --git a/src/gettext.h b/src/gettext.h
index 9b4e801f7..b8d27f77c 100644
--- a/src/gettext.h
+++ b/src/gettext.h
@@ -32,12 +32,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define gettext_noop(String) (String)
#define N_(String) gettext_noop((String))
-#ifdef _MSC_VER
void init_gettext(const char *path, const std::string &configured_language,
- int argc, char** argv);
-#else
-void init_gettext(const char *path, const std::string &configured_language);
-#endif
+ int argc, char *argv[]);
extern wchar_t *utf8_to_wide_c(const char *str);
@@ -48,14 +44,6 @@ inline const wchar_t *wgettext(const char *str)
return utf8_to_wide_c(gettext(str));
}
-inline std::wstring wstrgettext(const std::string &text)
-{
- const wchar_t *tmp = wgettext(text.c_str());
- std::wstring retval = (std::wstring)tmp;
- delete[] tmp;
- return retval;
-}
-
inline std::string strgettext(const std::string &text)
{
return gettext(text.c_str());
diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp
index 3937e405c..17a1689c7 100644
--- a/src/guiChatConsole.cpp
+++ b/src/guiChatConsole.cpp
@@ -46,15 +46,18 @@ GUIChatConsole::GUIChatConsole(
gui::IGUIElement* parent,
s32 id,
ChatBackend* backend,
- Client* client
+ Client* client,
+ IMenuManager* menumgr
):
IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
core::rect<s32>(0,0,100,100)),
m_chat_backend(backend),
m_client(client),
+ m_menumgr(menumgr),
m_screensize(v2u32(0,0)),
m_animate_time_old(0),
m_open(false),
+ m_close_on_enter(false),
m_height(0),
m_desired_height(0),
m_desired_height_fraction(0.0),
@@ -119,6 +122,10 @@ void GUIChatConsole::openConsole(f32 height)
m_desired_height_fraction = height;
m_desired_height = height * m_screensize.Y;
reformatConsole();
+ m_animate_time_old = getTimeMs();
+ IGUIElement::setVisible(true);
+ Environment->setFocus(this);
+ m_menumgr->createdMenu(this);
}
bool GUIChatConsole::isOpen() const
@@ -134,11 +141,13 @@ bool GUIChatConsole::isOpenInhibited() const
void GUIChatConsole::closeConsole()
{
m_open = false;
+ Environment->removeFocus(this);
+ m_menumgr->deletingMenu(this);
}
void GUIChatConsole::closeConsoleAtOnce()
{
- m_open = false;
+ closeConsole();
m_height = 0;
recalculateConsolePosition();
}
@@ -148,6 +157,14 @@ f32 GUIChatConsole::getDesiredHeight() const
return m_desired_height_fraction;
}
+void GUIChatConsole::replaceAndAddToHistory(std::wstring line)
+{
+ ChatPrompt& prompt = m_chat_backend->getPrompt();
+ prompt.addToHistory(prompt.getLine());
+ prompt.replace(line);
+}
+
+
void GUIChatConsole::setCursor(
bool visible, bool blinking, f32 blink_speed, f32 relative_height)
{
@@ -228,6 +245,13 @@ void GUIChatConsole::animate(u32 msec)
{
// animate the console height
s32 goal = m_open ? m_desired_height : 0;
+
+ // Set invisible if close animation finished (reset by openConsole)
+ // This function (animate()) is never called once its visibility becomes false so do not
+ // actually set visible to false before the inhibited period is over
+ if (!m_open && m_height == 0 && m_open_inhibited == 0)
+ IGUIElement::setVisible(false);
+
if (m_height != goal)
{
s32 max_change = msec * m_screensize.Y * (m_height_speed / 1000.0);
@@ -362,13 +386,15 @@ void GUIChatConsole::drawPrompt()
s32 cursor_pos = prompt.getVisibleCursorPosition();
if (cursor_pos >= 0)
{
+ s32 cursor_len = prompt.getCursorLength();
video::IVideoDriver* driver = Environment->getVideoDriver();
s32 x = (1 + cursor_pos) * m_fontsize.X;
core::rect<s32> destrect(
x,
- y + (1.0-m_cursor_height) * m_fontsize.Y,
- x + m_fontsize.X,
- y + m_fontsize.Y);
+ y + m_fontsize.Y * (1.0 - m_cursor_height),
+ x + m_fontsize.X * MYMAX(cursor_len, 1),
+ y + m_fontsize.Y * (cursor_len ? m_cursor_height+1 : 1)
+ );
video::SColor cursor_color(255,255,255,255);
driver->draw2DRectangle(
cursor_color,
@@ -381,23 +407,27 @@ void GUIChatConsole::drawPrompt()
bool GUIChatConsole::OnEvent(const SEvent& event)
{
+
+ ChatPrompt &prompt = m_chat_backend->getPrompt();
+
if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
{
// Key input
if(KeyPress(event.KeyInput) == getKeySetting("keymap_console"))
{
closeConsole();
- Environment->removeFocus(this);
// inhibit open so the_game doesn't reopen immediately
m_open_inhibited = 50;
+ m_close_on_enter = false;
return true;
}
else if(event.KeyInput.Key == KEY_ESCAPE)
{
closeConsoleAtOnce();
- Environment->removeFocus(this);
- // the_game will open the pause menu
+ m_close_on_enter = false;
+ // inhibit open so the_game doesn't reopen immediately
+ m_open_inhibited = 1; // so the ESCAPE button doesn't open the "pause menu"
return true;
}
else if(event.KeyInput.Key == KEY_PRIOR)
@@ -412,57 +442,50 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
}
else if(event.KeyInput.Key == KEY_RETURN)
{
- std::wstring text = m_chat_backend->getPrompt().submit();
+ prompt.addToHistory(prompt.getLine());
+ std::wstring text = prompt.replace(L"");
m_client->typeChatMessage(text);
+ if (m_close_on_enter) {
+ closeConsoleAtOnce();
+ m_close_on_enter = false;
+ }
return true;
}
else if(event.KeyInput.Key == KEY_UP)
{
// Up pressed
// Move back in history
- m_chat_backend->getPrompt().historyPrev();
+ prompt.historyPrev();
return true;
}
else if(event.KeyInput.Key == KEY_DOWN)
{
// Down pressed
// Move forward in history
- m_chat_backend->getPrompt().historyNext();
- return true;
- }
- else if(event.KeyInput.Key == KEY_LEFT)
- {
- // Left or Ctrl-Left pressed
- // move character / word to the left
- ChatPrompt::CursorOpScope scope =
- event.KeyInput.Control ?
- ChatPrompt::CURSOROP_SCOPE_WORD :
- ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
- ChatPrompt::CURSOROP_MOVE,
- ChatPrompt::CURSOROP_DIR_LEFT,
- scope);
+ prompt.historyNext();
return true;
}
- else if(event.KeyInput.Key == KEY_RIGHT)
+ else if(event.KeyInput.Key == KEY_LEFT || event.KeyInput.Key == KEY_RIGHT)
{
- // Right or Ctrl-Right pressed
- // move character / word to the right
- ChatPrompt::CursorOpScope scope =
- event.KeyInput.Control ?
+ // Left/right pressed
+ // Move/select character/word to the left depending on control and shift keys
+ ChatPrompt::CursorOp op = event.KeyInput.Shift ?
+ ChatPrompt::CURSOROP_SELECT :
+ ChatPrompt::CURSOROP_MOVE;
+ ChatPrompt::CursorOpDir dir = event.KeyInput.Key == KEY_LEFT ?
+ ChatPrompt::CURSOROP_DIR_LEFT :
+ ChatPrompt::CURSOROP_DIR_RIGHT;
+ ChatPrompt::CursorOpScope scope = event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
- ChatPrompt::CURSOROP_MOVE,
- ChatPrompt::CURSOROP_DIR_RIGHT,
- scope);
+ prompt.cursorOperation(op, dir, scope);
return true;
}
else if(event.KeyInput.Key == KEY_HOME)
{
// Home pressed
// move to beginning of line
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_LEFT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -472,7 +495,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// End pressed
// move to end of line
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_RIGHT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -486,7 +509,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_LEFT,
scope);
@@ -500,30 +523,72 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_RIGHT,
scope);
return true;
}
+ else if(event.KeyInput.Key == KEY_KEY_A && event.KeyInput.Control)
+ {
+ // Ctrl-A pressed
+ // Select all text
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_SELECT,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_LINE);
+ return true;
+ }
+ else if(event.KeyInput.Key == KEY_KEY_C && event.KeyInput.Control)
+ {
+ // Ctrl-C pressed
+ // Copy text to clipboard
+ if (prompt.getCursorLength() <= 0)
+ return true;
+ std::wstring wselected = prompt.getSelection();
+ std::string selected(wselected.begin(), wselected.end());
+ Environment->getOSOperator()->copyToClipboard(selected.c_str());
+ return true;
+ }
else if(event.KeyInput.Key == KEY_KEY_V && event.KeyInput.Control)
{
// Ctrl-V pressed
// paste text from clipboard
+ if (prompt.getCursorLength() > 0) {
+ // Delete selected section of text
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_SELECTION);
+ }
IOSOperator *os_operator = Environment->getOSOperator();
const c8 *text = os_operator->getTextFromClipboard();
- if (text)
- {
- std::wstring wtext = narrow_to_wide(text);
- m_chat_backend->getPrompt().input(wtext);
- }
+ if (!text)
+ return true;
+ std::basic_string<unsigned char> str((const unsigned char*)text);
+ prompt.input(std::wstring(str.begin(), str.end()));
+ return true;
+ }
+ else if(event.KeyInput.Key == KEY_KEY_X && event.KeyInput.Control)
+ {
+ // Ctrl-X pressed
+ // Cut text to clipboard
+ if (prompt.getCursorLength() <= 0)
+ return true;
+ std::wstring wselected = prompt.getSelection();
+ std::string selected(wselected.begin(), wselected.end());
+ Environment->getOSOperator()->copyToClipboard(selected.c_str());
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT, // Ignored
+ ChatPrompt::CURSOROP_SCOPE_SELECTION);
return true;
}
else if(event.KeyInput.Key == KEY_KEY_U && event.KeyInput.Control)
{
// Ctrl-U pressed
// kill line to left end
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_LEFT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -533,7 +598,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// Ctrl-K pressed
// kill line to right end
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_RIGHT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -545,7 +610,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
// Nick completion
std::list<std::string> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
- m_chat_backend->getPrompt().nickCompletion(names, backwards);
+ prompt.nickCompletion(names, backwards);
return true;
}
else if(event.KeyInput.Char != 0 && !event.KeyInput.Control)
@@ -553,9 +618,9 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
#if (defined(linux) || defined(__linux))
wchar_t wc = L'_';
mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
- m_chat_backend->getPrompt().input(wc);
+ prompt.input(wc);
#else
- m_chat_backend->getPrompt().input(event.KeyInput.Char);
+ prompt.input(event.KeyInput.Char);
#endif
return true;
}
@@ -572,3 +637,13 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
return Parent ? Parent->OnEvent(event) : false;
}
+void GUIChatConsole::setVisible(bool visible)
+{
+ m_open = visible;
+ IGUIElement::setVisible(visible);
+ if (!visible) {
+ m_height = 0;
+ recalculateConsolePosition();
+ }
+}
+
diff --git a/src/guiChatConsole.h b/src/guiChatConsole.h
index 652b265a4..3013a1d31 100644
--- a/src/guiChatConsole.h
+++ b/src/guiChatConsole.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define GUICHATCONSOLE_HEADER
#include "irrlichttypes_extrabloated.h"
+#include "modalMenu.h"
#include "chat.h"
#include "config.h"
@@ -33,7 +34,8 @@ public:
gui::IGUIElement* parent,
s32 id,
ChatBackend* backend,
- Client* client);
+ Client* client,
+ IMenuManager* menumgr);
virtual ~GUIChatConsole();
// Open the console (height = desired fraction of screen size)
@@ -51,11 +53,16 @@ public:
void closeConsole();
// Close the console immediately, without animation.
void closeConsoleAtOnce();
+ // Set whether to close the console after the user presses enter.
+ void setCloseOnEnter(bool close) { m_close_on_enter = close; }
// Return the desired height (fraction of screen size)
// Zero if the console is closed or getting closed
f32 getDesiredHeight() const;
+ // Replace actual line when adding the actual to the history (if there is any)
+ void replaceAndAddToHistory(std::wstring line);
+
// Change how the cursor looks
void setCursor(
bool visible,
@@ -70,6 +77,8 @@ public:
virtual bool OnEvent(const SEvent& event);
+ virtual void setVisible(bool visible);
+
private:
void reformatConsole();
void recalculateConsolePosition();
@@ -81,11 +90,9 @@ private:
void drawPrompt();
private:
- // pointer to the chat backend
ChatBackend* m_chat_backend;
-
- // pointer to the client
Client* m_client;
+ IMenuManager* m_menumgr;
// current screen size
v2u32 m_screensize;
@@ -95,6 +102,8 @@ private:
// should the console be opened or closed?
bool m_open;
+ // should it close after you press enter?
+ bool m_close_on_enter;
// current console height [pixels]
s32 m_height;
// desired height [pixels]
diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp
index c616bc322..ba286a91c 100644
--- a/src/guiEngine.cpp
+++ b/src/guiEngine.cpp
@@ -238,13 +238,13 @@ bool GUIEngine::loadMainMenuScript()
}
std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
- if (m_script->loadScript(script)) {
+ try {
+ m_script->loadScript(script);
// Menu script loaded
return true;
- } else {
- infostream
- << "GUIEngine: execution of menu script in: \""
- << m_scriptdir << "\" failed!" << std::endl;
+ } catch (const ModError &e) {
+ errorstream << "GUIEngine: execution of menu script failed: "
+ << e.what() << std::endl;
}
return false;
@@ -361,7 +361,7 @@ void GUIEngine::cloudPreProcess()
/******************************************************************************/
void GUIEngine::cloudPostProcess()
{
- float fps_max = g_settings->getFloat("fps_max");
+ float fps_max = g_settings->getFloat("pause_fps_max");
// Time of frame without fps limit
u32 busytime_u32;
diff --git a/src/guiFileSelectMenu.cpp b/src/guiFileSelectMenu.cpp
index e02407427..0bb02f8a6 100644
--- a/src/guiFileSelectMenu.cpp
+++ b/src/guiFileSelectMenu.cpp
@@ -36,6 +36,7 @@ GUIModalMenu(env, parent, id, menumgr)
GUIFileSelectMenu::~GUIFileSelectMenu()
{
removeChildren();
+ setlocale(LC_NUMERIC, "C");
}
void GUIFileSelectMenu::removeChildren()
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index 62a84460f..2bf06c1d6 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "constants.h"
#include "gamedef.h"
#include "keycode.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include <IGUICheckBox.h>
#include <IGUIEditBox.h>
#include <IGUIButton.h>
@@ -240,6 +240,15 @@ GUITable* GUIFormSpecMenu::getTable(const std::string &tablename)
return 0;
}
+std::vector<std::string>* GUIFormSpecMenu::getDropDownValues(const std::string &name)
+{
+ for (u32 i = 0; i < m_dropdowns.size(); ++i) {
+ if (name == m_dropdowns[i].first.fname)
+ return &m_dropdowns[i].second;
+ }
+ return NULL;
+}
+
static std::vector<std::string> split(const std::string &s, char delim)
{
std::vector<std::string> tokens;
@@ -300,7 +309,7 @@ void GUIFormSpecMenu::parseSize(parserData* data,std::string element)
void GUIFormSpecMenu::parseList(parserData* data,std::string element)
{
if (m_gamedef == 0) {
- errorstream<<"WARNING: invalid use of 'list' with m_gamedef==0"<<std::endl;
+ warningstream<<"invalid use of 'list' with m_gamedef==0"<<std::endl;
return;
}
@@ -345,7 +354,7 @@ void GUIFormSpecMenu::parseList(parserData* data,std::string element)
}
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of list without a size[] element"<<std::endl;
+ warningstream<<"invalid use of list without a size[] element"<<std::endl;
m_inventorylists.push_back(ListDrawSpec(loc, listname, pos, geom, start_i));
return;
}
@@ -413,7 +422,7 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element)
if (selected == "true")
fselected = true;
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
core::rect<s32> rect = core::rect<s32>(
pos.X, pos.Y + ((imgsize.Y/2) - m_btn_height),
@@ -450,7 +459,7 @@ void GUIFormSpecMenu::parseScrollBar(parserData* data, std::string element)
if (parts.size() >= 5) {
std::vector<std::string> v_pos = split(parts[0],',');
std::vector<std::string> v_dim = split(parts[1],',');
- std::string name = parts[2];
+ std::string name = parts[3];
std::string value = parts[4];
MY_CHECKPOS("scrollbar",0);
@@ -525,7 +534,7 @@ void GUIFormSpecMenu::parseImage(parserData* data,std::string element)
geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of image without a size[] element"<<std::endl;
+ warningstream<<"invalid use of image without a size[] element"<<std::endl;
m_images.push_back(ImageDrawSpec(name, pos, geom));
return;
}
@@ -541,7 +550,7 @@ void GUIFormSpecMenu::parseImage(parserData* data,std::string element)
pos.Y += stof(v_pos[1]) * (float) spacing.Y;
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of image without a size[] element"<<std::endl;
+ warningstream<<"invalid use of image without a size[] element"<<std::endl;
m_images.push_back(ImageDrawSpec(name, pos));
return;
}
@@ -571,8 +580,8 @@ void GUIFormSpecMenu::parseItemImage(parserData* data,std::string element)
geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of item_image without a size[] element"<<std::endl;
- m_itemimages.push_back(ImageDrawSpec(name, pos, geom));
+ warningstream<<"invalid use of item_image without a size[] element"<<std::endl;
+ m_itemimages.push_back(ImageDrawSpec("", name, pos, geom));
return;
}
errorstream<< "Invalid ItemImage element(" << parts.size() << "): '" << element << "'" << std::endl;
@@ -607,11 +616,9 @@ void GUIFormSpecMenu::parseButton(parserData* data,std::string element,
pos.X + geom.X, pos.Y + m_btn_height);
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of button without a size[] element"<<std::endl;
-
- label = unescape_string(label);
+ warningstream<<"invalid use of button without a size[] element"<<std::endl;
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
FieldSpec spec(
name,
@@ -666,7 +673,7 @@ void GUIFormSpecMenu::parseBackground(parserData* data,std::string element)
}
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of background without a size[] element"<<std::endl;
+ warningstream<<"invalid use of background without a size[] element"<<std::endl;
m_backgrounds.push_back(ImageDrawSpec(name, pos, geom));
return;
}
@@ -733,7 +740,6 @@ void GUIFormSpecMenu::parseTable(parserData* data,std::string element)
geom.X = stof(v_geom[0]) * (float)spacing.X;
geom.Y = stof(v_geom[1]) * (float)spacing.Y;
-
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
FieldSpec spec(
@@ -746,7 +752,7 @@ void GUIFormSpecMenu::parseTable(parserData* data,std::string element)
spec.ftype = f_Table;
for (unsigned int i = 0; i < items.size(); ++i) {
- items[i] = unescape_string(items[i]);
+ items[i] = unescape_enriched(unescape_string(items[i]));
}
//now really show table
@@ -818,7 +824,7 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element)
spec.ftype = f_Table;
for (unsigned int i = 0; i < items.size(); ++i) {
- items[i] = unescape_string(items[i]);
+ items[i] = unescape_enriched(unescape_string(items[i]));
}
//now really show list
@@ -889,13 +895,22 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element)
}
for (unsigned int i=0; i < items.size(); i++) {
- e->addItem(utf8_to_wide(items[i]).c_str());
+ e->addItem(unescape_enriched(unescape_string(
+ utf8_to_wide(items[i]))).c_str());
}
if (str_initial_selection != "")
e->setSelected(stoi(str_initial_selection.c_str())-1);
m_fields.push_back(spec);
+
+ m_dropdowns.push_back(std::pair<FieldSpec,
+ std::vector<std::string> >(spec, std::vector<std::string>()));
+ std::vector<std::string> &values = m_dropdowns.back().second;
+ for (unsigned int i = 0; i < items.size(); i++) {
+ values.push_back(unescape_string(items[i]));
+ }
+
return;
}
errorstream << "Invalid dropdown element(" << parts.size() << "): '"
@@ -930,9 +945,7 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element)
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- label = unescape_string(label);
-
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
FieldSpec spec(
name,
@@ -982,7 +995,7 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data,
core::rect<s32> rect;
if(data->explicit_size)
- errorstream<<"WARNING: invalid use of unpositioned \"field\" in inventory"<<std::endl;
+ warningstream<<"invalid use of unpositioned \"field\" in inventory"<<std::endl;
v2s32 pos = padding + AbsoluteRect.UpperLeftCorner;
pos.Y = ((m_fields.size()+2)*60);
@@ -995,15 +1008,13 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data,
if(m_form_src)
default_val = m_form_src->resolveText(default_val);
- default_val = unescape_string(default_val);
- label = unescape_string(label);
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
FieldSpec spec(
name,
wlabel,
- utf8_to_wide(default_val),
+ utf8_to_wide(unescape_string(default_val)),
258+m_fields.size()
);
@@ -1088,21 +1099,18 @@ void GUIFormSpecMenu::parseTextArea(parserData* data,
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of positioned "<<type<<" without a size[] element"<<std::endl;
+ warningstream<<"invalid use of positioned "<<type<<" without a size[] element"<<std::endl;
if(m_form_src)
default_val = m_form_src->resolveText(default_val);
- default_val = unescape_string(default_val);
- label = unescape_string(label);
-
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
FieldSpec spec(
name,
wlabel,
- utf8_to_wide(default_val),
+ utf8_to_wide(unescape_string(default_val)),
258+m_fields.size()
);
@@ -1195,9 +1203,8 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element)
pos.Y += (stof(v_pos[1]) + 7.0/30.0) * (float)spacing.Y;
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of label without a size[] element"<<std::endl;
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
- text = unescape_string(text);
std::vector<std::string> lines = split(text, '\n');
for (unsigned int i = 0; i != lines.size(); i++) {
@@ -1211,7 +1218,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element)
// in the integer cases: 0.4 is not exactly
// representable in binary floating point.
s32 posy = pos.Y + ((float)i) * spacing.Y * 2.0 / 5.0;
- std::wstring wlabel = utf8_to_wide(lines[i]);
+ std::wstring wlabel = utf8_to_wide(unescape_string(lines[i]));
core::rect<s32> rect = core::rect<s32>(
pos.X, posy - m_btn_height,
pos.X + m_font->getDimension(wlabel.c_str()).Width,
@@ -1243,7 +1250,8 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element)
((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION)))
{
std::vector<std::string> v_pos = split(parts[0],',');
- std::wstring text = utf8_to_wide(unescape_string(parts[1]));
+ std::wstring text = unescape_enriched(
+ unescape_string(utf8_to_wide(parts[1])));
MY_CHECKPOS("vertlabel",1);
@@ -1260,7 +1268,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element)
//actually text.length() would be correct but adding +1 avoids to break all mods
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of label without a size[] element"<<std::endl;
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
std::wstring label = L"";
@@ -1326,13 +1334,12 @@ void GUIFormSpecMenu::parseImageButton(parserData* data,std::string element,
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of image_button without a size[] element"<<std::endl;
+ warningstream<<"invalid use of image_button without a size[] element"<<std::endl;
image_name = unescape_string(image_name);
pressed_image_name = unescape_string(pressed_image_name);
- label = unescape_string(label);
- std::wstring wlabel = utf8_to_wide(label);
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
FieldSpec spec(
name,
@@ -1430,7 +1437,8 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data,std::string element)
e->setNotClipped(true);
for (unsigned int i = 0; i < buttons.size(); i++) {
- e->addTab(utf8_to_wide(buttons[i]).c_str(), -1);
+ e->addTab(unescape_enriched(unescape_string(
+ utf8_to_wide(buttons[i]))).c_str(), -1);
}
if ((tab_index >= 0) &&
@@ -1449,9 +1457,8 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
{
if (m_gamedef == 0) {
- errorstream <<
- "WARNING: invalid use of item_image_button with m_gamedef==0"
- << std::endl;
+ warningstream << "invalid use of item_image_button with m_gamedef==0"
+ << std::endl;
return;
}
@@ -1466,6 +1473,9 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
std::string name = parts[3];
std::string label = parts[4];
+ label = unescape_string(label);
+ item_name = unescape_string(item_name);
+
MY_CHECKPOS("itemimagebutton",0);
MY_CHECKGEOM("itemimagebutton",1);
@@ -1479,19 +1489,17 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
if(!data->explicit_size)
- errorstream<<"WARNING: invalid use of item_image_button without a size[] element"<<std::endl;
+ warningstream<<"invalid use of item_image_button without a size[] element"<<std::endl;
IItemDefManager *idef = m_gamedef->idef();
ItemStack item;
item.deSerialize(item_name, idef);
- video::ITexture *texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef);
m_tooltips[name] =
TooltipSpec(item.getDefinition(idef).description,
m_default_tooltip_bgcolor,
m_default_tooltip_color);
- label = unescape_string(label);
FieldSpec spec(
name,
utf8_to_wide(label),
@@ -1499,20 +1507,21 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element)
258 + m_fields.size()
);
- gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, spec.flabel.c_str());
+ gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, L"");
if (spec.fname == data->focused_fieldname) {
Environment->setFocus(e);
}
- e->setUseAlphaChannel(true);
- e->setImage(guiScalingImageButton(Environment->getVideoDriver(), texture, geom.X, geom.Y));
- e->setPressedImage(guiScalingImageButton(Environment->getVideoDriver(), texture, geom.X, geom.Y));
- e->setScaleImage(true);
spec.ftype = f_Button;
rect+=data->basepos-padding;
spec.rect=rect;
m_fields.push_back(spec);
+ pos = padding + AbsoluteRect.UpperLeftCorner;
+ pos.X += stof(v_pos[0]) * (float) spacing.X;
+ pos.Y += stof(v_pos[1]) * (float) spacing.Y;
+ m_itemimages.push_back(ImageDrawSpec("", item_name, e, pos, geom));
+ m_static_texts.push_back(StaticTextSpec(utf8_to_wide(label), rect, e));
return;
}
errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
@@ -1880,6 +1889,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
m_fields.clear();
m_boxes.clear();
m_tooltips.clear();
+ m_inventory_rings.clear();
+ m_static_texts.clear();
// Set default values (fits old formspec values)
m_bgcolor = video::SColor(140,0,0,0);
@@ -2103,7 +2114,7 @@ bool GUIFormSpecMenu::getAndroidUIInput()
}
for(std::vector<FieldSpec>::iterator iter = m_fields.begin();
- iter != m_fields.end(); iter++) {
+ iter != m_fields.end(); ++iter) {
if (iter->fname != fieldname) {
continue;
@@ -2151,13 +2162,14 @@ GUIFormSpecMenu::ItemSpec GUIFormSpecMenu::getItemAtPos(v2s32 p) const
return ItemSpec(InventoryLocation(), "", -1);
}
-void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase)
+void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase,
+ bool &item_hovered)
{
video::IVideoDriver* driver = Environment->getVideoDriver();
Inventory *inv = m_invmgr->getInventory(s.inventoryloc);
if(!inv){
- infostream<<"GUIFormSpecMenu::drawList(): WARNING: "
+ warningstream<<"GUIFormSpecMenu::drawList(): "
<<"The inventory location "
<<"\""<<s.inventoryloc.dump()<<"\" doesn't exist"
<<std::endl;
@@ -2165,7 +2177,7 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase)
}
InventoryList *ilist = inv->getList(s.listname);
if(!ilist){
- infostream<<"GUIFormSpecMenu::drawList(): WARNING: "
+ warningstream<<"GUIFormSpecMenu::drawList(): "
<<"The inventory list \""<<s.listname<<"\" @ \""
<<s.inventoryloc.dump()<<"\" doesn't exist"
<<std::endl;
@@ -2192,13 +2204,16 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase)
&& m_selected_item->listname == s.listname
&& m_selected_item->i == item_i;
bool hovering = rect.isPointInside(m_pointer);
+ ItemRotationKind rotation_kind = selected ? IT_ROT_SELECTED :
+ (hovering ? IT_ROT_HOVERED : IT_ROT_NONE);
- if(phase == 0)
- {
- if(hovering)
+ if (phase == 0) {
+ if (hovering) {
+ item_hovered = true;
driver->draw2DRectangle(m_slotbg_h, rect, &AbsoluteClippingRect);
- else
+ } else {
driver->draw2DRectangle(m_slotbg_n, rect, &AbsoluteClippingRect);
+ }
}
//Draw inv slot borders
@@ -2232,22 +2247,25 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase)
if(!item.empty())
{
drawItemStack(driver, m_font, item,
- rect, &AbsoluteClippingRect, m_gamedef);
+ rect, &AbsoluteClippingRect, m_gamedef,
+ rotation_kind);
}
// Draw tooltip
- std::string tooltip_text = "";
- if (hovering && !m_selected_item)
- tooltip_text = item.getDefinition(m_gamedef->idef()).description;
- if (tooltip_text != "") {
- std::vector<std::string> tt_rows = str_split(tooltip_text, '\n');
+ std::wstring tooltip_text = L"";
+ if (hovering && !m_selected_item) {
+ tooltip_text = utf8_to_wide(item.getDefinition(m_gamedef->idef()).description);
+ tooltip_text = unescape_enriched(tooltip_text);
+ }
+ if (tooltip_text != L"") {
+ std::vector<std::wstring> tt_rows = str_split(tooltip_text, L'\n');
m_tooltip_element->setBackgroundColor(m_default_tooltip_bgcolor);
m_tooltip_element->setOverrideColor(m_default_tooltip_color);
m_tooltip_element->setVisible(true);
this->bringToFront(m_tooltip_element);
- m_tooltip_element->setText(utf8_to_wide(tooltip_text).c_str());
+ m_tooltip_element->setText(tooltip_text.c_str());
s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height;
- s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5;
+ s32 tooltip_height = m_tooltip_element->getTextHeight() + 5;
v2u32 screenSize = driver->getScreenSize();
int tooltip_offset_x = m_btn_height;
int tooltip_offset_y = m_btn_height;
@@ -2273,11 +2291,15 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase)
void GUIFormSpecMenu::drawSelectedItem()
{
- if(!m_selected_item)
- return;
-
video::IVideoDriver* driver = Environment->getVideoDriver();
+ if (!m_selected_item) {
+ drawItemStack(driver, m_font, ItemStack(),
+ core::rect<s32>(v2s32(0, 0), v2s32(0, 0)),
+ NULL, m_gamedef, IT_ROT_DRAGGED);
+ return;
+ }
+
Inventory *inv = m_invmgr->getInventory(m_selected_item->inventoryloc);
sanity_check(inv);
InventoryList *list = inv->getList(m_selected_item->listname);
@@ -2287,7 +2309,7 @@ void GUIFormSpecMenu::drawSelectedItem()
core::rect<s32> imgrect(0,0,imgsize.X,imgsize.Y);
core::rect<s32> rect = imgrect + (m_pointer - imgrect.getCenter());
- drawItemStack(driver, m_font, stack, rect, NULL, m_gamedef);
+ drawItemStack(driver, m_font, stack, rect, NULL, m_gamedef, IT_ROT_DRAGGED);
}
void GUIFormSpecMenu::drawMenu()
@@ -2369,6 +2391,12 @@ void GUIFormSpecMenu::drawMenu()
driver->draw2DRectangle(todraw, rect, 0);
}
+
+ /*
+ Call base class
+ */
+ gui::IGUIElement::draw();
+
/*
Draw images
*/
@@ -2413,18 +2441,22 @@ void GUIFormSpecMenu::drawMenu()
const ImageDrawSpec &spec = m_itemimages[i];
IItemDefManager *idef = m_gamedef->idef();
ItemStack item;
- item.deSerialize(spec.name, idef);
- video::ITexture *texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef);
- // Image size on screen
+ item.deSerialize(spec.item_name, idef);
core::rect<s32> imgrect(0, 0, spec.geom.X, spec.geom.Y);
- // Image rectangle on screen
+ // Viewport rectangle on screen
core::rect<s32> rect = imgrect + spec.pos;
- const video::SColor color(255,255,255,255);
- const video::SColor colors[] = {color,color,color,color};
- draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0,0),
- core::dimension2di(texture->getOriginalSize())),
- NULL/*&AbsoluteClippingRect*/, colors, true);
+ if (spec.parent_button && spec.parent_button->isPressed()) {
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
+ rect += core::dimension2d<s32>(
+ 0.05 * (float)rect.getWidth(), 0.05 * (float)rect.getHeight());
+#else
+ rect += core::dimension2d<s32>(
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
+#endif
+ }
+ drawItemStack(driver, m_font, item, rect, &AbsoluteClippingRect,
+ m_gamedef, IT_ROT_NONE);
}
/*
@@ -2432,17 +2464,18 @@ void GUIFormSpecMenu::drawMenu()
Phase 0: Item slot rectangles
Phase 1: Item images; prepare tooltip
*/
- int start_phase=0;
- for(int phase=start_phase; phase<=1; phase++)
- for(u32 i=0; i<m_inventorylists.size(); i++)
- {
- drawList(m_inventorylists[i], phase);
+ bool item_hovered = false;
+ int start_phase = 0;
+ for (int phase = start_phase; phase <= 1; phase++) {
+ for (u32 i = 0; i < m_inventorylists.size(); i++) {
+ drawList(m_inventorylists[i], phase, item_hovered);
+ }
+ }
+ if (!item_hovered) {
+ drawItemStack(driver, m_font, ItemStack(),
+ core::rect<s32>(v2s32(0, 0), v2s32(0, 0)),
+ NULL, m_gamedef, IT_ROT_HOVERED);
}
-
- /*
- Call base class
- */
- gui::IGUIElement::draw();
/* TODO find way to show tooltips on touchscreen */
#ifndef HAVE_TOUCHSCREENGUI
@@ -2450,6 +2483,28 @@ void GUIFormSpecMenu::drawMenu()
#endif
/*
+ Draw static text elements
+ */
+ for (u32 i = 0; i < m_static_texts.size(); i++) {
+ const StaticTextSpec &spec = m_static_texts[i];
+ core::rect<s32> rect = spec.rect;
+ if (spec.parent_button && spec.parent_button->isPressed()) {
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
+ rect += core::dimension2d<s32>(
+ 0.05 * (float)rect.getWidth(), 0.05 * (float)rect.getHeight());
+#else
+ // Use image offset instead of text's because its a bit smaller
+ // and fits better, also TEXT_OFFSET_X is always 0
+ rect += core::dimension2d<s32>(
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
+#endif
+ }
+ video::SColor color(255, 255, 255, 255);
+ m_font->draw(spec.text.c_str(), rect, color, true, true, &rect);
+ }
+
+ /*
Draw fields/buttons tooltips
*/
gui::IGUIElement *hovered =
@@ -2461,7 +2516,7 @@ void GUIFormSpecMenu::drawMenu()
u32 delta = 0;
if (id == -1) {
m_old_tooltip_id = id;
- m_old_tooltip = "";
+ m_old_tooltip = L"";
} else {
if (id == m_old_tooltip_id) {
delta = porting::getDeltaMs(m_hovered_time, getTimeMs());
@@ -2473,12 +2528,12 @@ void GUIFormSpecMenu::drawMenu()
if (id != -1 && delta >= m_tooltip_show_delay) {
for(std::vector<FieldSpec>::iterator iter = m_fields.begin();
- iter != m_fields.end(); iter++) {
- if ( (iter->fid == id) && (m_tooltips[iter->fname].tooltip != "") ){
+ iter != m_fields.end(); ++iter) {
+ if (iter->fid == id && m_tooltips[iter->fname].tooltip != L"") {
if (m_old_tooltip != m_tooltips[iter->fname].tooltip) {
m_old_tooltip = m_tooltips[iter->fname].tooltip;
- m_tooltip_element->setText(utf8_to_wide(m_tooltips[iter->fname].tooltip).c_str());
- std::vector<std::string> tt_rows = str_split(m_tooltips[iter->fname].tooltip, '\n');
+ m_tooltip_element->setText(m_tooltips[iter->fname].tooltip.c_str());
+ std::vector<std::wstring> tt_rows = str_split(m_tooltips[iter->fname].tooltip, L'\n');
s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height;
s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5;
int tooltip_offset_x = m_btn_height;
@@ -2690,8 +2745,11 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
}
s32 selected = e->getSelected();
if (selected >= 0) {
- fields[name] =
- wide_to_utf8(e->getItem(selected));
+ 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) {
@@ -2832,7 +2890,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
core::position2d<s32>(x, y));
if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
m_old_tooltip_id = -1;
- m_old_tooltip = "";
+ m_old_tooltip = L"";
}
if (!isChild(hovered,this)) {
if (DoubleClickDetection(event)) {
@@ -3609,7 +3667,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
std::string GUIFormSpecMenu::getNameByID(s32 id)
{
for(std::vector<FieldSpec>::iterator iter = m_fields.begin();
- iter != m_fields.end(); iter++) {
+ iter != m_fields.end(); ++iter) {
if (iter->fid == id) {
return iter->fname;
}
@@ -3625,7 +3683,7 @@ std::string GUIFormSpecMenu::getNameByID(s32 id)
std::wstring GUIFormSpecMenu::getLabelByID(s32 id)
{
for(std::vector<FieldSpec>::iterator iter = m_fields.begin();
- iter != m_fields.end(); iter++) {
+ iter != m_fields.end(); ++iter) {
if (iter->fid == id) {
return iter->flabel;
}
diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h
index 2ba47f7ff..ef230c81c 100644
--- a/src/guiFormSpecMenu.h
+++ b/src/guiFormSpecMenu.h
@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "modalMenu.h"
#include "guiTable.h"
#include "network/networkprotocol.h"
+#include "util/string.h"
class IGameDef;
class InventoryManager;
@@ -139,25 +140,53 @@ class GUIFormSpecMenu : public GUIModalMenu
struct ImageDrawSpec
{
- ImageDrawSpec()
+ ImageDrawSpec():
+ parent_button(NULL)
{
}
ImageDrawSpec(const std::string &a_name,
- v2s32 a_pos, v2s32 a_geom):
+ const std::string &a_item_name,
+ gui::IGUIButton *a_parent_button,
+ const v2s32 &a_pos, const v2s32 &a_geom):
name(a_name),
+ item_name(a_item_name),
+ parent_button(a_parent_button),
pos(a_pos),
- geom(a_geom)
+ geom(a_geom),
+ scale(true)
+ {
+ }
+ ImageDrawSpec(const std::string &a_name,
+ const std::string &a_item_name,
+ const v2s32 &a_pos, const v2s32 &a_geom):
+ name(a_name),
+ item_name(a_item_name),
+ parent_button(NULL),
+ pos(a_pos),
+ geom(a_geom),
+ scale(true)
{
- scale = true;
}
ImageDrawSpec(const std::string &a_name,
- v2s32 a_pos):
+ const v2s32 &a_pos, const v2s32 &a_geom):
name(a_name),
- pos(a_pos)
+ parent_button(NULL),
+ pos(a_pos),
+ geom(a_geom),
+ scale(true)
+ {
+ }
+ ImageDrawSpec(const std::string &a_name,
+ const v2s32 &a_pos):
+ name(a_name),
+ parent_button(NULL),
+ pos(a_pos),
+ scale(false)
{
- scale = false;
}
std::string name;
+ std::string item_name;
+ gui::IGUIButton *parent_button;
v2s32 pos;
v2s32 geom;
bool scale;
@@ -169,12 +198,12 @@ class GUIFormSpecMenu : public GUIModalMenu
{
}
FieldSpec(const std::string &name, const std::wstring &label,
- const std::wstring &fdeflt, int id) :
+ const std::wstring &default_text, int id) :
fname(name),
- flabel(label),
- fdefault(fdeflt),
fid(id)
{
+ flabel = unescape_enriched(label);
+ fdefault = unescape_enriched(default_text);
send = false;
ftype = f_Unknown;
is_exit = false;
@@ -207,16 +236,41 @@ class GUIFormSpecMenu : public GUIModalMenu
}
TooltipSpec(std::string a_tooltip, irr::video::SColor a_bgcolor,
irr::video::SColor a_color):
- tooltip(a_tooltip),
bgcolor(a_bgcolor),
color(a_color)
{
+ tooltip = unescape_enriched(utf8_to_wide(a_tooltip));
}
- std::string tooltip;
+ std::wstring tooltip;
irr::video::SColor bgcolor;
irr::video::SColor color;
};
+ struct StaticTextSpec {
+ StaticTextSpec():
+ parent_button(NULL)
+ {
+ }
+ StaticTextSpec(const std::wstring &a_text,
+ const core::rect<s32> &a_rect):
+ rect(a_rect),
+ parent_button(NULL)
+ {
+ text = unescape_enriched(a_text);
+ }
+ StaticTextSpec(const std::wstring &a_text,
+ const core::rect<s32> &a_rect,
+ gui::IGUIButton *a_parent_button):
+ rect(a_rect),
+ parent_button(a_parent_button)
+ {
+ text = unescape_enriched(a_text);
+ }
+ std::wstring text;
+ core::rect<s32> rect;
+ gui::IGUIButton *parent_button;
+ };
+
public:
GUIFormSpecMenu(irr::IrrlichtDevice* dev,
gui::IGUIElement* parent, s32 id,
@@ -282,7 +336,7 @@ public:
void regenerateGui(v2u32 screensize);
ItemSpec getItemAtPos(v2s32 p) const;
- void drawList(const ListDrawSpec &s, int phase);
+ void drawList(const ListDrawSpec &s, int phase, bool &item_hovered);
void drawSelectedItem();
void drawMenu();
void updateSelectedItem();
@@ -295,6 +349,7 @@ public:
bool pausesGame() { return doPause; }
GUITable* getTable(const std::string &tablename);
+ std::vector<std::string>* getDropDownValues(const std::string &name);
#ifdef __ANDROID__
bool getAndroidUIInput();
@@ -328,12 +383,16 @@ protected:
std::vector<ImageDrawSpec> m_itemimages;
std::vector<BoxDrawSpec> m_boxes;
std::vector<FieldSpec> m_fields;
+ std::vector<StaticTextSpec> m_static_texts;
std::vector<std::pair<FieldSpec,GUITable*> > m_tables;
std::vector<std::pair<FieldSpec,gui::IGUICheckBox*> > m_checkboxes;
std::map<std::string, TooltipSpec> m_tooltips;
std::vector<std::pair<FieldSpec,gui::IGUIScrollBar*> > m_scrollbars;
+ std::vector<std::pair<FieldSpec, std::vector<std::string> > > m_dropdowns;
ItemSpec *m_selected_item;
+ f32 m_timer1;
+ f32 m_timer2;
u32 m_selected_amount;
bool m_selected_dragging;
@@ -350,7 +409,7 @@ protected:
u32 m_tooltip_show_delay;
s32 m_hovered_time;
s32 m_old_tooltip_id;
- std::string m_old_tooltip;
+ std::wstring m_old_tooltip;
bool m_rmouse_auto_place;
diff --git a/src/guiKeyChangeMenu.cpp b/src/guiKeyChangeMenu.cpp
index 261592394..b05818256 100644
--- a/src/guiKeyChangeMenu.cpp
+++ b/src/guiKeyChangeMenu.cpp
@@ -81,7 +81,7 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu()
removeChildren();
for (std::vector<key_setting*>::iterator iter = key_settings.begin();
- iter != key_settings.end(); iter ++) {
+ iter != key_settings.end(); ++iter) {
delete[] (*iter)->button_name;
delete (*iter);
}
@@ -187,7 +187,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect < s32 > rect(0, 0, 100, 30);
- rect += topleft + v2s32(size.X - 100 - 20, size.Y - 40);
+ rect += topleft + v2s32(size.X / 2 - 105, size.Y - 40);
const wchar_t *text = wgettext("Save");
Environment->addButton(rect, this, GUI_ID_BACK_BUTTON,
text);
@@ -195,7 +195,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
}
{
core::rect < s32 > rect(0, 0, 100, 30);
- rect += topleft + v2s32(size.X - 100 - 20 - 100 - 20, size.Y - 40);
+ rect += topleft + v2s32(size.X / 2 + 5, size.Y - 40);
const wchar_t *text = wgettext("Cancel");
Environment->addButton(rect, this, GUI_ID_ABORT_BUTTON,
text);
diff --git a/src/guiTable.cpp b/src/guiTable.cpp
index ed5b0d87b..3cc95ce4f 100644
--- a/src/guiTable.cpp
+++ b/src/guiTable.cpp
@@ -556,24 +556,46 @@ s32 GUITable::getSelected() const
void GUITable::setSelected(s32 index)
{
+ s32 old_selected = m_selected;
+
m_selected = -1;
m_sel_column = 0;
m_sel_doubleclick = false;
- --index;
+ --index; // Switch from 1-based indexing to 0-based indexing
s32 rowcount = m_rows.size();
-
- if (index >= rowcount)
+ if (rowcount == 0) {
+ return;
+ } else if (index < 0) {
+ index = 0;
+ } else if (index >= rowcount) {
index = rowcount - 1;
- while (index >= 0 && m_rows[index].visible_index < 0)
- --index;
+ }
+
+ // If the selected row is not visible, open its ancestors to make it visible
+ bool selection_invisible = m_rows[index].visible_index < 0;
+ if (selection_invisible) {
+ std::set<s32> opened_trees;
+ getOpenedTrees(opened_trees);
+ s32 indent = m_rows[index].indent;
+ for (s32 j = index - 1; j >= 0; --j) {
+ if (m_rows[j].indent < indent) {
+ opened_trees.insert(j);
+ indent = m_rows[j].indent;
+ }
+ }
+ setOpenedTrees(opened_trees);
+ }
+
if (index >= 0) {
m_selected = m_rows[index].visible_index;
assert(m_selected >= 0 && m_selected < (s32) m_visible_rows.size());
}
- autoScroll();
+ if (m_selected != old_selected || selection_invisible) {
+ autoScroll();
+ }
}
GUITable::DynamicData GUITable::getDynamicData() const
@@ -596,11 +618,11 @@ void GUITable::setDynamicData(const DynamicData &dyndata)
m_keynav_time = dyndata.keynav_time;
m_keynav_buffer = dyndata.keynav_buffer;
- m_scrollbar->setPos(dyndata.scrollpos);
-
setSelected(dyndata.selected);
m_sel_column = 0;
m_sel_doubleclick = false;
+
+ m_scrollbar->setPos(dyndata.scrollpos);
}
const c8* GUITable::getTypeName() const
@@ -906,6 +928,11 @@ bool GUITable::OnEvent(const SEvent &event)
sel_doubleclick) {
sendTableEvent(sel_column, sel_doubleclick);
}
+
+ // Treeview: double click opens/closes trees
+ if (m_has_tree_column && sel_doubleclick) {
+ toggleVisibleTree(m_selected, 0, false);
+ }
}
}
return true;
@@ -1091,7 +1118,9 @@ void GUITable::getOpenedTrees(std::set<s32> &opened_trees) const
void GUITable::setOpenedTrees(const std::set<s32> &opened_trees)
{
- s32 old_selected = getSelected();
+ s32 old_selected = -1;
+ if (m_selected >= 0)
+ old_selected = m_visible_rows[m_selected];
std::vector<s32> parents;
std::vector<s32> closed_parents;
@@ -1143,7 +1172,9 @@ void GUITable::setOpenedTrees(const std::set<s32> &opened_trees)
updateScrollBar();
- setSelected(old_selected);
+ // m_selected must be updated since it is a visible row index
+ if (old_selected >= 0)
+ m_selected = m_rows[old_selected].visible_index;
}
void GUITable::openTree(s32 to_open)
diff --git a/src/guiscalingfilter.cpp b/src/guiscalingfilter.cpp
index 26a2265a8..41cc72836 100644
--- a/src/guiscalingfilter.cpp
+++ b/src/guiscalingfilter.cpp
@@ -51,13 +51,13 @@ void guiScalingCache(io::path key, video::IVideoDriver *driver, video::IImage *v
void guiScalingCacheClear(video::IVideoDriver *driver)
{
for (std::map<io::path, video::IImage *>::iterator it = g_imgCache.begin();
- it != g_imgCache.end(); it++) {
+ it != g_imgCache.end(); ++it) {
if (it->second != NULL)
it->second->drop();
}
g_imgCache.clear();
for (std::map<io::path, video::ITexture *>::iterator it = g_txrCache.begin();
- it != g_txrCache.end(); it++) {
+ it != g_txrCache.end(); ++it) {
if (it->second != NULL)
driver->removeTexture(it->second);
}
diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp
index 56cdad2b1..f64c9f717 100644
--- a/src/httpfetch.cpp
+++ b/src/httpfetch.cpp
@@ -18,14 +18,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "socket.h" // for select()
-#include "porting.h" // for sleep_ms(), get_sysinfo()
+#include "porting.h" // for sleep_ms(), get_sysinfo(), secure_rand_fill_buf()
#include "httpfetch.h"
#include <iostream>
#include <sstream>
#include <list>
#include <map>
#include <errno.h>
-#include "jthread/jevent.h"
+#include "threading/event.h"
#include "config.h"
#include "exceptions.h"
#include "debug.h"
@@ -34,9 +34,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/thread.h"
#include "version.h"
#include "settings.h"
+#include "noise.h"
-JMutex g_httpfetch_mutex;
+Mutex g_httpfetch_mutex;
std::map<unsigned long, std::queue<HTTPFetchResult> > g_httpfetch_results;
+PcgRandom g_callerid_randomness;
HTTPFetchRequest::HTTPFetchRequest()
{
@@ -55,7 +57,7 @@ static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result)
{
unsigned long caller = fetch_result.caller;
if (caller != HTTPFETCH_DISCARD) {
- JMutexAutoLock lock(g_httpfetch_mutex);
+ MutexAutoLock lock(g_httpfetch_mutex);
g_httpfetch_results[caller].push(fetch_result);
}
}
@@ -64,7 +66,7 @@ static void httpfetch_request_clear(unsigned long caller);
unsigned long httpfetch_caller_alloc()
{
- JMutexAutoLock lock(g_httpfetch_mutex);
+ MutexAutoLock lock(g_httpfetch_mutex);
// Check each caller ID except HTTPFETCH_DISCARD
const unsigned long discard = HTTPFETCH_DISCARD;
@@ -84,6 +86,34 @@ unsigned long httpfetch_caller_alloc()
return discard;
}
+unsigned long httpfetch_caller_alloc_secure()
+{
+ MutexAutoLock lock(g_httpfetch_mutex);
+
+ // Generate random caller IDs and make sure they're not
+ // already used or equal to HTTPFETCH_DISCARD
+ // Give up after 100 tries to prevent infinite loop
+ u8 tries = 100;
+ unsigned long caller;
+
+ do {
+ caller = (((u64) g_callerid_randomness.next()) << 32) |
+ g_callerid_randomness.next();
+
+ if (--tries < 1) {
+ FATAL_ERROR("httpfetch_caller_alloc_secure: ran out of caller IDs");
+ return HTTPFETCH_DISCARD;
+ }
+ } while (g_httpfetch_results.find(caller) != g_httpfetch_results.end());
+
+ verbosestream << "httpfetch_caller_alloc_secure: allocating "
+ << caller << std::endl;
+
+ // Access element to create it
+ g_httpfetch_results[caller];
+ return caller;
+}
+
void httpfetch_caller_free(unsigned long caller)
{
verbosestream<<"httpfetch_caller_free: freeing "
@@ -91,14 +121,14 @@ void httpfetch_caller_free(unsigned long caller)
httpfetch_request_clear(caller);
if (caller != HTTPFETCH_DISCARD) {
- JMutexAutoLock lock(g_httpfetch_mutex);
+ MutexAutoLock lock(g_httpfetch_mutex);
g_httpfetch_results.erase(caller);
}
}
bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result)
{
- JMutexAutoLock lock(g_httpfetch_mutex);
+ MutexAutoLock lock(g_httpfetch_mutex);
// Check that caller exists
std::map<unsigned long, std::queue<HTTPFetchResult> >::iterator
@@ -262,7 +292,7 @@ HTTPFetchOngoing::HTTPFetchOngoing(HTTPFetchRequest request_, CurlHandlePool *po
}
// Set POST (or GET) data
- if (request.post_fields.empty()) {
+ if (request.post_fields.empty() && request.post_data.empty()) {
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
} else if (request.multipart) {
curl_httppost *last = NULL;
@@ -390,7 +420,7 @@ HTTPFetchOngoing::~HTTPFetchOngoing()
}
-class CurlFetchThread : public JThread
+class CurlFetchThread : public Thread
{
protected:
enum RequestType {
@@ -414,7 +444,8 @@ protected:
std::list<HTTPFetchRequest> m_queued_fetches;
public:
- CurlFetchThread(int parallel_limit)
+ CurlFetchThread(int parallel_limit) :
+ Thread("CurlFetch")
{
if (parallel_limit >= 1)
m_parallel_limit = parallel_limit;
@@ -613,13 +644,9 @@ protected:
}
}
- void * Thread()
+ void *run()
{
- ThreadStarted();
- log_register_thread("CurlFetchThread");
- DSTACK(__FUNCTION_NAME);
-
- porting::setThreadName("CurlFetchThread");
+ DSTACK(FUNCTION_NAME);
CurlHandlePool pool;
@@ -631,7 +658,7 @@ protected:
FATAL_ERROR_IF(!m_all_ongoing.empty(), "Expected empty");
- while (!StopRequested()) {
+ while (!stopRequested()) {
BEGIN_DEBUG_EXCEPTION_HANDLER
/*
@@ -680,7 +707,7 @@ protected:
else
waitForIO(100);
- END_DEBUG_EXCEPTION_HANDLER(errorstream)
+ END_DEBUG_EXCEPTION_HANDLER
}
// Call curl_multi_remove_handle and cleanup easy handles
@@ -713,15 +740,20 @@ void httpfetch_init(int parallel_limit)
FATAL_ERROR_IF(res != CURLE_OK, "CURL init failed");
g_httpfetch_thread = new CurlFetchThread(parallel_limit);
+
+ // Initialize g_callerid_randomness for httpfetch_caller_alloc_secure
+ u64 randbuf[2];
+ porting::secure_rand_fill_buf(randbuf, sizeof(u64) * 2);
+ g_callerid_randomness = PcgRandom(randbuf[0], randbuf[1]);
}
void httpfetch_cleanup()
{
verbosestream<<"httpfetch_cleanup: cleaning up"<<std::endl;
- g_httpfetch_thread->Stop();
+ g_httpfetch_thread->stop();
g_httpfetch_thread->requestWakeUp();
- g_httpfetch_thread->Wait();
+ g_httpfetch_thread->wait();
delete g_httpfetch_thread;
curl_global_cleanup();
@@ -730,18 +762,17 @@ void httpfetch_cleanup()
void httpfetch_async(const HTTPFetchRequest &fetch_request)
{
g_httpfetch_thread->requestFetch(fetch_request);
- if (!g_httpfetch_thread->IsRunning())
- g_httpfetch_thread->Start();
+ if (!g_httpfetch_thread->isRunning())
+ g_httpfetch_thread->start();
}
static void httpfetch_request_clear(unsigned long caller)
{
- if (g_httpfetch_thread->IsRunning()) {
+ if (g_httpfetch_thread->isRunning()) {
Event event;
g_httpfetch_thread->requestClear(caller, &event);
event.wait();
- }
- else {
+ } else {
g_httpfetch_thread->requestClear(caller, NULL);
}
}
diff --git a/src/httpfetch.h b/src/httpfetch.h
index c44c8d2d3..f57ed8789 100644
--- a/src/httpfetch.h
+++ b/src/httpfetch.h
@@ -116,6 +116,9 @@ bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result);
// Not required if you want to set caller = HTTPFETCH_DISCARD
unsigned long httpfetch_caller_alloc();
+// Allocates a non-predictable caller ID for httpfetch_async
+unsigned long httpfetch_caller_alloc_secure();
+
// Frees a caller ID allocated with httpfetch_caller_alloc
// Note: This can be expensive, because the httpfetch thread is told
// to stop any ongoing fetches for the given caller.
diff --git a/src/hud.cpp b/src/hud.cpp
index dbc4a01a3..19feaef7b 100644
--- a/src/hud.cpp
+++ b/src/hud.cpp
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "hud.h"
#include "settings.h"
#include "util/numeric.h"
+#include "util/string.h"
#include "log.h"
#include "gamedef.h"
#include "itemdef.h"
@@ -32,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "porting.h"
#include "fontengine.h"
#include "guiscalingfilter.h"
+#include "mesh.h"
#include <IGUIStaticText.h>
#ifdef HAVE_TOUCHSCREENGUI
@@ -40,7 +42,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
- Inventory *inventory) {
+ Inventory *inventory)
+{
this->driver = driver;
this->smgr = smgr;
this->guienv = guienv;
@@ -48,16 +51,15 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
this->player = player;
this->inventory = inventory;
+ m_hud_scaling = g_settings->getFloat("hud_scaling");
m_screensize = v2u32(0, 0);
m_displaycenter = v2s32(0, 0);
m_hotbar_imagesize = floor(HOTBAR_IMAGE_SIZE * porting::getDisplayDensity() + 0.5);
- m_hotbar_imagesize *= g_settings->getFloat("hud_scaling");
+ m_hotbar_imagesize *= m_hud_scaling;
m_padding = m_hotbar_imagesize / 12;
- const video::SColor hbar_color(255, 255, 255, 255);
- for (unsigned int i=0; i < 4; i++ ){
- hbar_colors[i] = hbar_color;
- }
+ for (unsigned int i = 0; i < 4; i++)
+ hbar_colors[i] = video::SColor(255, 255, 255, 255);
tsrc = gamedef->getTextureSource();
@@ -80,10 +82,46 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
use_hotbar_image = false;
hotbar_selected_image = "";
use_hotbar_selected_image = false;
+
+ m_selection_mesh = NULL;
+ m_selection_boxes.clear();
+ m_halo_boxes.clear();
+
+ m_selection_pos = v3f(0.0, 0.0, 0.0);
+ std::string mode = g_settings->get("node_highlighting");
+ m_selection_material.Lighting = false;
+
+ if (g_settings->getBool("enable_shaders")) {
+ IShaderSource *shdrsrc = gamedef->getShaderSource();
+ u16 shader_id = shdrsrc->getShader(
+ mode == "halo" ? "selection_shader" : "default_shader", 1, 1);
+ m_selection_material.MaterialType = shdrsrc->getShaderInfo(shader_id).material;
+ } else {
+ m_selection_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ }
+
+ if (mode == "box") {
+ m_use_selection_mesh = false;
+ m_selection_material.Thickness =
+ rangelim(g_settings->getS16("selectionbox_width"), 1, 5);
+ } else if (mode == "halo") {
+ m_use_selection_mesh = true;
+ m_selection_material.setTexture(0, tsrc->getTextureForMesh("halo.png"));
+ m_selection_material.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ } else {
+ m_selection_material.MaterialType = video::EMT_SOLID;
+ }
}
-void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect, bool selected) {
+Hud::~Hud()
+{
+ if (m_selection_mesh)
+ m_selection_mesh->drop();
+}
+void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect,
+ bool selected)
+{
if (selected) {
/* draw hihlighting around selected item */
if (use_hotbar_selected_image) {
@@ -154,29 +192,35 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect, bool sele
video::SColor bgcolor2(128, 0, 0, 0);
if (!use_hotbar_image)
driver->draw2DRectangle(bgcolor2, rect, NULL);
- drawItemStack(driver, g_fontengine->getFont(), item, rect, NULL, gamedef);
+ drawItemStack(driver, g_fontengine->getFont(), item, rect, NULL,
+ gamedef, selected ? IT_ROT_SELECTED : IT_ROT_NONE);
}
//NOTE: selectitem = 0 -> no selected; selectitem 1-based
-void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
- InventoryList *mainlist, u16 selectitem, u16 direction)
+void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
+ s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction)
{
#ifdef HAVE_TOUCHSCREENGUI
- if ( (g_touchscreengui) && (offset == 0))
+ if (g_touchscreengui && inv_offset == 0)
g_touchscreengui->resetHud();
#endif
s32 height = m_hotbar_imagesize + m_padding * 2;
- s32 width = (itemcount - offset) * (m_hotbar_imagesize + m_padding * 2);
+ s32 width = (itemcount - inv_offset) * (m_hotbar_imagesize + m_padding * 2);
if (direction == HUD_DIR_TOP_BOTTOM || direction == HUD_DIR_BOTTOM_TOP) {
- width = m_hotbar_imagesize + m_padding * 2;
- height = (itemcount - offset) * (m_hotbar_imagesize + m_padding * 2);
+ s32 tmp = height;
+ height = width;
+ width = tmp;
}
// Position of upper left corner of bar
- v2s32 pos = upperleftpos;
+ v2s32 pos = screen_offset;
+ pos.X *= m_hud_scaling * porting::getDisplayDensity();
+ pos.Y *= m_hud_scaling * porting::getDisplayDensity();
+ pos += upperleftpos;
+ // Store hotbar_image in member variable, used by drawItem()
if (hotbar_image != player->hotbar_image) {
hotbar_image = player->hotbar_image;
if (hotbar_image != "")
@@ -185,6 +229,7 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
use_hotbar_image = false;
}
+ // Store hotbar_selected_image in member variable, used by drawItem()
if (hotbar_selected_image != player->hotbar_selected_image) {
hotbar_selected_image = player->hotbar_selected_image;
if (hotbar_selected_image != "")
@@ -193,10 +238,10 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
use_hotbar_selected_image = false;
}
- /* draw customized item background */
+ // draw customized item background
if (use_hotbar_image) {
core::rect<s32> imgrect2(-m_padding/2, -m_padding/2,
- width+m_padding/2, height+m_padding/2);
+ width+m_padding/2, height+m_padding/2);
core::rect<s32> rect2 = imgrect2 + pos;
video::ITexture *texture = tsrc->getTexture(hotbar_image);
core::dimension2di imgsize(texture->getOriginalSize());
@@ -205,29 +250,28 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
NULL, hbar_colors, true);
}
- for (s32 i = offset; i < itemcount && (size_t)i < mainlist->getSize(); i++)
- {
- v2s32 steppos;
+ // Draw items
+ core::rect<s32> imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize);
+ for (s32 i = inv_offset; i < itemcount && (size_t)i < mainlist->getSize(); i++) {
s32 fullimglen = m_hotbar_imagesize + m_padding * 2;
- core::rect<s32> imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize);
-
+ v2s32 steppos;
switch (direction) {
- case HUD_DIR_RIGHT_LEFT:
- steppos = v2s32(-(m_padding + (i - offset) * fullimglen), m_padding);
- break;
- case HUD_DIR_TOP_BOTTOM:
- steppos = v2s32(m_padding, m_padding + (i - offset) * fullimglen);
- break;
- case HUD_DIR_BOTTOM_TOP:
- steppos = v2s32(m_padding, -(m_padding + (i - offset) * fullimglen));
- break;
- default:
- steppos = v2s32(m_padding + (i - offset) * fullimglen, m_padding);
- break;
+ case HUD_DIR_RIGHT_LEFT:
+ steppos = v2s32(-(m_padding + (i - inv_offset) * fullimglen), m_padding);
+ break;
+ case HUD_DIR_TOP_BOTTOM:
+ steppos = v2s32(m_padding, m_padding + (i - inv_offset) * fullimglen);
+ break;
+ case HUD_DIR_BOTTOM_TOP:
+ steppos = v2s32(m_padding, -(m_padding + (i - inv_offset) * fullimglen));
+ break;
+ default:
+ steppos = v2s32(m_padding + (i - inv_offset) * fullimglen, m_padding);
+ break;
}
- drawItem(mainlist->getItem(i), (imgrect + pos + steppos), (i +1) == selectitem );
+ drawItem(mainlist->getItem(i), (imgrect + pos + steppos), (i + 1) == selectitem);
#ifdef HAVE_TOUCHSCREENGUI
if (g_touchscreengui)
@@ -237,7 +281,8 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
}
-void Hud::drawLuaElements(v3s16 camera_offset) {
+void Hud::drawLuaElements(const v3s16 &camera_offset)
+{
u32 text_height = g_fontengine->getTextHeight();
irr::gui::IGUIFont* font = g_fontengine->getFont();
for (size_t i = 0; i != player->maxHudId(); i++) {
@@ -275,7 +320,7 @@ void Hud::drawLuaElements(v3s16 camera_offset) {
(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 = utf8_to_wide(e->text);
+ std::wstring text = unescape_enriched(utf8_to_wide(e->text));
core::dimension2d<u32> textsize = font->getDimension(text.c_str());
v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
(e->align.Y - 1.0) * (textsize.Height / 2));
@@ -288,7 +333,8 @@ void Hud::drawLuaElements(v3s16 camera_offset) {
break; }
case HUD_ELEM_INVENTORY: {
InventoryList *inv = inventory->getList(e->text);
- drawItems(pos, e->number, 0, inv, e->item, e->dir);
+ drawItems(pos, v2s32(e->offset.X, e->offset.Y), e->number, 0,
+ inv, e->item, e->dir);
break; }
case HUD_ELEM_WAYPOINT: {
v3f p_pos = player->getPosition() / BS;
@@ -310,11 +356,11 @@ void Hud::drawLuaElements(v3s16 camera_offset) {
(e->number >> 8) & 0xFF,
(e->number >> 0) & 0xFF);
core::rect<s32> size(0, 0, 200, 2 * text_height);
- std::wstring text = utf8_to_wide(e->name);
+ std::wstring text = unescape_enriched(utf8_to_wide(e->name));
font->draw(text.c_str(), size + pos, color);
std::ostringstream os;
os << distance << e->text;
- text = utf8_to_wide(os.str());
+ text = unescape_enriched(utf8_to_wide(os.str()));
pos.Y += text_height;
font->draw(text.c_str(), size + pos, color);
break; }
@@ -341,8 +387,7 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
if (size == v2s32()) {
dstd = srcd;
} else {
- double size_factor = g_settings->getFloat("hud_scaling") *
- porting::getDisplayDensity();
+ float size_factor = m_hud_scaling * porting::getDisplayDensity();
dstd.Height = size.Y * size_factor;
dstd.Width = size.X * size_factor;
offset.X *= size_factor;
@@ -410,18 +455,19 @@ void Hud::drawHotbar(u16 playeritem) {
if ( (float) width / (float) porting::getWindowSize().X <=
g_settings->getFloat("hud_hotbar_max_width")) {
if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) {
- drawItems(pos, hotbar_itemcount, 0, mainlist, playeritem + 1, 0);
+ drawItems(pos, v2s32(0, 0), hotbar_itemcount, 0, mainlist, playeritem + 1, 0);
}
- }
- else {
+ } else {
pos.X += width/4;
v2s32 secondpos = pos;
pos = pos - v2s32(0, m_hotbar_imagesize + m_padding);
if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) {
- drawItems(pos, hotbar_itemcount/2, 0, mainlist, playeritem + 1, 0);
- drawItems(secondpos, hotbar_itemcount, hotbar_itemcount/2, mainlist, playeritem + 1, 0);
+ drawItems(pos, v2s32(0, 0), hotbar_itemcount / 2, 0,
+ mainlist, playeritem + 1, 0);
+ drawItems(secondpos, v2s32(0, 0), hotbar_itemcount,
+ hotbar_itemcount / 2, mainlist, playeritem + 1, 0);
}
}
@@ -446,8 +492,8 @@ void Hud::drawHotbar(u16 playeritem) {
}
-void Hud::drawCrosshair() {
-
+void Hud::drawCrosshair()
+{
if (use_crosshair_image) {
video::ITexture *crosshair = tsrc->getTexture("crosshair.png");
v2u32 size = crosshair->getOriginalSize();
@@ -464,48 +510,179 @@ void Hud::drawCrosshair() {
}
}
+void Hud::setSelectionPos(const v3f &pos, const v3s16 &camera_offset)
+{
+ m_camera_offset = camera_offset;
+ m_selection_pos = pos;
+ m_selection_pos_with_offset = pos - intToFloat(camera_offset, BS);
+}
-void Hud::drawSelectionBoxes(std::vector<aabb3f> &hilightboxes) {
- for (std::vector<aabb3f>::const_iterator
- i = hilightboxes.begin();
- i != hilightboxes.end(); i++) {
- driver->draw3DBox(*i, selectionbox_argb);
+void Hud::drawSelectionMesh()
+{
+ if (!m_use_selection_mesh) {
+ // 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) {
+ aabb3f box = aabb3f(
+ i->MinEdge + m_selection_pos_with_offset,
+ i->MaxEdge + m_selection_pos_with_offset);
+
+ u32 r = (selectionbox_argb.getRed() *
+ m_selection_mesh_color.getRed() / 255);
+ u32 g = (selectionbox_argb.getGreen() *
+ m_selection_mesh_color.getGreen() / 255);
+ u32 b = (selectionbox_argb.getBlue() *
+ m_selection_mesh_color.getBlue() / 255);
+ driver->draw3DBox(box, video::SColor(255, r, g, b));
+ }
+ driver->setMaterial(oldmaterial);
+ } else if (m_selection_mesh) {
+ // Draw selection mesh
+ video::SMaterial oldmaterial = driver->getMaterial2D();
+ driver->setMaterial(m_selection_material);
+ setMeshColor(m_selection_mesh, m_selection_mesh_color);
+ scene::IMesh* mesh = cloneMesh(m_selection_mesh);
+ translateMesh(mesh, m_selection_pos_with_offset);
+ u32 mc = m_selection_mesh->getMeshBufferCount();
+ for (u32 i = 0; i < mc; i++) {
+ scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
+ driver->drawMeshBuffer(buf);
+ }
+ mesh->drop();
+ driver->setMaterial(oldmaterial);
}
}
+void Hud::updateSelectionMesh(const v3s16 &camera_offset)
+{
+ m_camera_offset = camera_offset;
+ if (!m_use_selection_mesh)
+ return;
+
+ if (m_selection_mesh) {
+ m_selection_mesh->drop();
+ m_selection_mesh = NULL;
+ }
+
+ if (!m_selection_boxes.size()) {
+ // No pointed object
+ return;
+ }
+
+ // New pointed object, create new mesh.
+
+ // Texture UV coordinates for selection boxes
+ static f32 texture_uv[24] = {
+ 0,0,1,1,
+ 0,0,1,1,
+ 0,0,1,1,
+ 0,0,1,1,
+ 0,0,1,1,
+ 0,0,1,1
+ };
+
+ // Use single halo box instead of multiple overlapping boxes.
+ // Temporary solution - problem can be solved with multiple
+ // rendering targets, or some method to remove inner surfaces.
+ // Thats because of halo transparency.
+
+ aabb3f halo_box(100.0, 100.0, 100.0, -100.0, -100.0, -100.0);
+ m_halo_boxes.clear();
+
+ for (std::vector<aabb3f>::iterator
+ i = m_selection_boxes.begin();
+ i != m_selection_boxes.end(); ++i) {
+ halo_box.addInternalBox(*i);
+ }
+
+ m_halo_boxes.push_back(halo_box);
+ m_selection_mesh = convertNodeboxesToMesh(
+ m_halo_boxes, texture_uv, 0.5);
+}
void Hud::resizeHotbar() {
if (m_screensize != porting::getWindowSize()) {
m_hotbar_imagesize = floor(HOTBAR_IMAGE_SIZE * porting::getDisplayDensity() + 0.5);
- m_hotbar_imagesize *= g_settings->getFloat("hud_scaling");
+ m_hotbar_imagesize *= m_hud_scaling;
m_padding = m_hotbar_imagesize / 12;
m_screensize = porting::getWindowSize();
m_displaycenter = v2s32(m_screensize.X/2,m_screensize.Y/2);
}
}
+struct MeshTimeInfo {
+ s32 time;
+ scene::IMesh *mesh;
+};
+
void drawItemStack(video::IVideoDriver *driver,
gui::IGUIFont *font,
const ItemStack &item,
const core::rect<s32> &rect,
const core::rect<s32> *clip,
- IGameDef *gamedef)
+ IGameDef *gamedef,
+ ItemRotationKind rotation_kind)
{
- if(item.empty())
+ static MeshTimeInfo rotation_time_infos[IT_ROT_NONE];
+ static bool enable_animations =
+ g_settings->getBool("inventory_items_animations");
+
+ if (item.empty()) {
+ if (rotation_kind < IT_ROT_NONE) {
+ rotation_time_infos[rotation_kind].mesh = NULL;
+ }
return;
+ }
const ItemDefinition &def = item.getDefinition(gamedef->idef());
- video::ITexture *texture = gamedef->idef()->getInventoryTexture(def.name, gamedef);
+ scene::IMesh* mesh = gamedef->idef()->getWieldMesh(def.name, gamedef);
+
+ if (mesh) {
+ driver->clearZBuffer();
+ s32 delta = 0;
+ if (rotation_kind < IT_ROT_NONE) {
+ MeshTimeInfo &ti = rotation_time_infos[rotation_kind];
+ if (mesh != ti.mesh) {
+ ti.mesh = mesh;
+ ti.time = getTimeMs();
+ } else {
+ delta = porting::getDeltaMs(ti.time, getTimeMs()) % 100000;
+ }
+ }
+ core::rect<s32> oldViewPort = driver->getViewPort();
+ core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION);
+ core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW);
+ core::matrix4 ProjMatrix;
+ ProjMatrix.buildProjectionMatrixOrthoLH(2, 2, -1, 100);
+ driver->setTransform(video::ETS_PROJECTION, ProjMatrix);
+ driver->setTransform(video::ETS_VIEW, ProjMatrix);
+ core::matrix4 matrix;
+ matrix.makeIdentity();
+
+ if (enable_animations) {
+ float timer_f = (float)delta / 5000.0;
+ matrix.setRotationDegrees(core::vector3df(0, 360 * timer_f, 0));
+ }
- // Draw the inventory texture
- if(texture != NULL)
- {
- const video::SColor color(255,255,255,255);
- const video::SColor colors[] = {color,color,color,color};
- draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0,0),
- core::dimension2di(texture->getOriginalSize())),
- clip, colors, true);
+ driver->setTransform(video::ETS_WORLD, matrix);
+ driver->setViewPort(rect);
+
+ u32 mc = mesh->getMeshBufferCount();
+ for (u32 j = 0; j < mc; ++j) {
+ scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
+ video::SMaterial &material = buf->getMaterial();
+ material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
+ material.Lighting = false;
+ driver->setMaterial(material);
+ driver->drawMeshBuffer(buf);
+ }
+
+ driver->setTransform(video::ETS_VIEW, oldViewMat);
+ driver->setTransform(video::ETS_PROJECTION, oldProjMat);
+ driver->setViewPort(oldViewPort);
}
if(def.type == ITEM_TOOL && item.wear != 0)
diff --git a/src/hud.h b/src/hud.h
index 614e7c92d..7f0fbe7b3 100644
--- a/src/hud.h
+++ b/src/hud.h
@@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define HUD_CORNER_CENTER 2
// Note that these visibility flags do not determine if the hud items are
-// actually drawn, but rather, allows the item to be drawn should the rest of
-// the game state permit it.
+// actually drawn, but rather, whether to draw the item should the rest
+// of the game state permit it.
#define HUD_FLAG_HOTBAR_VISIBLE (1 << 0)
#define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1)
#define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2)
@@ -119,31 +119,65 @@ public:
bool use_hotbar_image;
std::string hotbar_selected_image;
bool use_hotbar_selected_image;
- v3s16 camera_offset;
Hud(video::IVideoDriver *driver,scene::ISceneManager* smgr,
gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player,
Inventory *inventory);
+ ~Hud();
void drawHotbar(u16 playeritem);
void resizeHotbar();
void drawCrosshair();
- void drawSelectionBoxes(std::vector<aabb3f> &hilightboxes);
- void drawLuaElements(v3s16 camera_offset);
+ void drawSelectionMesh();
+ void updateSelectionMesh(const v3s16 &camera_offset);
+
+ std::vector<aabb3f> *getSelectionBoxes()
+ { return &m_selection_boxes; }
+
+ void setSelectionPos(const v3f &pos, const v3s16 &camera_offset);
+
+ v3f getSelectionPos() const
+ { return m_selection_pos; }
+
+ void setSelectionMeshColor(const video::SColor &c)
+ { m_selection_mesh_color = c; }
+
+ void drawLuaElements(const v3s16 &camera_offset);
+
private:
void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
s32 count, v2s32 offset, v2s32 size=v2s32());
- void drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
- InventoryList *mainlist, u16 selectitem, u16 direction);
+ void drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
+ s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction);
- void drawItem(const ItemStack &item, const core::rect<s32>& rect, bool selected);
+ void drawItem(const ItemStack &item, const core::rect<s32>& rect,
+ bool selected);
+ float m_hud_scaling; // cached minetest setting
+ v3s16 m_camera_offset;
v2u32 m_screensize;
v2s32 m_displaycenter;
- s32 m_hotbar_imagesize;
- s32 m_padding;
+ s32 m_hotbar_imagesize; // Takes hud_scaling into account, updated by resizeHotbar()
+ s32 m_padding; // Takes hud_scaling into account, updated by resizeHotbar()
video::SColor hbar_colors[4];
+
+ std::vector<aabb3f> m_selection_boxes;
+ std::vector<aabb3f> m_halo_boxes;
+ v3f m_selection_pos;
+ v3f m_selection_pos_with_offset;
+
+ scene::IMesh* m_selection_mesh;
+ video::SColor m_selection_mesh_color;
+ video::SMaterial m_selection_material;
+ bool m_use_selection_mesh;
+};
+
+enum ItemRotationKind {
+ IT_ROT_SELECTED,
+ IT_ROT_HOVERED,
+ IT_ROT_DRAGGED,
+ IT_ROT_NONE, // Must be last, also serves as number
};
void drawItemStack(video::IVideoDriver *driver,
@@ -151,8 +185,8 @@ void drawItemStack(video::IVideoDriver *driver,
const ItemStack &item,
const core::rect<s32> &rect,
const core::rect<s32> *clip,
- IGameDef *gamedef);
-
+ IGameDef *gamedef,
+ ItemRotationKind rotation_kind);
#endif
diff --git a/src/inventory.cpp b/src/inventory.cpp
index af8b1b301..cb8faecbc 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <sstream>
#include "log.h"
#include "itemdef.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "content_mapnode.h" // For loading legacy MaterialItems
#include "nameidmapping.h" // For loading legacy MaterialItems
#include "util/serialize.h"
@@ -126,7 +126,7 @@ ItemStack::ItemStack(std::string name_, u16 count_,
void ItemStack::serialize(std::ostream &os) const
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
if(empty())
return;
@@ -151,7 +151,7 @@ void ItemStack::serialize(std::ostream &os) const
void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
clear();
@@ -218,7 +218,7 @@ void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef)
Strfnd fnd(all);
fnd.next("\"");
// If didn't skip to end, we have ""s
- if(!fnd.atend()){
+ if(!fnd.at_end()){
name = fnd.next("\"");
} else { // No luck, just read a word then
fnd.start(all);
@@ -246,7 +246,7 @@ void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef)
Strfnd fnd(all);
fnd.next("\"");
// If didn't skip to end, we have ""s
- if(!fnd.atend()){
+ if(!fnd.at_end()){
name = fnd.next("\"");
} else { // No luck, just read a word then
fnd.start(all);
@@ -335,8 +335,9 @@ ItemStack ItemStack::addItem(const ItemStack &newitem_,
*this = newitem;
newitem.clear();
}
- // If item name differs, bail out
- else if(name != newitem.name)
+ // If item name or metadata differs, bail out
+ else if (name != newitem.name
+ || metadata != newitem.metadata)
{
// cannot be added
}
@@ -374,8 +375,9 @@ bool ItemStack::itemFits(const ItemStack &newitem_,
{
newitem.clear();
}
- // If item name differs, bail out
- else if(name != newitem.name)
+ // If item name or metadata differs, bail out
+ else if (name != newitem.name
+ || metadata != newitem.metadata)
{
// cannot be added
}
@@ -730,7 +732,7 @@ bool InventoryList::containsItem(const ItemStack &item) const
return true;
for(std::vector<ItemStack>::const_reverse_iterator
i = m_items.rbegin();
- i != m_items.rend(); i++)
+ i != m_items.rend(); ++i)
{
if(count == 0)
break;
@@ -750,7 +752,7 @@ ItemStack InventoryList::removeItem(const ItemStack &item)
ItemStack removed;
for(std::vector<ItemStack>::reverse_iterator
i = m_items.rbegin();
- i != m_items.rend(); i++)
+ i != m_items.rend(); ++i)
{
if(i->name == item.name)
{
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index 476768b8c..3d8513492 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "craftdef.h"
#include "rollback_interface.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
@@ -818,9 +818,9 @@ void ICraftAction::apply(InventoryManager *mgr,
// Add the new replacements to the list
IItemDefManager *itemdef = gamedef->getItemDefManager();
for (std::vector<ItemStack>::iterator it = temp.begin();
- it != temp.end(); it++) {
+ it != temp.end(); ++it) {
for (std::vector<ItemStack>::iterator jt = output_replacements.begin();
- jt != output_replacements.end(); jt++) {
+ jt != output_replacements.end(); ++jt) {
if (it->name == jt->name) {
*it = jt->addItem(*it, itemdef);
if (it->empty())
@@ -850,7 +850,7 @@ void ICraftAction::apply(InventoryManager *mgr,
// Put the replacements in the inventory or drop them on the floor, if
// the invenotry is full
for (std::vector<ItemStack>::iterator it = output_replacements.begin();
- it != output_replacements.end(); it++) {
+ it != output_replacements.end(); ++it) {
if (list_main)
*it = list_main->addItem(*it);
if (it->empty())
@@ -886,7 +886,7 @@ bool getCraftingResult(Inventory *inv, ItemStack& result,
std::vector<ItemStack> &output_replacements,
bool decrementInput, IGameDef *gamedef)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
result.clear();
diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h
index bead64407..dedebd45b 100644
--- a/src/irrlichttypes.h
+++ b/src/irrlichttypes.h
@@ -48,4 +48,19 @@ using namespace irr;
#endif
#endif
+#define S8_MIN (-0x7F - 1)
+#define S16_MIN (-0x7FFF - 1)
+#define S32_MIN (-0x7FFFFFFF - 1)
+#define S64_MIN (-0x7FFFFFFFFFFFFFFF - 1)
+
+#define S8_MAX 0x7F
+#define S16_MAX 0x7FFF
+#define S32_MAX 0x7FFFFFFF
+#define S64_MAX 0x7FFFFFFFFFFFFFFF
+
+#define U8_MAX 0xFF
+#define U16_MAX 0xFFFF
+#define U32_MAX 0xFFFFFFFF
+#define U64_MAX 0xFFFFFFFFFFFFFFFF
+
#endif
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index 0133b1b3f..a618ad631 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -80,6 +80,7 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def)
groups = def.groups;
node_placement_prediction = def.node_placement_prediction;
sound_place = def.sound_place;
+ sound_place_failed = def.sound_place_failed;
range = def.range;
return *this;
}
@@ -114,6 +115,7 @@ void ItemDefinition::reset()
}
groups.clear();
sound_place = SimpleSoundSpec();
+ sound_place_failed = SimpleSoundSpec();
range = -1;
node_placement_prediction = "";
@@ -145,7 +147,7 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os<<serializeString(tool_capabilities_s);
writeU16(os, groups.size());
for(std::map<std::string, int>::const_iterator
- i = groups.begin(); i != groups.end(); i++){
+ i = groups.begin(); i != groups.end(); ++i){
os<<serializeString(i->first);
writeS16(os, i->second);
}
@@ -155,8 +157,10 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os<<serializeString(sound_place.name);
writeF1000(os, sound_place.gain);
}
- if(protocol_version > 20){
+ if (protocol_version > 20) {
writeF1000(os, range);
+ os << serializeString(sound_place_failed.name);
+ writeF1000(os, sound_place_failed.gain);
}
}
@@ -211,8 +215,10 @@ void ItemDefinition::deSerialize(std::istream &is)
}
// If you add anything here, insert it primarily inside the try-catch
// block to not need to increase the version.
- try{
- }catch(SerializationError &e) {};
+ try {
+ sound_place_failed.name = deSerializeString(is);
+ sound_place_failed.gain = readF1000(is);
+ } catch(SerializationError &e) {};
}
/*
@@ -241,7 +247,7 @@ public:
{
#ifndef SERVER
- m_main_thread = get_current_thread_id();
+ m_main_thread = thr_get_current_thread_id();
#endif
clear();
}
@@ -261,7 +267,7 @@ public:
#endif
for (std::map<std::string, ItemDefinition*>::iterator iter =
m_item_definitions.begin(); iter != m_item_definitions.end();
- iter ++) {
+ ++iter) {
delete iter->second;
}
m_item_definitions.clear();
@@ -317,7 +323,7 @@ public:
<<name<<"\""<<std::endl;
// This is not thread-safe
- sanity_check(get_current_thread_id() == m_main_thread);
+ sanity_check(thr_is_current_thread(m_main_thread));
// Skip if already in cache
ClientCached *cc = NULL;
@@ -326,7 +332,6 @@ public:
return cc;
ITextureSource *tsrc = gamedef->getTextureSource();
- INodeDefManager *nodedef = gamedef->getNodeDefManager();
const ItemDefinition &def = get(name);
// Create new ClientCached
@@ -337,103 +342,11 @@ public:
if(def.inventory_image != "")
cc->inventory_texture = tsrc->getTexture(def.inventory_image);
- // Additional processing for nodes:
- // - Create a wield mesh if WieldMeshSceneNode can't render
- // the node on its own.
- // - If inventory_texture isn't set yet, create one using
- // render-to-texture.
- if (def.type == ITEM_NODE) {
- // Get node properties
- content_t id = nodedef->getId(name);
- const ContentFeatures &f = nodedef->get(id);
-
- bool need_rtt_mesh = cc->inventory_texture == NULL;
-
- // Keep this in sync with WieldMeshSceneNode::setItem()
- bool need_wield_mesh =
- !(f.mesh_ptr[0] ||
- f.drawtype == NDT_NORMAL ||
- f.drawtype == NDT_ALLFACES ||
- f.drawtype == NDT_AIRLIKE);
-
- scene::IMesh *node_mesh = NULL;
-
- if (need_rtt_mesh || need_wield_mesh) {
- u8 param1 = 0;
- if (f.param_type == CPT_LIGHT)
- param1 = 0xee;
-
- /*
- Make a mesh from the node
- */
- MeshMakeData mesh_make_data(gamedef, false);
- u8 param2 = 0;
- if (f.param_type_2 == CPT2_WALLMOUNTED)
- param2 = 1;
- MapNode mesh_make_node(id, param1, param2);
- mesh_make_data.fillSingleNode(&mesh_make_node);
- MapBlockMesh mapblock_mesh(&mesh_make_data, v3s16(0, 0, 0));
- node_mesh = mapblock_mesh.getMesh();
- node_mesh->grab();
- video::SColor c(255, 255, 255, 255);
- setMeshColor(node_mesh, c);
-
- // scale and translate the mesh so it's a
- // unit cube centered on the origin
- scaleMesh(node_mesh, v3f(1.0/BS, 1.0/BS, 1.0/BS));
- translateMesh(node_mesh, v3f(-1.0, -1.0, -1.0));
- }
-
- /*
- Draw node mesh into a render target texture
- */
- if (need_rtt_mesh) {
- TextureFromMeshParams params;
- params.mesh = node_mesh;
- params.dim.set(64, 64);
- params.rtt_texture_name = "INVENTORY_"
- + def.name + "_RTT";
- params.delete_texture_on_shutdown = true;
- params.camera_position.set(0, 1.0, -1.5);
- params.camera_position.rotateXZBy(45);
- params.camera_lookat.set(0, 0, 0);
- // Set orthogonal projection
- params.camera_projection_matrix.buildProjectionMatrixOrthoLH(
- 1.65, 1.65, 0, 100);
- params.ambient_light.set(1.0, 0.2, 0.2, 0.2);
- params.light_position.set(10, 100, -50);
- params.light_color.set(1.0, 0.5, 0.5, 0.5);
- params.light_radius = 1000;
-
-#ifdef __ANDROID__
- params.camera_position.set(0, -1.0, -1.5);
- params.camera_position.rotateXZBy(45);
- params.light_position.set(10, -100, -50);
-#endif
- cc->inventory_texture =
- tsrc->generateTextureFromMesh(params);
-
- // render-to-target didn't work
- if (cc->inventory_texture == NULL) {
- cc->inventory_texture =
- tsrc->getTexture(f.tiledef[0].name);
- }
- }
-
- /*
- Use the node mesh as the wield mesh
- */
- if (need_wield_mesh) {
- cc->wield_mesh = node_mesh;
- cc->wield_mesh->grab();
+ ItemStack item = ItemStack();
+ item.name = def.name;
- // no way reference count can be smaller than 2 in this place!
- assert(cc->wield_mesh->getReferenceCount() >= 2);
- }
-
- if (node_mesh)
- node_mesh->drop();
- }
+ scene::IMesh *mesh = getItemMesh(gamedef, item);
+ cc->wield_mesh = mesh;
// Put in cache
m_clientcached.set(name, cc);
@@ -448,7 +361,7 @@ public:
if(cc)
return cc;
- if(get_current_thread_id() == m_main_thread)
+ if(thr_is_current_thread(m_main_thread))
{
return createClientCachedDirect(name, gamedef);
}
@@ -500,7 +413,7 @@ public:
{
for(std::map<std::string, ItemDefinition*>::const_iterator
i = m_item_definitions.begin();
- i != m_item_definitions.end(); i++)
+ i != m_item_definitions.end(); ++i)
{
delete i->second;
}
diff --git a/src/itemdef.h b/src/itemdef.h
index f993fdbac..805b4aa5d 100644
--- a/src/itemdef.h
+++ b/src/itemdef.h
@@ -68,6 +68,7 @@ struct ItemDefinition
ToolCapabilities *tool_capabilities;
ItemGroupList groups;
SimpleSoundSpec sound_place;
+ SimpleSoundSpec sound_place_failed;
f32 range;
// Client shall immediately place this node when player places the item.
diff --git a/src/jthread/CMakeLists.txt b/src/jthread/CMakeLists.txt
deleted file mode 100644
index cebb35caa..000000000
--- a/src/jthread/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-if(UNIX)
- set(THREAD_SYS_DIR pthread)
-else()
- set(THREAD_SYS_DIR win32)
-endif()
-
-set(SRC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/${THREAD_SYS_DIR})
-set(JTHREAD_SRCS
- ${SRC_PREFIX}/jmutex.cpp
- ${SRC_PREFIX}/jthread.cpp
- ${SRC_PREFIX}/jsemaphore.cpp
- ${SRC_PREFIX}/jevent.cpp
- PARENT_SCOPE)
-
diff --git a/src/jthread/LICENSE.MIT b/src/jthread/LICENSE.MIT
deleted file mode 100644
index 2aa4fd57b..000000000
--- a/src/jthread/LICENSE.MIT
+++ /dev/null
@@ -1,20 +0,0 @@
-The license of JThread:
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
-
diff --git a/src/jthread/jevent.h b/src/jthread/jevent.h
deleted file mode 100644
index 9ea7ebde8..000000000
--- a/src/jthread/jevent.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JEVENT_H_
-#define JEVENT_H_
-
-#ifdef _WIN32
-#include <windows.h>
-#elif defined(__MACH__) && defined(__APPLE__)
-#include <mach/mach.h>
-#include <mach/task.h>
-#include <mach/semaphore.h>
-#include <sys/semaphore.h>
-#else
-#include <semaphore.h>
-#endif
-
-
-class Event {
-#ifdef _WIN32
- HANDLE hEvent;
-#elif defined(__MACH__) && defined(__APPLE__)
- semaphore_t sem;
-#else
- sem_t sem;
-#endif
-
-public:
- Event();
- ~Event();
- void wait();
- void signal();
-};
-
-#endif /* JEVENT_H_ */
diff --git a/src/jthread/jmutex.h b/src/jthread/jmutex.h
deleted file mode 100644
index e57cd8a43..000000000
--- a/src/jthread/jmutex.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JMUTEX_H
-
-#define JMUTEX_H
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
- #ifndef _WIN32_WINNT
- #define _WIN32_WINNT 0x0501
- #endif
- #ifndef _WIN32_WCE
- #include <process.h>
- #endif // _WIN32_WCE
- #include <winsock2.h>
- #include <windows.h>
- // CriticalSection is way faster than the alternative
- #define JMUTEX_CRITICALSECTION
-#else // using pthread
- #include <pthread.h>
-#endif // WIN32
-
-#define ERR_JMUTEX_ALREADYINIT -1
-#define ERR_JMUTEX_NOTINIT -2
-#define ERR_JMUTEX_CANTCREATEMUTEX -3
-
-class JMutex
-{
-public:
- JMutex();
- ~JMutex();
- int Lock();
- int Unlock();
-
-private:
-#if (defined(WIN32) || defined(_WIN32_WCE))
-#ifdef JMUTEX_CRITICALSECTION
- CRITICAL_SECTION mutex;
-#else // Use standard mutex
- HANDLE mutex;
-#endif // JMUTEX_CRITICALSECTION
-#else // pthread mutex
- pthread_mutex_t mutex;
-
- bool IsLocked() {
- if (pthread_mutex_trylock(&mutex)) {
- pthread_mutex_unlock(&mutex);
- return true;
- }
- return false;
- }
-#endif // WIN32
-};
-
-#endif // JMUTEX_H
diff --git a/src/jthread/jmutexautolock.h b/src/jthread/jmutexautolock.h
deleted file mode 100644
index 6020a5c33..000000000
--- a/src/jthread/jmutexautolock.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JMUTEXAUTOLOCK_H
-
-#define JMUTEXAUTOLOCK_H
-
-#include "jmutex.h"
-
-class JMutexAutoLock
-{
-public:
- JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); }
- ~JMutexAutoLock() { mutex.Unlock(); }
-private:
- JMutex &mutex;
-};
-
-#endif // JMUTEXAUTOLOCK_H
diff --git a/src/jthread/jthread.h b/src/jthread/jthread.h
deleted file mode 100644
index 89743a3e3..000000000
--- a/src/jthread/jthread.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#ifndef JTHREAD_H
-#define JTHREAD_H
-
-#if __cplusplus >= 201103L
-#include <atomic>
-#endif
-
-#include "jthread/jmutex.h"
-
-#define ERR_JTHREAD_CANTINITMUTEX -1
-#define ERR_JTHREAD_CANTSTARTTHREAD -2
-#define ERR_JTHREAD_THREADFUNCNOTSET -3
-#define ERR_JTHREAD_NOTRUNNING -4
-#define ERR_JTHREAD_ALREADYRUNNING -5
-
-class JThread
-{
-public:
- JThread();
- virtual ~JThread();
- int Start();
- inline void Stop()
- { requeststop = true; }
- int Kill();
- virtual void *Thread() = 0;
- inline bool IsRunning()
- { return running; }
- inline bool StopRequested()
- { return requeststop; }
- void *GetReturnValue();
- bool IsSameThread();
-
- /*
- * Wait for thread to finish
- * Note: this does not stop a thread you have to do this on your own
- * WARNING: never ever call this on a thread not started or already killed!
- */
- void Wait();
-protected:
- void ThreadStarted();
-private:
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
-#ifdef _WIN32_WCE
- DWORD threadid;
- static DWORD WINAPI TheThread(void *param);
-#else
- static UINT __stdcall TheThread(void *param);
- UINT threadid;
-#endif // _WIN32_WCE
- HANDLE threadhandle;
-#else // pthread type threads
- static void *TheThread(void *param);
-
- pthread_t threadid;
-
- /*
- * reading and writing bool values is atomic on all relevant architectures
- * ( x86 + arm ). No need to waste time for locking here.
- * once C++11 is supported we can tell compiler to handle cpu caches correct
- * too. This should cause additional improvement (and silence thread
- * concurrency check tools.
- */
-#if __cplusplus >= 201103L
- std::atomic_bool started;
-#else
- bool started;
-#endif
-#endif // WIN32
- void *retval;
- /*
- * reading and writing bool values is atomic on all relevant architectures
- * ( x86 + arm ). No need to waste time for locking here.
- * once C++11 is supported we can tell compiler to handle cpu caches correct
- * too. This should cause additional improvement (and silence thread
- * concurrency check tools.
- */
-#if __cplusplus >= 201103L
- std::atomic_bool running;
- std::atomic_bool requeststop;
-#else
- bool running;
- bool requeststop;
-#endif
-
- JMutex continuemutex,continuemutex2;
-};
-
-#endif // JTHREAD_H
-
diff --git a/src/jthread/pthread/jevent.cpp b/src/jthread/pthread/jevent.cpp
deleted file mode 100644
index e1d40f4c1..000000000
--- a/src/jthread/pthread/jevent.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jevent.h"
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if defined(__MACH__) && defined(__APPLE__)
-#undef sem_t
-#define sem_t semaphore_t
-#undef sem_init
-#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c))
-#undef sem_wait
-#define sem_wait(s) semaphore_wait(*(s))
-#undef sem_post
-#define sem_post(s) semaphore_signal(*(s))
-#undef sem_destroy
-#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s))
-#endif
-
-Event::Event() {
- int sem_init_retval = sem_init(&sem, 0, 0);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-}
-
-Event::~Event() {
- int sem_destroy_retval = sem_destroy(&sem);
- assert(sem_destroy_retval == 0);
- UNUSED(sem_destroy_retval);
-}
-
-void Event::wait() {
- int sem_wait_retval = sem_wait(&sem);
- assert(sem_wait_retval == 0);
- UNUSED(sem_wait_retval);
-}
-
-void Event::signal() {
- int sem_post_retval = sem_post(&sem);
- assert(sem_post_retval == 0);
- UNUSED(sem_post_retval);
-}
diff --git a/src/jthread/pthread/jmutex.cpp b/src/jthread/pthread/jmutex.cpp
deleted file mode 100644
index 0551b9728..000000000
--- a/src/jthread/pthread/jmutex.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jmutex.h"
-#define UNUSED(expr) do { (void)(expr); } while (0)
-JMutex::JMutex()
-{
- int mutex_init_retval = pthread_mutex_init(&mutex,NULL);
- assert( mutex_init_retval == 0 );
- UNUSED(mutex_init_retval);
-}
-
-JMutex::~JMutex()
-{
- int mutex_dextroy_retval = pthread_mutex_destroy(&mutex);
- assert( mutex_dextroy_retval == 0 );
- UNUSED(mutex_dextroy_retval);
-}
-
-int JMutex::Lock()
-{
- int mutex_lock_retval = pthread_mutex_lock(&mutex);
- assert( mutex_lock_retval == 0 );
- return mutex_lock_retval;
- UNUSED(mutex_lock_retval);
-}
-
-int JMutex::Unlock()
-{
- int mutex_unlock_retval = pthread_mutex_unlock(&mutex);
- assert( mutex_unlock_retval == 0 );
- return mutex_unlock_retval;
- UNUSED(mutex_unlock_retval);
-}
diff --git a/src/jthread/pthread/jsemaphore.cpp b/src/jthread/pthread/jsemaphore.cpp
deleted file mode 100644
index 15281ba64..000000000
--- a/src/jthread/pthread/jsemaphore.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT 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
-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 <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include "jthread/jsemaphore.h"
-#if defined(__MACH__) && defined(__APPLE__)
-#include <unistd.h>
-#endif
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if defined(__MACH__) && defined(__APPLE__)
-#undef sem_t
-#undef sem_init
-#undef sem_wait
-#undef sem_post
-#undef sem_destroy
-#define sem_t semaphore_t
-#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c))
-#define sem_wait(s) semaphore_wait(*(s))
-#define sem_post(s) semaphore_signal(*(s))
-#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s))
-pthread_mutex_t semcount_mutex;
-#endif
-
-JSemaphore::JSemaphore() {
- int sem_init_retval = sem_init(&m_semaphore,0,0);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- semcount = 0;
-#endif
-}
-
-JSemaphore::~JSemaphore() {
- int sem_destroy_retval = sem_destroy(&m_semaphore);
-#ifdef __ANDROID__
-// WORKAROUND for broken bionic semaphore implementation!
- assert(
- (sem_destroy_retval == 0) ||
- (errno == EBUSY)
- );
-#else
- assert(sem_destroy_retval == 0);
-#endif
- UNUSED(sem_destroy_retval);
-}
-
-JSemaphore::JSemaphore(int initval) {
- int sem_init_retval = sem_init(&m_semaphore,0,initval);
- assert(sem_init_retval == 0);
- UNUSED(sem_init_retval);
-}
-
-void JSemaphore::Post() {
- int sem_post_retval = sem_post(&m_semaphore);
- assert(sem_post_retval == 0);
- UNUSED(sem_post_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount++;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
-}
-
-void JSemaphore::Wait() {
- int sem_wait_retval = sem_wait(&m_semaphore);
- assert(sem_wait_retval == 0);
- UNUSED(sem_wait_retval);
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount--;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
-}
-
-bool JSemaphore::Wait(unsigned int time_ms) {
-#if defined(__MACH__) && defined(__APPLE__)
- mach_timespec_t waittime;
- waittime.tv_sec = time_ms / 1000;
- waittime.tv_nsec = 1000000 * (time_ms % 1000);
-#else
- struct timespec waittime;
-#endif
- struct timeval now;
-
- if (gettimeofday(&now, NULL) == -1) {
- assert("Unable to get time by clock_gettime!" == 0);
- return false;
- }
-
-#if !(defined(__MACH__) && defined(__APPLE__))
- waittime.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000);
- waittime.tv_sec = (time_ms / 1000) + (waittime.tv_nsec / (1000*1000*1000)) + now.tv_sec;
- waittime.tv_nsec %= 1000*1000*1000;
-#endif
-
- errno = 0;
-#if defined(__MACH__) && defined(__APPLE__)
- int sem_wait_retval = semaphore_timedwait(m_semaphore, waittime);
- if (sem_wait_retval == KERN_OPERATION_TIMED_OUT) {
- errno = ETIMEDOUT;
- } else if (sem_wait_retval == KERN_ABORTED) {
- errno = EINTR;
- } else if (sem_wait_retval != 0) {
- errno = EINVAL;
- }
-#else
- int sem_wait_retval = sem_timedwait(&m_semaphore, &waittime);
-#endif
-
- if (sem_wait_retval == 0)
- {
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- semcount--;
- pthread_mutex_unlock(&semcount_mutex);
-#endif
- return true;
- }
- else {
- assert((errno == ETIMEDOUT) || (errno == EINTR));
- return false;
- }
- return sem_wait_retval == 0 ? true : false;
-}
-
-int JSemaphore::GetValue() {
- int retval = 0;
-#if defined(__MACH__) && defined(__APPLE__)
- pthread_mutex_lock(&semcount_mutex);
- retval = semcount;
- pthread_mutex_unlock(&semcount_mutex);
-#else
- sem_getvalue(&m_semaphore, &retval);
-#endif
- return retval;
-}
-
diff --git a/src/jthread/pthread/jthread.cpp b/src/jthread/pthread/jthread.cpp
deleted file mode 100644
index 414d8fde5..000000000
--- a/src/jthread/pthread/jthread.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#include "jthread/jthread.h"
-#include <assert.h>
-#include <sys/time.h>
-#include <time.h>
-#include <stdlib.h>
-
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-JThread::JThread()
-{
- retval = NULL;
- requeststop = false;
- running = false;
- started = false;
-}
-
-JThread::~JThread()
-{
- Kill();
-}
-
-void JThread::Wait() {
- void* status;
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
-}
-
-int JThread::Start()
-{
- int status;
-
- if (running)
- {
- return ERR_JTHREAD_ALREADYRUNNING;
- }
- requeststop = false;
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
-
- continuemutex.Lock();
- status = pthread_create(&threadid,&attr,TheThread,this);
- pthread_attr_destroy(&attr);
- if (status != 0)
- {
- continuemutex.Unlock();
- return ERR_JTHREAD_CANTSTARTTHREAD;
- }
-
- /* Wait until 'running' is set */
-
- while (!running)
- {
- struct timespec req,rem;
-
- req.tv_sec = 0;
- req.tv_nsec = 1000000;
- nanosleep(&req,&rem);
- }
- started = true;
-
- continuemutex.Unlock();
-
- continuemutex2.Lock();
- continuemutex2.Unlock();
- return 0;
-}
-
-int JThread::Kill()
-{
- void* status;
- if (!running)
- {
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
- return ERR_JTHREAD_NOTRUNNING;
- }
-#ifdef __ANDROID__
- pthread_kill(threadid, SIGKILL);
-#else
- pthread_cancel(threadid);
-#endif
- if (started) {
- int pthread_join_retval = pthread_join(threadid,&status);
- assert(pthread_join_retval == 0);
- UNUSED(pthread_join_retval);
- started = false;
- }
- running = false;
- return 0;
-}
-
-void *JThread::GetReturnValue()
-{
- void *val;
-
- if (running) {
- val = NULL;
- } else {
- val = retval;
- }
-
- return val;
-}
-
-bool JThread::IsSameThread()
-{
- return pthread_equal(pthread_self(), threadid);
-}
-
-void *JThread::TheThread(void *param)
-{
- JThread *jthread = (JThread *)param;
-
- jthread->continuemutex2.Lock();
- jthread->running = true;
-
- jthread->continuemutex.Lock();
- jthread->continuemutex.Unlock();
-
- jthread->Thread();
-
- jthread->running = false;
-
- return NULL;
-}
-
-void JThread::ThreadStarted()
-{
- continuemutex2.Unlock();
-}
-
diff --git a/src/jthread/win32/jevent.cpp b/src/jthread/win32/jevent.cpp
deleted file mode 100644
index 67b468f01..000000000
--- a/src/jthread/win32/jevent.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include "jthread/jevent.h"
-
-Event::Event() {
- hEvent = CreateEvent(NULL, 0, 0, NULL);
-}
-
-Event::~Event() {
- CloseHandle(hEvent);
-}
-
-void Event::wait() {
- WaitForSingleObject(hEvent, INFINITE);
-}
-
-void Event::signal() {
- SetEvent(hEvent);
-}
diff --git a/src/jthread/win32/jmutex.cpp b/src/jthread/win32/jmutex.cpp
deleted file mode 100644
index b9f5e0e73..000000000
--- a/src/jthread/win32/jmutex.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-#include <assert.h>
-#include "jthread/jmutex.h"
-
-JMutex::JMutex()
-{
-#ifdef JMUTEX_CRITICALSECTION
- InitializeCriticalSection(&mutex);
-#else
- mutex = CreateMutex(NULL,FALSE,NULL);
- assert(mutex != NULL);
-#endif // JMUTEX_CRITICALSECTION
-}
-
-JMutex::~JMutex()
-{
-#ifdef JMUTEX_CRITICALSECTION
- DeleteCriticalSection(&mutex);
-#else
- CloseHandle(mutex);
-#endif // JMUTEX_CRITICALSECTION
-}
-
-int JMutex::Lock()
-{
-#ifdef JMUTEX_CRITICALSECTION
- EnterCriticalSection(&mutex);
-#else
- WaitForSingleObject(mutex,INFINITE);
-#endif // JMUTEX_CRITICALSECTION
- return 0;
-}
-
-int JMutex::Unlock()
-{
-#ifdef JMUTEX_CRITICALSECTION
- LeaveCriticalSection(&mutex);
-#else
- ReleaseMutex(mutex);
-#endif // JMUTEX_CRITICALSECTION
- return 0;
-}
-
diff --git a/src/jthread/win32/jsemaphore.cpp b/src/jthread/win32/jsemaphore.cpp
deleted file mode 100644
index 27a11e819..000000000
--- a/src/jthread/win32/jsemaphore.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT 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
-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 "jthread/jsemaphore.h"
-
-JSemaphore::JSemaphore() {
- m_hSemaphore = CreateSemaphore(
- 0,
- 0,
- MAX_SEMAPHORE_COUNT,
- 0);
-}
-
-JSemaphore::~JSemaphore() {
- CloseHandle(m_hSemaphore);
-}
-
-JSemaphore::JSemaphore(int initval) {
- m_hSemaphore = CreateSemaphore(
- 0,
- initval,
- MAX_SEMAPHORE_COUNT,
- 0);
-}
-
-void JSemaphore::Post() {
- ReleaseSemaphore(
- m_hSemaphore,
- 1,
- 0);
-}
-
-void JSemaphore::Wait() {
- WaitForSingleObject(
- m_hSemaphore,
- INFINITE);
-}
-
-bool JSemaphore::Wait(unsigned int time_ms) {
- unsigned int retval = WaitForSingleObject(
- m_hSemaphore,
- time_ms);
-
- if (retval == WAIT_OBJECT_0)
- {
- return true;
- }
- else {
- assert(retval == WAIT_TIMEOUT);
- return false;
- }
-}
-
-typedef LONG (NTAPI *_NtQuerySemaphore)(
- HANDLE SemaphoreHandle,
- DWORD SemaphoreInformationClass,
- PVOID SemaphoreInformation,
- ULONG SemaphoreInformationLength,
- PULONG ReturnLength OPTIONAL
-);
-
-typedef struct _SEMAPHORE_BASIC_INFORMATION {
- ULONG CurrentCount;
- ULONG MaximumCount;
-} SEMAPHORE_BASIC_INFORMATION;
-
-/* Note: this will only work as long as jthread is directly linked to application */
-/* it's gonna fail if someone tries to build jthread as dll */
-static _NtQuerySemaphore NtQuerySemaphore =
- (_NtQuerySemaphore)
- GetProcAddress
- (GetModuleHandle ("ntdll.dll"), "NtQuerySemaphore");
-
-int JSemaphore::GetValue() {
- SEMAPHORE_BASIC_INFORMATION BasicInfo;
- LONG retval;
-
- assert(NtQuerySemaphore);
-
- retval = NtQuerySemaphore (m_hSemaphore, 0,
- &BasicInfo, sizeof (SEMAPHORE_BASIC_INFORMATION), NULL);
-
- if (retval == ERROR_SUCCESS)
- return BasicInfo.CurrentCount;
-
- assert("unable to read semaphore count" == 0);
- return 0;
-}
-
diff --git a/src/jthread/win32/jthread.cpp b/src/jthread/win32/jthread.cpp
deleted file mode 100755
index b523d664c..000000000
--- a/src/jthread/win32/jthread.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-
- This file is a part of the JThread package, which contains some object-
- oriented thread wrappers for different thread implementations.
-
- Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
-*/
-
-#include "jthread/jthread.h"
-#include <assert.h>
-#define UNUSED(expr) do { (void)(expr); } while (0)
-#ifndef _WIN32_WCE
- #include <process.h>
-#endif // _WIN32_WCE
-
-JThread::JThread()
-{
- retval = NULL;
- requeststop = false;
- running = false;
-}
-
-JThread::~JThread()
-{
- Kill();
-}
-
-void JThread::Wait() {
- if (running)
- {
- WaitForSingleObject(threadhandle, INFINITE);
- }
-}
-
-int JThread::Start()
-{
- if (running)
- {
- return ERR_JTHREAD_ALREADYRUNNING;
- }
- requeststop = false;
-
- continuemutex.Lock();
-#ifndef _WIN32_WCE
- threadhandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,&threadid);
-#else
- threadhandle = CreateThread(NULL,0,TheThread,this,0,&threadid);
-#endif // _WIN32_WCE
- if (threadhandle == NULL)
- {
- continuemutex.Unlock();
- return ERR_JTHREAD_CANTSTARTTHREAD;
- }
-
- /* Wait until 'running' is set */
- while (!running)
- {
- Sleep(1);
- }
-
- continuemutex.Unlock();
-
- continuemutex2.Lock();
- continuemutex2.Unlock();
-
- return 0;
-}
-
-int JThread::Kill()
-{
- if (!running)
- {
- return ERR_JTHREAD_NOTRUNNING;
- }
- TerminateThread(threadhandle,0);
- CloseHandle(threadhandle);
- running = false;
- return 0;
-}
-
-void *JThread::GetReturnValue()
-{
- void *val;
-
- if (running) {
- val = NULL;
- } else {
- val = retval;
- }
- return val;
-}
-
-bool JThread::IsSameThread()
-{
- return GetCurrentThreadId() == threadid;
-}
-
-#ifndef _WIN32_WCE
-UINT __stdcall JThread::TheThread(void *param)
-#else
-DWORD WINAPI JThread::TheThread(void *param)
-#endif // _WIN32_WCE
-{
- JThread *jthread;
- void *ret;
-
- jthread = (JThread *)param;
-
- jthread->continuemutex2.Lock();
- jthread->running = true;
-
- jthread->continuemutex.Lock();
- jthread->continuemutex.Unlock();
-
- ret = jthread->Thread();
-
- jthread->running = false;
- jthread->retval = ret;
- CloseHandle(jthread->threadhandle);
- return 0;
-}
-
-void JThread::ThreadStarted()
-{
- continuemutex2.Unlock();
-}
-
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 77e7a9e16..507f31980 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -42,6 +42,7 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name):
last_pitch(0),
last_yaw(0),
last_keyPressed(0),
+ camera_impact(0.f),
last_animation(NO_ANIM),
hotbar_image(""),
hotbar_selected_image(""),
@@ -182,7 +183,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
*/
if (control.sneak && m_sneak_node_exists &&
!(fly_allowed && g_settings->getBool("free_move")) && !in_liquid &&
- physics_override_sneak) {
+ physics_override_sneak && !got_teleported) {
f32 maxd = 0.5 * BS + sneak_max;
v3f lwn_f = intToFloat(m_sneak_node, BS);
position.X = rangelim(position.X, lwn_f.X-maxd, lwn_f.X+maxd);
@@ -203,18 +204,21 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
}
}
+ if (got_teleported)
+ got_teleported = false;
+
// this shouldn't be hardcoded but transmitted from server
float player_stepheight = touching_ground ? (BS*0.6) : (BS*0.2);
#ifdef __ANDROID__
- player_stepheight += (0.5 * BS);
+ player_stepheight += (0.6 * BS);
#endif
v3f accel_f = v3f(0,0,0);
collisionMoveResult result = collisionMoveSimple(env, m_gamedef,
- pos_max_d, m_collisionbox, player_stepheight, dtime,
- position, m_speed, accel_f);
+ pos_max_d, m_collisionbox, player_stepheight, dtime,
+ &position, &m_speed, accel_f);
/*
If the player's feet touch the topside of any node, this is
@@ -309,7 +313,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
if (sneak_node_found) {
f32 cb_max = 0;
MapNode n = map->getNodeNoEx(m_sneak_node);
- std::vector<aabb3f> nodeboxes = n.getCollisionBoxes(nodemgr);
+ std::vector<aabb3f> nodeboxes;
+ n.getCollisionBoxes(nodemgr, &nodeboxes);
for (std::vector<aabb3f>::iterator it = nodeboxes.begin();
it != nodeboxes.end(); ++it) {
aabb3f box = *it;
@@ -344,7 +349,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
}
}
- if(!touching_ground_was && touching_ground){
+ if(!result.standing_on_object && !touching_ground_was && touching_ground) {
MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround");
m_gamedef->event()->put(e);
@@ -512,15 +517,16 @@ void LocalPlayer::applyControl(float dtime)
}
}
- if(continuous_forward)
+ if (continuous_forward)
speedH += move_direction;
- if(control.up)
- {
- if(continuous_forward)
- superspeed = true;
- else
+ if (control.up) {
+ if (continuous_forward) {
+ if (fast_move)
+ superspeed = true;
+ } else {
speedH += move_direction;
+ }
}
if(control.down)
{
@@ -620,3 +626,36 @@ v3s16 LocalPlayer::getStandingNodePos()
return floatToInt(getPosition() - v3f(0, BS, 0), BS);
}
+// Horizontal acceleration (X and Z), Y direction is ignored
+void LocalPlayer::accelerateHorizontal(const v3f &target_speed, const f32 max_increase)
+{
+ if (max_increase == 0)
+ return;
+
+ v3f d_wanted = target_speed - m_speed;
+ d_wanted.Y = 0;
+ f32 dl = d_wanted.getLength();
+ if (dl > max_increase)
+ dl = max_increase;
+
+ v3f d = d_wanted.normalize() * dl;
+
+ m_speed.X += d.X;
+ m_speed.Z += d.Z;
+}
+
+// Vertical acceleration (Y), X and Z directions are ignored
+void LocalPlayer::accelerateVertical(const v3f &target_speed, const f32 max_increase)
+{
+ if (max_increase == 0)
+ return;
+
+ f32 d_wanted = target_speed.Y - m_speed.Y;
+ if (d_wanted > max_increase)
+ d_wanted = max_increase;
+ else if (d_wanted < -max_increase)
+ d_wanted = -max_increase;
+
+ m_speed.Y += d_wanted;
+}
+
diff --git a/src/localplayer.h b/src/localplayer.h
index 40a7f089e..3ae0c4e51 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -45,7 +45,7 @@ public:
bool isAttached;
v3f overridePosition;
-
+
void move(f32 dtime, Environment *env, f32 pos_max_d);
void move(f32 dtime, Environment *env, f32 pos_max_d,
std::vector<CollisionInfo> *collision_info);
@@ -81,6 +81,9 @@ public:
}
private:
+ void accelerateHorizontal(const v3f &target_speed, const f32 max_increase);
+ void accelerateVertical(const v3f &target_speed, const f32 max_increase);
+
// This is used for determining the sneaking range
v3s16 m_sneak_node;
// Whether the player is allowed to sneak
diff --git a/src/log.cpp b/src/log.cpp
index e6d80db34..589cfd909 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -19,19 +19,81 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
-#include <map>
-#include <list>
-#include <sstream>
-#include <algorithm>
-#include "threads.h"
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#include "debug.h"
#include "gettime.h"
#include "porting.h"
#include "config.h"
+#include "exceptions.h"
+#include "util/numeric.h"
+#include "log.h"
+
+#include <sstream>
+#include <iostream>
+#include <algorithm>
+#include <cerrno>
+#include <cstring>
+
+const int BUFFER_LENGTH = 256;
+
+class StringBuffer : public std::streambuf {
+public:
+ StringBuffer() {
+ buffer_index = 0;
+ }
+
+ int overflow(int c);
+ virtual void flush(const std::string &buf) = 0;
+ std::streamsize xsputn(const char *s, std::streamsize n);
+ void push_back(char c);
+
+private:
+ char buffer[BUFFER_LENGTH];
+ int buffer_index;
+};
+
+
+class LogBuffer : public StringBuffer {
+public:
+ LogBuffer(Logger &logger, LogLevel lev) :
+ logger(logger),
+ level(lev)
+ {}
+
+ void flush(const std::string &buffer);
+
+private:
+ Logger &logger;
+ LogLevel level;
+};
+
+
+class RawLogBuffer : public StringBuffer {
+public:
+ void flush(const std::string &buffer);
+};
+
+////
+//// Globals
+////
+
+Logger g_logger;
+
+StreamLogOutput stdout_output(std::cout);
+StreamLogOutput stderr_output(std::cerr);
+std::ostream null_stream(NULL);
+
+RawLogBuffer raw_buf;
+
+LogBuffer none_buf(g_logger, LL_NONE);
+LogBuffer error_buf(g_logger, LL_ERROR);
+LogBuffer warning_buf(g_logger, LL_WARNING);
+LogBuffer action_buf(g_logger, LL_ACTION);
+LogBuffer info_buf(g_logger, LL_INFO);
+LogBuffer verbose_buf(g_logger, LL_VERBOSE);
// Connection
-std::ostream *dout_con_ptr = &dummyout;
+std::ostream *dout_con_ptr = &null_stream;
std::ostream *derr_con_ptr = &verbosestream;
// Server
@@ -44,170 +106,265 @@ std::ostream *dout_client_ptr = &infostream;
std::ostream *derr_client_ptr = &errorstream;
#endif
+std::ostream rawstream(&raw_buf);
+std::ostream dstream(&none_buf);
+std::ostream errorstream(&error_buf);
+std::ostream warningstream(&warning_buf);
+std::ostream actionstream(&action_buf);
+std::ostream infostream(&info_buf);
+std::ostream verbosestream(&verbose_buf);
+
+// Android
#ifdef __ANDROID__
-unsigned int android_log_level_mapping[] = {
- /* LMT_ERROR */ ANDROID_LOG_ERROR,
- /* LMT_ACTION */ ANDROID_LOG_WARN,
- /* LMT_INFO */ ANDROID_LOG_INFO,
- /* LMT_VERBOSE */ ANDROID_LOG_VERBOSE
- };
+
+static unsigned int g_level_to_android[] = {
+ ANDROID_LOG_INFO, // LL_NONE
+ //ANDROID_LOG_FATAL,
+ ANDROID_LOG_ERROR, // LL_ERROR
+ ANDROID_LOG_WARN, // LL_WARNING
+ ANDROID_LOG_WARN, // LL_ACTION
+ //ANDROID_LOG_INFO,
+ ANDROID_LOG_DEBUG, // LL_INFO
+ ANDROID_LOG_VERBOSE, // LL_VERBOSE
+};
+
+class AndroidSystemLogOutput : public ICombinedLogOutput {
+ public:
+ AndroidSystemLogOutput()
+ {
+ g_logger.addOutput(this);
+ }
+ ~AndroidSystemLogOutput()
+ {
+ g_logger.removeOutput(this);
+ }
+ void logRaw(LogLevel lev, const std::string &line)
+ {
+ STATIC_ASSERT(ARRLEN(g_level_to_android) == LL_MAX,
+ mismatch_between_android_and_internal_loglevels);
+ __android_log_print(g_level_to_android[lev],
+ PROJECT_NAME_C, "%s", line.c_str());
+ }
+};
+
+AndroidSystemLogOutput g_android_log_output;
+
#endif
-std::vector<ILogOutput*> log_outputs[LMT_NUM_VALUES];
-std::map<threadid_t, std::string> log_threadnames;
-JMutex log_threadnamemutex;
+///////////////////////////////////////////////////////////////////////////////
-void log_add_output(ILogOutput *out, enum LogMessageLevel lev)
+
+////
+//// Logger
+////
+
+LogLevel Logger::stringToLevel(const std::string &name)
{
- log_outputs[lev].push_back(out);
+ if (name == "none")
+ return LL_NONE;
+ else if (name == "error")
+ return LL_ERROR;
+ else if (name == "warning")
+ return LL_WARNING;
+ else if (name == "action")
+ return LL_ACTION;
+ else if (name == "info")
+ return LL_INFO;
+ else if (name == "verbose")
+ return LL_VERBOSE;
+ else
+ return LL_MAX;
}
-void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev)
+void Logger::addOutput(ILogOutput *out)
{
- for(int i=0; i<=lev; i++)
- log_outputs[i].push_back(out);
+ addOutputMaxLevel(out, (LogLevel)(LL_MAX - 1));
}
-void log_add_output_all_levs(ILogOutput *out)
+void Logger::addOutput(ILogOutput *out, LogLevel lev)
{
- for(int i=0; i<LMT_NUM_VALUES; i++)
- log_outputs[i].push_back(out);
+ m_outputs[lev].push_back(out);
}
-void log_remove_output(ILogOutput *out)
+void Logger::addOutputMasked(ILogOutput *out, LogLevelMask mask)
{
- for(int i=0; i<LMT_NUM_VALUES; i++){
- std::vector<ILogOutput*>::iterator it =
- std::find(log_outputs[i].begin(), log_outputs[i].end(), out);
- if(it != log_outputs[i].end())
- log_outputs[i].erase(it);
+ for (size_t i = 0; i < LL_MAX; i++) {
+ if (mask & LOGLEVEL_TO_MASKLEVEL(i))
+ m_outputs[i].push_back(out);
}
}
-void log_set_lev_silence(enum LogMessageLevel lev, bool silence)
+void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev)
{
- JMutexAutoLock lock(log_threadnamemutex);
+ assert(lev < LL_MAX);
+ for (size_t i = 0; i <= lev; i++)
+ m_outputs[i].push_back(out);
+}
- for (std::vector<ILogOutput *>::iterator it = log_outputs[lev].begin();
- it != log_outputs[lev].end(); ++it) {
- ILogOutput *out = *it;
- out->silence = silence;
+LogLevelMask Logger::removeOutput(ILogOutput *out)
+{
+ LogLevelMask ret_mask = 0;
+ for (size_t i = 0; i < LL_MAX; i++) {
+ std::vector<ILogOutput *>::iterator it;
+
+ it = std::find(m_outputs[i].begin(), m_outputs[i].end(), out);
+ if (it != m_outputs[i].end()) {
+ ret_mask |= LOGLEVEL_TO_MASKLEVEL(i);
+ m_outputs[i].erase(it);
+ }
}
+ return ret_mask;
}
-void log_register_thread(const std::string &name)
+void Logger::setLevelSilenced(LogLevel lev, bool silenced)
{
- threadid_t id = get_current_thread_id();
- JMutexAutoLock lock(log_threadnamemutex);
+ m_silenced_levels[lev] = silenced;
+}
- log_threadnames[id] = name;
+void Logger::registerThread(const std::string &name)
+{
+ threadid_t id = thr_get_current_thread_id();
+ MutexAutoLock lock(m_mutex);
+ m_thread_names[id] = name;
}
-void log_deregister_thread()
+void Logger::deregisterThread()
{
- threadid_t id = get_current_thread_id();
- JMutexAutoLock lock(log_threadnamemutex);
+ threadid_t id = thr_get_current_thread_id();
+ MutexAutoLock lock(m_mutex);
+ m_thread_names.erase(id);
+}
- log_threadnames.erase(id);
+const std::string Logger::getLevelLabel(LogLevel lev)
+{
+ static const std::string names[] = {
+ "",
+ "ERROR",
+ "WARNING",
+ "ACTION",
+ "INFO",
+ "VERBOSE",
+ };
+ assert(lev < LL_MAX && lev >= 0);
+ STATIC_ASSERT(ARRLEN(names) == LL_MAX,
+ mismatch_between_loglevel_names_and_enum);
+ return names[lev];
}
-static std::string get_lev_string(enum LogMessageLevel lev)
+const std::string Logger::getThreadName()
{
- switch(lev){
- case LMT_ERROR:
- return "ERROR";
- case LMT_ACTION:
- return "ACTION";
- case LMT_INFO:
- return "INFO";
- case LMT_VERBOSE:
- return "VERBOSE";
- case LMT_NUM_VALUES:
- break;
- }
- return "(unknown level)";
+ std::map<threadid_t, std::string>::const_iterator it;
+
+ threadid_t id = thr_get_current_thread_id();
+ it = m_thread_names.find(id);
+ if (it != m_thread_names.end())
+ return it->second;
+
+ std::ostringstream os;
+ os << "#0x" << std::hex << id;
+ return os.str();
}
-void log_printline(enum LogMessageLevel lev, const std::string &text)
+void Logger::log(LogLevel lev, const std::string &text)
{
- JMutexAutoLock lock(log_threadnamemutex);
- std::string threadname = "(unknown thread)";
- std::map<threadid_t, std::string>::const_iterator i;
- i = log_threadnames.find(get_current_thread_id());
- if(i != log_threadnames.end())
- threadname = i->second;
- std::string levelname = get_lev_string(lev);
+ if (m_silenced_levels[lev])
+ return;
+
+ const std::string thread_name = getThreadName();
+ const std::string label = getLevelLabel(lev);
+ const std::string timestamp = getTimestamp();
std::ostringstream os(std::ios_base::binary);
- os << getTimestamp() << ": " << levelname << "["<<threadname<<"]: " << text;
+ os << timestamp << ": " << label << "[" << thread_name << "]: " << text;
- for(std::vector<ILogOutput*>::iterator i = log_outputs[lev].begin();
- i != log_outputs[lev].end(); i++) {
- ILogOutput *out = *i;
- if (out->silence)
- continue;
+ logToOutputs(lev, os.str(), timestamp, thread_name, text);
+}
- out->printLog(os.str());
- out->printLog(os.str(), lev);
- out->printLog(lev, text);
- }
+void Logger::logRaw(LogLevel lev, const std::string &text)
+{
+ if (m_silenced_levels[lev])
+ return;
+
+ logToOutputsRaw(lev, text);
}
-class Logbuf : public std::streambuf
+void Logger::logToOutputsRaw(LogLevel lev, const std::string &line)
{
-public:
- Logbuf(enum LogMessageLevel lev):
- m_lev(lev)
- {
- }
+ MutexAutoLock lock(m_mutex);
+ for (size_t i = 0; i != m_outputs[lev].size(); i++)
+ m_outputs[lev][i]->logRaw(lev, line);
+}
- ~Logbuf()
- {
- }
+void Logger::logToOutputs(LogLevel lev, const std::string &combined,
+ const std::string &time, const std::string &thread_name,
+ const std::string &payload_text)
+{
+ MutexAutoLock lock(m_mutex);
+ for (size_t i = 0; i != m_outputs[lev].size(); i++)
+ m_outputs[lev][i]->log(lev, combined, time, thread_name, payload_text);
+}
+
+
+////
+//// *LogOutput methods
+////
+
+void FileLogOutput::open(const std::string &filename)
+{
+ m_stream.open(filename.c_str(), std::ios::app | std::ios::ate);
+ if (!m_stream.good())
+ throw FileNotGoodException("Failed to open log file " +
+ filename + ": " + strerror(errno));
+ m_stream << "\n\n"
+ "-------------" << std::endl
+ << " Separator" << std::endl
+ << "-------------\n" << std::endl;
+}
- int overflow(int c)
- {
- bufchar(c);
- return c;
- }
- std::streamsize xsputn(const char *s, std::streamsize n)
- {
- for(int i=0; i<n; i++)
- bufchar(s[i]);
- return n;
- }
- void printbuf()
- {
- log_printline(m_lev, m_buf);
-#ifdef __ANDROID__
- __android_log_print(android_log_level_mapping[m_lev], PROJECT_NAME, "%s", m_buf.c_str());
-#endif
- }
- void bufchar(char c)
- {
- if(c == '\n' || c == '\r'){
- if(m_buf != "")
- printbuf();
- m_buf = "";
- return;
+////
+//// *Buffer methods
+////
+
+int StringBuffer::overflow(int c)
+{
+ push_back(c);
+ return c;
+}
+
+
+std::streamsize StringBuffer::xsputn(const char *s, std::streamsize n)
+{
+ for (int i = 0; i < n; ++i)
+ push_back(s[i]);
+ return n;
+}
+
+void StringBuffer::push_back(char c)
+{
+ if (c == '\n' || c == '\r') {
+ if (buffer_index)
+ flush(std::string(buffer, buffer_index));
+ buffer_index = 0;
+ } else {
+ int index = buffer_index;
+ buffer[index++] = c;
+ if (index >= BUFFER_LENGTH) {
+ flush(std::string(buffer, buffer_index));
+ buffer_index = 0;
+ } else {
+ buffer_index = index;
}
- m_buf += c;
}
+}
-private:
- enum LogMessageLevel m_lev;
- std::string m_buf;
-};
-
-Logbuf errorbuf(LMT_ERROR);
-Logbuf actionbuf(LMT_ACTION);
-Logbuf infobuf(LMT_INFO);
-Logbuf verbosebuf(LMT_VERBOSE);
-std::ostream errorstream(&errorbuf);
-std::ostream actionstream(&actionbuf);
-std::ostream infostream(&infobuf);
-std::ostream verbosestream(&verbosebuf);
-bool log_trace_level_enabled = false;
+void LogBuffer::flush(const std::string &buffer)
+{
+ logger.log(level, buffer);
+}
+void RawLogBuffer::flush(const std::string &buffer)
+{
+ g_logger.logRaw(LL_NONE, buffer);
+}
diff --git a/src/log.h b/src/log.h
index bd223927a..219255d9a 100644
--- a/src/log.h
+++ b/src/log.h
@@ -20,83 +20,197 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef LOG_HEADER
#define LOG_HEADER
+#include <map>
+#include <queue>
#include <string>
+#include <fstream>
+#include "threads.h"
+#include "irrlichttypes.h"
+
+class ILogOutput;
+
+enum LogLevel {
+ LL_NONE, // Special level that is always printed
+ LL_ERROR,
+ LL_WARNING,
+ LL_ACTION, // In-game actions
+ LL_INFO,
+ LL_VERBOSE,
+ LL_MAX,
+};
-/*
- Use this for logging everything.
+typedef u8 LogLevelMask;
+#define LOGLEVEL_TO_MASKLEVEL(x) (1 << x)
- If you need to explicitly print something, use dstream or cout or cerr.
-*/
+class Logger {
+public:
+ void addOutput(ILogOutput *out);
+ void addOutput(ILogOutput *out, LogLevel lev);
+ void addOutputMasked(ILogOutput *out, LogLevelMask mask);
+ void addOutputMaxLevel(ILogOutput *out, LogLevel lev);
+ LogLevelMask removeOutput(ILogOutput *out);
+ void setLevelSilenced(LogLevel lev, bool silenced);
+
+ void registerThread(const std::string &name);
+ void deregisterThread();
+
+ void log(LogLevel lev, const std::string &text);
+ // Logs without a prefix
+ void logRaw(LogLevel lev, const std::string &text);
+
+ void setTraceEnabled(bool enable) { m_trace_enabled = enable; }
+ bool getTraceEnabled() { return m_trace_enabled; }
+
+ static LogLevel stringToLevel(const std::string &name);
+ static const std::string getLevelLabel(LogLevel lev);
+
+private:
+ void logToOutputsRaw(LogLevel, const std::string &line);
+ void logToOutputs(LogLevel, const std::string &combined,
+ const std::string &time, const std::string &thread_name,
+ const std::string &payload_text);
+
+ const std::string getThreadName();
+
+ std::vector<ILogOutput *> m_outputs[LL_MAX];
+
+ // Should implement atomic loads and stores (even though it's only
+ // written to when one thread has access currently).
+ // Works on all known architectures (x86, ARM, MIPS).
+ volatile bool m_silenced_levels[LL_MAX];
+ std::map<threadid_t, std::string> m_thread_names;
+ mutable Mutex m_mutex;
+ bool m_trace_enabled;
+};
-enum LogMessageLevel {
- LMT_ERROR, /* Something failed ("invalid map data on disk, block (2,2,1)") */
- LMT_ACTION, /* In-game actions ("celeron55 placed block at (12,4,-5)") */
- LMT_INFO, /* More deep info ("saving map on disk (only_modified=true)") */
- LMT_VERBOSE, /* Flood-style ("loaded block (2,2,2) from disk") */
- LMT_NUM_VALUES,
+class ILogOutput {
+public:
+ virtual void logRaw(LogLevel, const std::string &line) = 0;
+ virtual void log(LogLevel, const std::string &combined,
+ const std::string &time, const std::string &thread_name,
+ const std::string &payload_text) = 0;
};
-class ILogOutput
-{
+class ICombinedLogOutput : public ILogOutput {
public:
- ILogOutput() :
- silence(false)
- {}
-
- /* line: Full line with timestamp, level and thread */
- virtual void printLog(const std::string &line){};
- /* line: Full line with timestamp, level and thread */
- virtual void printLog(const std::string &line, enum LogMessageLevel lev){};
- /* line: Only actual printed text */
- virtual void printLog(enum LogMessageLevel lev, const std::string &line){};
-
- bool silence;
+ void log(LogLevel lev, const std::string &combined,
+ const std::string &time, const std::string &thread_name,
+ const std::string &payload_text)
+ {
+ logRaw(lev, combined);
+ }
};
-void log_add_output(ILogOutput *out, enum LogMessageLevel lev);
-void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev);
-void log_add_output_all_levs(ILogOutput *out);
-void log_remove_output(ILogOutput *out);
-void log_set_lev_silence(enum LogMessageLevel lev, bool silence);
+class StreamLogOutput : public ICombinedLogOutput {
+public:
+ StreamLogOutput(std::ostream &stream) :
+ m_stream(stream)
+ {
+ }
+
+ void logRaw(LogLevel lev, const std::string &line)
+ {
+ m_stream << line << std::endl;
+ }
+
+private:
+ std::ostream &m_stream;
+};
-void log_register_thread(const std::string &name);
-void log_deregister_thread();
+class FileLogOutput : public ICombinedLogOutput {
+public:
+ void open(const std::string &filename);
-void log_printline(enum LogMessageLevel lev, const std::string &text);
+ void logRaw(LogLevel lev, const std::string &line)
+ {
+ m_stream << line << std::endl;
+ }
-#define LOGLINEF(lev, ...)\
-{\
- char buf[10000];\
- snprintf(buf, 10000, __VA_ARGS__);\
- log_printline(lev, buf);\
-}
+private:
+ std::ofstream m_stream;
+};
-extern std::ostream errorstream;
-extern std::ostream actionstream;
-extern std::ostream infostream;
-extern std::ostream verbosestream;
+class LogOutputBuffer : public ICombinedLogOutput {
+public:
+ LogOutputBuffer(Logger &logger, LogLevel lev) :
+ m_logger(logger)
+ {
+ m_logger.addOutput(this, lev);
+ }
+
+ ~LogOutputBuffer()
+ {
+ m_logger.removeOutput(this);
+ }
+
+ void logRaw(LogLevel lev, const std::string &line)
+ {
+ m_buffer.push(line);
+ }
+
+ bool empty()
+ {
+ return m_buffer.empty();
+ }
+
+ std::string get()
+ {
+ if (empty())
+ return "";
+ std::string s = m_buffer.front();
+ m_buffer.pop();
+ return s;
+ }
+
+private:
+ std::queue<std::string> m_buffer;
+ Logger &m_logger;
+};
-extern bool log_trace_level_enabled;
-#define TRACESTREAM(x){ if(log_trace_level_enabled) verbosestream x; }
-#define TRACEDO(x){ if(log_trace_level_enabled){ x ;} }
+extern StreamLogOutput stdout_output;
+extern StreamLogOutput stderr_output;
+extern std::ostream null_stream;
extern std::ostream *dout_con_ptr;
extern std::ostream *derr_con_ptr;
extern std::ostream *dout_server_ptr;
extern std::ostream *derr_server_ptr;
+
+#ifndef SERVER
+extern std::ostream *dout_client_ptr;
+extern std::ostream *derr_client_ptr;
+#endif
+
+extern Logger g_logger;
+
+// Writes directly to all LL_NONE log outputs for g_logger with no prefix.
+extern std::ostream rawstream;
+
+extern std::ostream errorstream;
+extern std::ostream warningstream;
+extern std::ostream actionstream;
+extern std::ostream infostream;
+extern std::ostream verbosestream;
+extern std::ostream dstream;
+
+#define TRACEDO(x) do { \
+ if (g_logger.getTraceEnabled()) { \
+ x; \
+ } \
+} while (0)
+
+#define TRACESTREAM(x) TRACEDO(verbosestream x)
+
#define dout_con (*dout_con_ptr)
#define derr_con (*derr_con_ptr)
#define dout_server (*dout_server_ptr)
#define derr_server (*derr_server_ptr)
#ifndef SERVER
-extern std::ostream *dout_client_ptr;
-extern std::ostream *derr_client_ptr;
-#define dout_client (*dout_client_ptr)
-#define derr_client (*derr_client_ptr)
-
+ #define dout_client (*dout_client_ptr)
+ #define derr_client (*derr_client_ptr)
#endif
-#endif
+#endif
diff --git a/src/luaentity_common.h b/src/luaentity_common.h
deleted file mode 100644
index 35b079ade..000000000
--- a/src/luaentity_common.h
+++ /dev/null
@@ -1,30 +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.
-*/
-
-#ifndef LUAENTITY_COMMON_HEADER
-#define LUAENTITY_COMMON_HEADER
-
-#define LUAENTITY_CMD_UPDATE_POSITION 0
-#define LUAENTITY_CMD_SET_TEXTURE_MOD 1
-#define LUAENTITY_CMD_SET_SPRITE 2
-#define LUAENTITY_CMD_PUNCHED 3
-#define LUAENTITY_CMD_UPDATE_ARMOR_GROUPS 4
-
-#endif
-
diff --git a/src/main.cpp b/src/main.cpp
index 1d73b4025..1b95a9f1c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -18,11 +18,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#ifdef _MSC_VER
-#ifndef SERVER // Dedicated server isn't linked with Irrlicht
- #pragma comment(lib, "Irrlicht.lib")
- // This would get rid of the console window
- //#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
-#endif
+ #ifndef SERVER // Dedicated server isn't linked with Irrlicht
+ #pragma comment(lib, "Irrlicht.lib")
+ // This would get rid of the console window
+ //#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
+ #endif
#pragma comment(lib, "zlibwapi.lib")
#pragma comment(lib, "Shell32.lib")
#endif
@@ -45,16 +45,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "httpfetch.h"
#include "guiEngine.h"
#include "map.h"
+#include "player.h"
#include "mapsector.h"
#include "fontengine.h"
#include "gameparams.h"
#include "database.h"
+#include "config.h"
+#if USE_CURSES
+ #include "terminal_chat_console.h"
+#endif
#ifndef SERVER
#include "client/clientlauncher.h"
#endif
#ifdef HAVE_TOUCHSCREENGUI
-#include "touchscreengui.h"
+ #include "touchscreengui.h"
+#endif
+
+#if !defined(SERVER) && \
+ (IRRLICHT_VERSION_MAJOR == 1) && \
+ (IRRLICHT_VERSION_MINOR == 8) && \
+ (IRRLICHT_VERSION_REVISION == 2)
+ #error "Irrlicht 1.8.2 is known to be broken - please update Irrlicht to version >= 1.8.3"
#endif
#define DEBUGFILE "debug.txt"
@@ -80,10 +92,10 @@ static void list_game_ids();
static void list_worlds();
static void setup_log_params(const Settings &cmd_args);
static bool create_userdata_path();
-static bool init_common(int *log_level, const Settings &cmd_args, int argc, char *argv[]);
+static bool init_common(const Settings &cmd_args, int argc, char *argv[]);
static void startup_message();
static bool read_config_file(const Settings &cmd_args);
-static void init_debug_streams(int *log_level, const Settings &cmd_args);
+static void init_log_streams(const Settings &cmd_args);
static bool game_configure(GameParams *game_params, const Settings &cmd_args);
static void game_configure_port(GameParams *game_params, const Settings &cmd_args);
@@ -122,25 +134,7 @@ u32 getTime(TimePrecision prec)
#endif
-class StderrLogOutput: public ILogOutput
-{
-public:
- /* line: Full line with timestamp, level and thread */
- void printLog(const std::string &line)
- {
- std::cerr << line << std::endl;
- }
-} main_stderr_log_out;
-
-class DstreamNoStderrLogOutput: public ILogOutput
-{
-public:
- /* line: Full line with timestamp, level and thread */
- void printLog(const std::string &line)
- {
- dstream_no_stderr << line << std::endl;
- }
-} main_dstream_no_stderr_log_out;
+FileLogOutput file_log_output;
static OptionList allowed_options;
@@ -150,10 +144,8 @@ int main(int argc, char *argv[])
debug_set_exception_handler();
- log_add_output_maxlev(&main_stderr_log_out, LMT_ACTION);
- log_add_output_all_levs(&main_dstream_no_stderr_log_out);
-
- log_register_thread("main");
+ g_logger.registerThread("Main");
+ g_logger.addOutputMaxLevel(&stderr_output, LL_ACTION);
Settings cmd_args;
bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args);
@@ -172,7 +164,13 @@ int main(int argc, char *argv[])
setup_log_params(cmd_args);
porting::signal_handler_init();
+
+#ifdef __ANDROID__
+ porting::initAndroid();
+ porting::initializePathsAndroid();
+#else
porting::initializePaths();
+#endif
if (!create_userdata_path()) {
errorstream << "Cannot create user data directory" << std::endl;
@@ -180,8 +178,7 @@ int main(int argc, char *argv[])
}
// Initialize debug stacks
- debug_stacks_init();
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Debug handler
BEGIN_DEBUG_EXCEPTION_HANDLER
@@ -198,18 +195,17 @@ int main(int argc, char *argv[])
return 0;
}
- GameParams game_params;
- if (!init_common(&game_params.log_level, cmd_args, argc, argv))
+ if (!init_common(cmd_args, argc, argv))
return 1;
#ifndef __ANDROID__
// Run unit tests
if (cmd_args.getFlag("run-unittests")) {
- run_tests();
- return 0;
+ return run_tests();
}
#endif
+ GameParams game_params;
#ifdef SERVER
game_params.is_dedicated_server = true;
#else
@@ -219,7 +215,7 @@ int main(int argc, char *argv[])
if (!game_configure(&game_params, cmd_args))
return 1;
- sanity_check(game_params.world_path != "");
+ sanity_check(!game_params.world_path.empty());
infostream << "Using commanded world path ["
<< game_params.world_path << "]" << std::endl;
@@ -247,7 +243,7 @@ int main(int argc, char *argv[])
// Stop httpfetch thread (if started)
httpfetch_cleanup();
- END_DEBUG_EXCEPTION_HANDLER(errorstream)
+ END_DEBUG_EXCEPTION_HANDLER
return retval;
}
@@ -299,6 +295,8 @@ static void set_allowed_options(OptionList *allowed_options)
_("Set gameid (\"--gameid list\" prints available ones)"))));
allowed_options->insert(std::make_pair("migrate", ValueSpec(VALUETYPE_STRING,
_("Migrate from current map backend to another (Only works when using minetestserver or with --server)"))));
+ allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG,
+ _("Feature an interactive terminal (Only works when using minetestserver or with --server)"))));
#ifndef SERVER
allowed_options->insert(std::make_pair("videomodes", ValueSpec(VALUETYPE_FLAG,
_("Show available video modes"))));
@@ -322,7 +320,7 @@ static void set_allowed_options(OptionList *allowed_options)
static void print_help(const OptionList &allowed_options)
{
- dstream << _("Allowed options:") << std::endl;
+ std::cout << _("Allowed options:") << std::endl;
print_allowed_options(allowed_options);
}
@@ -335,37 +333,38 @@ static void print_allowed_options(const OptionList &allowed_options)
if (i->second.type != VALUETYPE_FLAG)
os1 << _(" <value>");
- dstream << padStringRight(os1.str(), 24);
+ std::cout << padStringRight(os1.str(), 24);
if (i->second.help != NULL)
- dstream << i->second.help;
+ std::cout << i->second.help;
- dstream << std::endl;
+ std::cout << std::endl;
}
}
static void print_version()
{
- dstream << PROJECT_NAME_C " " << g_version_hash << std::endl;
+ std::cout << PROJECT_NAME_C " " << g_version_hash
+ << " (" << porting::getPlatformName() << ")" << std::endl;
#ifndef SERVER
- dstream << "Using Irrlicht " << IRRLICHT_SDK_VERSION << std::endl;
+ std::cout << "Using Irrlicht " << IRRLICHT_SDK_VERSION << std::endl;
#endif
- dstream << "Build info: " << g_build_info << std::endl;
+ std::cout << "Build info: " << g_build_info << std::endl;
}
static void list_game_ids()
{
std::set<std::string> gameids = getAvailableGameIds();
for (std::set<std::string>::const_iterator i = gameids.begin();
- i != gameids.end(); i++)
- dstream << (*i) <<std::endl;
+ i != gameids.end(); ++i)
+ std::cout << (*i) <<std::endl;
}
static void list_worlds()
{
- dstream << _("Available worlds:") << std::endl;
+ std::cout << _("Available worlds:") << std::endl;
std::vector<WorldSpec> worldspecs = getAvailableWorlds();
- print_worldspecs(worldspecs, dstream);
+ print_worldspecs(worldspecs, std::cout);
}
static void print_worldspecs(const std::vector<WorldSpec> &worldspecs,
@@ -403,26 +402,26 @@ static void setup_log_params(const Settings &cmd_args)
{
// Quiet mode, print errors only
if (cmd_args.getFlag("quiet")) {
- log_remove_output(&main_stderr_log_out);
- log_add_output_maxlev(&main_stderr_log_out, LMT_ERROR);
+ g_logger.removeOutput(&stderr_output);
+ g_logger.addOutputMaxLevel(&stderr_output, LL_ERROR);
}
// If trace is enabled, enable logging of certain things
if (cmd_args.getFlag("trace")) {
dstream << _("Enabling trace level debug output") << std::endl;
- log_trace_level_enabled = true;
- dout_con_ptr = &verbosestream; // this is somewhat old crap
- socket_enable_debug_output = true; // socket doesn't use log.h
+ g_logger.setTraceEnabled(true);
+ dout_con_ptr = &verbosestream; // This is somewhat old
+ socket_enable_debug_output = true; // Sockets doesn't use log.h
}
// In certain cases, output info level on stderr
if (cmd_args.getFlag("info") || cmd_args.getFlag("verbose") ||
cmd_args.getFlag("trace") || cmd_args.getFlag("speedtests"))
- log_add_output(&main_stderr_log_out, LMT_INFO);
+ g_logger.addOutput(&stderr_output, LL_INFO);
// In certain cases, output verbose level on stderr
if (cmd_args.getFlag("verbose") || cmd_args.getFlag("trace"))
- log_add_output(&main_stderr_log_out, LMT_VERBOSE);
+ g_logger.addOutput(&stderr_output, LL_VERBOSE);
}
static bool create_userdata_path()
@@ -430,9 +429,6 @@ static bool create_userdata_path()
bool success;
#ifdef __ANDROID__
- porting::initAndroid();
-
- porting::setExternalStorageDir(porting::jnienv);
if (!fs::PathExists(porting::path_user)) {
success = fs::CreateDir(porting::path_user);
} else {
@@ -444,13 +440,10 @@ static bool create_userdata_path()
success = fs::CreateDir(porting::path_user);
#endif
- infostream << "path_share = " << porting::path_share << std::endl;
- infostream << "path_user = " << porting::path_user << std::endl;
-
return success;
}
-static bool init_common(int *log_level, const Settings &cmd_args, int argc, char *argv[])
+static bool init_common(const Settings &cmd_args, int argc, char *argv[])
{
startup_message();
set_default_settings(g_settings);
@@ -462,7 +455,7 @@ static bool init_common(int *log_level, const Settings &cmd_args, int argc, char
if (!read_config_file(cmd_args))
return false;
- init_debug_streams(log_level, cmd_args);
+ init_log_streams(cmd_args);
// Initialize random seed
srand(time(0));
@@ -471,13 +464,8 @@ static bool init_common(int *log_level, const Settings &cmd_args, int argc, char
// Initialize HTTP fetcher
httpfetch_init(g_settings->getS32("curl_parallel_limit"));
-#ifdef _MSC_VER
- init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(),
+ init_gettext(porting::path_locale.c_str(),
g_settings->get("language"), argc, argv);
-#else
- init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(),
- g_settings->get("language"));
-#endif
return true;
}
@@ -533,38 +521,47 @@ static bool read_config_file(const Settings &cmd_args)
return true;
}
-static void init_debug_streams(int *log_level, const Settings &cmd_args)
+static void init_log_streams(const Settings &cmd_args)
{
#if RUN_IN_PLACE
- std::string logfile = DEBUGFILE;
+ std::string log_filename = DEBUGFILE;
#else
- std::string logfile = porting::path_user + DIR_DELIM + DEBUGFILE;
+ std::string log_filename = porting::path_user + DIR_DELIM + DEBUGFILE;
#endif
if (cmd_args.exists("logfile"))
- logfile = cmd_args.get("logfile");
-
- log_remove_output(&main_dstream_no_stderr_log_out);
- *log_level = g_settings->getS32("debug_log_level");
-
- if (*log_level == 0) //no logging
- logfile = "";
- if (*log_level < 0) {
- dstream << "WARNING: Supplied debug_log_level < 0; Using 0" << std::endl;
- *log_level = 0;
- } else if (*log_level > LMT_NUM_VALUES) {
- dstream << "WARNING: Supplied debug_log_level > " << LMT_NUM_VALUES
- << "; Using " << LMT_NUM_VALUES << std::endl;
- *log_level = LMT_NUM_VALUES;
+ log_filename = cmd_args.get("logfile");
+
+ g_logger.removeOutput(&file_log_output);
+ std::string conf_loglev = g_settings->get("debug_log_level");
+
+ // Old integer format
+ if (std::isdigit(conf_loglev[0])) {
+ warningstream << "Deprecated use of debug_log_level with an "
+ "integer value; please update your configuration." << std::endl;
+ static const char *lev_name[] =
+ {"", "error", "action", "info", "verbose"};
+ int lev_i = atoi(conf_loglev.c_str());
+ if (lev_i < 0 || lev_i >= (int)ARRLEN(lev_name)) {
+ warningstream << "Supplied invalid debug_log_level!"
+ " Assuming action level." << std::endl;
+ lev_i = 2;
+ }
+ conf_loglev = lev_name[lev_i];
}
- log_add_output_maxlev(&main_dstream_no_stderr_log_out,
- (LogMessageLevel)(*log_level - 1));
+ if (log_filename.empty() || conf_loglev.empty()) // No logging
+ return;
- debugstreams_init(false, logfile == "" ? NULL : logfile.c_str());
+ LogLevel log_level = Logger::stringToLevel(conf_loglev);
+ if (log_level == LL_MAX) {
+ warningstream << "Supplied unrecognized debug_log_level; "
+ "using maximum." << std::endl;
+ }
- infostream << "logfile = " << logfile << std::endl;
+ verbosestream << "log_filename = " << log_filename << std::endl;
- atexit(debugstreams_deinit);
+ file_log_output.open(log_filename.c_str());
+ g_logger.addOutputMaxLevel(&file_log_output, log_level);
}
static bool game_configure(GameParams *game_params, const Settings &cmd_args)
@@ -678,10 +675,10 @@ static bool auto_select_world(GameParams *game_params)
<< world_path << "]" << std::endl;
// If there are multiple worlds, list them
} else if (worldspecs.size() > 1 && game_params->is_dedicated_server) {
- dstream << _("Multiple worlds are available.") << std::endl;
- dstream << _("Please select one using --worldname <name>"
+ std::cerr << _("Multiple worlds are available.") << std::endl;
+ std::cerr << _("Please select one using --worldname <name>"
" or --world <path>") << std::endl;
- print_worldspecs(worldspecs, dstream);
+ print_worldspecs(worldspecs, std::cerr);
return false;
// If there are no worlds, automatically create a new one
} else {
@@ -774,7 +771,7 @@ static bool determine_subgame(GameParams *game_params)
if (game_params->game_spec.isValid()) {
gamespec = game_params->game_spec;
if (game_params->game_spec.id != world_gameid) {
- errorstream << "WARNING: Using commanded gameid ["
+ warningstream << "Using commanded gameid ["
<< gamespec.id << "]" << " instead of world gameid ["
<< world_gameid << "]" << std::endl;
}
@@ -834,15 +831,84 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
if (cmd_args.exists("migrate"))
return migrate_database(game_params, cmd_args);
- // Create server
- Server server(game_params.world_path,
- game_params.game_spec, false, bind_addr.isIPv6());
+ if (cmd_args.exists("terminal")) {
+#if USE_CURSES
+ bool name_ok = true;
+ std::string admin_nick = g_settings->get("name");
+
+ name_ok = name_ok && !admin_nick.empty();
+ name_ok = name_ok && string_allowed(admin_nick, PLAYERNAME_ALLOWED_CHARS);
+
+ if (!name_ok) {
+ if (admin_nick.empty()) {
+ errorstream << "No name given for admin. "
+ << "Please check your minetest.conf that it "
+ << "contains a 'name = ' to your main admin account."
+ << std::endl;
+ } else {
+ errorstream << "Name for admin '"
+ << admin_nick << "' is not valid. "
+ << "Please check that it only contains allowed characters. "
+ << "Valid characters are: " << PLAYERNAME_ALLOWED_CHARS_USER_EXPL
+ << std::endl;
+ }
+ return false;
+ }
+ ChatInterface iface;
+ bool &kill = *porting::signal_handler_killstatus();
- server.start(bind_addr);
+ try {
+ // Create server
+ Server server(game_params.world_path,
+ game_params.game_spec, false, bind_addr.isIPv6(), &iface);
- // Run server
- bool &kill = *porting::signal_handler_killstatus();
- dedicated_server_loop(server, kill);
+ g_term_console.setup(&iface, &kill, admin_nick);
+
+ g_term_console.start();
+
+ server.start(bind_addr);
+ // Run server
+ dedicated_server_loop(server, kill);
+ } catch (const ModError &e) {
+ g_term_console.stopAndWaitforThread();
+ errorstream << "ModError: " << e.what() << std::endl;
+ return false;
+ } catch (const ServerError &e) {
+ g_term_console.stopAndWaitforThread();
+ errorstream << "ServerError: " << e.what() << std::endl;
+ return false;
+ }
+
+ // Tell the console to stop, and wait for it to finish,
+ // only then leave context and free iface
+ g_term_console.stop();
+ g_term_console.wait();
+
+ g_term_console.clearKillStatus();
+ } else {
+#else
+ errorstream << "Cmd arg --terminal passed, but "
+ << "compiled without ncurses. Ignoring." << std::endl;
+ } {
+#endif
+ try {
+ // Create server
+ Server server(game_params.world_path, game_params.game_spec, false,
+ bind_addr.isIPv6());
+ server.start(bind_addr);
+
+ // Run server
+ bool &kill = *porting::signal_handler_killstatus();
+ dedicated_server_loop(server, kill);
+
+ } catch (const ModError &e) {
+ errorstream << "ModError: " << e.what() << std::endl;
+ return false;
+ } catch (const ServerError &e) {
+ errorstream << "ServerError: " << e.what() << std::endl;
+ return false;
+ }
+ }
return true;
}
diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h
index 6f8aa9137..17133b164 100644
--- a/src/mainmenumanager.h
+++ b/src/mainmenumanager.h
@@ -47,9 +47,9 @@ extern gui::IGUIStaticText *guiroot;
class MainMenuManager : public IMenuManager
{
public:
- virtual void createdMenu(GUIModalMenu *menu)
+ virtual void createdMenu(gui::IGUIElement *menu)
{
- for(std::list<GUIModalMenu*>::iterator
+ for(std::list<gui::IGUIElement*>::iterator
i = m_stack.begin();
i != m_stack.end(); ++i)
{
@@ -61,13 +61,13 @@ public:
m_stack.push_back(menu);
}
- virtual void deletingMenu(GUIModalMenu *menu)
+ virtual void deletingMenu(gui::IGUIElement *menu)
{
// Remove all entries if there are duplicates
bool removed_entry;
do{
removed_entry = false;
- for(std::list<GUIModalMenu*>::iterator
+ for(std::list<gui::IGUIElement*>::iterator
i = m_stack.begin();
i != m_stack.end(); ++i)
{
@@ -91,10 +91,10 @@ public:
// Returns true to prevent further processing
virtual bool preprocessEvent(const SEvent& event)
{
- if(!m_stack.empty())
- return m_stack.back()->preprocessEvent(event);
- else
+ if (m_stack.empty())
return false;
+ GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(m_stack.back());
+ return mm && mm->preprocessEvent(event);
}
u32 menuCount()
@@ -104,16 +104,17 @@ public:
bool pausesGame()
{
- for(std::list<GUIModalMenu*>::iterator
+ for(std::list<gui::IGUIElement*>::iterator
i = m_stack.begin(); i != m_stack.end(); ++i)
{
- if((*i)->pausesGame())
+ GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(*i);
+ if (mm && mm->pausesGame())
return true;
}
return false;
}
- std::list<GUIModalMenu*> m_stack;
+ std::list<gui::IGUIElement*> m_stack;
};
extern MainMenuManager g_menumgr;
diff --git a/src/map.cpp b/src/map.cpp
index 76a558d43..66fabaf87 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -673,7 +673,7 @@ void Map::updateLighting(enum LightBank bank,
{
INodeDefManager *nodemgr = m_gamedef->ndef();
- /*m_dout<<DTIME<<"Map::updateLighting(): "
+ /*m_dout<<"Map::updateLighting(): "
<<a_blocks.size()<<" blocks."<<std::endl;*/
//TimeTaker timer("updateLighting");
@@ -928,7 +928,7 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
INodeDefManager *ndef = m_gamedef->ndef();
/*PrintInfo(m_dout);
- m_dout<<DTIME<<"Map::addNodeAndUpdate(): p=("
+ m_dout<<"Map::addNodeAndUpdate(): p=("
<<p.X<<","<<p.Y<<","<<p.Z<<")"<<std::endl;*/
/*
@@ -1028,7 +1028,7 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
{
s16 y = p.Y - 1;
for(;; y--){
- //m_dout<<DTIME<<"y="<<y<<std::endl;
+ //m_dout<<"y="<<y<<std::endl;
v3s16 n2pos(p.X, y, p.Z);
MapNode n2;
@@ -1115,7 +1115,7 @@ void Map::removeNodeAndUpdate(v3s16 p,
INodeDefManager *ndef = m_gamedef->ndef();
/*PrintInfo(m_dout);
- m_dout<<DTIME<<"Map::removeNodeAndUpdate(): p=("
+ m_dout<<"Map::removeNodeAndUpdate(): p=("
<<p.X<<","<<p.Y<<","<<p.Z<<")"<<std::endl;*/
bool node_under_sunlight = true;
@@ -1197,14 +1197,14 @@ void Map::removeNodeAndUpdate(v3s16 p,
if(node_under_sunlight)
{
s16 ybottom = propagateSunlight(p, modified_blocks);
- /*m_dout<<DTIME<<"Node was under sunlight. "
+ /*m_dout<<"Node was under sunlight. "
"Propagating sunlight";
- m_dout<<DTIME<<" -> ybottom="<<ybottom<<std::endl;*/
+ m_dout<<" -> ybottom="<<ybottom<<std::endl;*/
s16 y = p.Y;
for(; y >= ybottom; y--)
{
v3s16 p2(p.X, y, p.Z);
- /*m_dout<<DTIME<<"lighting neighbors of node ("
+ /*m_dout<<"lighting neighbors of node ("
<<p2.X<<","<<p2.Y<<","<<p2.Z<<")"
<<std::endl;*/
lightNeighbors(LIGHTBANK_DAY, p2, modified_blocks);
@@ -1434,7 +1434,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks,
beginSave();
// If there is no practical limit, we spare creation of mapblock_queue
- if (max_loaded_blocks == (u32)-1) {
+ if (max_loaded_blocks == U32_MAX) {
for (std::map<v2s16, MapSector*>::iterator si = m_sectors.begin();
si != m_sectors.end(); ++si) {
MapSector *sector = si->second;
@@ -1614,12 +1614,12 @@ s32 Map::transforming_liquid_size() {
return m_transforming_liquid.size();
}
-void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
+void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
//TimeTaker timer("transformLiquids()");
u32 loopcount = 0;
@@ -1632,7 +1632,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
std::deque<v3s16> must_reflow;
// List of MapBlocks that will require a lighting update (due to lava)
- std::map<v3s16, MapBlock*> lighting_modified_blocks;
+ std::map<v3s16, MapBlock *> lighting_modified_blocks;
u32 liquid_loop_max = g_settings->getS32("liquid_loop_max");
u32 loop_max = liquid_loop_max;
@@ -1654,10 +1654,10 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
loop_max *= m_transforming_liquid_loop_count_multiplier;
#endif
- while(m_transforming_liquid.size() != 0)
+ while (m_transforming_liquid.size() != 0)
{
// This should be done here so that it is done when continue is used
- if(loopcount >= initial_size || loopcount >= loop_max)
+ if (loopcount >= initial_size || loopcount >= loop_max)
break;
loopcount++;
@@ -1674,21 +1674,24 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
*/
s8 liquid_level = -1;
content_t liquid_kind = CONTENT_IGNORE;
- LiquidType liquid_type = nodemgr->get(n0).liquid_type;
+ content_t floodable_node = CONTENT_AIR;
+ const ContentFeatures &cf = nodemgr->get(n0);
+ LiquidType liquid_type = cf.liquid_type;
switch (liquid_type) {
case LIQUID_SOURCE:
liquid_level = LIQUID_LEVEL_SOURCE;
- liquid_kind = nodemgr->getId(nodemgr->get(n0).liquid_alternative_flowing);
+ liquid_kind = nodemgr->getId(cf.liquid_alternative_flowing);
break;
case LIQUID_FLOWING:
liquid_level = (n0.param2 & LIQUID_LEVEL_MASK);
liquid_kind = n0.getContent();
break;
case LIQUID_NONE:
- // if this is an air node, it *could* be transformed into a liquid. otherwise,
- // continue with the next node.
- if (n0.getContent() != CONTENT_AIR)
+ // if this node is 'floodable', it *could* be transformed
+ // into a liquid, otherwise, continue with the next node.
+ if (!cf.floodable)
continue;
+ floodable_node = n0.getContent();
liquid_kind = CONTENT_AIR;
break;
}
@@ -1718,9 +1721,10 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
}
v3s16 npos = p0 + dirs[i];
NodeNeighbor nb(getNodeNoEx(npos), nt, npos);
+ const ContentFeatures &cfnb = nodemgr->get(nb.n);
switch (nodemgr->get(nb.n.getContent()).liquid_type) {
case LIQUID_NONE:
- if (nb.n.getContent() == CONTENT_AIR) {
+ if (cfnb.floodable) {
airs[num_airs++] = nb;
// if the current node is a water source the neighbor
// should be enqueded for transformation regardless of whether the
@@ -1728,18 +1732,21 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
if (nb.t != NEIGHBOR_UPPER && liquid_type != LIQUID_NONE)
m_transforming_liquid.push_back(npos);
// if the current node happens to be a flowing node, it will start to flow down here.
- if (nb.t == NEIGHBOR_LOWER) {
+ if (nb.t == NEIGHBOR_LOWER)
flowing_down = true;
- }
} else {
neutrals[num_neutrals++] = nb;
+ // If neutral below is ignore prevent water spreading outwards
+ if (nb.t == NEIGHBOR_LOWER &&
+ nb.n.getContent() == CONTENT_IGNORE)
+ flowing_down = true;
}
break;
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 = nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing);
- if (nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing) != liquid_kind) {
+ liquid_kind = nodemgr->getId(cfnb.liquid_alternative_flowing);
+ if (nodemgr->getId(cfnb.liquid_alternative_flowing) != liquid_kind) {
neutrals[num_neutrals++] = nb;
} else {
// Do not count bottom source, it will screw things up
@@ -1750,8 +1757,8 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
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 = nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing);
- if (nodemgr->getId(nodemgr->get(nb.n).liquid_alternative_flowing) != liquid_kind) {
+ liquid_kind = nodemgr->getId(cfnb.liquid_alternative_flowing);
+ if (nodemgr->getId(cfnb.liquid_alternative_flowing) != liquid_kind) {
neutrals[num_neutrals++] = nb;
} else {
flows[num_flows++] = nb;
@@ -1770,8 +1777,8 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
s8 max_node_level = -1;
u8 range = nodemgr->get(liquid_kind).liquid_range;
- if (range > LIQUID_LEVEL_MAX+1)
- range = LIQUID_LEVEL_MAX+1;
+ if (range > LIQUID_LEVEL_MAX + 1)
+ range = LIQUID_LEVEL_MAX + 1;
if ((num_sources >= 2 && nodemgr->get(liquid_kind).liquid_renewable) || liquid_type == LIQUID_SOURCE) {
// liquid_kind will be set to either the flowing alternative of the node (if it's a liquid)
@@ -1780,10 +1787,11 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
new_node_content = nodemgr->getId(nodemgr->get(liquid_kind).liquid_alternative_source);
} else if (num_sources >= 1 && sources[0].t != NEIGHBOR_LOWER) {
// liquid_kind is set properly, see above
- new_node_content = liquid_kind;
max_node_level = new_node_level = LIQUID_LEVEL_MAX;
- if (new_node_level < (LIQUID_LEVEL_MAX+1-range))
- new_node_content = CONTENT_AIR;
+ if (new_node_level >= (LIQUID_LEVEL_MAX + 1 - range))
+ new_node_content = liquid_kind;
+ else
+ new_node_content = floodable_node;
} else {
// no surrounding sources, so get the maximum level that can flow into this node
for (u16 i = 0; i < num_flows; i++) {
@@ -1794,16 +1802,16 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
max_node_level = LIQUID_LEVEL_MAX;
if (nb_liquid_level + WATER_DROP_BOOST < LIQUID_LEVEL_MAX)
max_node_level = nb_liquid_level + WATER_DROP_BOOST;
- } else if (nb_liquid_level > max_node_level)
+ } else if (nb_liquid_level > max_node_level) {
max_node_level = nb_liquid_level;
+ }
break;
case NEIGHBOR_LOWER:
break;
case NEIGHBOR_SAME_LEVEL:
if ((flows[i].n.param2 & LIQUID_FLOW_DOWN_MASK) != LIQUID_FLOW_DOWN_MASK &&
- nb_liquid_level > 0 && nb_liquid_level - 1 > max_node_level) {
+ nb_liquid_level > 0 && nb_liquid_level - 1 > max_node_level)
max_node_level = nb_liquid_level - 1;
- }
break;
}
}
@@ -1821,23 +1829,25 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
new_node_level = liquid_level + 1;
if (new_node_level != max_node_level)
must_reflow.push_back(p0);
- } else
+ } else {
new_node_level = max_node_level;
+ }
- if (max_node_level >= (LIQUID_LEVEL_MAX+1-range))
+ if (max_node_level >= (LIQUID_LEVEL_MAX + 1 - range))
new_node_content = liquid_kind;
else
- new_node_content = CONTENT_AIR;
+ new_node_content = floodable_node;
}
/*
check if anything has changed. if not, just continue with the next node.
*/
- if (new_node_content == n0.getContent() && (nodemgr->get(n0.getContent()).liquid_type != LIQUID_FLOWING ||
- ((n0.param2 & LIQUID_LEVEL_MASK) == (u8)new_node_level &&
- ((n0.param2 & LIQUID_FLOW_DOWN_MASK) == LIQUID_FLOW_DOWN_MASK)
- == flowing_down)))
+ if (new_node_content == n0.getContent() &&
+ (nodemgr->get(n0.getContent()).liquid_type != LIQUID_FLOWING ||
+ ((n0.param2 & LIQUID_LEVEL_MASK) == (u8)new_node_level &&
+ ((n0.param2 & LIQUID_FLOW_DOWN_MASK) == LIQUID_FLOW_DOWN_MASK)
+ == flowing_down)))
continue;
@@ -1857,11 +1867,10 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
// Find out whether there is a suspect for this action
std::string suspect;
- if(m_gamedef->rollback()) {
+ if (m_gamedef->rollback())
suspect = m_gamedef->rollback()->getSuspect(p0, 83, 1);
- }
- if(m_gamedef->rollback() && !suspect.empty()){
+ if (m_gamedef->rollback() && !suspect.empty()) {
// Blame suspect
RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
// Get old node for rollback
@@ -1880,10 +1889,10 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
v3s16 blockpos = getNodeBlockPos(p0);
MapBlock *block = getBlockNoCreateNoEx(blockpos);
- if(block != NULL) {
+ if (block != NULL) {
modified_blocks[blockpos] = block;
// If new or old node emits light, MapBlock requires lighting update
- if(nodemgr->get(n0).light_source != 0 ||
+ if (nodemgr->get(n0).light_source != 0 ||
nodemgr->get(n00).light_source != 0)
lighting_modified_blocks[block->getPos()] = block;
}
@@ -2018,7 +2027,7 @@ NodeMetadata *Map::getNodeMetadata(v3s16 p)
block = emergeBlock(blockpos, false);
}
if(!block){
- infostream<<"WARNING: Map::getNodeMetadata(): Block not found"
+ warningstream<<"Map::getNodeMetadata(): Block not found"
<<std::endl;
return NULL;
}
@@ -2037,7 +2046,7 @@ bool Map::setNodeMetadata(v3s16 p, NodeMetadata *meta)
block = emergeBlock(blockpos, false);
}
if(!block){
- infostream<<"WARNING: Map::setNodeMetadata(): Block not found"
+ warningstream<<"Map::setNodeMetadata(): Block not found"
<<std::endl;
return false;
}
@@ -2052,7 +2061,7 @@ void Map::removeNodeMetadata(v3s16 p)
MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block == NULL)
{
- infostream<<"WARNING: Map::removeNodeMetadata(): Block not found"
+ warningstream<<"Map::removeNodeMetadata(): Block not found"
<<std::endl;
return;
}
@@ -2070,7 +2079,7 @@ NodeTimer Map::getNodeTimer(v3s16 p)
block = emergeBlock(blockpos, false);
}
if(!block){
- infostream<<"WARNING: Map::getNodeTimer(): Block not found"
+ warningstream<<"Map::getNodeTimer(): Block not found"
<<std::endl;
return NodeTimer();
}
@@ -2089,7 +2098,7 @@ void Map::setNodeTimer(v3s16 p, NodeTimer t)
block = emergeBlock(blockpos, false);
}
if(!block){
- infostream<<"WARNING: Map::setNodeTimer(): Block not found"
+ warningstream<<"Map::setNodeTimer(): Block not found"
<<std::endl;
return;
}
@@ -2103,7 +2112,7 @@ void Map::removeNodeTimer(v3s16 p)
MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block == NULL)
{
- infostream<<"WARNING: Map::removeNodeTimer(): Block not found"
+ warningstream<<"Map::removeNodeTimer(): Block not found"
<<std::endl;
return;
}
@@ -2118,7 +2127,7 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emer
m_emerge(emerge),
m_map_metadata_changed(true)
{
- verbosestream<<__FUNCTION_NAME<<std::endl;
+ verbosestream<<FUNCTION_NAME<<std::endl;
/*
Try to load map; if not found, create a new one.
@@ -2164,7 +2173,7 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emer
<<" Using default settings."<<std::endl;
}
catch(FileNotGoodException &e){
- infostream<<"WARNING: Could not load map metadata"
+ warningstream<<"Could not load map metadata"
//<<" Disabling chunk-based generator."
<<std::endl;
//m_chunksize = 0;
@@ -2188,10 +2197,10 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emer
}
catch(std::exception &e)
{
- infostream<<"WARNING: ServerMap: Failed to load map from "<<savedir
+ warningstream<<"ServerMap: Failed to load map from "<<savedir
<<", exception: "<<e.what()<<std::endl;
infostream<<"Please remove the map or fix it."<<std::endl;
- infostream<<"WARNING: Map saving will be disabled."<<std::endl;
+ warningstream<<"Map saving will be disabled."<<std::endl;
}
infostream<<"Initializing new map."<<std::endl;
@@ -2205,7 +2214,7 @@ ServerMap::ServerMap(std::string savedir, IGameDef *gamedef, EmergeManager *emer
ServerMap::~ServerMap()
{
- verbosestream<<__FUNCTION_NAME<<std::endl;
+ verbosestream<<FUNCTION_NAME<<std::endl;
try
{
@@ -2254,75 +2263,51 @@ s16 ServerMap::getWaterLevel()
return m_emerge->params.water_level;
}
-bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos)
+bool ServerMap::initBlockMake(v3s16 blockpos, BlockMakeData *data)
{
- bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info;
- EMERGE_DBG_OUT("initBlockMake(): " PP(blockpos) " - " PP(blockpos));
+ s16 csize = m_emerge->params.chunksize;
+ v3s16 bpmin = EmergeManager::getContainingChunk(blockpos, csize);
+ v3s16 bpmax = bpmin + v3s16(1, 1, 1) * (csize - 1);
- s16 chunksize = m_emerge->params.chunksize;
- s16 coffset = -chunksize / 2;
- v3s16 chunk_offset(coffset, coffset, coffset);
- v3s16 blockpos_div = getContainerPos(blockpos - chunk_offset, chunksize);
- v3s16 blockpos_min = blockpos_div * chunksize;
- v3s16 blockpos_max = blockpos_div * chunksize + v3s16(1,1,1)*(chunksize-1);
- blockpos_min += chunk_offset;
- blockpos_max += chunk_offset;
+ bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info;
+ EMERGE_DBG_OUT("initBlockMake(): " PP(bpmin) " - " PP(bpmax));
- v3s16 extra_borders(1,1,1);
+ v3s16 extra_borders(1, 1, 1);
+ v3s16 full_bpmin = bpmin - extra_borders;
+ v3s16 full_bpmax = bpmax + extra_borders;
// Do nothing if not inside limits (+-1 because of neighbors)
- if(blockpos_over_limit(blockpos_min - extra_borders) ||
- blockpos_over_limit(blockpos_max + extra_borders))
+ if (blockpos_over_limit(full_bpmin) ||
+ blockpos_over_limit(full_bpmax))
return false;
data->seed = m_emerge->params.seed;
- data->blockpos_min = blockpos_min;
- data->blockpos_max = blockpos_max;
+ data->blockpos_min = bpmin;
+ data->blockpos_max = bpmax;
data->blockpos_requested = blockpos;
data->nodedef = m_gamedef->ndef();
/*
Create the whole area of this and the neighboring blocks
*/
- {
- //TimeTaker timer("initBlockMake() create area");
-
- for(s16 x=blockpos_min.X-extra_borders.X;
- x<=blockpos_max.X+extra_borders.X; x++)
- for(s16 z=blockpos_min.Z-extra_borders.Z;
- z<=blockpos_max.Z+extra_borders.Z; z++)
- {
- v2s16 sectorpos(x, z);
- // Sector metadata is loaded from disk if not already loaded.
- ServerMapSector *sector = createSector(sectorpos);
- FATAL_ERROR_IF(sector == NULL, "createSector() failed");
- (void) sector;
-
- for(s16 y=blockpos_min.Y-extra_borders.Y;
- y<=blockpos_max.Y+extra_borders.Y; y++)
- {
- v3s16 p(x,y,z);
- //MapBlock *block = createBlock(p);
- // 1) get from memory, 2) load from disk
- MapBlock *block = emergeBlock(p, false);
- // 3) create a blank one
- if(block == NULL)
- {
- block = createBlock(p);
-
- /*
- Block gets sunlight if this is true.
+ for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++)
+ for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++) {
+ v2s16 sectorpos(x, z);
+ // Sector metadata is loaded from disk if not already loaded.
+ ServerMapSector *sector = createSector(sectorpos);
+ FATAL_ERROR_IF(sector == NULL, "createSector() failed");
+
+ for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) {
+ v3s16 p(x, y, z);
- Refer to the map generator heuristics.
- */
- bool ug = m_emerge->isBlockUnderground(p);
- block->setIsUnderground(ug);
- }
+ MapBlock *block = emergeBlock(p, false);
+ if (block == NULL) {
+ block = createBlock(p);
- // Lighting will not be valid after make_chunk is called
- block->setLightingExpired(true);
- // Lighting will be calculated
- //block->setLightingExpired(false);
+ // Block gets sunlight if this is true.
+ // Refer to the map generator heuristics.
+ bool ug = m_emerge->isBlockUnderground(p);
+ block->setIsUnderground(ug);
}
}
}
@@ -2334,21 +2319,14 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos)
neighboring blocks
*/
- // The area that contains this block and it's neighbors
- v3s16 bigarea_blocks_min = blockpos_min - extra_borders;
- v3s16 bigarea_blocks_max = blockpos_max + extra_borders;
-
data->vmanip = new MMVManip(this);
- //data->vmanip->setMap(this);
-
- // Add the area
- {
- //TimeTaker timer("initBlockMake() initialEmerge");
- data->vmanip->initialEmerge(bigarea_blocks_min, bigarea_blocks_max);
- }
+ data->vmanip->initialEmerge(full_bpmin, full_bpmax);
- // Ensure none of the blocks to be generated were marked as containing CONTENT_IGNORE
-/* for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) {
+ // Note: we may need this again at some point.
+#if 0
+ // Ensure none of the blocks to be generated were marked as
+ // containing CONTENT_IGNORE
+ for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) {
for (s16 y = blockpos_min.Y; y <= blockpos_max.Y; y++) {
for (s16 x = blockpos_min.X; x <= blockpos_max.X; x++) {
core::map<v3s16, u8>::Node *n;
@@ -2360,124 +2338,62 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos)
n->setValue(flags);
}
}
- }*/
+ }
+#endif
// Data is ready now.
return true;
}
void ServerMap::finishBlockMake(BlockMakeData *data,
- std::map<v3s16, MapBlock*> &changed_blocks)
+ std::map<v3s16, MapBlock*> *changed_blocks)
{
- v3s16 blockpos_min = data->blockpos_min;
- v3s16 blockpos_max = data->blockpos_max;
- v3s16 blockpos_requested = data->blockpos_requested;
- /*infostream<<"finishBlockMake(): ("<<blockpos_requested.X<<","
- <<blockpos_requested.Y<<","
- <<blockpos_requested.Z<<")"<<std::endl;*/
+ v3s16 bpmin = data->blockpos_min;
+ v3s16 bpmax = data->blockpos_max;
- v3s16 extra_borders(1,1,1);
+ v3s16 extra_borders(1, 1, 1);
+ v3s16 full_bpmin = bpmin - extra_borders;
+ v3s16 full_bpmax = bpmax + extra_borders;
- bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info;
+ bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info;
+ EMERGE_DBG_OUT("finishBlockMake(): " PP(bpmin) " - " PP(bpmax));
- /*infostream<<"Resulting vmanip:"<<std::endl;
- data->vmanip.print(infostream);*/
+ /*
+ Set lighting to non-expired state in all of them.
+ This is cheating, but it is not fast enough if all of them
+ would actually be updated.
+ */
+ for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++)
+ for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++)
+ for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) {
+ MapBlock *block = emergeBlock(v3s16(x, y, z), false);
+ if (!block)
+ continue;
- // Make sure affected blocks are loaded
- for(s16 x=blockpos_min.X-extra_borders.X;
- x<=blockpos_max.X+extra_borders.X; x++)
- for(s16 z=blockpos_min.Z-extra_borders.Z;
- z<=blockpos_max.Z+extra_borders.Z; z++)
- for(s16 y=blockpos_min.Y-extra_borders.Y;
- y<=blockpos_max.Y+extra_borders.Y; y++)
- {
- v3s16 p(x, y, z);
- // Load from disk if not already in memory
- emergeBlock(p, false);
+ block->setLightingExpired(false);
}
/*
Blit generated stuff to map
NOTE: blitBackAll adds nearly everything to changed_blocks
*/
- {
- // 70ms @cs=8
- //TimeTaker timer("finishBlockMake() blitBackAll");
- data->vmanip->blitBackAll(&changed_blocks);
- }
+ data->vmanip->blitBackAll(changed_blocks);
- EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size());
+ EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()="
+ << changed_blocks->size());
/*
Copy transforming liquid information
*/
- while(data->transforming_liquid.size() > 0)
- {
+ while (data->transforming_liquid.size()) {
m_transforming_liquid.push_back(data->transforming_liquid.front());
data->transforming_liquid.pop_front();
}
- /*
- Do stuff in central blocks
- */
-
- /*
- Update lighting
- */
- {
-#if 0
- TimeTaker t("finishBlockMake lighting update");
-
- core::map<v3s16, MapBlock*> lighting_update_blocks;
-
- // Center blocks
- for(s16 x=blockpos_min.X-extra_borders.X;
- x<=blockpos_max.X+extra_borders.X; x++)
- for(s16 z=blockpos_min.Z-extra_borders.Z;
- z<=blockpos_max.Z+extra_borders.Z; z++)
- for(s16 y=blockpos_min.Y-extra_borders.Y;
- y<=blockpos_max.Y+extra_borders.Y; y++)
- {
- v3s16 p(x, y, z);
- MapBlock *block = getBlockNoCreateNoEx(p);
- assert(block);
- lighting_update_blocks.insert(block->getPos(), block);
- }
-
- updateLighting(lighting_update_blocks, changed_blocks);
-#endif
-
- /*
- Set lighting to non-expired state in all of them.
- This is cheating, but it is not fast enough if all of them
- would actually be updated.
- */
- for(s16 x=blockpos_min.X-extra_borders.X;
- x<=blockpos_max.X+extra_borders.X; x++)
- for(s16 z=blockpos_min.Z-extra_borders.Z;
- z<=blockpos_max.Z+extra_borders.Z; z++)
- for(s16 y=blockpos_min.Y-extra_borders.Y;
- y<=blockpos_max.Y+extra_borders.Y; y++)
- {
- v3s16 p(x, y, z);
- MapBlock * block = getBlockNoCreateNoEx(p);
- if (block != NULL)
- block->setLightingExpired(false);
- }
-
-#if 0
- if(enable_mapgen_debug_info == false)
- t.stop(true); // Hide output
-#endif
- }
-
- /*
- Go through changed blocks
- */
- for(std::map<v3s16, MapBlock*>::iterator i = changed_blocks.begin();
- i != changed_blocks.end(); ++i)
- {
- MapBlock *block = i->second;
+ for (std::map<v3s16, MapBlock *>::iterator
+ it = changed_blocks->begin();
+ it != changed_blocks->end(); ++it) {
+ MapBlock *block = it->second;
if (!block)
continue;
/*
@@ -2494,14 +2410,13 @@ void ServerMap::finishBlockMake(BlockMakeData *data,
/*
Set central blocks as generated
*/
- for(s16 x=blockpos_min.X; x<=blockpos_max.X; x++)
- for(s16 z=blockpos_min.Z; z<=blockpos_max.Z; z++)
- for(s16 y=blockpos_min.Y; y<=blockpos_max.Y; y++)
- {
- v3s16 p(x, y, z);
- MapBlock *block = getBlockNoCreateNoEx(p);
+ for (s16 x = bpmin.X; x <= bpmax.X; x++)
+ for (s16 z = bpmin.Z; z <= bpmax.Z; z++)
+ for (s16 y = bpmin.Y; y <= bpmax.Y; y++) {
+ MapBlock *block = getBlockNoCreateNoEx(v3s16(x, y, z));
if (!block)
continue;
+
block->setGenerated(true);
}
@@ -2510,42 +2425,12 @@ void ServerMap::finishBlockMake(BlockMakeData *data,
NOTE: Will be saved later.
*/
//save(MOD_STATE_WRITE_AT_UNLOAD);
-
- /*infostream<<"finishBlockMake() done for ("<<blockpos_requested.X
- <<","<<blockpos_requested.Y<<","
- <<blockpos_requested.Z<<")"<<std::endl;*/
-
-
-#if 0
- if(enable_mapgen_debug_info)
- {
- /*
- Analyze resulting blocks
- */
- /*for(s16 x=blockpos_min.X-1; x<=blockpos_max.X+1; x++)
- for(s16 z=blockpos_min.Z-1; z<=blockpos_max.Z+1; z++)
- for(s16 y=blockpos_min.Y-1; y<=blockpos_max.Y+1; y++)*/
- for(s16 x=blockpos_min.X-0; x<=blockpos_max.X+0; x++)
- for(s16 z=blockpos_min.Z-0; z<=blockpos_max.Z+0; z++)
- for(s16 y=blockpos_min.Y-0; y<=blockpos_max.Y+0; y++)
- {
- v3s16 p = v3s16(x,y,z);
- MapBlock *block = getBlockNoCreateNoEx(p);
- char spos[20];
- snprintf(spos, 20, "(%2d,%2d,%2d)", x, y, z);
- infostream<<"Generated "<<spos<<": "
- <<analyze_block(block)<<std::endl;
- }
- }
-#endif
-
- getBlockNoCreateNoEx(blockpos_requested);
}
-ServerMapSector * ServerMap::createSector(v2s16 p2d)
+ServerMapSector *ServerMap::createSector(v2s16 p2d)
{
DSTACKF("%s: p2d=(%d,%d)",
- __FUNCTION_NAME,
+ FUNCTION_NAME,
p2d.X, p2d.Y);
/*
@@ -2612,7 +2497,7 @@ MapBlock * ServerMap::generateBlock(
std::map<v3s16, MapBlock*> &modified_blocks
)
{
- DSTACKF("%s: p=(%d,%d,%d)", __FUNCTION_NAME, p.X, p.Y, p.Z);
+ DSTACKF("%s: p=(%d,%d,%d)", FUNCTION_NAME, p.X, p.Y, p.Z);
/*infostream<<"generateBlock(): "
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<")"
@@ -2632,7 +2517,7 @@ MapBlock * ServerMap::generateBlock(
*/
if(blockpos_over_limit(p))
{
- infostream<<__FUNCTION_NAME<<": Block position over limit"<<std::endl;
+ infostream<<FUNCTION_NAME<<": Block position over limit"<<std::endl;
throw InvalidPositionException("generateBlock(): pos. over limit");
}
@@ -2722,7 +2607,7 @@ MapBlock * ServerMap::generateBlock(
MapBlock * ServerMap::createBlock(v3s16 p)
{
DSTACKF("%s: p=(%d,%d,%d)",
- __FUNCTION_NAME, p.X, p.Y, p.Z);
+ FUNCTION_NAME, p.X, p.Y, p.Z);
/*
Do not create over-limit
@@ -2781,7 +2666,7 @@ MapBlock * ServerMap::createBlock(v3s16 p)
MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank)
{
DSTACKF("%s: p=(%d,%d,%d), create_blank=%d",
- __FUNCTION_NAME,
+ FUNCTION_NAME,
p.X, p.Y, p.Z, create_blank);
{
@@ -2922,7 +2807,7 @@ void ServerMap::createDirs(std::string path)
{
if(fs::CreateAllDirs(path) == false)
{
- m_dout<<DTIME<<"ServerMap: Failed to create directory "
+ m_dout<<"ServerMap: Failed to create directory "
<<"\""<<path<<"\""<<std::endl;
throw BaseException("ServerMap failed to create directory");
}
@@ -3004,9 +2889,9 @@ std::string ServerMap::getBlockFilename(v3s16 p)
void ServerMap::save(ModifiedState save_level)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
if(m_map_saving_enabled == false) {
- infostream<<"WARNING: Not saving map, saving disabled."<<std::endl;
+ warningstream<<"Not saving map, saving disabled."<<std::endl;
return;
}
@@ -3116,7 +3001,7 @@ void ServerMap::listAllLoadedBlocks(std::vector<v3s16> &dst)
void ServerMap::saveMapMeta()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
createDirs(m_savedir);
@@ -3140,7 +3025,7 @@ void ServerMap::saveMapMeta()
void ServerMap::loadMapMeta()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
Settings conf;
std::string fullpath = m_savedir + DIR_DELIM + "map_meta.txt";
@@ -3165,7 +3050,7 @@ void ServerMap::loadMapMeta()
void ServerMap::saveSectorMeta(ServerMapSector *sector)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Format used for writing
u8 version = SER_FMT_VER_HIGHEST_WRITE;
// Get destination
@@ -3186,7 +3071,7 @@ void ServerMap::saveSectorMeta(ServerMapSector *sector)
MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Get destination
v2s16 p2d = getSectorPos(sectordir);
@@ -3227,7 +3112,7 @@ MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load
bool ServerMap::loadSectorMeta(v2s16 p2d)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// The directory layout we're going to load from.
// 1 - original sectors/xxxxzzzz/
@@ -3269,7 +3154,7 @@ bool ServerMap::loadSectorMeta(v2s16 p2d)
#if 0
bool ServerMap::loadSectorFull(v2s16 p2d)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
MapSector *sector = NULL;
@@ -3338,7 +3223,10 @@ bool ServerMap::loadSectorFull(v2s16 p2d)
}
#endif
-Database *ServerMap::createDatabase(const std::string &name, const std::string &savedir, Settings &conf)
+Database *ServerMap::createDatabase(
+ const std::string &name,
+ const std::string &savedir,
+ Settings &conf)
{
if (name == "sqlite3")
return new Database_SQLite3(savedir);
@@ -3377,7 +3265,7 @@ bool ServerMap::saveBlock(MapBlock *block, Database *db)
// Dummy blocks are not written
if (block->isDummy()) {
- errorstream << "WARNING: saveBlock: Not writing dummy block "
+ warningstream << "saveBlock: Not writing dummy block "
<< PP(p3d) << std::endl;
return true;
}
@@ -3405,7 +3293,7 @@ bool ServerMap::saveBlock(MapBlock *block, Database *db)
void ServerMap::loadBlock(std::string sectordir, std::string blockfile,
MapSector *sector, bool save_after_load)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
std::string fullpath = sectordir + DIR_DELIM + blockfile;
try {
@@ -3467,7 +3355,7 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile,
}
catch(SerializationError &e)
{
- infostream<<"WARNING: Invalid block data on disk "
+ warningstream<<"Invalid block data on disk "
<<"fullpath="<<fullpath
<<" (SerializationError). "
<<"what()="<<e.what()
@@ -3481,7 +3369,7 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile,
void ServerMap::loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool save_after_load)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
try {
std::istringstream is(*blob, std::ios_base::binary);
@@ -3549,7 +3437,7 @@ void ServerMap::loadBlock(std::string *blob, v3s16 p3d, MapSector *sector, bool
MapBlock* ServerMap::loadBlock(v3s16 blockpos)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
v2s16 p2d(blockpos.X, blockpos.Z);
@@ -3583,6 +3471,7 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos)
/*
Make sure sector is loaded
*/
+
MapSector *sector = getSectorNoGenerateNoEx(p2d);
if(sector == NULL)
{
diff --git a/src/map.h b/src/map.h
index 2afd09639..78614d228 100644
--- a/src/map.h
+++ b/src/map.h
@@ -365,6 +365,8 @@ private:
u32 m_unprocessed_count;
u32 m_inc_trending_up_start_time; // milliseconds
bool m_queue_size_timer_started;
+
+ DISABLE_CLASS_COPY(Map);
};
/*
@@ -393,21 +395,21 @@ public:
- Check disk (doesn't load blocks)
- Create blank one
*/
- ServerMapSector * createSector(v2s16 p);
+ ServerMapSector *createSector(v2s16 p);
/*
Blocks are generated by using these and makeBlock().
*/
- bool initBlockMake(BlockMakeData *data, v3s16 blockpos);
+ bool initBlockMake(v3s16 blockpos, BlockMakeData *data);
void finishBlockMake(BlockMakeData *data,
- std::map<v3s16, MapBlock*> &changed_blocks);
+ std::map<v3s16, MapBlock*> *changed_blocks);
/*
Get a block from somewhere.
- Memory
- Create blank
*/
- MapBlock * createBlock(v3s16 p);
+ MapBlock *createBlock(v3s16 p);
/*
Forcefully get a block from somewhere.
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 43057f3a5..f8747f52b 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -96,7 +96,7 @@ MapBlock::~MapBlock()
{
#ifndef SERVER
{
- //JMutexAutoLock lock(mesh_mutex);
+ //MutexAutoLock lock(mesh_mutex);
if(mesh)
{
@@ -501,7 +501,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes,
}
for(std::set<content_t>::const_iterator
i = unknown_contents.begin();
- i != unknown_contents.end(); i++){
+ i != unknown_contents.end(); ++i){
errorstream<<"getBlockNodeIdMapping(): IGNORING ERROR: "
<<"Name for node id "<<(*i)<<" not known"<<std::endl;
}
@@ -540,14 +540,14 @@ static void correctBlockNodeIds(const NameIdMapping *nimap, MapNode *nodes,
}
for(std::set<content_t>::const_iterator
i = unnamed_contents.begin();
- i != unnamed_contents.end(); i++){
+ i != unnamed_contents.end(); ++i){
errorstream<<"correctBlockNodeIds(): IGNORING ERROR: "
<<"Block contains id "<<(*i)
<<" with no name mapping"<<std::endl;
}
for(std::set<std::string>::const_iterator
i = unallocatable_contents.begin();
- i != unallocatable_contents.end(); i++){
+ i != unallocatable_contents.end(); ++i){
errorstream<<"correctBlockNodeIds(): IGNORING ERROR: "
<<"Could not allocate global id for node name \""
<<(*i)<<"\""<<std::endl;
@@ -564,7 +564,7 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
throw SerializationError("ERROR: Not writing dummy block.");
}
- FATAL_ERROR_IF(version < SER_FMT_CLIENT_VER_LOWEST, "Serialize version error");
+ FATAL_ERROR_IF(version < SER_FMT_VER_LOWEST_WRITE, "Serialisation version error");
// First byte
u8 flags = 0;
@@ -696,20 +696,18 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
<<": Node metadata"<<std::endl);
// Ignore errors
- try{
+ try {
std::ostringstream oss(std::ios_base::binary);
decompressZlib(is, oss);
std::istringstream iss(oss.str(), std::ios_base::binary);
- if(version >= 23)
- m_node_metadata.deSerialize(iss, m_gamedef);
+ if (version >= 23)
+ m_node_metadata.deSerialize(iss, m_gamedef->idef());
else
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
- }
- catch(SerializationError &e)
- {
- errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error"
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
+ } catch(SerializationError &e) {
+ warningstream<<"MapBlock::deSerialize(): Ignoring an error"
<<" while deserializing node metadata at ("
<<PP(getPos())<<": "<<e.what()<<std::endl;
}
@@ -772,7 +770,7 @@ void MapBlock::deSerializeNetworkSpecific(std::istream &is)
}
catch(SerializationError &e)
{
- errorstream<<"WARNING: MapBlock::deSerializeNetworkSpecific(): Ignoring an error"
+ warningstream<<"MapBlock::deSerializeNetworkSpecific(): Ignoring an error"
<<": "<<e.what()<<std::endl;
}
}
@@ -794,23 +792,20 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
SharedBuffer<u8> databuf_nodelist(nodecount * ser_length);
// These have no compression
- if(version <= 3 || version == 5 || version == 6)
- {
+ if (version <= 3 || version == 5 || version == 6) {
char tmp;
is.read(&tmp, 1);
- if(is.gcount() != 1)
- throw SerializationError
- ("MapBlock::deSerialize: no enough input data");
+ if (is.gcount() != 1)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": not enough input data");
is_underground = tmp;
- is.read((char*)*databuf_nodelist, nodecount * ser_length);
- if((u32)is.gcount() != nodecount * ser_length)
- throw SerializationError
- ("MapBlock::deSerialize: no enough input data");
- }
- else if(version <= 10)
- {
+ is.read((char *)*databuf_nodelist, nodecount * ser_length);
+ if ((u32)is.gcount() != nodecount * ser_length)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": not enough input data");
+ } else if (version <= 10) {
u8 t8;
- is.read((char*)&t8, 1);
+ is.read((char *)&t8, 1);
is_underground = t8;
{
@@ -818,11 +813,10 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": not enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length] = s[i];
}
}
@@ -831,33 +825,27 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": not enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length + 1] = s[i];
}
}
- if(version >= 10)
- {
+ if (version >= 10) {
// Uncompress and set param2 data
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": not enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length + 2] = s[i];
}
}
- }
- // All other versions (newest)
- else
- {
+ } else { // All other versions (10 to 21)
u8 flags;
is.read((char*)&flags, 1);
is_underground = (flags & 0x01) ? true : false;
@@ -870,14 +858,12 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount*3)
- throw SerializationError
- ("MapBlock::deSerialize: decompress resulted in size"
- " other than nodecount*3");
+ if (s.size() != nodecount * 3)
+ throw SerializationError(std::string(FUNCTION_NAME)
+ + ": decompress resulted in size other than nodecount*3");
// deserialize nodes from buffer
- for(u32 i=0; i<nodecount; i++)
- {
+ for (u32 i = 0; i < nodecount; i++) {
databuf_nodelist[i*ser_length] = s[i];
databuf_nodelist[i*ser_length + 1] = s[i+nodecount];
databuf_nodelist[i*ser_length + 2] = s[i+nodecount*2];
@@ -886,53 +872,45 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
/*
NodeMetadata
*/
- if(version >= 14)
- {
+ if (version >= 14) {
// Ignore errors
- try{
- if(version <= 15)
- {
+ try {
+ if (version <= 15) {
std::string data = deSerializeString(is);
std::istringstream iss(data, std::ios_base::binary);
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
- }
- else
- {
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
+ } else {
//std::string data = deSerializeLongString(is);
std::ostringstream oss(std::ios_base::binary);
decompressZlib(is, oss);
std::istringstream iss(oss.str(), std::ios_base::binary);
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
}
- }
- catch(SerializationError &e)
- {
- errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error"
+ } catch(SerializationError &e) {
+ warningstream<<"MapBlock::deSerialize(): Ignoring an error"
<<" while deserializing node metadata"<<std::endl;
}
}
}
// Deserialize node data
- for(u32 i=0; i<nodecount; i++)
- {
- data[i].deSerialize(&databuf_nodelist[i*ser_length], version);
+ for (u32 i = 0; i < nodecount; i++) {
+ data[i].deSerialize(&databuf_nodelist[i * ser_length], version);
}
- if(disk)
- {
+ if (disk) {
/*
Versions up from 9 have block objects. (DEPRECATED)
*/
- if(version >= 9){
+ if (version >= 9) {
u16 count = readU16(is);
// Not supported and length not known if count is not 0
if(count != 0){
- errorstream<<"WARNING: MapBlock::deSerialize_pre22(): "
+ warningstream<<"MapBlock::deSerialize_pre22(): "
<<"Ignoring stuff coming at and after MBOs"<<std::endl;
return;
}
@@ -941,11 +919,11 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
/*
Versions up from 15 have static objects.
*/
- if(version >= 15)
+ if (version >= 15)
m_static_objects.deSerialize(is);
// Timestamp
- if(version >= 17){
+ if (version >= 17) {
setTimestamp(readU32(is));
m_disk_timestamp = m_timestamp;
} else {
@@ -955,7 +933,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
// Dynamically re-set ids based on node names
NameIdMapping nimap;
// If supported, read node definition id mapping
- if(version >= 21){
+ if (version >= 21) {
nimap.deSerialize(is);
// Else set the legacy mapping
} else {
diff --git a/src/mapblock.h b/src/mapblock.h
index 334136b92..73c17ee60 100644
--- a/src/mapblock.h
+++ b/src/mapblock.h
@@ -504,7 +504,7 @@ public:
// These don't write or read version by itself
// Set disk to true for on-disk format, false for over-the-network format
- // Precondition: version >= SER_FMT_CLIENT_VER_LOWEST
+ // Precondition: version >= SER_FMT_VER_LOWEST_WRITE
void serialize(std::ostream &os, u8 version, bool disk);
// If disk == true: In addition to doing other things, will add
// unknown blocks from id-name mapping to wndef
@@ -637,6 +637,18 @@ private:
typedef std::vector<MapBlock*> MapBlockVect;
+inline bool objectpos_over_limit(v3f p)
+{
+ const static float map_gen_limit_bs = MYMIN(MAX_MAP_GENERATION_LIMIT,
+ g_settings->getU16("map_generation_limit")) * BS;
+ return (p.X < -map_gen_limit_bs
+ || p.X > map_gen_limit_bs
+ || p.Y < -map_gen_limit_bs
+ || p.Y > map_gen_limit_bs
+ || p.Z < -map_gen_limit_bs
+ || p.Z > map_gen_limit_bs);
+}
+
inline bool blockpos_over_limit(v3s16 p)
{
const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT,
diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp
index 33597b2fc..e1b044271 100644
--- a/src/mapblock_mesh.cpp
+++ b/src/mapblock_mesh.cpp
@@ -33,26 +33,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/directiontables.h"
#include <IMeshManipulator.h>
-static void applyFacesShading(video::SColor& color, float factor)
+static void applyFacesShading(video::SColor &color, const float factor)
{
- color.setRed(core::clamp(core::round32(color.getRed()*factor), 0, 255));
- color.setGreen(core::clamp(core::round32(color.getGreen()*factor), 0, 255));
+ color.setRed(core::clamp(core::round32(color.getRed() * factor), 0, 255));
+ color.setGreen(core::clamp(core::round32(color.getGreen() * factor), 0, 255));
}
/*
MeshMakeData
*/
-MeshMakeData::MeshMakeData(IGameDef *gamedef, bool use_shaders):
+MeshMakeData::MeshMakeData(IGameDef *gamedef, bool use_shaders,
+ bool use_tangent_vertices):
m_vmanip(),
m_blockpos(-1337,-1337,-1337),
m_crack_pos_relative(-1337, -1337, -1337),
- m_highlighted_pos_relative(-1337, -1337, -1337),
m_smooth_lighting(false),
m_show_hud(false),
- m_highlight_mesh_color(255, 255, 255, 255),
m_gamedef(gamedef),
- m_use_shaders(use_shaders)
+ m_use_shaders(use_shaders),
+ m_use_tangent_vertices(use_tangent_vertices)
{}
void MeshMakeData::fill(MapBlock *block)
@@ -138,12 +138,6 @@ void MeshMakeData::setCrack(int crack_level, v3s16 crack_pos)
m_crack_pos_relative = crack_pos - m_blockpos*MAP_BLOCKSIZE;
}
-void MeshMakeData::setHighlighted(v3s16 highlighted_pos, bool show_hud)
-{
- m_show_hud = show_hud;
- m_highlighted_pos_relative = highlighted_pos - m_blockpos*MAP_BLOCKSIZE;
-}
-
void MeshMakeData::setSmoothLighting(bool smooth_lighting)
{
m_smooth_lighting = smooth_lighting;
@@ -891,8 +885,9 @@ static void updateFastFaceRow(
&& next_lights[3] == lights[3]
&& next_tile == tile
&& tile.rotation == 0
- && next_light_source == light_source)
- {
+ && next_light_source == light_source
+ && (tile.material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)
+ && (tile.material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) {
next_is_different = false;
}
else{
@@ -1031,18 +1026,19 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
m_mesh(new scene::SMesh()),
m_minimap_mapblock(NULL),
m_gamedef(data->m_gamedef),
+ m_driver(m_gamedef->tsrc()->getDevice()->getVideoDriver()),
m_tsrc(m_gamedef->getTextureSource()),
m_shdrsrc(m_gamedef->getShaderSource()),
m_animation_force_timer(0), // force initial animation
m_last_crack(-1),
m_crack_materials(),
- m_highlighted_materials(),
m_last_daynight_ratio((u32) -1),
m_daynight_diffs()
{
m_enable_shaders = data->m_use_shaders;
- m_enable_highlighting = g_settings->getBool("enable_node_highlighting");
-
+ m_use_tangent_vertices = data->m_use_tangent_vertices;
+ m_enable_vbo = g_settings->getBool("enable_vbo");
+
if (g_settings->getBool("enable_minimap")) {
m_minimap_mapblock = new MinimapMapblock;
m_minimap_mapblock->getMinimapNodes(
@@ -1074,15 +1070,14 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
Convert FastFaces to MeshCollector
*/
- MeshCollector collector;
+ MeshCollector collector(m_use_tangent_vertices);
{
// avg 0ms (100ms spikes when loading textures the first time)
// (NOTE: probably outdated)
//TimeTaker timer2("MeshCollector building");
- for(u32 i=0; i<fastfaces_new.size(); i++)
- {
+ for (u32 i = 0; i < fastfaces_new.size(); i++) {
FastFace &f = fastfaces_new[i];
const u16 indices[] = {0,1,2,2,3,0};
@@ -1116,8 +1111,6 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
mapblock_mesh_generate_special(data, collector);
- m_highlight_mesh_color = data->m_highlight_mesh_color;
-
/*
Convert MeshCollector to SMesh
*/
@@ -1162,38 +1155,43 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
p.tile.texture = animation_frame.texture;
}
- if(m_enable_highlighting && p.tile.material_flags & MATERIAL_FLAG_HIGHLIGHTED)
- m_highlighted_materials.push_back(i);
-
- for(u32 j = 0; j < p.vertices.size(); j++)
- {
- video::S3DVertexTangents *vertex = &p.vertices[j];
+ u32 vertex_count = m_use_tangent_vertices ?
+ p.tangent_vertices.size() : p.vertices.size();
+ for (u32 j = 0; j < vertex_count; j++) {
+ v3f *Normal;
+ video::SColor *vc;
+ if (m_use_tangent_vertices) {
+ vc = &p.tangent_vertices[j].Color;
+ Normal = &p.tangent_vertices[j].Normal;
+ } else {
+ vc = &p.vertices[j].Color;
+ Normal = &p.vertices[j].Normal;
+ }
// Note applyFacesShading second parameter is precalculated sqrt
// value for speed improvement
// Skip it for lightsources and top faces.
- video::SColor &vc = vertex->Color;
- if (!vc.getBlue()) {
- if (vertex->Normal.Y < -0.5) {
- applyFacesShading (vc, 0.447213);
- } else if (vertex->Normal.X > 0.5) {
- applyFacesShading (vc, 0.670820);
- } else if (vertex->Normal.X < -0.5) {
- applyFacesShading (vc, 0.670820);
- } else if (vertex->Normal.Z > 0.5) {
- applyFacesShading (vc, 0.836660);
- } else if (vertex->Normal.Z < -0.5) {
- applyFacesShading (vc, 0.836660);
+ if (!vc->getBlue()) {
+ if (Normal->Y < -0.5) {
+ applyFacesShading(*vc, 0.447213);
+ } else if (Normal->X > 0.5) {
+ applyFacesShading(*vc, 0.670820);
+ } else if (Normal->X < -0.5) {
+ applyFacesShading(*vc, 0.670820);
+ } else if (Normal->Z > 0.5) {
+ applyFacesShading(*vc, 0.836660);
+ } else if (Normal->Z < -0.5) {
+ applyFacesShading(*vc, 0.836660);
}
}
- if(!m_enable_shaders)
- {
+ if (!m_enable_shaders) {
// - Classic lighting (shaders handle this by themselves)
// Set initial real color and store for later updates
- u8 day = vc.getRed();
- u8 night = vc.getGreen();
- finalColorBlend(vc, day, night, 1000);
- if(day != night)
+ u8 day = vc->getRed();
+ u8 night = vc->getGreen();
+ finalColorBlend(*vc, day, night, 1000);
+ if (day != night) {
m_daynight_diffs[i][j] = std::make_pair(day, night);
+ }
}
}
@@ -1205,46 +1203,57 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
material.setFlag(video::EMF_FOG_ENABLE, true);
material.setTexture(0, p.tile.texture);
- if (p.tile.material_flags & MATERIAL_FLAG_HIGHLIGHTED) {
- material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
- } else {
- if (m_enable_shaders) {
- material.MaterialType = m_shdrsrc->getShaderInfo(p.tile.shader_id).material;
- p.tile.applyMaterialOptionsWithShaders(material);
- if (p.tile.normal_texture) {
- material.setTexture(1, p.tile.normal_texture);
- }
- material.setTexture(2, p.tile.flags_texture);
- } else {
- p.tile.applyMaterialOptions(material);
+ if (m_enable_shaders) {
+ material.MaterialType = m_shdrsrc->getShaderInfo(p.tile.shader_id).material;
+ p.tile.applyMaterialOptionsWithShaders(material);
+ if (p.tile.normal_texture) {
+ material.setTexture(1, p.tile.normal_texture);
}
+ material.setTexture(2, p.tile.flags_texture);
+ } else {
+ p.tile.applyMaterialOptions(material);
}
- // Create meshbuffer
- scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents();
- // Set material
- buf->Material = material;
- // Add to mesh
- m_mesh->addMeshBuffer(buf);
- // Mesh grabbed it
- buf->drop();
- buf->append(&p.vertices[0], p.vertices.size(),
- &p.indices[0], p.indices.size());
-}
- m_camera_offset = camera_offset;
+ scene::SMesh *mesh = (scene::SMesh *)m_mesh;
+
+ // Create meshbuffer, add to mesh
+ if (m_use_tangent_vertices) {
+ scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents();
+ // Set material
+ buf->Material = material;
+ // Add to mesh
+ mesh->addMeshBuffer(buf);
+ // Mesh grabbed it
+ buf->drop();
+ buf->append(&p.tangent_vertices[0], p.tangent_vertices.size(),
+ &p.indices[0], p.indices.size());
+ } else {
+ scene::SMeshBuffer *buf = new scene::SMeshBuffer();
+ // Set material
+ buf->Material = material;
+ // Add to mesh
+ mesh->addMeshBuffer(buf);
+ // Mesh grabbed it
+ buf->drop();
+ buf->append(&p.vertices[0], p.vertices.size(),
+ &p.indices[0], p.indices.size());
+ }
+ }
/*
Do some stuff to the mesh
*/
+ m_camera_offset = camera_offset;
+ translateMesh(m_mesh,
+ intToFloat(data->m_blockpos * MAP_BLOCKSIZE - camera_offset, BS));
- translateMesh(m_mesh, intToFloat(data->m_blockpos * MAP_BLOCKSIZE - camera_offset, BS));
-
- if (m_enable_shaders) {
- scene::IMeshManipulator* meshmanip = m_gamedef->getSceneManager()->getMeshManipulator();
+ if (m_use_tangent_vertices) {
+ scene::IMeshManipulator* meshmanip =
+ m_gamedef->getSceneManager()->getMeshManipulator();
meshmanip->recalculateTangents(m_mesh, true, false, false);
}
- if(m_mesh)
+ if (m_mesh)
{
#if 0
// Usually 1-700 faces and 1-7 materials
@@ -1254,14 +1263,9 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
#endif
// Use VBO for mesh (this just would set this for ever buffer)
- // This will lead to infinite memory usage because or irrlicht.
- //m_mesh->setHardwareMappingHint(scene::EHM_STATIC);
-
- /*
- NOTE: If that is enabled, some kind of a queue to the main
- thread should be made which would call irrlicht to delete
- the hardware buffer and then delete the mesh
- */
+ if (m_enable_vbo) {
+ m_mesh->setHardwareMappingHint(scene::EHM_STATIC);
+ }
}
//std::cout<<"added "<<fastfaces.getSize()<<" faces."<<std::endl;
@@ -1270,12 +1274,17 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
m_has_animation =
!m_crack_materials.empty() ||
!m_daynight_diffs.empty() ||
- !m_animation_tiles.empty() ||
- !m_highlighted_materials.empty();
+ !m_animation_tiles.empty();
}
MapBlockMesh::~MapBlockMesh()
{
+ if (m_enable_vbo && m_mesh) {
+ for (u32 i = 0; i < m_mesh->getMeshBufferCount(); i++) {
+ scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i);
+ m_driver->removeHardwareBuffer(buf);
+ }
+ }
m_mesh->drop();
m_mesh = NULL;
delete m_minimap_mapblock;
@@ -1296,7 +1305,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
{
for(std::map<u32, std::string>::iterator
i = m_crack_materials.begin();
- i != m_crack_materials.end(); i++)
+ i != m_crack_materials.end(); ++i)
{
scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first);
std::string basename = i->second;
@@ -1328,7 +1337,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
// Texture animation
for(std::map<u32, TileSpec>::iterator
i = m_animation_tiles.begin();
- i != m_animation_tiles.end(); i++)
+ i != m_animation_tiles.end(); ++i)
{
const TileSpec &tile = i->second;
// Figure out current frame
@@ -1356,15 +1365,19 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
// Day-night transition
if(!m_enable_shaders && (daynight_ratio != m_last_daynight_ratio))
{
+ // Force reload mesh to VBO
+ if (m_enable_vbo) {
+ m_mesh->setDirty();
+ }
for(std::map<u32, std::map<u32, std::pair<u8, u8> > >::iterator
i = m_daynight_diffs.begin();
- i != m_daynight_diffs.end(); i++)
+ i != m_daynight_diffs.end(); ++i)
{
scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first);
- video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices();
+ video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices();
for(std::map<u32, std::pair<u8, u8 > >::iterator
j = i->second.begin();
- j != i->second.end(); j++)
+ j != i->second.end(); ++j)
{
u8 day = j->second.first;
u8 night = j->second.second;
@@ -1374,30 +1387,6 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
m_last_daynight_ratio = daynight_ratio;
}
- // Node highlighting
- if (m_enable_highlighting) {
- u8 day = m_highlight_mesh_color.getRed();
- u8 night = m_highlight_mesh_color.getGreen();
- video::SColor hc;
- finalColorBlend(hc, day, night, daynight_ratio);
- float sin_r = 0.07 * sin(1.5 * time);
- float sin_g = 0.07 * sin(1.5 * time + irr::core::PI * 0.5);
- float sin_b = 0.07 * sin(1.5 * time + irr::core::PI);
- hc.setRed(core::clamp(core::round32(hc.getRed() * (0.8 + sin_r)), 0, 255));
- hc.setGreen(core::clamp(core::round32(hc.getGreen() * (0.8 + sin_g)), 0, 255));
- hc.setBlue(core::clamp(core::round32(hc.getBlue() * (0.8 + sin_b)), 0, 255));
-
- for(std::list<u32>::iterator
- i = m_highlighted_materials.begin();
- i != m_highlighted_materials.end(); i++)
- {
- scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i);
- video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices();
- for (u32 j = 0; j < buf->getVertexCount() ;j++)
- vertices[j].Color = hc;
- }
- }
-
return true;
}
@@ -1405,6 +1394,9 @@ void MapBlockMesh::updateCameraOffset(v3s16 camera_offset)
{
if (camera_offset != m_camera_offset) {
translateMesh(m_mesh, intToFloat(m_camera_offset-camera_offset, BS));
+ if (m_enable_vbo) {
+ m_mesh->setDirty();
+ }
m_camera_offset = camera_offset;
}
}
@@ -1441,17 +1433,27 @@ void MeshCollector::append(const TileSpec &tile,
p = &prebuffers[prebuffers.size() - 1];
}
- u32 vertex_count = p->vertices.size();
- for (u32 i = 0; i < numIndices; i++) {
+ u32 vertex_count;
+ if (m_use_tangent_vertices) {
+ vertex_count = p->tangent_vertices.size();
+ for (u32 i = 0; i < numVertices; i++) {
+ video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal,
+ vertices[i].Color, vertices[i].TCoords);
+ p->tangent_vertices.push_back(vert);
+ }
+ } else {
+ vertex_count = p->vertices.size();
+ for (u32 i = 0; i < numVertices; i++) {
+ video::S3DVertex vert(vertices[i].Pos, vertices[i].Normal,
+ vertices[i].Color, vertices[i].TCoords);
+ p->vertices.push_back(vert);
+ }
+ }
+
+ for (u32 i = 0; i < numIndices; i++) {
u32 j = indices[i] + vertex_count;
p->indices.push_back(j);
}
-
- for (u32 i = 0; i < numVertices; i++) {
- video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal,
- vertices[i].Color, vertices[i].TCoords);
- p->vertices.push_back(vert);
- }
}
/*
@@ -1487,15 +1489,25 @@ void MeshCollector::append(const TileSpec &tile,
p = &prebuffers[prebuffers.size() - 1];
}
- u32 vertex_count = p->vertices.size();
+ u32 vertex_count;
+ if (m_use_tangent_vertices) {
+ vertex_count = p->tangent_vertices.size();
+ for (u32 i = 0; i < numVertices; i++) {
+ video::S3DVertexTangents vert(vertices[i].Pos + pos,
+ vertices[i].Normal, c, vertices[i].TCoords);
+ p->tangent_vertices.push_back(vert);
+ }
+ } else {
+ vertex_count = p->vertices.size();
+ for (u32 i = 0; i < numVertices; i++) {
+ video::S3DVertex vert(vertices[i].Pos + pos,
+ vertices[i].Normal, c, vertices[i].TCoords);
+ p->vertices.push_back(vert);
+ }
+ }
+
for (u32 i = 0; i < numIndices; i++) {
u32 j = indices[i] + vertex_count;
p->indices.push_back(j);
}
-
- for (u32 i = 0; i < numVertices; i++) {
- video::S3DVertexTangents vert(vertices[i].Pos + pos, vertices[i].Normal,
- c, vertices[i].TCoords);
- p->vertices.push_back(vert);
- }
}
diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h
index 8e994ec6b..f89fbe669 100644
--- a/src/mapblock_mesh.h
+++ b/src/mapblock_mesh.h
@@ -41,15 +41,15 @@ struct MeshMakeData
VoxelManipulator m_vmanip;
v3s16 m_blockpos;
v3s16 m_crack_pos_relative;
- v3s16 m_highlighted_pos_relative;
bool m_smooth_lighting;
bool m_show_hud;
- video::SColor m_highlight_mesh_color;
IGameDef *m_gamedef;
bool m_use_shaders;
+ bool m_use_tangent_vertices;
- MeshMakeData(IGameDef *gamedef, bool use_shaders);
+ MeshMakeData(IGameDef *gamedef, bool use_shaders,
+ bool use_tangent_vertices = false);
/*
Copy central data directly from block, and other data from
@@ -68,11 +68,6 @@ struct MeshMakeData
void setCrack(int crack_level, v3s16 crack_pos);
/*
- Set the highlighted node position
- */
-
- void setHighlighted(v3s16 highlighted_pos, bool show_hud);
- /*
Enable or disable smooth lighting
*/
void setSmoothLighting(bool smooth_lighting);
@@ -104,7 +99,7 @@ public:
// Returns true if anything has been changed.
bool animate(bool faraway, float time, int crack, u32 daynight_ratio);
- scene::SMesh *getMesh()
+ scene::IMesh *getMesh()
{
return m_mesh;
}
@@ -130,17 +125,17 @@ public:
void updateCameraOffset(v3s16 camera_offset);
private:
- scene::SMesh *m_mesh;
+ scene::IMesh *m_mesh;
MinimapMapblock *m_minimap_mapblock;
IGameDef *m_gamedef;
+ video::IVideoDriver *m_driver;
ITextureSource *m_tsrc;
IShaderSource *m_shdrsrc;
bool m_enable_shaders;
- bool m_enable_highlighting;
+ bool m_use_tangent_vertices;
+ bool m_enable_vbo;
- video::SColor m_highlight_mesh_color;
-
// Must animate() be called before rendering?
bool m_has_animation;
int m_animation_force_timer;
@@ -150,7 +145,6 @@ private:
int m_last_crack;
// Maps mesh buffer (i.e. material) indices to base texture names
std::map<u32, std::string> m_crack_materials;
- std::list<u32> m_highlighted_materials;
// Animation info: texture animationi
// Maps meshbuffers to TileSpecs
@@ -177,12 +171,20 @@ struct PreMeshBuffer
{
TileSpec tile;
std::vector<u16> indices;
- std::vector<video::S3DVertexTangents> vertices;
+ std::vector<video::S3DVertex> vertices;
+ std::vector<video::S3DVertexTangents> tangent_vertices;
};
struct MeshCollector
{
std::vector<PreMeshBuffer> prebuffers;
+ bool m_use_tangent_vertices;
+
+ MeshCollector(bool use_tangent_vertices):
+ m_use_tangent_vertices(use_tangent_vertices)
+ {
+ }
+
void append(const TileSpec &material,
const video::S3DVertex *vertices, u32 numVertices,
const u16 *indices, u32 numIndices);
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index f8e9477c5..b3c9380a0 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -29,7 +29,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_sao.h"
#include "nodedef.h"
#include "emerge.h"
-#include "content_mapnode.h" // For content_mapnode_get_new_name
#include "voxelalgorithms.h"
#include "porting.h"
#include "profiler.h"
@@ -42,11 +41,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
FlagDesc flagdesc_mapgen[] = {
- {"trees", MG_TREES},
- {"caves", MG_CAVES},
- {"dungeons", MG_DUNGEONS},
- {"flat", MG_FLAT},
- {"light", MG_LIGHT},
+ {"trees", MG_TREES},
+ {"caves", MG_CAVES},
+ {"dungeons", MG_DUNGEONS},
+ {"flat", MG_FLAT},
+ {"light", MG_LIGHT},
+ {"decorations", MG_DECORATIONS},
{NULL, 0}
};
@@ -62,8 +62,9 @@ FlagDesc flagdesc_gennotify[] = {
};
-///////////////////////////////////////////////////////////////////////////////
-
+////
+//// Mapgen
+////
Mapgen::Mapgen()
{
@@ -161,6 +162,26 @@ s16 Mapgen::findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax)
}
+// Returns -MAX_MAP_GENERATION_LIMIT if not found or if ground is found first
+s16 Mapgen::findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax)
+{
+ v3s16 em = vm->m_area.getExtent();
+ u32 i = vm->m_area.index(p2d.X, ymax, p2d.Y);
+ s16 y;
+
+ for (y = ymax; y >= ymin; y--) {
+ MapNode &n = vm->m_data[i];
+ if (ndef->get(n).walkable)
+ return -MAX_MAP_GENERATION_LIMIT;
+ else if (ndef->get(n).isLiquid())
+ break;
+
+ vm->m_area.add_y(em, i, -1);
+ }
+ return (y >= ymin) ? y : -MAX_MAP_GENERATION_LIMIT;
+}
+
+
void Mapgen::updateHeightmap(v3s16 nmin, v3s16 nmax)
{
if (!heightmap)
@@ -225,14 +246,31 @@ void Mapgen::lightSpread(VoxelArea &a, v3s16 p, u8 light)
return;
u32 vi = vm->m_area.index(p);
- MapNode &nn = vm->m_data[vi];
-
- light--;
- // should probably compare masked, but doesn't seem to make a difference
- if (light <= nn.param1 || !ndef->get(nn).light_propagates)
+ MapNode &n = vm->m_data[vi];
+
+ // Decay light in each of the banks separately
+ u8 light_day = light & 0x0F;
+ if (light_day > 0)
+ light_day -= 0x01;
+
+ u8 light_night = light & 0xF0;
+ if (light_night > 0)
+ light_night -= 0x10;
+
+ // Bail out only if we have no more light from either bank to propogate, or
+ // we hit a solid block that light cannot pass through.
+ if ((light_day <= (n.param1 & 0x0F) &&
+ light_night <= (n.param1 & 0xF0)) ||
+ !ndef->get(n).light_propagates)
return;
- nn.param1 = light;
+ // Since this recursive function only terminates when there is no light from
+ // either bank left, we need to take the max of both banks into account for
+ // the case where spreading has stopped for one light bank but not the other.
+ light = MYMAX(light_day, n.param1 & 0x0F) |
+ MYMAX(light_night, n.param1 & 0xF0);
+
+ n.param1 = light;
lightSpread(a, p + v3s16(0, 0, 1), light);
lightSpread(a, p + v3s16(0, 1, 0), light);
@@ -243,43 +281,29 @@ void Mapgen::lightSpread(VoxelArea &a, v3s16 p, u8 light)
}
-void Mapgen::calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax)
+void Mapgen::calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
+ bool propagate_shadow)
{
ScopeProfiler sp(g_profiler, "EmergeThread: mapgen lighting update", SPT_AVG);
//TimeTaker t("updateLighting");
- propagateSunlight(nmin, nmax);
+ propagateSunlight(nmin, nmax, propagate_shadow);
spreadLight(full_nmin, full_nmax);
//printf("updateLighting: %dms\n", t.stop());
}
-
-void Mapgen::calcLighting(v3s16 nmin, v3s16 nmax)
-{
- ScopeProfiler sp(g_profiler, "EmergeThread: mapgen lighting update", SPT_AVG);
- //TimeTaker t("updateLighting");
-
- propagateSunlight(
- nmin - v3s16(1, 1, 1) * MAP_BLOCKSIZE,
- nmax + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
-
- spreadLight(
- nmin - v3s16(1, 1, 1) * MAP_BLOCKSIZE,
- nmax + v3s16(1, 1, 1) * MAP_BLOCKSIZE);
-
- //printf("updateLighting: %dms\n", t.stop());
-}
-
-
-void Mapgen::propagateSunlight(v3s16 nmin, v3s16 nmax)
+void Mapgen::propagateSunlight(v3s16 nmin, v3s16 nmax, bool propagate_shadow)
{
//TimeTaker t("propagateSunlight");
VoxelArea a(nmin, nmax);
bool block_is_underground = (water_level >= nmax.Y);
v3s16 em = vm->m_area.getExtent();
+ // NOTE: Direct access to the low 4 bits of param1 is okay here because,
+ // by definition, sunlight will never be in the night lightbank.
+
for (int z = a.MinEdge.Z; z <= a.MaxEdge.Z; z++) {
for (int x = a.MinEdge.X; x <= a.MaxEdge.X; x++) {
// see if we can get a light value from the overtop
@@ -287,7 +311,8 @@ void Mapgen::propagateSunlight(v3s16 nmin, v3s16 nmax)
if (vm->m_data[i].getContent() == CONTENT_IGNORE) {
if (block_is_underground)
continue;
- } else if ((vm->m_data[i].param1 & 0x0F) != LIGHT_SUN) {
+ } else if ((vm->m_data[i].param1 & 0x0F) != LIGHT_SUN &&
+ propagate_shadow) {
continue;
}
vm->m_area.add_y(em, i, -1);
@@ -305,7 +330,6 @@ void Mapgen::propagateSunlight(v3s16 nmin, v3s16 nmax)
}
-
void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax)
{
//TimeTaker t("spreadLight");
@@ -316,15 +340,21 @@ void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax)
u32 i = vm->m_area.index(a.MinEdge.X, y, z);
for (int x = a.MinEdge.X; x <= a.MaxEdge.X; x++, i++) {
MapNode &n = vm->m_data[i];
- if (n.getContent() == CONTENT_IGNORE ||
- !ndef->get(n).light_propagates)
+ if (n.getContent() == CONTENT_IGNORE)
continue;
- u8 light_produced = ndef->get(n).light_source & 0x0F;
+ const ContentFeatures &cf = ndef->get(n);
+ if (!cf.light_propagates)
+ continue;
+
+ // TODO(hmmmmm): Abstract away direct param1 accesses with a
+ // wrapper, but something lighter than MapNode::get/setLight
+
+ u8 light_produced = cf.light_source;
if (light_produced)
- n.param1 = light_produced;
+ n.param1 = light_produced | (light_produced << 4);
- u8 light = n.param1 & 0x0F;
+ u8 light = n.param1;
if (light) {
lightSpread(a, v3s16(x, y, z + 1), light);
lightSpread(a, v3s16(x, y + 1, z ), light);
@@ -341,8 +371,9 @@ void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax)
}
-
-///////////////////////////////////////////////////////////////////////////////
+////
+//// GenerateNotifier
+////
GenerateNotifier::GenerateNotifier()
{
@@ -408,7 +439,10 @@ void GenerateNotifier::getEvents(
m_notify_events.clear();
}
-///////////////////////////////////////////////////////////////////////////////
+
+////
+//// MapgenParams
+////
void MapgenParams::load(const Settings &settings)
{
@@ -430,9 +464,11 @@ void MapgenParams::load(const Settings &settings)
settings.getNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend);
delete sparams;
- sparams = EmergeManager::createMapgenParams(mg_name);
- if (sparams)
+ MapgenFactory *mgfactory = EmergeManager::getMapgenFactory(mg_name);
+ if (mgfactory) {
+ sparams = mgfactory->createMapgenParams();
sparams->readParams(&settings);
+ }
}
@@ -442,7 +478,7 @@ void MapgenParams::save(Settings &settings) const
settings.setU64("seed", seed);
settings.setS16("water_level", water_level);
settings.setS16("chunksize", chunksize);
- settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, (u32)-1);
+ settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, U32_MAX);
settings.setNoiseParams("mg_biome_np_heat", np_biome_heat);
settings.setNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend);
settings.setNoiseParams("mg_biome_np_humidity", np_biome_humidity);
diff --git a/src/mapgen.h b/src/mapgen.h
index 46328ba92..abc3d2e89 100644
--- a/src/mapgen.h
+++ b/src/mapgen.h
@@ -29,11 +29,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define DEFAULT_MAPGEN "v6"
/////////////////// Mapgen flags
-#define MG_TREES 0x01
-#define MG_CAVES 0x02
-#define MG_DUNGEONS 0x04
-#define MG_FLAT 0x08
-#define MG_LIGHT 0x10
+#define MG_TREES 0x01
+#define MG_CAVES 0x02
+#define MG_DUNGEONS 0x04
+#define MG_FLAT 0x08
+#define MG_LIGHT 0x10
+#define MG_DECORATIONS 0x20
class Settings;
class MMVManip;
@@ -126,10 +127,10 @@ struct MapgenParams {
chunksize(5),
seed(0),
water_level(1),
- flags(MG_TREES | MG_CAVES | MG_LIGHT),
- np_biome_heat(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 5349, 3, 0.5, 2.0)),
+ flags(MG_CAVES | MG_LIGHT | MG_DECORATIONS),
+ np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)),
np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)),
- np_biome_humidity(NoiseParams(50, 50, v3f(1000.0, 1000.0, 1000.0), 842, 3, 0.5, 2.0)),
+ np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)),
np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)),
sparams(NULL)
{}
@@ -166,21 +167,29 @@ public:
static u32 getBlockSeed2(v3s16 p, int seed);
s16 findGroundLevelFull(v2s16 p2d);
s16 findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax);
+ s16 findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax);
void updateHeightmap(v3s16 nmin, v3s16 nmax);
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
void setLighting(u8 light, v3s16 nmin, v3s16 nmax);
void lightSpread(VoxelArea &a, v3s16 p, u8 light);
-
- void calcLighting(v3s16 nmin, v3s16 nmax);
- void calcLighting(v3s16 nmin, v3s16 nmax,
- v3s16 full_nmin, v3s16 full_nmax);
-
- void propagateSunlight(v3s16 nmin, v3s16 nmax);
+ void calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
+ bool propagate_shadow = true);
+ void propagateSunlight(v3s16 nmin, v3s16 nmax, bool propagate_shadow);
void spreadLight(v3s16 nmin, v3s16 nmax);
virtual void makeChunk(BlockMakeData *data) {}
virtual int getGroundLevelAtPoint(v2s16 p) { return 0; }
+
+ // getSpawnLevelAtPoint() is a function within each mapgen that returns a
+ // suitable y co-ordinate for player spawn ('suitable' usually meaning
+ // within 16 nodes of water_level). If a suitable spawn level cannot be
+ // found at the specified (X, Z) 'MAX_MAP_GENERATION_LIMIT' is returned to
+ // signify this and to cause Server::findSpawnPos() to try another (X, Z).
+ virtual int getSpawnLevelAtPoint(v2s16 p) { return 0; }
+
+private:
+ DISABLE_CLASS_COPY(Mapgen);
};
struct MapgenFactory {
diff --git a/src/mapgen_flat.cpp b/src/mapgen_flat.cpp
new file mode 100644
index 000000000..4669f1716
--- /dev/null
+++ b/src/mapgen_flat.cpp
@@ -0,0 +1,622 @@
+/*
+Minetest
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 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 "mapgen.h"
+#include "voxel.h"
+#include "noise.h"
+#include "mapblock.h"
+#include "mapnode.h"
+#include "map.h"
+#include "content_sao.h"
+#include "nodedef.h"
+#include "voxelalgorithms.h"
+//#include "profiler.h" // For TimeTaker
+#include "settings.h" // For g_settings
+#include "emerge.h"
+#include "dungeongen.h"
+#include "cavegen.h"
+#include "treegen.h"
+#include "mg_biome.h"
+#include "mg_ore.h"
+#include "mg_decoration.h"
+#include "mapgen_flat.h"
+
+
+FlagDesc flagdesc_mapgen_flat[] = {
+ {"lakes", MGFLAT_LAKES},
+ {"hills", MGFLAT_HILLS},
+ {NULL, 0}
+};
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+MapgenFlat::MapgenFlat(int mapgenid, MapgenParams *params, EmergeManager *emerge)
+ : Mapgen(mapgenid, params, emerge)
+{
+ this->m_emerge = emerge;
+ this->bmgr = emerge->biomemgr;
+
+ //// amount of elements to skip for the next index
+ //// for noise/height/biome maps (not vmanip)
+ this->ystride = csize.X;
+ // 1-down overgeneration
+ this->zstride_1d = csize.X * (csize.Y + 1);
+
+ this->biomemap = new u8[csize.X * csize.Z];
+ this->heightmap = new s16[csize.X * csize.Z];
+ this->heatmap = NULL;
+ this->humidmap = NULL;
+
+ MapgenFlatParams *sp = (MapgenFlatParams *)params->sparams;
+
+ this->spflags = sp->spflags;
+ this->ground_level = sp->ground_level;
+ this->large_cave_depth = sp->large_cave_depth;
+ this->cave_width = sp->cave_width;
+ this->lake_threshold = sp->lake_threshold;
+ this->lake_steepness = sp->lake_steepness;
+ this->hill_threshold = sp->hill_threshold;
+ this->hill_steepness = sp->hill_steepness;
+
+ //// 2D noise
+ noise_terrain = new Noise(&sp->np_terrain, seed, csize.X, csize.Z);
+ noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
+
+ //// 3D noise
+ // 1-down overgeneraion
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 1, csize.Z);
+
+ //// Biome noise
+ noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat_blend = new Noise(&params->np_biome_heat_blend, seed, csize.X, csize.Z);
+ noise_humidity_blend = new Noise(&params->np_biome_humidity_blend, seed, csize.X, csize.Z);
+
+ //// Resolve nodes to be used
+ INodeDefManager *ndef = emerge->ndef;
+
+ c_stone = ndef->getId("mapgen_stone");
+ c_water_source = ndef->getId("mapgen_water_source");
+ c_lava_source = ndef->getId("mapgen_lava_source");
+ c_desert_stone = ndef->getId("mapgen_desert_stone");
+ c_ice = ndef->getId("mapgen_ice");
+ c_sandstone = ndef->getId("mapgen_sandstone");
+
+ c_cobble = ndef->getId("mapgen_cobble");
+ c_stair_cobble = ndef->getId("mapgen_stair_cobble");
+ c_mossycobble = ndef->getId("mapgen_mossycobble");
+ c_sandstonebrick = ndef->getId("mapgen_sandstonebrick");
+ c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick");
+
+ if (c_ice == CONTENT_IGNORE)
+ c_ice = CONTENT_AIR;
+ if (c_mossycobble == CONTENT_IGNORE)
+ c_mossycobble = c_cobble;
+ if (c_stair_cobble == CONTENT_IGNORE)
+ c_stair_cobble = c_cobble;
+ if (c_sandstonebrick == CONTENT_IGNORE)
+ c_sandstonebrick = c_sandstone;
+ if (c_stair_sandstonebrick == CONTENT_IGNORE)
+ c_stair_sandstonebrick = c_sandstone;
+}
+
+
+MapgenFlat::~MapgenFlat()
+{
+ delete noise_terrain;
+ delete noise_filler_depth;
+ delete noise_cave1;
+ delete noise_cave2;
+
+ delete noise_heat;
+ delete noise_humidity;
+ delete noise_heat_blend;
+ delete noise_humidity_blend;
+
+ delete[] heightmap;
+ delete[] biomemap;
+}
+
+
+MapgenFlatParams::MapgenFlatParams()
+{
+ spflags = 0;
+ ground_level = 8;
+ large_cave_depth = -33;
+ cave_width = 0.3;
+ lake_threshold = -0.45;
+ lake_steepness = 48.0;
+ hill_threshold = 0.45;
+ hill_steepness = 64.0;
+
+ np_terrain = NoiseParams(0, 1, v3f(600, 600, 600), 7244, 5, 0.6, 2.0);
+ np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0);
+ np_cave1 = NoiseParams(0, 12, v3f(96, 96, 96), 52534, 4, 0.5, 2.0);
+ np_cave2 = NoiseParams(0, 12, v3f(96, 96, 96), 10325, 4, 0.5, 2.0);
+}
+
+
+void MapgenFlatParams::readParams(const Settings *settings)
+{
+ settings->getFlagStrNoEx("mgflat_spflags", spflags, flagdesc_mapgen_flat);
+ settings->getS16NoEx("mgflat_ground_level", ground_level);
+ settings->getS16NoEx("mgflat_large_cave_depth", large_cave_depth);
+ settings->getFloatNoEx("mgflat_cave_width", cave_width);
+ settings->getFloatNoEx("mgflat_lake_threshold", lake_threshold);
+ settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
+ settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
+ settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
+
+ settings->getNoiseParams("mgflat_np_terrain", np_terrain);
+ settings->getNoiseParams("mgflat_np_filler_depth", np_filler_depth);
+ settings->getNoiseParams("mgflat_np_cave1", np_cave1);
+ settings->getNoiseParams("mgflat_np_cave2", np_cave2);
+}
+
+
+void MapgenFlatParams::writeParams(Settings *settings) const
+{
+ settings->setFlagStr("mgflat_spflags", spflags, flagdesc_mapgen_flat, U32_MAX);
+ settings->setS16("mgflat_ground_level", ground_level);
+ settings->setS16("mgflat_large_cave_depth", large_cave_depth);
+ settings->setFloat("mgflat_cave_width", cave_width);
+ settings->setFloat("mgflat_lake_threshold", lake_threshold);
+ settings->setFloat("mgflat_lake_steepness", lake_steepness);
+ settings->setFloat("mgflat_hill_threshold", hill_threshold);
+ settings->setFloat("mgflat_hill_steepness", hill_steepness);
+
+ settings->setNoiseParams("mgflat_np_terrain", np_terrain);
+ settings->setNoiseParams("mgflat_np_filler_depth", np_filler_depth);
+ settings->setNoiseParams("mgflat_np_cave1", np_cave1);
+ settings->setNoiseParams("mgflat_np_cave2", np_cave2);
+}
+
+
+/////////////////////////////////////////////////////////////////
+
+
+int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
+{
+ s16 level_at_point = ground_level;
+ float n_terrain = NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed);
+
+ if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
+ level_at_point = ground_level -
+ (lake_threshold - n_terrain) * lake_steepness;
+ } else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
+ level_at_point = ground_level +
+ (n_terrain - hill_threshold) * hill_steepness;
+ }
+
+ if (ground_level < water_level) // Ocean world, allow spawn in water
+ return MYMAX(level_at_point, water_level);
+ else if (level_at_point > water_level)
+ return level_at_point; // Spawn on land
+ else
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+}
+
+
+void MapgenFlat::makeChunk(BlockMakeData *data)
+{
+ // Pre-conditions
+ assert(data->vmanip);
+ assert(data->nodedef);
+ assert(data->blockpos_requested.X >= data->blockpos_min.X &&
+ data->blockpos_requested.Y >= data->blockpos_min.Y &&
+ data->blockpos_requested.Z >= data->blockpos_min.Z);
+ assert(data->blockpos_requested.X <= data->blockpos_max.X &&
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
+
+ this->generating = true;
+ this->vm = data->vmanip;
+ this->ndef = data->nodedef;
+ //TimeTaker t("makeChunk");
+
+ v3s16 blockpos_min = data->blockpos_min;
+ v3s16 blockpos_max = data->blockpos_max;
+ node_min = blockpos_min * MAP_BLOCKSIZE;
+ node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+ full_node_min = (blockpos_min - 1) * MAP_BLOCKSIZE;
+ full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+
+ blockseed = getBlockSeed2(full_node_min, seed);
+
+ // Make some noise
+ calculateNoise();
+
+ // Generate base terrain, mountains, and ridges with initial heightmaps
+ s16 stone_surface_max_y = generateTerrain();
+
+ // Create heightmap
+ updateHeightmap(node_min, node_max);
+
+ // Create biomemap at heightmap surface
+ bmgr->calcBiomes(csize.X, csize.Z, noise_heat->result,
+ noise_humidity->result, heightmap, biomemap);
+
+ // Actually place the biome-specific nodes
+ MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result);
+
+ if (flags & MG_CAVES)
+ generateCaves(stone_surface_max_y);
+
+ if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) {
+ DungeonParams dp;
+
+ dp.np_rarity = nparams_dungeon_rarity;
+ dp.np_density = nparams_dungeon_density;
+ dp.np_wetness = nparams_dungeon_wetness;
+ dp.c_water = c_water_source;
+ if (stone_type == STONE) {
+ dp.c_cobble = c_cobble;
+ dp.c_moss = c_mossycobble;
+ dp.c_stair = c_stair_cobble;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 3.0;
+ dp.holesize = v3s16(1, 2, 1);
+ dp.roomsize = v3s16(0, 0, 0);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ } else if (stone_type == DESERT_STONE) {
+ dp.c_cobble = c_desert_stone;
+ dp.c_moss = c_desert_stone;
+ dp.c_stair = c_desert_stone;
+
+ dp.diagonal_dirs = true;
+ dp.mossratio = 0.0;
+ dp.holesize = v3s16(2, 3, 2);
+ dp.roomsize = v3s16(2, 5, 2);
+ dp.notifytype = GENNOTIFY_TEMPLE;
+ } else if (stone_type == SANDSTONE) {
+ dp.c_cobble = c_sandstonebrick;
+ dp.c_moss = c_sandstonebrick;
+ dp.c_stair = c_sandstonebrick;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 0.0;
+ dp.holesize = v3s16(2, 2, 2);
+ dp.roomsize = v3s16(2, 0, 2);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ }
+
+ DungeonGen dgen(this, &dp);
+ dgen.generate(blockseed, full_node_min, full_node_max);
+ }
+
+ // Generate the registered decorations
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+
+ // Generate the registered ores
+ m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+
+ // Sprinkle some dust on top after everything else was generated
+ dustTopNodes();
+
+ //printf("makeChunk: %dms\n", t.stop());
+
+ updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
+
+ if (flags & MG_LIGHT)
+ calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0),
+ full_node_min, full_node_max);
+
+ //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+ // node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
+
+ this->generating = false;
+}
+
+
+void MapgenFlat::calculateNoise()
+{
+ //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
+ s16 x = node_min.X;
+ s16 z = node_min.Z;
+
+ if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
+ noise_terrain->perlinMap2D(x, z);
+
+ // Cave noises are calculated in generateCaves()
+ // only if solid terrain is present in mapchunk
+
+ noise_filler_depth->perlinMap2D(x, z);
+ noise_heat->perlinMap2D(x, z);
+ noise_humidity->perlinMap2D(x, z);
+ noise_heat_blend->perlinMap2D(x, z);
+ noise_humidity_blend->perlinMap2D(x, z);
+
+ for (s32 i = 0; i < csize.X * csize.Z; i++) {
+ noise_heat->result[i] += noise_heat_blend->result[i];
+ noise_humidity->result[i] += noise_humidity_blend->result[i];
+ }
+
+ heatmap = noise_heat->result;
+ humidmap = noise_humidity->result;
+ //printf("calculateNoise: %dus\n", t.stop());
+}
+
+
+s16 MapgenFlat::generateTerrain()
+{
+ MapNode n_air(CONTENT_AIR);
+ MapNode n_stone(c_stone);
+ MapNode n_water(c_water_source);
+
+ v3s16 em = vm->m_area.getExtent();
+ s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
+ u32 ni2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, ni2d++) {
+ s16 stone_level = ground_level;
+ float n_terrain = 0.0f;
+
+ if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
+ n_terrain = noise_terrain->result[ni2d];
+
+ if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
+ s16 depress = (lake_threshold - n_terrain) * lake_steepness;
+ stone_level = ground_level - depress;
+ } else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
+ s16 rise = (n_terrain - hill_threshold) * hill_steepness;
+ stone_level = ground_level + rise;
+ }
+
+ u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
+ if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
+ if (y <= stone_level) {
+ vm->m_data[vi] = n_stone;
+ if (y > stone_surface_max_y)
+ stone_surface_max_y = y;
+ } else if (y <= water_level) {
+ vm->m_data[vi] = n_water;
+ } else {
+ vm->m_data[vi] = n_air;
+ }
+ }
+ vm->m_area.add_y(em, vi, 1);
+ }
+ }
+
+ return stone_surface_max_y;
+}
+
+
+MgStoneType MapgenFlat::generateBiomes(float *heat_map, float *humidity_map)
+{
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+ MgStoneType stone_type = STONE;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = NULL;
+ u16 depth_top = 0;
+ u16 base_filler = 0;
+ u16 depth_water_top = 0;
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+
+ // Check node at base of mapchunk above, either a node of a previously
+ // generated mapchunk or if not, a node of overgenerated base terrain.
+ content_t c_above = vm->m_data[vi + em.X].getContent();
+ bool air_above = c_above == CONTENT_AIR;
+ bool water_above = c_above == c_water_source;
+
+ // If there is air or water above enable top/filler placement, otherwise force
+ // nplaced to stone level by setting a number exceeding any possible filler depth.
+ u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
+
+
+ for (s16 y = node_max.Y; y >= node_min.Y; y--) {
+ content_t c = vm->m_data[vi].getContent();
+
+ // Biome is recalculated each time an upper surface is detected while
+ // working down a column. The selected biome then remains in effect for
+ // all nodes below until the next surface and biome recalculation.
+ // Biome is recalculated:
+ // 1. At the surface of stone below air or water.
+ // 2. At the surface of water below air.
+ // 3. When stone or water is detected but biome has not yet been calculated.
+ if ((c == c_stone && (air_above || water_above || !biome)) ||
+ (c == c_water_source && (air_above || !biome))) {
+ biome = bmgr->getBiome(heat_map[index], humidity_map[index], y);
+ depth_top = biome->depth_top;
+ base_filler = MYMAX(depth_top + biome->depth_filler
+ + noise_filler_depth->result[index], 0);
+ depth_water_top = biome->depth_water_top;
+
+ // Detect stone type for dungeons during every biome calculation.
+ // This is more efficient than detecting per-node and will not
+ // miss any desert stone or sandstone biomes.
+ if (biome->c_stone == c_desert_stone)
+ stone_type = DESERT_STONE;
+ else if (biome->c_stone == c_sandstone)
+ stone_type = SANDSTONE;
+ }
+
+ if (c == c_stone) {
+ content_t c_below = vm->m_data[vi - em.X].getContent();
+
+ // If the node below isn't solid, make this node stone, so that
+ // any top/filler nodes above are structurally supported.
+ // This is done by aborting the cycle of top/filler placement
+ // immediately by forcing nplaced to stone level.
+ if (c_below == CONTENT_AIR || c_below == c_water_source)
+ nplaced = U16_MAX;
+
+ if (nplaced < depth_top) {
+ vm->m_data[vi] = MapNode(biome->c_top);
+ nplaced++;
+ } else if (nplaced < base_filler) {
+ vm->m_data[vi] = MapNode(biome->c_filler);
+ nplaced++;
+ } else {
+ vm->m_data[vi] = MapNode(biome->c_stone);
+ }
+
+ air_above = false;
+ water_above = false;
+ } else if (c == c_water_source) {
+ vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ?
+ biome->c_water_top : biome->c_water);
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = false;
+ water_above = true;
+ } else if (c == CONTENT_AIR) {
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = true;
+ water_above = false;
+ } else { // Possible various nodes overgenerated from neighbouring mapchunks
+ nplaced = U16_MAX; // Disable top/filler placement
+ air_above = false;
+ water_above = false;
+ }
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+ }
+
+ return stone_type;
+}
+
+
+void MapgenFlat::dustTopNodes()
+{
+ if (node_max.Y < water_level)
+ return;
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index]);
+
+ if (biome->c_dust == CONTENT_IGNORE)
+ continue;
+
+ u32 vi = vm->m_area.index(x, full_node_max.Y, z);
+ content_t c_full_max = vm->m_data[vi].getContent();
+ s16 y_start;
+
+ if (c_full_max == CONTENT_AIR) {
+ y_start = full_node_max.Y - 1;
+ } else if (c_full_max == CONTENT_IGNORE) {
+ vi = vm->m_area.index(x, node_max.Y + 1, z);
+ content_t c_max = vm->m_data[vi].getContent();
+
+ if (c_max == CONTENT_AIR)
+ y_start = node_max.Y;
+ else
+ continue;
+ } else {
+ continue;
+ }
+
+ vi = vm->m_area.index(x, y_start, z);
+ for (s16 y = y_start; y >= node_min.Y - 1; y--) {
+ if (vm->m_data[vi].getContent() != CONTENT_AIR)
+ break;
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+
+ content_t c = vm->m_data[vi].getContent();
+ if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE && c != biome->c_dust) {
+ vm->m_area.add_y(em, vi, 1);
+ vm->m_data[vi] = MapNode(biome->c_dust);
+ }
+ }
+}
+
+
+void MapgenFlat::generateCaves(s16 max_stone_y)
+{
+ if (max_stone_y < node_min.Y)
+ return;
+
+ noise_cave1->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_cave2->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
+ bool column_is_open = false; // Is column open to overground
+ bool is_tunnel = false; // Is tunnel or tunnel floor
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+ u32 index3d = (z - node_min.Z) * zstride_1d + csize.Y * ystride +
+ (x - node_min.X);
+ // Biome of column
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]);
+
+ // Don't excavate the overgenerated stone at node_max.Y + 1,
+ // this creates a 'roof' over the tunnel, preventing light in
+ // tunnels at mapchunk borders when generating mapchunks upwards.
+ // This 'roof' is removed when the mapchunk above is generated.
+ for (s16 y = node_max.Y; y >= node_min.Y - 1; y--,
+ index3d -= ystride,
+ vm->m_area.add_y(em, vi, -1)) {
+
+ content_t c = vm->m_data[vi].getContent();
+ if (c == CONTENT_AIR || c == biome->c_water_top ||
+ c == biome->c_water) {
+ column_is_open = true;
+ continue;
+ }
+ // Ground
+ float d1 = contour(noise_cave1->result[index3d]);
+ float d2 = contour(noise_cave2->result[index3d]);
+
+ if (d1 * d2 > cave_width && ndef->get(c).is_ground_content) {
+ // In tunnel and ground content, excavate
+ vm->m_data[vi] = MapNode(CONTENT_AIR);
+ is_tunnel = true;
+ } else {
+ // Not in tunnel or not ground content
+ if (is_tunnel && column_is_open &&
+ (c == biome->c_filler || c == biome->c_stone))
+ // Tunnel entrance floor
+ vm->m_data[vi] = MapNode(biome->c_top);
+
+ column_is_open = false;
+ is_tunnel = false;
+ }
+ }
+ }
+
+ if (node_max.Y > large_cave_depth)
+ return;
+
+ PseudoRandom ps(blockseed + 21343);
+ u32 bruises_count = ps.range(0, 2);
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV5 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
+ }
+}
diff --git a/src/mapgen_flat.h b/src/mapgen_flat.h
new file mode 100644
index 000000000..8aed09be5
--- /dev/null
+++ b/src/mapgen_flat.h
@@ -0,0 +1,124 @@
+/*
+Minetest
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 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.
+*/
+
+#ifndef MAPGEN_FLAT_HEADER
+#define MAPGEN_FLAT_HEADER
+
+#include "mapgen.h"
+
+/////// Mapgen Flat flags
+#define MGFLAT_LAKES 0x01
+#define MGFLAT_HILLS 0x02
+
+class BiomeManager;
+
+extern FlagDesc flagdesc_mapgen_flat[];
+
+
+struct MapgenFlatParams : public MapgenSpecificParams {
+ u32 spflags;
+ s16 ground_level;
+ s16 large_cave_depth;
+ float cave_width;
+ float lake_threshold;
+ float lake_steepness;
+ float hill_threshold;
+ float hill_steepness;
+ NoiseParams np_terrain;
+ NoiseParams np_filler_depth;
+ NoiseParams np_cave1;
+ NoiseParams np_cave2;
+
+ MapgenFlatParams();
+ ~MapgenFlatParams() {}
+
+ void readParams(const Settings *settings);
+ void writeParams(Settings *settings) const;
+};
+
+class MapgenFlat : public Mapgen {
+public:
+ EmergeManager *m_emerge;
+ BiomeManager *bmgr;
+
+ int ystride;
+ int zstride_1d;
+
+ v3s16 node_min;
+ v3s16 node_max;
+ v3s16 full_node_min;
+ v3s16 full_node_max;
+
+ u32 spflags;
+ s16 ground_level;
+ s16 large_cave_depth;
+ float cave_width;
+ float lake_threshold;
+ float lake_steepness;
+ float hill_threshold;
+ float hill_steepness;
+ Noise *noise_terrain;
+ Noise *noise_filler_depth;
+ Noise *noise_cave1;
+ Noise *noise_cave2;
+
+ Noise *noise_heat;
+ Noise *noise_humidity;
+ Noise *noise_heat_blend;
+ Noise *noise_humidity_blend;
+
+ content_t c_stone;
+ content_t c_water_source;
+ content_t c_lava_source;
+ content_t c_desert_stone;
+ content_t c_ice;
+ content_t c_sandstone;
+
+ content_t c_cobble;
+ content_t c_stair_cobble;
+ content_t c_mossycobble;
+ content_t c_sandstonebrick;
+ content_t c_stair_sandstonebrick;
+
+ MapgenFlat(int mapgenid, MapgenParams *params, EmergeManager *emerge);
+ ~MapgenFlat();
+
+ virtual void makeChunk(BlockMakeData *data);
+ int getSpawnLevelAtPoint(v2s16 p);
+ void calculateNoise();
+ s16 generateTerrain();
+ MgStoneType generateBiomes(float *heat_map, float *humidity_map);
+ void dustTopNodes();
+ void generateCaves(s16 max_stone_y);
+};
+
+struct MapgenFactoryFlat : public MapgenFactory {
+ Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge)
+ {
+ return new MapgenFlat(mgid, params, emerge);
+ };
+
+ MapgenSpecificParams *createMapgenParams()
+ {
+ return new MapgenFlatParams();
+ };
+};
+
+#endif
diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp
new file mode 100644
index 000000000..e2e29f875
--- /dev/null
+++ b/src/mapgen_fractal.cpp
@@ -0,0 +1,746 @@
+/*
+Minetest
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 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 "mapgen.h"
+#include "voxel.h"
+#include "noise.h"
+#include "mapblock.h"
+#include "mapnode.h"
+#include "map.h"
+#include "content_sao.h"
+#include "nodedef.h"
+#include "voxelalgorithms.h"
+//#include "profiler.h" // For TimeTaker
+#include "settings.h" // For g_settings
+#include "emerge.h"
+#include "dungeongen.h"
+#include "cavegen.h"
+#include "treegen.h"
+#include "mg_biome.h"
+#include "mg_ore.h"
+#include "mg_decoration.h"
+#include "mapgen_fractal.h"
+
+
+FlagDesc flagdesc_mapgen_fractal[] = {
+ {NULL, 0}
+};
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge)
+ : Mapgen(mapgenid, params, emerge)
+{
+ this->m_emerge = emerge;
+ this->bmgr = emerge->biomemgr;
+
+ //// amount of elements to skip for the next index
+ //// for noise/height/biome maps (not vmanip)
+ this->ystride = csize.X;
+ // 1-down overgeneration
+ this->zstride_1d = csize.X * (csize.Y + 1);
+
+ this->biomemap = new u8[csize.X * csize.Z];
+ this->heightmap = new s16[csize.X * csize.Z];
+ this->heatmap = NULL;
+ this->humidmap = NULL;
+
+ MapgenFractalParams *sp = (MapgenFractalParams *)params->sparams;
+
+ this->spflags = sp->spflags;
+ this->cave_width = sp->cave_width;
+ this->fractal = sp->fractal;
+ this->iterations = sp->iterations;
+ this->scale = sp->scale;
+ this->offset = sp->offset;
+ this->slice_w = sp->slice_w;
+ this->julia_x = sp->julia_x;
+ this->julia_y = sp->julia_y;
+ this->julia_z = sp->julia_z;
+ this->julia_w = sp->julia_w;
+
+ //// 2D terrain noise
+ noise_seabed = new Noise(&sp->np_seabed, seed, csize.X, csize.Z);
+ noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
+
+ //// 3D terrain noise
+ // 1-down overgeneraion
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 1, csize.Z);
+
+ //// Biome noise
+ noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat_blend = new Noise(&params->np_biome_heat_blend, seed, csize.X, csize.Z);
+ noise_humidity_blend = new Noise(&params->np_biome_humidity_blend, seed, csize.X, csize.Z);
+
+ this->formula = fractal / 2 + fractal % 2;
+ this->julia = fractal % 2 == 0;
+
+ //// Resolve nodes to be used
+ INodeDefManager *ndef = emerge->ndef;
+
+ c_stone = ndef->getId("mapgen_stone");
+ c_water_source = ndef->getId("mapgen_water_source");
+ c_lava_source = ndef->getId("mapgen_lava_source");
+ c_desert_stone = ndef->getId("mapgen_desert_stone");
+ c_ice = ndef->getId("mapgen_ice");
+ c_sandstone = ndef->getId("mapgen_sandstone");
+
+ c_cobble = ndef->getId("mapgen_cobble");
+ c_stair_cobble = ndef->getId("mapgen_stair_cobble");
+ c_mossycobble = ndef->getId("mapgen_mossycobble");
+ c_sandstonebrick = ndef->getId("mapgen_sandstonebrick");
+ c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick");
+
+ if (c_ice == CONTENT_IGNORE)
+ c_ice = CONTENT_AIR;
+ if (c_mossycobble == CONTENT_IGNORE)
+ c_mossycobble = c_cobble;
+ if (c_stair_cobble == CONTENT_IGNORE)
+ c_stair_cobble = c_cobble;
+ if (c_sandstonebrick == CONTENT_IGNORE)
+ c_sandstonebrick = c_sandstone;
+ if (c_stair_sandstonebrick == CONTENT_IGNORE)
+ c_stair_sandstonebrick = c_sandstone;
+}
+
+
+MapgenFractal::~MapgenFractal()
+{
+ delete noise_seabed;
+ delete noise_filler_depth;
+ delete noise_cave1;
+ delete noise_cave2;
+
+ delete noise_heat;
+ delete noise_humidity;
+ delete noise_heat_blend;
+ delete noise_humidity_blend;
+
+ delete[] heightmap;
+ delete[] biomemap;
+}
+
+
+MapgenFractalParams::MapgenFractalParams()
+{
+ spflags = 0;
+ cave_width = 0.3;
+ fractal = 1;
+ iterations = 11;
+ scale = v3f(4096.0, 1024.0, 4096.0);
+ offset = v3f(1.79, 0.0, 0.0);
+ slice_w = 0.0;
+ julia_x = 0.33;
+ julia_y = 0.33;
+ julia_z = 0.33;
+ julia_w = 0.33;
+
+ np_seabed = NoiseParams(-14, 9, v3f(600, 600, 600), 41900, 5, 0.6, 2.0);
+ np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0);
+ np_cave1 = NoiseParams(0, 12, v3f(96, 96, 96), 52534, 4, 0.5, 2.0);
+ np_cave2 = NoiseParams(0, 12, v3f(96, 96, 96), 10325, 4, 0.5, 2.0);
+}
+
+
+void MapgenFractalParams::readParams(const Settings *settings)
+{
+ settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal);
+ settings->getFloatNoEx("mgfractal_cave_width", cave_width);
+ settings->getU16NoEx("mgfractal_fractal", fractal);
+ settings->getU16NoEx("mgfractal_iterations", iterations);
+ settings->getV3FNoEx("mgfractal_scale", scale);
+ settings->getV3FNoEx("mgfractal_offset", offset);
+ settings->getFloatNoEx("mgfractal_slice_w", slice_w);
+ settings->getFloatNoEx("mgfractal_julia_x", julia_x);
+ settings->getFloatNoEx("mgfractal_julia_y", julia_y);
+ settings->getFloatNoEx("mgfractal_julia_z", julia_z);
+ settings->getFloatNoEx("mgfractal_julia_w", julia_w);
+
+ settings->getNoiseParams("mgfractal_np_seabed", np_seabed);
+ settings->getNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
+ settings->getNoiseParams("mgfractal_np_cave1", np_cave1);
+ settings->getNoiseParams("mgfractal_np_cave2", np_cave2);
+}
+
+
+void MapgenFractalParams::writeParams(Settings *settings) const
+{
+ settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX);
+ settings->setFloat("mgfractal_cave_width", cave_width);
+ settings->setU16("mgfractal_fractal", fractal);
+ settings->setU16("mgfractal_iterations", iterations);
+ settings->setV3F("mgfractal_scale", scale);
+ settings->setV3F("mgfractal_offset", offset);
+ settings->setFloat("mgfractal_slice_w", slice_w);
+ settings->setFloat("mgfractal_julia_x", julia_x);
+ settings->setFloat("mgfractal_julia_y", julia_y);
+ settings->setFloat("mgfractal_julia_z", julia_z);
+ settings->setFloat("mgfractal_julia_w", julia_w);
+
+ settings->setNoiseParams("mgfractal_np_seabed", np_seabed);
+ settings->setNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
+ settings->setNoiseParams("mgfractal_np_cave1", np_cave1);
+ settings->setNoiseParams("mgfractal_np_cave2", np_cave2);
+}
+
+
+/////////////////////////////////////////////////////////////////
+
+
+int MapgenFractal::getSpawnLevelAtPoint(v2s16 p)
+{
+ bool solid_below = false; // Dry solid node is present below to spawn on
+ u8 air_count = 0; // Consecutive air nodes above the dry solid node
+ s16 seabed_level = NoisePerlin2D(&noise_seabed->np, p.X, p.Y, seed);
+ // Seabed can rise above water_level or might be raised to create dry land
+ s16 search_start = MYMAX(seabed_level, water_level + 1);
+ if (seabed_level > water_level)
+ solid_below = true;
+
+ for (s16 y = search_start; y <= search_start + 128; y++) {
+ if (getFractalAtPoint(p.X, y, p.Y)) { // Fractal node
+ solid_below = true;
+ air_count = 0;
+ } else if (solid_below) { // Air above solid node
+ air_count++;
+ if (air_count == 2)
+ return y - 2;
+ }
+ }
+
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+}
+
+
+void MapgenFractal::makeChunk(BlockMakeData *data)
+{
+ // Pre-conditions
+ assert(data->vmanip);
+ assert(data->nodedef);
+ assert(data->blockpos_requested.X >= data->blockpos_min.X &&
+ data->blockpos_requested.Y >= data->blockpos_min.Y &&
+ data->blockpos_requested.Z >= data->blockpos_min.Z);
+ assert(data->blockpos_requested.X <= data->blockpos_max.X &&
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
+
+ this->generating = true;
+ this->vm = data->vmanip;
+ this->ndef = data->nodedef;
+ //TimeTaker t("makeChunk");
+
+ v3s16 blockpos_min = data->blockpos_min;
+ v3s16 blockpos_max = data->blockpos_max;
+ node_min = blockpos_min * MAP_BLOCKSIZE;
+ node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+ full_node_min = (blockpos_min - 1) * MAP_BLOCKSIZE;
+ full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+
+ blockseed = getBlockSeed2(full_node_min, seed);
+
+ // Make some noise
+ calculateNoise();
+
+ // Generate base terrain, mountains, and ridges with initial heightmaps
+ s16 stone_surface_max_y = generateTerrain();
+
+ // Create heightmap
+ updateHeightmap(node_min, node_max);
+
+ // Create biomemap at heightmap surface
+ bmgr->calcBiomes(csize.X, csize.Z, noise_heat->result,
+ noise_humidity->result, heightmap, biomemap);
+
+ // Actually place the biome-specific nodes
+ MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result);
+
+ if (flags & MG_CAVES)
+ generateCaves(stone_surface_max_y);
+
+ if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) {
+ DungeonParams dp;
+
+ dp.np_rarity = nparams_dungeon_rarity;
+ dp.np_density = nparams_dungeon_density;
+ dp.np_wetness = nparams_dungeon_wetness;
+ dp.c_water = c_water_source;
+ if (stone_type == STONE) {
+ dp.c_cobble = c_cobble;
+ dp.c_moss = c_mossycobble;
+ dp.c_stair = c_stair_cobble;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 3.0;
+ dp.holesize = v3s16(1, 2, 1);
+ dp.roomsize = v3s16(0, 0, 0);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ } else if (stone_type == DESERT_STONE) {
+ dp.c_cobble = c_desert_stone;
+ dp.c_moss = c_desert_stone;
+ dp.c_stair = c_desert_stone;
+
+ dp.diagonal_dirs = true;
+ dp.mossratio = 0.0;
+ dp.holesize = v3s16(2, 3, 2);
+ dp.roomsize = v3s16(2, 5, 2);
+ dp.notifytype = GENNOTIFY_TEMPLE;
+ } else if (stone_type == SANDSTONE) {
+ dp.c_cobble = c_sandstonebrick;
+ dp.c_moss = c_sandstonebrick;
+ dp.c_stair = c_sandstonebrick;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 0.0;
+ dp.holesize = v3s16(2, 2, 2);
+ dp.roomsize = v3s16(2, 0, 2);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ }
+
+ DungeonGen dgen(this, &dp);
+ dgen.generate(blockseed, full_node_min, full_node_max);
+ }
+
+ // Generate the registered decorations
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+
+ // Generate the registered ores
+ m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+
+ // Sprinkle some dust on top after everything else was generated
+ dustTopNodes();
+
+ //printf("makeChunk: %dms\n", t.stop());
+
+ updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
+
+ if (flags & MG_LIGHT)
+ calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0),
+ full_node_min, full_node_max);
+
+ //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+ // node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
+
+ this->generating = false;
+}
+
+
+void MapgenFractal::calculateNoise()
+{
+ //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
+ s16 x = node_min.X;
+ s16 z = node_min.Z;
+
+ noise_seabed->perlinMap2D(x, z);
+
+ // Cave noises are calculated in generateCaves()
+ // only if solid terrain is present in mapchunk
+
+ noise_filler_depth->perlinMap2D(x, z);
+ noise_heat->perlinMap2D(x, z);
+ noise_humidity->perlinMap2D(x, z);
+ noise_heat_blend->perlinMap2D(x, z);
+ noise_humidity_blend->perlinMap2D(x, z);
+
+ for (s32 i = 0; i < csize.X * csize.Z; i++) {
+ noise_heat->result[i] += noise_heat_blend->result[i];
+ noise_humidity->result[i] += noise_humidity_blend->result[i];
+ }
+
+ heatmap = noise_heat->result;
+ humidmap = noise_humidity->result;
+ //printf("calculateNoise: %dus\n", t.stop());
+}
+
+
+bool MapgenFractal::getFractalAtPoint(s16 x, s16 y, s16 z)
+{
+ float cx, cy, cz, cw, ox, oy, oz, ow;
+
+ if (julia) { // Julia set
+ cx = julia_x;
+ cy = julia_y;
+ cz = julia_z;
+ cw = julia_w;
+ ox = (float)x / scale.X - offset.X;
+ oy = (float)y / scale.Y - offset.Y;
+ oz = (float)z / scale.Z - offset.Z;
+ ow = slice_w;
+ } else { // Mandelbrot set
+ cx = (float)x / scale.X - offset.X;
+ cy = (float)y / scale.Y - offset.Y;
+ cz = (float)z / scale.Z - offset.Z;
+ cw = slice_w;
+ ox = 0.0f;
+ oy = 0.0f;
+ oz = 0.0f;
+ ow = 0.0f;
+ }
+
+ float nx = 0.0f;
+ float ny = 0.0f;
+ float nz = 0.0f;
+ float nw = 0.0f;
+
+ for (u16 iter = 0; iter < iterations; iter++) {
+
+ if (formula == 1) { // 4D "Roundy"
+ nx = ox * ox - oy * oy - oz * oz - ow * ow + cx;
+ ny = 2.0f * (ox * oy + oz * ow) + cy;
+ nz = 2.0f * (ox * oz + oy * ow) + cz;
+ nw = 2.0f * (ox * ow + oy * oz) + cw;
+ } else if (formula == 2) { // 4D "Squarry"
+ nx = ox * ox - oy * oy - oz * oz - ow * ow + cx;
+ ny = 2.0f * (ox * oy + oz * ow) + cy;
+ nz = 2.0f * (ox * oz + oy * ow) + cz;
+ nw = 2.0f * (ox * ow - oy * oz) + cw;
+ } else if (formula == 3) { // 4D "Mandy Cousin"
+ nx = ox * ox - oy * oy - oz * oz + ow * ow + cx;
+ ny = 2.0f * (ox * oy + oz * ow) + cy;
+ nz = 2.0f * (ox * oz + oy * ow) + cz;
+ nw = 2.0f * (ox * ow + oy * oz) + cw;
+ } else if (formula == 4) { // 4D "Variation"
+ nx = ox * ox - oy * oy - oz * oz - ow * ow + cx;
+ ny = 2.0f * (ox * oy + oz * ow) + cy;
+ nz = 2.0f * (ox * oz - oy * ow) + cz;
+ nw = 2.0f * (ox * ow + oy * oz) + cw;
+ } else if (formula == 5) { // 3D "Mandelbrot/Mandelbar"
+ nx = ox * ox - oy * oy - oz * oz + cx;
+ ny = 2.0f * ox * oy + cy;
+ nz = -2.0f * ox * oz + cz;
+ } else if (formula == 6) { // 3D "Christmas Tree"
+ // Altering the formula here is necessary to avoid division by zero
+ if (fabs(oz) < 0.000000001f) {
+ nx = ox * ox - oy * oy - oz * oz + cx;
+ ny = 2.0f * oy * ox + cy;
+ nz = 4.0f * oz * ox + cz;
+ } else {
+ float a = (2.0f * ox) / (sqrt(oy * oy + oz * oz));
+ nx = ox * ox - oy * oy - oz * oz + cx;
+ ny = a * (oy * oy - oz * oz) + cy;
+ nz = a * 2.0f * oy * oz + cz;
+ }
+ } else if (formula == 7) { // 3D "Mandelbulb"
+ if (fabs(oy) < 0.000000001f) {
+ nx = ox * ox - oz * oz + cx;
+ ny = cy;
+ nz = -2.0f * oz * sqrt(ox * ox) + cz;
+ } else {
+ float a = 1.0f - (oz * oz) / (ox * ox + oy * oy);
+ nx = (ox * ox - oy * oy) * a + cx;
+ ny = 2.0f * ox * oy * a + cy;
+ nz = -2.0f * oz * sqrt(ox * ox + oy * oy) + cz;
+ }
+ } else if (formula == 8) { // 3D "Cosine Mandelbulb"
+ if (fabs(oy) < 0.000000001f) {
+ nx = 2.0f * ox * oz + cx;
+ ny = 4.0f * oy * oz + cy;
+ nz = oz * oz - ox * ox - oy * oy + cz;
+ } else {
+ float a = (2.0f * oz) / sqrt(ox * ox + oy * oy);
+ nx = (ox * ox - oy * oy) * a + cx;
+ ny = 2.0f * ox * oy * a + cy;
+ nz = oz * oz - ox * ox - oy * oy + cz;
+ }
+ } else if (formula == 9) { // 4D "Mandelbulb"
+ float rxy = sqrt(ox * ox + oy * oy);
+ float rxyz = sqrt(ox * ox + oy * oy + oz * oz);
+ if (fabs(ow) < 0.000000001f && fabs(oz) < 0.000000001f) {
+ nx = (ox * ox - oy * oy) + cx;
+ ny = 2.0f * ox * oy + cy;
+ nz = -2.0f * rxy * oz + cz;
+ nw = 2.0f * rxyz * ow + cw;
+ } else {
+ float a = 1.0f - (ow * ow) / (rxyz * rxyz);
+ float b = a * (1.0f - (oz * oz) / (rxy * rxy));
+ nx = (ox * ox - oy * oy) * b + cx;
+ ny = 2.0f * ox * oy * b + cy;
+ nz = -2.0f * rxy * oz * a + cz;
+ nw = 2.0f * rxyz * ow + cw;
+ }
+ }
+
+ if (nx * nx + ny * ny + nz * nz + nw * nw > 4.0f)
+ return false;
+
+ ox = nx;
+ oy = ny;
+ oz = nz;
+ ow = nw;
+ }
+
+ return true;
+}
+
+
+s16 MapgenFractal::generateTerrain()
+{
+ MapNode n_air(CONTENT_AIR);
+ MapNode n_stone(c_stone);
+ MapNode n_water(c_water_source);
+
+ s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
+ u32 index2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++) {
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
+ u32 vi = vm->m_area.index(node_min.X, y, z);
+ for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index2d++) {
+ if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
+ s16 seabed_height = noise_seabed->result[index2d];
+
+ if (y <= seabed_height || getFractalAtPoint(x, y, z)) {
+ vm->m_data[vi] = n_stone;
+ if (y > stone_surface_max_y)
+ stone_surface_max_y = y;
+ } else if (y <= water_level) {
+ vm->m_data[vi] = n_water;
+ } else {
+ vm->m_data[vi] = n_air;
+ }
+ }
+ }
+ index2d -= ystride;
+ }
+ index2d += ystride;
+ }
+
+ return stone_surface_max_y;
+}
+
+
+MgStoneType MapgenFractal::generateBiomes(float *heat_map, float *humidity_map)
+{
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+ MgStoneType stone_type = STONE;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = NULL;
+ u16 depth_top = 0;
+ u16 base_filler = 0;
+ u16 depth_water_top = 0;
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+
+ // Check node at base of mapchunk above, either a node of a previously
+ // generated mapchunk or if not, a node of overgenerated base terrain.
+ content_t c_above = vm->m_data[vi + em.X].getContent();
+ bool air_above = c_above == CONTENT_AIR;
+ bool water_above = c_above == c_water_source;
+
+ // If there is air or water above enable top/filler placement, otherwise force
+ // nplaced to stone level by setting a number exceeding any possible filler depth.
+ u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
+
+
+ for (s16 y = node_max.Y; y >= node_min.Y; y--) {
+ content_t c = vm->m_data[vi].getContent();
+
+ // Biome is recalculated each time an upper surface is detected while
+ // working down a column. The selected biome then remains in effect for
+ // all nodes below until the next surface and biome recalculation.
+ // Biome is recalculated:
+ // 1. At the surface of stone below air or water.
+ // 2. At the surface of water below air.
+ // 3. When stone or water is detected but biome has not yet been calculated.
+ if ((c == c_stone && (air_above || water_above || !biome)) ||
+ (c == c_water_source && (air_above || !biome))) {
+ biome = bmgr->getBiome(heat_map[index], humidity_map[index], y);
+ depth_top = biome->depth_top;
+ base_filler = MYMAX(depth_top + biome->depth_filler
+ + noise_filler_depth->result[index], 0);
+ depth_water_top = biome->depth_water_top;
+
+ // Detect stone type for dungeons during every biome calculation.
+ // This is more efficient than detecting per-node and will not
+ // miss any desert stone or sandstone biomes.
+ if (biome->c_stone == c_desert_stone)
+ stone_type = DESERT_STONE;
+ else if (biome->c_stone == c_sandstone)
+ stone_type = SANDSTONE;
+ }
+
+ if (c == c_stone) {
+ content_t c_below = vm->m_data[vi - em.X].getContent();
+
+ // If the node below isn't solid, make this node stone, so that
+ // any top/filler nodes above are structurally supported.
+ // This is done by aborting the cycle of top/filler placement
+ // immediately by forcing nplaced to stone level.
+ if (c_below == CONTENT_AIR || c_below == c_water_source)
+ nplaced = U16_MAX;
+
+ if (nplaced < depth_top) {
+ vm->m_data[vi] = MapNode(biome->c_top);
+ nplaced++;
+ } else if (nplaced < base_filler) {
+ vm->m_data[vi] = MapNode(biome->c_filler);
+ nplaced++;
+ } else {
+ vm->m_data[vi] = MapNode(biome->c_stone);
+ }
+
+ air_above = false;
+ water_above = false;
+ } else if (c == c_water_source) {
+ vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ?
+ biome->c_water_top : biome->c_water);
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = false;
+ water_above = true;
+ } else if (c == CONTENT_AIR) {
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = true;
+ water_above = false;
+ } else { // Possible various nodes overgenerated from neighbouring mapchunks
+ nplaced = U16_MAX; // Disable top/filler placement
+ air_above = false;
+ water_above = false;
+ }
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+ }
+
+ return stone_type;
+}
+
+
+void MapgenFractal::dustTopNodes()
+{
+ if (node_max.Y < water_level)
+ return;
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index]);
+
+ if (biome->c_dust == CONTENT_IGNORE)
+ continue;
+
+ u32 vi = vm->m_area.index(x, full_node_max.Y, z);
+ content_t c_full_max = vm->m_data[vi].getContent();
+ s16 y_start;
+
+ if (c_full_max == CONTENT_AIR) {
+ y_start = full_node_max.Y - 1;
+ } else if (c_full_max == CONTENT_IGNORE) {
+ vi = vm->m_area.index(x, node_max.Y + 1, z);
+ content_t c_max = vm->m_data[vi].getContent();
+
+ if (c_max == CONTENT_AIR)
+ y_start = node_max.Y;
+ else
+ continue;
+ } else {
+ continue;
+ }
+
+ vi = vm->m_area.index(x, y_start, z);
+ for (s16 y = y_start; y >= node_min.Y - 1; y--) {
+ if (vm->m_data[vi].getContent() != CONTENT_AIR)
+ break;
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+
+ content_t c = vm->m_data[vi].getContent();
+ if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE && c != biome->c_dust) {
+ vm->m_area.add_y(em, vi, 1);
+ vm->m_data[vi] = MapNode(biome->c_dust);
+ }
+ }
+}
+
+
+void MapgenFractal::generateCaves(s16 max_stone_y)
+{
+ if (max_stone_y < node_min.Y)
+ return;
+
+ noise_cave1->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_cave2->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
+ bool column_is_open = false; // Is column open to overground
+ bool is_tunnel = false; // Is tunnel or tunnel floor
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+ u32 index3d = (z - node_min.Z) * zstride_1d + csize.Y * ystride +
+ (x - node_min.X);
+ // Biome of column
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]);
+
+ // Don't excavate the overgenerated stone at node_max.Y + 1,
+ // this creates a 'roof' over the tunnel, preventing light in
+ // tunnels at mapchunk borders when generating mapchunks upwards.
+ // This 'roof' is removed when the mapchunk above is generated.
+ for (s16 y = node_max.Y; y >= node_min.Y - 1; y--,
+ index3d -= ystride,
+ vm->m_area.add_y(em, vi, -1)) {
+
+ content_t c = vm->m_data[vi].getContent();
+ if (c == CONTENT_AIR || c == biome->c_water_top ||
+ c == biome->c_water) {
+ column_is_open = true;
+ continue;
+ }
+ // Ground
+ float d1 = contour(noise_cave1->result[index3d]);
+ float d2 = contour(noise_cave2->result[index3d]);
+
+ if (d1 * d2 > cave_width && ndef->get(c).is_ground_content) {
+ // In tunnel and ground content, excavate
+ vm->m_data[vi] = MapNode(CONTENT_AIR);
+ is_tunnel = true;
+ } else {
+ // Not in tunnel or not ground content
+ if (is_tunnel && column_is_open &&
+ (c == biome->c_filler || c == biome->c_stone))
+ // Tunnel entrance floor
+ vm->m_data[vi] = MapNode(biome->c_top);
+
+ column_is_open = false;
+ is_tunnel = false;
+ }
+ }
+ }
+
+ if (node_max.Y > MGFRACTAL_LARGE_CAVE_DEPTH)
+ return;
+
+ PseudoRandom ps(blockseed + 21343);
+ u32 bruises_count = ps.range(0, 2);
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV5 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
+ }
+}
diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h
new file mode 100644
index 000000000..dd96045e2
--- /dev/null
+++ b/src/mapgen_fractal.h
@@ -0,0 +1,134 @@
+/*
+Minetest
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+
+Fractal formulas from http://www.bugman123.com/Hypercomplex/index.html
+by Paul Nylander, and from http://www.fractalforums.com, thank you.
+
+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.
+*/
+
+#ifndef MAPGEN_FRACTAL_HEADER
+#define MAPGEN_FRACTAL_HEADER
+
+#include "mapgen.h"
+
+#define MGFRACTAL_LARGE_CAVE_DEPTH -33
+
+class BiomeManager;
+
+extern FlagDesc flagdesc_mapgen_fractal[];
+
+
+struct MapgenFractalParams : public MapgenSpecificParams {
+ u32 spflags;
+ float cave_width;
+ u16 fractal;
+ u16 iterations;
+ v3f scale;
+ v3f offset;
+ float slice_w;
+ float julia_x;
+ float julia_y;
+ float julia_z;
+ float julia_w;
+ NoiseParams np_seabed;
+ NoiseParams np_filler_depth;
+ NoiseParams np_cave1;
+ NoiseParams np_cave2;
+
+ MapgenFractalParams();
+ ~MapgenFractalParams() {}
+
+ void readParams(const Settings *settings);
+ void writeParams(Settings *settings) const;
+};
+
+class MapgenFractal : public Mapgen {
+public:
+ EmergeManager *m_emerge;
+ BiomeManager *bmgr;
+
+ int ystride;
+ int zstride_1d;
+ u16 formula;
+ bool julia;
+
+ v3s16 node_min;
+ v3s16 node_max;
+ v3s16 full_node_min;
+ v3s16 full_node_max;
+
+ u32 spflags;
+ float cave_width;
+ u16 fractal;
+ u16 iterations;
+ v3f scale;
+ v3f offset;
+ float slice_w;
+ float julia_x;
+ float julia_y;
+ float julia_z;
+ float julia_w;
+ Noise *noise_seabed;
+ Noise *noise_filler_depth;
+ Noise *noise_cave1;
+ Noise *noise_cave2;
+
+ Noise *noise_heat;
+ Noise *noise_humidity;
+ Noise *noise_heat_blend;
+ Noise *noise_humidity_blend;
+
+ content_t c_stone;
+ content_t c_water_source;
+ content_t c_lava_source;
+ content_t c_desert_stone;
+ content_t c_ice;
+ content_t c_sandstone;
+
+ content_t c_cobble;
+ content_t c_stair_cobble;
+ content_t c_mossycobble;
+ content_t c_sandstonebrick;
+ content_t c_stair_sandstonebrick;
+
+ MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge);
+ ~MapgenFractal();
+
+ virtual void makeChunk(BlockMakeData *data);
+ int getSpawnLevelAtPoint(v2s16 p);
+ void calculateNoise();
+ bool getFractalAtPoint(s16 x, s16 y, s16 z);
+ s16 generateTerrain();
+ MgStoneType generateBiomes(float *heat_map, float *humidity_map);
+ void dustTopNodes();
+ void generateCaves(s16 max_stone_y);
+};
+
+struct MapgenFactoryFractal : public MapgenFactory {
+ Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge)
+ {
+ return new MapgenFractal(mgid, params, emerge);
+ };
+
+ MapgenSpecificParams *createMapgenParams()
+ {
+ return new MapgenFractalParams();
+ };
+};
+
+#endif
diff --git a/src/mapgen_singlenode.cpp b/src/mapgen_singlenode.cpp
index a8b84e849..ff985dd34 100644
--- a/src/mapgen_singlenode.cpp
+++ b/src/mapgen_singlenode.cpp
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2015 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
@@ -38,6 +38,9 @@ MapgenSinglenode::MapgenSinglenode(int mapgenid,
c_node = ndef->getId("mapgen_singlenode");
if (c_node == CONTENT_IGNORE)
c_node = CONTENT_AIR;
+
+ MapNode n_node(c_node);
+ set_light = (ndef->get(n_node).sunlight_propagates) ? LIGHT_SUN : 0x00;
}
@@ -45,6 +48,7 @@ MapgenSinglenode::~MapgenSinglenode()
{
}
+
//////////////////////// Map generator
void MapgenSinglenode::makeChunk(BlockMakeData *data)
@@ -53,11 +57,11 @@ void MapgenSinglenode::makeChunk(BlockMakeData *data)
assert(data->vmanip);
assert(data->nodedef);
assert(data->blockpos_requested.X >= data->blockpos_min.X &&
- data->blockpos_requested.Y >= data->blockpos_min.Y &&
- data->blockpos_requested.Z >= data->blockpos_min.Z);
+ data->blockpos_requested.Y >= data->blockpos_min.Y &&
+ data->blockpos_requested.Z >= data->blockpos_min.Z);
assert(data->blockpos_requested.X <= data->blockpos_max.X &&
- data->blockpos_requested.Y <= data->blockpos_max.Y &&
- data->blockpos_requested.Z <= data->blockpos_max.Z);
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
this->generating = true;
this->vm = data->vmanip;
@@ -67,8 +71,8 @@ void MapgenSinglenode::makeChunk(BlockMakeData *data)
v3s16 blockpos_max = data->blockpos_max;
// Area of central chunk
- v3s16 node_min = blockpos_min*MAP_BLOCKSIZE;
- v3s16 node_max = (blockpos_max+v3s16(1,1,1))*MAP_BLOCKSIZE-v3s16(1,1,1);
+ v3s16 node_min = blockpos_min * MAP_BLOCKSIZE;
+ v3s16 node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
blockseed = getBlockSeed2(node_min, data->seed);
@@ -87,15 +91,15 @@ void MapgenSinglenode::makeChunk(BlockMakeData *data)
// Add top and bottom side of water to transforming_liquid queue
updateLiquid(&data->transforming_liquid, node_min, node_max);
- // Calculate lighting
- if (flags & MG_LIGHT)
- calcLighting(node_min, node_max);
+ // Set lighting
+ if ((flags & MG_LIGHT) && set_light == LIGHT_SUN)
+ setLighting(LIGHT_SUN, node_min, node_max);
this->generating = false;
}
-int MapgenSinglenode::getGroundLevelAtPoint(v2s16 p)
+
+int MapgenSinglenode::getSpawnLevelAtPoint(v2s16 p)
{
return 0;
}
-
diff --git a/src/mapgen_singlenode.h b/src/mapgen_singlenode.h
index 35f2ba385..2c6496c00 100644
--- a/src/mapgen_singlenode.h
+++ b/src/mapgen_singlenode.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2015 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
@@ -35,12 +35,13 @@ class MapgenSinglenode : public Mapgen {
public:
u32 flags;
content_t c_node;
+ u8 set_light;
MapgenSinglenode(int mapgenid, MapgenParams *params, EmergeManager *emerge);
~MapgenSinglenode();
void makeChunk(BlockMakeData *data);
- int getGroundLevelAtPoint(v2s16 p);
+ int getSpawnLevelAtPoint(v2s16 p);
};
struct MapgenFactorySinglenode : public MapgenFactory {
diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp
index 5b842a99e..b98acb928 100644
--- a/src/mapgen_v5.cpp
+++ b/src/mapgen_v5.cpp
@@ -1,6 +1,7 @@
/*
Minetest
-Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -27,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
+//#include "profiler.h" // For TimeTaker
#include "settings.h" // For g_settings
#include "emerge.h"
#include "dungeongen.h"
@@ -36,7 +38,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mg_ore.h"
#include "mg_decoration.h"
#include "mapgen_v5.h"
-#include "util/directiontables.h"
FlagDesc flagdesc_mapgen_v5[] = {
@@ -53,7 +54,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
// amount of elements to skip for the next index
// for noise/height/biome maps (not vmanip)
this->ystride = csize.X;
- this->zstride = csize.X * (csize.Y + 2);
+ // 1-down overgeneration
+ this->zstride_1d = csize.X * (csize.Y + 1);
this->biomemap = new u8[csize.X * csize.Z];
this->heightmap = new s16[csize.X * csize.Z];
@@ -61,7 +63,9 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
this->humidmap = NULL;
MapgenV5Params *sp = (MapgenV5Params *)params->sparams;
- this->spflags = sp->spflags;
+
+ this->spflags = sp->spflags;
+ this->cave_width = sp->cave_width;
// Terrain noise
noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
@@ -69,9 +73,11 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
noise_height = new Noise(&sp->np_height, seed, csize.X, csize.Z);
// 3D terrain noise
- noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
- noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
+ // 1-up 1-down overgeneration
noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
+ // 1-down overgeneraion
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 1, csize.Z);
// Biome noise
noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
@@ -129,7 +135,8 @@ MapgenV5::~MapgenV5()
MapgenV5Params::MapgenV5Params()
{
- spflags = 0;
+ spflags = 0;
+ cave_width = 0.125;
np_filler_depth = NoiseParams(0, 1, v3f(150, 150, 150), 261, 4, 0.7, 2.0);
np_factor = NoiseParams(0, 1, v3f(250, 250, 250), 920381, 3, 0.45, 2.0);
@@ -146,7 +153,8 @@ MapgenV5Params::MapgenV5Params()
void MapgenV5Params::readParams(const Settings *settings)
{
- settings->getFlagStrNoEx("mgv5_spflags", spflags, flagdesc_mapgen_v5);
+ settings->getFlagStrNoEx("mgv5_spflags", spflags, flagdesc_mapgen_v5);
+ settings->getFloatNoEx("mgv5_cave_width", cave_width);
settings->getNoiseParams("mgv5_np_filler_depth", np_filler_depth);
settings->getNoiseParams("mgv5_np_factor", np_factor);
@@ -159,7 +167,8 @@ void MapgenV5Params::readParams(const Settings *settings)
void MapgenV5Params::writeParams(Settings *settings) const
{
- settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, (u32)-1);
+ settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX);
+ settings->setFloat("mgv5_cave_width", cave_width);
settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth);
settings->setNoiseParams("mgv5_np_factor", np_factor);
@@ -170,7 +179,7 @@ void MapgenV5Params::writeParams(Settings *settings) const
}
-int MapgenV5::getGroundLevelAtPoint(v2s16 p)
+int MapgenV5::getSpawnLevelAtPoint(v2s16 p)
{
//TimeTaker t("getGroundLevelAtPoint", NULL, PRECISION_MICRO);
@@ -181,23 +190,25 @@ int MapgenV5::getGroundLevelAtPoint(v2s16 p)
f *= 1.6;
float h = NoisePerlin2D(&noise_height->np, p.X, p.Y, seed);
- s16 search_top = water_level + 15;
- s16 search_base = water_level;
-
- s16 level = -31000;
- for (s16 y = search_top; y >= search_base; y--) {
+ for (s16 y = 128; y >= -128; y--) {
float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed);
- if (n_ground * f > y - h) {
- if (y >= search_top - 7)
- break;
- else
- level = y;
- break;
+
+ if (n_ground * f > y - h) { // If solid
+ // If either top 2 nodes of search are solid this is inside a
+ // mountain or floatland with possibly no space for the player to spawn.
+ if (y >= 127) {
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ } else { // Ground below at least 2 nodes of empty space
+ if (y <= water_level || y > water_level + 16)
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ else
+ return y;
+ }
}
}
//printf("getGroundLevelAtPoint: %dus\n", t.stop());
- return level;
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn position, no ground found
}
@@ -213,9 +224,9 @@ void MapgenV5::makeChunk(BlockMakeData *data)
data->blockpos_requested.Y <= data->blockpos_max.Y &&
data->blockpos_requested.Z <= data->blockpos_max.Z);
- generating = true;
- vm = data->vmanip;
- ndef = data->nodedef;
+ this->generating = true;
+ this->vm = data->vmanip;
+ this->ndef = data->nodedef;
//TimeTaker t("makeChunk");
v3s16 blockpos_min = data->blockpos_min;
@@ -293,7 +304,8 @@ void MapgenV5::makeChunk(BlockMakeData *data)
}
// Generate the registered decorations
- m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
@@ -319,18 +331,16 @@ void MapgenV5::makeChunk(BlockMakeData *data)
void MapgenV5::calculateNoise()
{
//TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- int x = node_min.X;
- int y = node_min.Y - 1;
- int z = node_min.Z;
+ s16 x = node_min.X;
+ s16 y = node_min.Y - 1;
+ s16 z = node_min.Z;
noise_factor->perlinMap2D(x, z);
noise_height->perlinMap2D(x, z);
noise_ground->perlinMap3D(x, y, z);
- if (flags & MG_CAVES) {
- noise_cave1->perlinMap3D(x, y, z);
- noise_cave2->perlinMap3D(x, y, z);
- }
+ // Cave noises are calculated in generateCaves()
+ // only if solid terrain is present in mapchunk
noise_filler_depth->perlinMap2D(x, z);
noise_heat->perlinMap2D(x, z);
@@ -374,9 +384,9 @@ int MapgenV5::generateBaseTerrain()
for (s16 z=node_min.Z; z<=node_max.Z; z++) {
for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {
- u32 i = vm->m_area.index(node_min.X, y, z);
- for (s16 x=node_min.X; x<=node_max.X; x++, i++, index++, index2d++) {
- if (vm->m_data[i].getContent() != CONTENT_IGNORE)
+ u32 vi = vm->m_area.index(node_min.X, y, z);
+ for (s16 x=node_min.X; x<=node_max.X; x++, vi++, index++, index2d++) {
+ if (vm->m_data[vi].getContent() != CONTENT_IGNORE)
continue;
float f = 0.55 + noise_factor->result[index2d];
@@ -388,11 +398,11 @@ int MapgenV5::generateBaseTerrain()
if (noise_ground->result[index] * f < y - h) {
if (y <= water_level)
- vm->m_data[i] = MapNode(c_water_source);
+ vm->m_data[vi] = MapNode(c_water_source);
else
- vm->m_data[i] = MapNode(CONTENT_AIR);
+ vm->m_data[vi] = MapNode(CONTENT_AIR);
} else {
- vm->m_data[i] = MapNode(c_stone);
+ vm->m_data[vi] = MapNode(c_stone);
if (y > stone_surface_max_y)
stone_surface_max_y = y;
}
@@ -428,7 +438,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map)
// If there is air or water above enable top/filler placement, otherwise force
// nplaced to stone level by setting a number exceeding any possible filler depth.
- u16 nplaced = (air_above || water_above) ? 0 : (u16)-1;
+ u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
for (s16 y = node_max.Y; y >= node_min.Y; y--) {
content_t c = vm->m_data[vi].getContent();
@@ -465,7 +475,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map)
// This is done by aborting the cycle of top/filler placement
// immediately by forcing nplaced to stone level.
if (c_below == CONTENT_AIR || c_below == c_water_source)
- nplaced = (u16)-1;
+ nplaced = U16_MAX;
if (nplaced < depth_top) {
vm->m_data[vi] = MapNode(biome->c_top);
@@ -490,7 +500,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map)
air_above = true;
water_above = false;
} else { // Possible various nodes overgenerated from neighbouring mapchunks
- nplaced = (u16)-1; // Disable top/filler placement
+ nplaced = U16_MAX; // Disable top/filler placement
air_above = false;
water_above = false;
}
@@ -503,40 +513,6 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map)
}
-void MapgenV5::generateCaves(int max_stone_y)
-{
- if (max_stone_y >= node_min.Y) {
- u32 index = 0;
-
- for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
- u32 i = vm->m_area.index(node_min.X, y, z);
- for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) {
- float d1 = contour(noise_cave1->result[index]);
- float d2 = contour(noise_cave2->result[index]);
- if (d1*d2 > 0.125) {
- content_t c = vm->m_data[i].getContent();
- if (!ndef->get(c).is_ground_content || c == CONTENT_AIR)
- continue;
-
- vm->m_data[i] = MapNode(CONTENT_AIR);
- }
- }
- }
- }
-
- if (node_max.Y > LARGE_CAVE_DEPTH)
- return;
-
- PseudoRandom ps(blockseed + 21343);
- u32 bruises_count = (ps.range(1, 4) == 1) ? ps.range(1, 2) : 0;
- for (u32 i = 0; i < bruises_count; i++) {
- CaveV5 cave(this, &ps);
- cave.makeCave(node_min, node_max, max_stone_y);
- }
-}
-
-
void MapgenV5::dustTopNodes()
{
if (node_max.Y < water_level)
@@ -585,3 +561,72 @@ void MapgenV5::dustTopNodes()
}
}
}
+
+
+void MapgenV5::generateCaves(int max_stone_y)
+{
+ if (max_stone_y < node_min.Y)
+ return;
+
+ noise_cave1->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_cave2->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
+ bool column_is_open = false; // Is column open to overground
+ bool is_tunnel = false; // Is tunnel or tunnel floor
+ // Indexes at column top (node_max.Y)
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+ u32 index3d = (z - node_min.Z) * zstride_1d + csize.Y * ystride +
+ (x - node_min.X);
+ // Biome of column
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]);
+
+ // Don't excavate the overgenerated stone at node_max.Y + 1,
+ // this creates a 'roof' over the tunnel, preventing light in
+ // tunnels at mapchunk borders when generating mapchunks upwards.
+ // This 'roof' is removed when the mapchunk above is generated.
+ for (s16 y = node_max.Y; y >= node_min.Y - 1; y--,
+ index3d -= ystride,
+ vm->m_area.add_y(em, vi, -1)) {
+
+ content_t c = vm->m_data[vi].getContent();
+ if (c == CONTENT_AIR || c == biome->c_water_top ||
+ c == biome->c_water) {
+ column_is_open = true;
+ continue;
+ }
+ // Ground
+ float d1 = contour(noise_cave1->result[index3d]);
+ float d2 = contour(noise_cave2->result[index3d]);
+
+ if (d1 * d2 > cave_width && ndef->get(c).is_ground_content) {
+ // In tunnel and ground content, excavate
+ vm->m_data[vi] = MapNode(CONTENT_AIR);
+ is_tunnel = true;
+ } else {
+ // Not in tunnel or not ground content
+ if (is_tunnel && column_is_open &&
+ (c == biome->c_filler || c == biome->c_stone))
+ // Tunnel entrance floor
+ vm->m_data[vi] = MapNode(biome->c_top);
+
+ column_is_open = false;
+ is_tunnel = false;
+ }
+ }
+ }
+
+ if (node_max.Y > MGV5_LARGE_CAVE_DEPTH)
+ return;
+
+ PseudoRandom ps(blockseed + 21343);
+ u32 bruises_count = ps.range(0, 2);
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV5 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
+ }
+}
diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h
index a6fdc2b2b..fd2f7f4d8 100644
--- a/src/mapgen_v5.h
+++ b/src/mapgen_v5.h
@@ -1,6 +1,7 @@
/*
Minetest
-Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -22,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen.h"
-#define LARGE_CAVE_DEPTH -256
+#define MGV5_LARGE_CAVE_DEPTH -256
class BiomeManager;
@@ -31,6 +32,7 @@ extern FlagDesc flagdesc_mapgen_v5[];
struct MapgenV5Params : public MapgenSpecificParams {
u32 spflags;
+ float cave_width;
NoiseParams np_filler_depth;
NoiseParams np_factor;
NoiseParams np_height;
@@ -52,14 +54,15 @@ public:
BiomeManager *bmgr;
int ystride;
- int zstride;
- u32 spflags;
+ int zstride_1d;
v3s16 node_min;
v3s16 node_max;
v3s16 full_node_min;
v3s16 full_node_max;
+ u32 spflags;
+ float cave_width;
Noise *noise_filler_depth;
Noise *noise_factor;
Noise *noise_height;
@@ -89,7 +92,7 @@ public:
~MapgenV5();
virtual void makeChunk(BlockMakeData *data);
- int getGroundLevelAtPoint(v2s16 p);
+ int getSpawnLevelAtPoint(v2s16 p);
void calculateNoise();
int generateBaseTerrain();
MgStoneType generateBiomes(float *heat_map, float *humidity_map);
diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp
index 9e34aac2d..c389b2ed4 100644
--- a/src/mapgen_v6.cpp
+++ b/src/mapgen_v6.cpp
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2015 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
@@ -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 "mapgen.h"
#include "voxel.h"
#include "noise.h"
@@ -26,8 +27,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
//#include "serverobject.h"
#include "content_sao.h"
#include "nodedef.h"
-#include "content_mapnode.h" // For content_mapnode_get_new_name
#include "voxelalgorithms.h"
+//#include "profiler.h" // For TimeTaker
#include "settings.h" // For g_settings
#include "emerge.h"
#include "dungeongen.h"
@@ -37,15 +38,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mg_decoration.h"
#include "mapgen_v6.h"
+
FlagDesc flagdesc_mapgen_v6[] = {
{"jungles", MGV6_JUNGLES},
{"biomeblend", MGV6_BIOMEBLEND},
{"mudflow", MGV6_MUDFLOW},
{"snowbiomes", MGV6_SNOWBIOMES},
+ {"flat", MGV6_FLAT},
+ {"trees", MGV6_TREES},
{NULL, 0}
};
-///////////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////////
MapgenV6::MapgenV6(int mapgenid, MapgenParams *params, EmergeManager *emerge)
@@ -135,7 +140,9 @@ MapgenV6::~MapgenV6()
MapgenV6Params::MapgenV6Params()
{
- spflags = MGV6_BIOMEBLEND | MGV6_MUDFLOW;
+ spflags = MGV6_JUNGLES | MGV6_SNOWBIOMES | MGV6_TREES |
+ MGV6_BIOMEBLEND | MGV6_MUDFLOW;
+
freq_desert = 0.45;
freq_beach = 0.15;
@@ -175,7 +182,7 @@ void MapgenV6Params::readParams(const Settings *settings)
void MapgenV6Params::writeParams(Settings *settings) const
{
- settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, (u32)-1);
+ settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, U32_MAX);
settings->setFloat("mgv6_freq_desert", freq_desert);
settings->setFloat("mgv6_freq_beach", freq_beach);
@@ -195,7 +202,6 @@ void MapgenV6Params::writeParams(Settings *settings) const
//////////////////////// Some helper functions for the map generator
-
// Returns Y one under area minimum if not found
s16 MapgenV6::find_stone_level(v2s16 p2d)
{
@@ -263,7 +269,7 @@ float MapgenV6::baseTerrainLevel(float terrain_base, float terrain_higher,
float MapgenV6::baseTerrainLevelFromNoise(v2s16 p)
{
- if (flags & MG_FLAT)
+ if ((spflags & MGV6_FLAT) || (flags & MG_FLAT))
return water_level;
float terrain_base = NoisePerlin2D_PO(&noise_terrain_base->np,
@@ -289,7 +295,7 @@ float MapgenV6::baseTerrainLevelFromMap(v2s16 p)
float MapgenV6::baseTerrainLevelFromMap(int index)
{
- if (flags & MG_FLAT)
+ if ((spflags & MGV6_FLAT) || (flags & MG_FLAT))
return water_level;
float terrain_base = noise_terrain_base->result[index];
@@ -304,13 +310,24 @@ float MapgenV6::baseTerrainLevelFromMap(int index)
s16 MapgenV6::find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision)
{
- return baseTerrainLevelFromNoise(p2d) + AVERAGE_MUD_AMOUNT;
+ return baseTerrainLevelFromNoise(p2d) + MGV6_AVERAGE_MUD_AMOUNT;
}
int MapgenV6::getGroundLevelAtPoint(v2s16 p)
{
- return baseTerrainLevelFromNoise(p) + AVERAGE_MUD_AMOUNT;
+ return baseTerrainLevelFromNoise(p) + MGV6_AVERAGE_MUD_AMOUNT;
+}
+
+
+int MapgenV6::getSpawnLevelAtPoint(v2s16 p)
+{
+ s16 level_at_point = baseTerrainLevelFromNoise(p) + MGV6_AVERAGE_MUD_AMOUNT;
+ if (level_at_point <= water_level ||
+ level_at_point > water_level + 16)
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ else
+ return level_at_point;
}
@@ -386,8 +403,8 @@ bool MapgenV6::getHaveAppleTree(v2s16 p)
float MapgenV6::getMudAmount(int index)
{
- if (flags & MG_FLAT)
- return AVERAGE_MUD_AMOUNT;
+ if ((spflags & MGV6_FLAT) || (flags & MG_FLAT))
+ return MGV6_AVERAGE_MUD_AMOUNT;
/*return ((float)AVERAGE_MUD_AMOUNT + 2.0 * noise2d_perlin(
0.5+(float)p.X/200, 0.5+(float)p.Y/200,
@@ -422,13 +439,13 @@ BiomeV6Type MapgenV6::getBiome(int index, v2s16 p)
if (spflags & MGV6_SNOWBIOMES) {
float blend = (spflags & MGV6_BIOMEBLEND) ? noise2d(p.X, p.Y, seed) / 40 : 0;
- if (d > FREQ_HOT + blend) {
- if (h > FREQ_JUNGLE + blend)
+ if (d > MGV6_FREQ_HOT + blend) {
+ if (h > MGV6_FREQ_JUNGLE + blend)
return BT_JUNGLE;
else
return BT_DESERT;
- } else if (d < FREQ_SNOW + blend) {
- if (h > FREQ_TAIGA + blend)
+ } else if (d < MGV6_FREQ_SNOW + blend) {
+ if (h > MGV6_FREQ_TAIGA + blend)
return BT_TAIGA;
else
return BT_TUNDRA;
@@ -466,11 +483,11 @@ void MapgenV6::makeChunk(BlockMakeData *data)
assert(data->vmanip);
assert(data->nodedef);
assert(data->blockpos_requested.X >= data->blockpos_min.X &&
- data->blockpos_requested.Y >= data->blockpos_min.Y &&
- data->blockpos_requested.Z >= data->blockpos_min.Z);
+ data->blockpos_requested.Y >= data->blockpos_min.Y &&
+ data->blockpos_requested.Z >= data->blockpos_min.Z);
assert(data->blockpos_requested.X <= data->blockpos_max.X &&
- data->blockpos_requested.Y <= data->blockpos_max.Y &&
- data->blockpos_requested.Z <= data->blockpos_max.Z);
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
this->generating = true;
this->vm = data->vmanip;
@@ -579,18 +596,21 @@ void MapgenV6::makeChunk(BlockMakeData *data)
growGrass();
// Generate some trees, and add grass, if a jungle
- if (flags & MG_TREES)
+ if ((spflags & MGV6_TREES) || (flags & MG_TREES))
placeTreesAndJungleGrass();
// Generate the registered decorations
- m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
// Calculate lighting
if (flags & MG_LIGHT)
- calcLighting(node_min, node_max);
+ calcLighting(node_min - v3s16(1, 1, 1) * MAP_BLOCKSIZE,
+ node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+ full_node_min, full_node_max);
this->generating = false;
}
@@ -603,7 +623,7 @@ void MapgenV6::calculateNoise()
int fx = full_node_min.X;
int fz = full_node_min.Z;
- if (!(flags & MG_FLAT)) {
+ if (!((spflags & MGV6_FLAT) || (flags & MG_FLAT))) {
noise_terrain_base->perlinMap2D_PO(x, 0.5, z, 0.5);
noise_terrain_higher->perlinMap2D_PO(x, 0.5, z, 0.5);
noise_steepness->perlinMap2D_PO(x, 0.5, z, 0.5);
@@ -646,11 +666,11 @@ int MapgenV6::generateGround()
for (s16 y = node_min.Y; y <= node_max.Y; y++) {
if (vm->m_data[i].getContent() == CONTENT_IGNORE) {
if (y <= surface_y) {
- vm->m_data[i] = (y >= DESERT_STONE_BASE
+ vm->m_data[i] = (y >= MGV6_DESERT_STONE_BASE
&& bt == BT_DESERT) ?
n_desert_stone : n_stone;
} else if (y <= water_level) {
- vm->m_data[i] = (y >= ICE_BASE
+ vm->m_data[i] = (y >= MGV6_ICE_BASE
&& bt == BT_TUNDRA) ?
n_ice : n_water_source;
} else {
@@ -803,7 +823,7 @@ void MapgenV6::flowMud(s16 &mudflow_minpos, s16 &mudflow_maxpos)
continue;
// Drop mud on side
- for(u32 di = 0; di < 4; di++) {
+ for (u32 di = 0; di < 4; di++) {
v3s16 dirp = dirs4[di];
u32 i2 = i;
// Move to side
@@ -828,7 +848,7 @@ void MapgenV6::flowMud(s16 &mudflow_minpos, s16 &mudflow_maxpos)
vm->m_area.add_y(em, i2, -1);
n2 = &vm->m_data[i2];
// if out of known area
- if(vm->m_area.contains(i2) == false ||
+ if (vm->m_area.contains(i2) == false ||
n2->getContent() == CONTENT_IGNORE) {
dropped_to_unknown = true;
break;
@@ -843,7 +863,7 @@ void MapgenV6::flowMud(s16 &mudflow_minpos, s16 &mudflow_maxpos)
if (!dropped_to_unknown) {
*n2 = *n;
// Set old place to be air (or water)
- if(old_is_water)
+ if (old_is_water)
*n = MapNode(c_water_source);
else
*n = MapNode(CONTENT_AIR);
diff --git a/src/mapgen_v6.h b/src/mapgen_v6.h
index c71cf3c53..a55fc6d53 100644
--- a/src/mapgen_v6.h
+++ b/src/mapgen_v6.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2015 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
@@ -23,19 +23,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen.h"
#include "noise.h"
-#define AVERAGE_MUD_AMOUNT 4
-#define DESERT_STONE_BASE -32
-#define ICE_BASE 0
-#define FREQ_HOT 0.4
-#define FREQ_SNOW -0.4
-#define FREQ_TAIGA 0.5
-#define FREQ_JUNGLE 0.5
+#define MGV6_AVERAGE_MUD_AMOUNT 4
+#define MGV6_DESERT_STONE_BASE -32
+#define MGV6_ICE_BASE 0
+#define MGV6_FREQ_HOT 0.4
+#define MGV6_FREQ_SNOW -0.4
+#define MGV6_FREQ_TAIGA 0.5
+#define MGV6_FREQ_JUNGLE 0.5
//////////// Mapgen V6 flags
#define MGV6_JUNGLES 0x01
#define MGV6_BIOMEBLEND 0x02
#define MGV6_MUDFLOW 0x04
#define MGV6_SNOWBIOMES 0x08
+#define MGV6_FLAT 0x10
+#define MGV6_TREES 0x20
extern FlagDesc flagdesc_mapgen_v6[];
@@ -127,6 +129,7 @@ public:
void makeChunk(BlockMakeData *data);
int getGroundLevelAtPoint(v2s16 p);
+ int getSpawnLevelAtPoint(v2s16 p);
float baseTerrainLevel(float terrain_base, float terrain_higher,
float steepness, float height_select);
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp
index 9f612de81..9fb65f577 100644
--- a/src/mapgen_v7.cpp
+++ b/src/mapgen_v7.cpp
@@ -1,6 +1,7 @@
/*
Minetest
-Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -27,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
+//#include "profiler.h" // For TimeTaker
#include "settings.h" // For g_settings
#include "emerge.h"
#include "dungeongen.h"
@@ -44,6 +46,7 @@ FlagDesc flagdesc_mapgen_v7[] = {
{NULL, 0}
};
+
///////////////////////////////////////////////////////////////////////////////
@@ -56,7 +59,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
//// amount of elements to skip for the next index
//// for noise/height/biome maps (not vmanip)
this->ystride = csize.X;
- this->zstride = csize.X * (csize.Y + 2);
+ // 1-up 1-down overgeneration
+ this->zstride_1u1d = csize.X * (csize.Y + 2);
+ // 1-down overgeneration
+ this->zstride_1d = csize.X * (csize.Y + 1);
this->biomemap = new u8[csize.X * csize.Z];
this->heightmap = new s16[csize.X * csize.Z];
@@ -65,7 +71,9 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
this->ridge_heightmap = new s16[csize.X * csize.Z];
MapgenV7Params *sp = (MapgenV7Params *)params->sparams;
- this->spflags = sp->spflags;
+
+ this->spflags = sp->spflags;
+ this->cave_width = sp->cave_width;
//// Terrain noise
noise_terrain_base = new Noise(&sp->np_terrain_base, seed, csize.X, csize.Z);
@@ -77,10 +85,12 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
noise_ridge_uwater = new Noise(&sp->np_ridge_uwater, seed, csize.X, csize.Z);
//// 3d terrain noise
+ // 1-up 1-down overgeneration
noise_mountain = new Noise(&sp->np_mountain, seed, csize.X, csize.Y + 2, csize.Z);
noise_ridge = new Noise(&sp->np_ridge, seed, csize.X, csize.Y + 2, csize.Z);
- noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
- noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
+ // 1-down overgeneraion
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 1, csize.Z);
//// Biome noise
noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
@@ -144,25 +154,27 @@ MapgenV7::~MapgenV7()
MapgenV7Params::MapgenV7Params()
{
- spflags = MGV7_MOUNTAINS | MGV7_RIDGES;
+ spflags = MGV7_MOUNTAINS | MGV7_RIDGES;
+ cave_width = 0.3;
np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 5, 0.6, 2.0);
np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0);
np_terrain_persist = NoiseParams(0.6, 0.1, v3f(2000, 2000, 2000), 539, 3, 0.6, 2.0);
- np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.7, 2.0);
+ np_height_select = NoiseParams(-8, 16, v3f(500, 500, 500), 4213, 6, 0.7, 2.0);
np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0);
np_mount_height = NoiseParams(256, 112, v3f(1000, 1000, 1000), 72449, 3, 0.6, 2.0);
np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0);
np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.63, 2.0);
np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0);
- np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0);
- np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0);
+ np_cave1 = NoiseParams(0, 12, v3f(96, 96, 96), 52534, 4, 0.5, 2.0);
+ np_cave2 = NoiseParams(0, 12, v3f(96, 96, 96), 10325, 4, 0.5, 2.0);
}
void MapgenV7Params::readParams(const Settings *settings)
{
- settings->getFlagStrNoEx("mgv7_spflags", spflags, flagdesc_mapgen_v7);
+ settings->getFlagStrNoEx("mgv7_spflags", spflags, flagdesc_mapgen_v7);
+ settings->getFloatNoEx("mgv7_cave_width", cave_width);
settings->getNoiseParams("mgv7_np_terrain_base", np_terrain_base);
settings->getNoiseParams("mgv7_np_terrain_alt", np_terrain_alt);
@@ -180,7 +192,8 @@ void MapgenV7Params::readParams(const Settings *settings)
void MapgenV7Params::writeParams(Settings *settings) const
{
- settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, (u32)-1);
+ settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, U32_MAX);
+ settings->setFloat("mgv7_cave_width", cave_width);
settings->setNoiseParams("mgv7_np_terrain_base", np_terrain_base);
settings->setNoiseParams("mgv7_np_terrain_alt", np_terrain_alt);
@@ -196,10 +209,10 @@ void MapgenV7Params::writeParams(Settings *settings) const
}
-///////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
-int MapgenV7::getGroundLevelAtPoint(v2s16 p)
+int MapgenV7::getSpawnLevelAtPoint(v2s16 p)
{
// Base terrain calculation
s16 y = baseTerrainLevelAtPoint(p.X, p.Y);
@@ -207,22 +220,24 @@ int MapgenV7::getGroundLevelAtPoint(v2s16 p)
// Ridge/river terrain calculation
float width = 0.2;
float uwatern = NoisePerlin2D(&noise_ridge_uwater->np, p.X, p.Y, seed) * 2;
- // actually computing the depth of the ridge is much more expensive;
- // if inside a river, simply guess
+ // if inside a river this is an unsuitable spawn point
if (fabs(uwatern) <= width)
- return water_level - 10;
+ return MAX_MAP_GENERATION_LIMIT;
// Mountain terrain calculation
- int iters = 128; // don't even bother iterating more than 128 times..
+ int iters = 128;
while (iters--) {
- //current point would have been air
- if (!getMountainTerrainAtPoint(p.X, y, p.Y))
- return y;
-
+ if (!getMountainTerrainAtPoint(p.X, y + 1, p.Y)) { // Air, y is ground level
+ if (y <= water_level || y > water_level + 16)
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ else
+ return y;
+ }
y++;
}
- return y;
+ // Unsuitable spawn point, no ground surface found
+ return MAX_MAP_GENERATION_LIMIT;
}
@@ -255,10 +270,13 @@ void MapgenV7::makeChunk(BlockMakeData *data)
// Make some noise
calculateNoise();
- // Generate base terrain, mountains, and ridges with initial heightmaps
+ // Generate terrain and ridges with initial heightmaps
s16 stone_surface_max_y = generateTerrain();
- // Create heightmap
+ if (spflags & MGV7_RIDGES)
+ generateRidgeTerrain();
+
+ // Update heightmap to include mountain terrain
updateHeightmap(node_min, node_max);
// Create biomemap at heightmap surface
@@ -315,7 +333,8 @@ void MapgenV7::makeChunk(BlockMakeData *data)
}
// Generate the registered decorations
- m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
@@ -341,9 +360,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
void MapgenV7::calculateNoise()
{
//TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
- int x = node_min.X;
- int y = node_min.Y - 1;
- int z = node_min.Z;
+ s16 x = node_min.X;
+ s16 y = node_min.Y - 1;
+ s16 z = node_min.Z;
noise_terrain_persist->perlinMap2D(x, z);
float *persistmap = noise_terrain_persist->result;
@@ -352,9 +371,9 @@ void MapgenV7::calculateNoise()
noise_terrain_alt->perlinMap2D(x, z, persistmap);
noise_height_select->perlinMap2D(x, z);
- if (flags & MG_CAVES) {
- noise_cave1->perlinMap3D(x, y, z);
- noise_cave2->perlinMap3D(x, y, z);
+ if (spflags & MGV7_MOUNTAINS) {
+ noise_mountain->perlinMap3D(x, y, z);
+ noise_mount_height->perlinMap2D(x, z);
}
if ((spflags & MGV7_RIDGES) && node_max.Y >= water_level) {
@@ -362,7 +381,8 @@ void MapgenV7::calculateNoise()
noise_ridge_uwater->perlinMap2D(x, z);
}
- // Mountain noises are calculated in generateMountainTerrain()
+ // Cave noises are calculated in generateCaves()
+ // only if solid terrain is present in mapchunk
noise_filler_depth->perlinMap2D(x, z);
noise_heat->perlinMap2D(x, z);
@@ -392,7 +412,7 @@ Biome *MapgenV7::getBiomeAtPoint(v3s16 p)
return bmgr->getBiome(heat, humidity, groundlevel);
}
-//needs to be updated
+
float MapgenV7::baseTerrainLevelAtPoint(s16 x, s16 z)
{
float hselect = NoisePerlin2D(&noise_height_select->np, x, z, seed);
@@ -446,142 +466,62 @@ bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y)
}
-#if 0
-void MapgenV7::carveRivers() {
- MapNode n_air(CONTENT_AIR), n_water_source(c_water_source);
- MapNode n_stone(c_stone);
- u32 index = 0;
-
- int river_depth = 4;
-
- for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
- float terrain_mod = noise_terrain_mod->result[index];
- NoiseParams *np = noise_terrain_river->np;
- np.persist = noise_terrain_persist->result[index];
- float terrain_river = NoisePerlin2DNoTxfm(np, x, z, seed);
- float height = terrain_river * (1 - abs(terrain_mod)) *
- noise_terrain_river->np.scale;
- height = log(height * height); //log(h^3) is pretty interesting for terrain
-
- s16 y = heightmap[index];
- if (height < 1.0 && y > river_depth &&
- y - river_depth >= node_min.Y && y <= node_max.Y) {
-
- for (s16 ry = y; ry != y - river_depth; ry--) {
- u32 vi = vm->m_area.index(x, ry, z);
- vm->m_data[vi] = n_air;
- }
-
- u32 vi = vm->m_area.index(x, y - river_depth, z);
- vm->m_data[vi] = n_water_source;
- }
- }
-}
-#endif
-
-
int MapgenV7::generateTerrain()
{
- s16 stone_surface_min_y;
- s16 stone_surface_max_y;
-
- generateBaseTerrain(&stone_surface_min_y, &stone_surface_max_y);
-
- if ((spflags & MGV7_MOUNTAINS) && stone_surface_min_y < node_max.Y)
- stone_surface_max_y = generateMountainTerrain(stone_surface_max_y);
-
- if (spflags & MGV7_RIDGES)
- generateRidgeTerrain();
-
- return stone_surface_max_y;
-}
-
-
-void MapgenV7::generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y)
-{
MapNode n_air(CONTENT_AIR);
MapNode n_stone(c_stone);
MapNode n_water(c_water_source);
v3s16 em = vm->m_area.getExtent();
- s16 surface_min_y = MAX_MAP_GENERATION_LIMIT;
- s16 surface_max_y = -MAX_MAP_GENERATION_LIMIT;
- u32 index = 0;
+ s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
+ u32 index2d = 0;
+ bool mountain_flag = spflags & MGV7_MOUNTAINS;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
- float surface_height = baseTerrainLevelFromMap(index);
- s16 surface_y = (s16)surface_height;
-
- heightmap[index] = surface_y;
- ridge_heightmap[index] = surface_y;
+ for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
+ s16 surface_y = baseTerrainLevelFromMap(index2d);
+ heightmap[index2d] = surface_y; // Create base terrain heightmap
+ ridge_heightmap[index2d] = surface_y;
- if (surface_y < surface_min_y)
- surface_min_y = surface_y;
+ if (surface_y > stone_surface_max_y)
+ stone_surface_max_y = surface_y;
- if (surface_y > surface_max_y)
- surface_max_y = surface_y;
+ u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
+ u32 index3d = (z - node_min.Z) * zstride_1u1d + (x - node_min.X);
- u32 i = vm->m_area.index(x, node_min.Y - 1, z);
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
- if (vm->m_data[i].getContent() == CONTENT_IGNORE) {
- if (y <= surface_y)
- vm->m_data[i] = n_stone;
- else if (y <= water_level)
- vm->m_data[i] = n_water;
- else
- vm->m_data[i] = n_air;
- }
- vm->m_area.add_y(em, i, 1);
- }
- }
-
- *stone_surface_min_y = surface_min_y;
- *stone_surface_max_y = surface_max_y;
-}
-
-
-int MapgenV7::generateMountainTerrain(s16 ymax)
-{
- noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
- noise_mount_height->perlinMap2D(node_min.X, node_min.Z);
-
- MapNode n_stone(c_stone);
- u32 j = 0;
-
- for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
- u32 vi = vm->m_area.index(node_min.X, y, z);
- for (s16 x = node_min.X; x <= node_max.X; x++) {
- int index = (z - node_min.Z) * csize.X + (x - node_min.X);
- content_t c = vm->m_data[vi].getContent();
-
- if (getMountainTerrainFromMap(j, index, y)
- && (c == CONTENT_AIR || c == c_water_source)) {
- vm->m_data[vi] = n_stone;
- if (y > ymax)
- ymax = y;
+ if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
+ if (y <= surface_y) {
+ vm->m_data[vi] = n_stone; // Base terrain
+ } else if (mountain_flag &&
+ getMountainTerrainFromMap(index3d, index2d, y)) {
+ vm->m_data[vi] = n_stone; // Mountain terrain
+ if (y > stone_surface_max_y)
+ stone_surface_max_y = y;
+ } else if (y <= water_level) {
+ vm->m_data[vi] = n_water;
+ } else {
+ vm->m_data[vi] = n_air;
+ }
}
-
- vi++;
- j++;
+ vm->m_area.add_y(em, vi, 1);
+ index3d += ystride;
}
}
- return ymax;
+ return stone_surface_max_y;
}
void MapgenV7::generateRidgeTerrain()
{
- if (node_max.Y < water_level)
+ if (node_max.Y < water_level - 16)
return;
MapNode n_water(c_water_source);
MapNode n_air(CONTENT_AIR);
u32 index = 0;
- float width = 0.2; // TODO: figure out acceptable perlin noise values
+ float width = 0.2;
for (s16 z = node_min.Z; z <= node_max.Z; z++)
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
@@ -589,7 +529,7 @@ void MapgenV7::generateRidgeTerrain()
for (s16 x = node_min.X; x <= node_max.X; x++, index++, vi++) {
int j = (z - node_min.Z) * csize.X + (x - node_min.X);
- if (heightmap[j] < water_level - 16)
+ if (heightmap[j] < water_level - 16) // Use base terrain heightmap
continue;
float uwatern = noise_ridge_uwater->result[j] * 2;
@@ -635,7 +575,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map)
// If there is air or water above enable top/filler placement, otherwise force
// nplaced to stone level by setting a number exceeding any possible filler depth.
- u16 nplaced = (air_above || water_above) ? 0 : (u16)-1;
+ u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
for (s16 y = node_max.Y; y >= node_min.Y; y--) {
content_t c = vm->m_data[vi].getContent();
@@ -672,7 +612,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map)
// This is done by aborting the cycle of top/filler placement
// immediately by forcing nplaced to stone level.
if (c_below == CONTENT_AIR || c_below == c_water_source)
- nplaced = (u16)-1;
+ nplaced = U16_MAX;
if (nplaced < depth_top) {
vm->m_data[vi] = MapNode(biome->c_top);
@@ -697,7 +637,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map)
air_above = true;
water_above = false;
} else { // Possible various nodes overgenerated from neighbouring mapchunks
- nplaced = (u16)-1; // Disable top/filler placement
+ nplaced = U16_MAX; // Disable top/filler placement
air_above = false;
water_above = false;
}
@@ -760,6 +700,143 @@ void MapgenV7::dustTopNodes()
}
+void MapgenV7::generateCaves(s16 max_stone_y)
+{
+ if (max_stone_y < node_min.Y)
+ return;
+
+ noise_cave1->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_cave2->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
+ bool column_is_open = false; // Is column open to overground
+ bool is_tunnel = false; // Is tunnel or tunnel floor
+ // Indexes at column top (node_max.Y)
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+ u32 index3d = (z - node_min.Z) * zstride_1d + csize.Y * ystride +
+ (x - node_min.X);
+ // Biome of column
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]);
+
+ // Don't excavate the overgenerated stone at node_max.Y + 1,
+ // this creates a 'roof' over the tunnel, preventing light in
+ // tunnels at mapchunk borders when generating mapchunks upwards.
+ // This 'roof' is removed when the mapchunk above is generated.
+ for (s16 y = node_max.Y; y >= node_min.Y - 1; y--,
+ index3d -= ystride,
+ vm->m_area.add_y(em, vi, -1)) {
+
+ content_t c = vm->m_data[vi].getContent();
+ if (c == CONTENT_AIR || c == biome->c_water_top ||
+ c == biome->c_water) {
+ column_is_open = true;
+ continue;
+ }
+ // Ground
+ float d1 = contour(noise_cave1->result[index3d]);
+ float d2 = contour(noise_cave2->result[index3d]);
+
+ if (d1 * d2 > cave_width && ndef->get(c).is_ground_content) {
+ // In tunnel and ground content, excavate
+ vm->m_data[vi] = MapNode(CONTENT_AIR);
+ is_tunnel = true;
+ } else {
+ // Not in tunnel or not ground content
+ if (is_tunnel && column_is_open &&
+ (c == biome->c_filler || c == biome->c_stone))
+ // Tunnel entrance floor
+ vm->m_data[vi] = MapNode(biome->c_top);
+
+ column_is_open = false;
+ is_tunnel = false;
+ }
+ }
+ }
+
+ if (node_min.Y >= water_level)
+ return;
+
+ PseudoRandom ps(blockseed + 21343);
+ u32 bruises_count = ps.range(0, 2);
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV7 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
+ }
+}
+
+
+///////////////////////////////////////////////////////////////
+
+
+#if 0
+int MapgenV7::generateMountainTerrain(s16 ymax)
+{
+ MapNode n_stone(c_stone);
+ u32 j = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
+ u32 vi = vm->m_area.index(node_min.X, y, z);
+ for (s16 x = node_min.X; x <= node_max.X; x++) {
+ int index = (z - node_min.Z) * csize.X + (x - node_min.X);
+ content_t c = vm->m_data[vi].getContent();
+
+ if (getMountainTerrainFromMap(j, index, y)
+ && (c == CONTENT_AIR || c == c_water_source)) {
+ vm->m_data[vi] = n_stone;
+ if (y > ymax)
+ ymax = y;
+ }
+
+ vi++;
+ j++;
+ }
+ }
+
+ return ymax;
+}
+#endif
+
+
+#if 0
+void MapgenV7::carveRivers() {
+ MapNode n_air(CONTENT_AIR), n_water_source(c_water_source);
+ MapNode n_stone(c_stone);
+ u32 index = 0;
+
+ int river_depth = 4;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ float terrain_mod = noise_terrain_mod->result[index];
+ NoiseParams *np = noise_terrain_river->np;
+ np.persist = noise_terrain_persist->result[index];
+ float terrain_river = NoisePerlin2DNoTxfm(np, x, z, seed);
+ float height = terrain_river * (1 - abs(terrain_mod)) *
+ noise_terrain_river->np.scale;
+ height = log(height * height); //log(h^3) is pretty interesting for terrain
+
+ s16 y = heightmap[index];
+ if (height < 1.0 && y > river_depth &&
+ y - river_depth >= node_min.Y && y <= node_max.Y) {
+
+ for (s16 ry = y; ry != y - river_depth; ry--) {
+ u32 vi = vm->m_area.index(x, ry, z);
+ vm->m_data[vi] = n_air;
+ }
+
+ u32 vi = vm->m_area.index(x, y - river_depth, z);
+ vm->m_data[vi] = n_water_source;
+ }
+ }
+}
+#endif
+
+
#if 0
void MapgenV7::addTopNodes()
{
@@ -854,34 +931,3 @@ void MapgenV7::addTopNodes()
}
}
#endif
-
-
-void MapgenV7::generateCaves(s16 max_stone_y)
-{
- if (max_stone_y >= node_min.Y) {
- u32 index = 0;
-
- for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
- u32 i = vm->m_area.index(node_min.X, y, z);
- for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) {
- float d1 = contour(noise_cave1->result[index]);
- float d2 = contour(noise_cave2->result[index]);
- if (d1 * d2 > 0.3) {
- content_t c = vm->m_data[i].getContent();
- if (!ndef->get(c).is_ground_content || c == CONTENT_AIR)
- continue;
-
- vm->m_data[i] = MapNode(CONTENT_AIR);
- }
- }
- }
- }
-
- PseudoRandom ps(blockseed + 21343);
- u32 bruises_count = (ps.range(1, 4) == 1) ? ps.range(1, 2) : 0;
- for (u32 i = 0; i < bruises_count; i++) {
- CaveV7 cave(this, &ps);
- cave.makeCave(node_min, node_max, max_stone_y);
- }
-}
diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h
index c0cfa8c77..c25220646 100644
--- a/src/mapgen_v7.h
+++ b/src/mapgen_v7.h
@@ -1,6 +1,7 @@
/*
Minetest
-Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -33,6 +34,7 @@ extern FlagDesc flagdesc_mapgen_v7[];
struct MapgenV7Params : public MapgenSpecificParams {
u32 spflags;
+ float cave_width;
NoiseParams np_terrain_base;
NoiseParams np_terrain_alt;
NoiseParams np_terrain_persist;
@@ -58,8 +60,8 @@ public:
BiomeManager *bmgr;
int ystride;
- int zstride;
- u32 spflags;
+ int zstride_1u1d;
+ int zstride_1d;
v3s16 node_min;
v3s16 node_max;
@@ -68,6 +70,8 @@ public:
s16 *ridge_heightmap;
+ u32 spflags;
+ float cave_width;
Noise *noise_terrain_base;
Noise *noise_terrain_alt;
Noise *noise_terrain_persist;
@@ -102,7 +106,7 @@ public:
~MapgenV7();
virtual void makeChunk(BlockMakeData *data);
- int getGroundLevelAtPoint(v2s16 p);
+ int getSpawnLevelAtPoint(v2s16 p);
Biome *getBiomeAtPoint(v3s16 p);
float baseTerrainLevelAtPoint(s16 x, s16 z);
@@ -112,16 +116,12 @@ public:
void calculateNoise();
- virtual int generateTerrain();
- void generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y);
- int generateMountainTerrain(s16 ymax);
+ int generateTerrain();
void generateRidgeTerrain();
MgStoneType generateBiomes(float *heat_map, float *humidity_map);
void dustTopNodes();
- //void addTopNodes();
-
void generateCaves(s16 max_stone_y);
};
diff --git a/src/mapgen_valleys.cpp b/src/mapgen_valleys.cpp
new file mode 100644
index 000000000..0ec5409cb
--- /dev/null
+++ b/src/mapgen_valleys.cpp
@@ -0,0 +1,1017 @@
+/*
+Minetest Valleys C
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+Copyright (C) 2016 Duane Robertson <duane@duanerobertson.com>
+
+Based on Valleys Mapgen by Gael de Sailly
+ (https://forum.minetest.net/viewtopic.php?f=9&t=11430)
+and mapgen_v7, mapgen_flat by kwolekr and paramat.
+
+Licensing changed by permission of Gael de Sailly.
+
+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 "mapgen.h"
+#include "voxel.h"
+#include "noise.h"
+#include "mapblock.h"
+#include "mapnode.h"
+#include "map.h"
+#include "content_sao.h"
+#include "nodedef.h"
+#include "voxelalgorithms.h"
+#include "settings.h" // For g_settings
+#include "emerge.h"
+#include "dungeongen.h"
+#include "treegen.h"
+#include "mg_biome.h"
+#include "mg_ore.h"
+#include "mg_decoration.h"
+#include "mapgen_valleys.h"
+#include "cavegen.h"
+
+
+//#undef NDEBUG
+//#include "assert.h"
+
+//#include "util/timetaker.h"
+//#include "profiler.h"
+
+
+//static Profiler mapgen_prof;
+//Profiler *mapgen_profiler = &mapgen_prof;
+
+static FlagDesc flagdesc_mapgen_valleys[] = {
+ {"altitude_chill", MGVALLEYS_ALT_CHILL},
+ {"humid_rivers", MGVALLEYS_HUMID_RIVERS},
+ {NULL, 0}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+MapgenValleys::MapgenValleys(int mapgenid, MapgenParams *params, EmergeManager *emerge)
+ : Mapgen(mapgenid, params, emerge)
+{
+ this->m_emerge = emerge;
+ this->bmgr = emerge->biomemgr;
+
+ //// amount of elements to skip for the next index
+ //// for noise/height/biome maps (not vmanip)
+ this->ystride = csize.X;
+ this->zstride = csize.X * (csize.Y + 2);
+ // 1-down overgeneration
+ this->zstride_1d = csize.X * (csize.Y + 1);
+
+ this->biomemap = new u8[csize.X * csize.Z];
+ this->heightmap = new s16[csize.X * csize.Z];
+ this->heatmap = NULL;
+ this->humidmap = NULL;
+
+ this->map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT,
+ g_settings->getU16("map_generation_limit"));
+
+ MapgenValleysParams *sp = (MapgenValleysParams *)params->sparams;
+
+ this->spflags = sp->spflags;
+ this->altitude_chill = sp->altitude_chill;
+ this->large_cave_depth = sp->large_cave_depth;
+ this->lava_features_lim = rangelim(sp->lava_features, 0, 10);
+ this->massive_cave_depth = sp->massive_cave_depth;
+ this->river_depth_bed = sp->river_depth + 1.f;
+ this->river_size_factor = sp->river_size / 100.f;
+ this->water_features_lim = rangelim(sp->water_features, 0, 10);
+ this->cave_width = sp->cave_width;
+
+ //// 2D Terrain noise
+ noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
+ noise_inter_valley_slope = new Noise(&sp->np_inter_valley_slope, seed, csize.X, csize.Z);
+ noise_rivers = new Noise(&sp->np_rivers, seed, csize.X, csize.Z);
+ noise_terrain_height = new Noise(&sp->np_terrain_height, seed, csize.X, csize.Z);
+ noise_valley_depth = new Noise(&sp->np_valley_depth, seed, csize.X, csize.Z);
+ noise_valley_profile = new Noise(&sp->np_valley_profile, seed, csize.X, csize.Z);
+
+ //// 3D Terrain noise
+ // 1-up 1-down overgeneration
+ noise_inter_valley_fill = new Noise(&sp->np_inter_valley_fill, seed, csize.X, csize.Y + 2, csize.Z);
+ // 1-down overgeneraion
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 1, csize.Z);
+ noise_massive_caves = new Noise(&sp->np_massive_caves, seed, csize.X, csize.Y + 1, csize.Z);
+
+ //// Biome noise
+ noise_heat_blend = new Noise(&params->np_biome_heat_blend, seed, csize.X, csize.Z);
+ noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity_blend = new Noise(&params->np_biome_humidity_blend, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+
+ this->humid_rivers = (spflags & MGVALLEYS_HUMID_RIVERS);
+ this->use_altitude_chill = (spflags & MGVALLEYS_ALT_CHILL);
+ this->humidity_adjust = params->np_biome_humidity.offset - 50.f;
+
+ // a small chance of overflows if the settings are very high
+ this->cave_water_max_height = water_level + MYMAX(0, water_features_lim - 4) * 50;
+ this->lava_max_height = water_level + MYMAX(0, lava_features_lim - 4) * 50;
+
+ tcave_cache = new float[csize.Y + 2];
+
+ //// Resolve nodes to be used
+ INodeDefManager *ndef = emerge->ndef;
+
+ c_cobble = ndef->getId("mapgen_cobble");
+ c_desert_stone = ndef->getId("mapgen_desert_stone");
+ c_dirt = ndef->getId("mapgen_dirt");
+ c_lava_source = ndef->getId("mapgen_lava_source");
+ c_mossycobble = ndef->getId("mapgen_mossycobble");
+ c_river_water_source = ndef->getId("mapgen_river_water_source");
+ c_sand = ndef->getId("mapgen_sand");
+ c_sandstonebrick = ndef->getId("mapgen_sandstonebrick");
+ c_sandstone = ndef->getId("mapgen_sandstone");
+ c_stair_cobble = ndef->getId("mapgen_stair_cobble");
+ c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick");
+ c_stone = ndef->getId("mapgen_stone");
+ c_water_source = ndef->getId("mapgen_water_source");
+
+ if (c_mossycobble == CONTENT_IGNORE)
+ c_mossycobble = c_cobble;
+ if (c_river_water_source == CONTENT_IGNORE)
+ c_river_water_source = c_water_source;
+ if (c_sand == CONTENT_IGNORE)
+ c_sand = c_stone;
+ if (c_sandstonebrick == CONTENT_IGNORE)
+ c_sandstonebrick = c_sandstone;
+ if (c_stair_cobble == CONTENT_IGNORE)
+ c_stair_cobble = c_cobble;
+ if (c_stair_sandstonebrick == CONTENT_IGNORE)
+ c_stair_sandstonebrick = c_sandstone;
+}
+
+
+MapgenValleys::~MapgenValleys()
+{
+ delete noise_cave1;
+ delete noise_cave2;
+ delete noise_filler_depth;
+ delete noise_inter_valley_fill;
+ delete noise_inter_valley_slope;
+ delete noise_rivers;
+ delete noise_massive_caves;
+ delete noise_terrain_height;
+ delete noise_valley_depth;
+ delete noise_valley_profile;
+
+ delete noise_heat;
+ delete noise_heat_blend;
+ delete noise_humidity;
+ delete noise_humidity_blend;
+
+ delete[] biomemap;
+ delete[] heightmap;
+ delete[] tcave_cache;
+}
+
+
+MapgenValleysParams::MapgenValleysParams()
+{
+ spflags = MGVALLEYS_HUMID_RIVERS | MGVALLEYS_ALT_CHILL;
+ altitude_chill = 90; // The altitude at which temperature drops by 20C.
+ large_cave_depth = -33;
+ lava_features = 0; // How often water will occur in caves.
+ massive_cave_depth = -256; // highest altitude of massive caves
+ river_depth = 4; // How deep to carve river channels.
+ river_size = 5; // How wide to make rivers.
+ water_features = 0; // How often water will occur in caves.
+ cave_width = 0.3;
+
+ np_cave1 = NoiseParams(0, 12, v3f(96, 96, 96), 52534, 4, 0.5, 2.0);
+ np_cave2 = NoiseParams(0, 12, v3f(96, 96, 96), 10325, 4, 0.5, 2.0);
+ np_filler_depth = NoiseParams(0.f, 1.2f, v3f(256, 256, 256), 1605, 3, 0.5f, 2.f);
+ np_inter_valley_fill = NoiseParams(0.f, 1.f, v3f(256, 512, 256), 1993, 6, 0.8f, 2.f);
+ np_inter_valley_slope = NoiseParams(0.5f, 0.5f, v3f(128, 128, 128), 746, 1, 1.f, 2.f);
+ np_rivers = NoiseParams(0.f, 1.f, v3f(256, 256, 256), -6050, 5, 0.6f, 2.f);
+ np_massive_caves = NoiseParams(0.f, 1.f, v3f(768, 256, 768), 59033, 6, 0.63f, 2.f);
+ np_terrain_height = NoiseParams(-10.f, 50.f, v3f(1024, 1024, 1024), 5202, 6, 0.4f, 2.f);
+ np_valley_depth = NoiseParams(5.f, 4.f, v3f(512, 512, 512), -1914, 1, 1.f, 2.f);
+ np_valley_profile = NoiseParams(0.6f, 0.5f, v3f(512, 512, 512), 777, 1, 1.f, 2.f);
+}
+
+
+void MapgenValleysParams::readParams(const Settings *settings)
+{
+ settings->getFlagStrNoEx("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys);
+ settings->getU16NoEx("mgvalleys_altitude_chill", altitude_chill);
+ settings->getS16NoEx("mgvalleys_large_cave_depth", large_cave_depth);
+ settings->getU16NoEx("mgvalleys_lava_features", lava_features);
+ settings->getS16NoEx("mgvalleys_massive_cave_depth", massive_cave_depth);
+ settings->getU16NoEx("mgvalleys_river_depth", river_depth);
+ settings->getU16NoEx("mgvalleys_river_size", river_size);
+ settings->getU16NoEx("mgvalleys_water_features", water_features);
+ settings->getFloatNoEx("mgvalleys_cave_width", cave_width);
+
+ settings->getNoiseParams("mgvalleys_np_cave1", np_cave1);
+ settings->getNoiseParams("mgvalleys_np_cave2", np_cave2);
+ settings->getNoiseParams("mgvalleys_np_filler_depth", np_filler_depth);
+ settings->getNoiseParams("mgvalleys_np_inter_valley_fill", np_inter_valley_fill);
+ settings->getNoiseParams("mgvalleys_np_inter_valley_slope", np_inter_valley_slope);
+ settings->getNoiseParams("mgvalleys_np_rivers", np_rivers);
+ settings->getNoiseParams("mgvalleys_np_massive_caves", np_massive_caves);
+ settings->getNoiseParams("mgvalleys_np_terrain_height", np_terrain_height);
+ settings->getNoiseParams("mgvalleys_np_valley_depth", np_valley_depth);
+ settings->getNoiseParams("mgvalleys_np_valley_profile", np_valley_profile);
+}
+
+
+void MapgenValleysParams::writeParams(Settings *settings) const
+{
+ settings->setFlagStr("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys, U32_MAX);
+ settings->setU16("mgvalleys_altitude_chill", altitude_chill);
+ settings->setS16("mgvalleys_large_cave_depth", large_cave_depth);
+ settings->setU16("mgvalleys_lava_features", lava_features);
+ settings->setS16("mgvalleys_massive_cave_depth", massive_cave_depth);
+ settings->setU16("mgvalleys_river_depth", river_depth);
+ settings->setU16("mgvalleys_river_size", river_size);
+ settings->setU16("mgvalleys_water_features", water_features);
+ settings->setFloat("mgvalleys_cave_width", cave_width);
+
+ settings->setNoiseParams("mgvalleys_np_cave1", np_cave1);
+ settings->setNoiseParams("mgvalleys_np_cave2", np_cave2);
+ settings->setNoiseParams("mgvalleys_np_filler_depth", np_filler_depth);
+ settings->setNoiseParams("mgvalleys_np_inter_valley_fill", np_inter_valley_fill);
+ settings->setNoiseParams("mgvalleys_np_inter_valley_slope", np_inter_valley_slope);
+ settings->setNoiseParams("mgvalleys_np_rivers", np_rivers);
+ settings->setNoiseParams("mgvalleys_np_massive_caves", np_massive_caves);
+ settings->setNoiseParams("mgvalleys_np_terrain_height", np_terrain_height);
+ settings->setNoiseParams("mgvalleys_np_valley_depth", np_valley_depth);
+ settings->setNoiseParams("mgvalleys_np_valley_profile", np_valley_profile);
+}
+
+
+///////////////////////////////////////
+
+
+void MapgenValleys::makeChunk(BlockMakeData *data)
+{
+ // Pre-conditions
+ assert(data->vmanip);
+ assert(data->nodedef);
+ assert(data->blockpos_requested.X >= data->blockpos_min.X &&
+ data->blockpos_requested.Y >= data->blockpos_min.Y &&
+ data->blockpos_requested.Z >= data->blockpos_min.Z);
+ assert(data->blockpos_requested.X <= data->blockpos_max.X &&
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
+
+ this->generating = true;
+ this->vm = data->vmanip;
+ this->ndef = data->nodedef;
+
+ //TimeTaker t("makeChunk");
+
+ v3s16 blockpos_min = data->blockpos_min;
+ v3s16 blockpos_max = data->blockpos_max;
+ node_min = blockpos_min * MAP_BLOCKSIZE;
+ node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+ full_node_min = (blockpos_min - 1) * MAP_BLOCKSIZE;
+ full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
+
+ blockseed = getBlockSeed2(full_node_min, seed);
+
+ // Generate noise maps and base terrain height.
+ calculateNoise();
+
+ // Generate base terrain with initial heightmaps
+ s16 stone_surface_max_y = generateTerrain();
+
+ // Create biomemap at heightmap surface
+ bmgr->calcBiomes(csize.X, csize.Z, heatmap, humidmap, heightmap, biomemap);
+
+ // Actually place the biome-specific nodes
+ MgStoneType stone_type = generateBiomes(heatmap, humidmap);
+
+ // Cave creation.
+ if (flags & MG_CAVES)
+ generateCaves(stone_surface_max_y);
+
+ // Dungeon creation
+ if ((flags & MG_DUNGEONS) && node_max.Y < 50 && (stone_surface_max_y >= node_min.Y)) {
+ DungeonParams dp;
+
+ dp.np_rarity = nparams_dungeon_rarity;
+ dp.np_density = nparams_dungeon_density;
+ dp.np_wetness = nparams_dungeon_wetness;
+ dp.c_water = c_water_source;
+ if (stone_type == STONE) {
+ dp.c_cobble = c_cobble;
+ dp.c_moss = c_mossycobble;
+ dp.c_stair = c_stair_cobble;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 3.f;
+ dp.holesize = v3s16(1, 2, 1);
+ dp.roomsize = v3s16(0, 0, 0);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ } else if (stone_type == DESERT_STONE) {
+ dp.c_cobble = c_desert_stone;
+ dp.c_moss = c_desert_stone;
+ dp.c_stair = c_desert_stone;
+
+ dp.diagonal_dirs = true;
+ dp.mossratio = 0.f;
+ dp.holesize = v3s16(2, 3, 2);
+ dp.roomsize = v3s16(2, 5, 2);
+ dp.notifytype = GENNOTIFY_TEMPLE;
+ } else if (stone_type == SANDSTONE) {
+ dp.c_cobble = c_sandstonebrick;
+ dp.c_moss = c_sandstonebrick;
+ dp.c_stair = c_sandstonebrick;
+
+ dp.diagonal_dirs = false;
+ dp.mossratio = 0.f;
+ dp.holesize = v3s16(2, 2, 2);
+ dp.roomsize = v3s16(2, 0, 2);
+ dp.notifytype = GENNOTIFY_DUNGEON;
+ }
+
+ DungeonGen dgen(this, &dp);
+ dgen.generate(blockseed, full_node_min, full_node_max);
+ }
+
+ // Generate the registered decorations
+ if (flags & MG_DECORATIONS)
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+
+ // Generate the registered ores
+ m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+
+ // Sprinkle some dust on top after everything else was generated
+ dustTopNodes();
+
+ //TimeTaker tll("liquid_lighting");
+
+ updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
+
+ if (flags & MG_LIGHT)
+ calcLighting(
+ node_min - v3s16(0, 1, 0),
+ node_max + v3s16(0, 1, 0),
+ full_node_min,
+ full_node_max);
+
+ //mapgen_profiler->avg("liquid_lighting", tll.stop() / 1000.f);
+ //mapgen_profiler->avg("makeChunk", t.stop() / 1000.f);
+
+ this->generating = false;
+}
+
+
+// Populate the noise tables and do most of the
+// calculation necessary to determine terrain height.
+void MapgenValleys::calculateNoise()
+{
+ //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
+
+ int x = node_min.X;
+ int y = node_min.Y - 1;
+ int z = node_min.Z;
+
+ //TimeTaker tcn("actualNoise");
+
+ noise_filler_depth->perlinMap2D(x, z);
+ noise_heat_blend->perlinMap2D(x, z);
+ noise_heat->perlinMap2D(x, z);
+ noise_humidity_blend->perlinMap2D(x, z);
+ noise_humidity->perlinMap2D(x, z);
+ noise_inter_valley_slope->perlinMap2D(x, z);
+ noise_rivers->perlinMap2D(x, z);
+ noise_terrain_height->perlinMap2D(x, z);
+ noise_valley_depth->perlinMap2D(x, z);
+ noise_valley_profile->perlinMap2D(x, z);
+
+ noise_inter_valley_fill->perlinMap3D(x, y, z);
+
+ //mapgen_profiler->avg("noisemaps", tcn.stop() / 1000.f);
+
+ float heat_offset = 0.f;
+ float humidity_scale = 1.f;
+
+ // Altitude chill tends to reduce the average heat.
+ if (use_altitude_chill)
+ heat_offset = 5.f;
+
+ // River humidity tends to increase the humidity range.
+ if (humid_rivers) {
+ humidity_scale = 0.8f;
+ }
+
+ for (s32 index = 0; index < csize.X * csize.Z; index++) {
+ noise_heat->result[index] += noise_heat_blend->result[index] + heat_offset;
+ noise_humidity->result[index] *= humidity_scale;
+ noise_humidity->result[index] += noise_humidity_blend->result[index];
+ }
+
+ TerrainNoise tn;
+
+ u32 index = 0;
+ for (tn.z = node_min.Z; tn.z <= node_max.Z; tn.z++)
+ for (tn.x = node_min.X; tn.x <= node_max.X; tn.x++, index++) {
+ // The parameters that we actually need to generate terrain
+ // are passed by address (and the return value).
+ tn.terrain_height = noise_terrain_height->result[index];
+ // River noise is replaced with base terrain, which
+ // is basically the height of the water table.
+ tn.rivers = &noise_rivers->result[index];
+ // Valley depth noise is replaced with the valley
+ // number that represents the height of terrain
+ // over rivers and is used to determine about
+ // how close a river is for humidity calculation.
+ tn.valley = &noise_valley_depth->result[index];
+ tn.valley_profile = noise_valley_profile->result[index];
+ // Slope noise is replaced by the calculated slope
+ // which is used to get terrain height in the slow
+ // method, to create sharper mountains.
+ tn.slope = &noise_inter_valley_slope->result[index];
+ tn.inter_valley_fill = noise_inter_valley_fill->result[index];
+
+ // This is the actual terrain height.
+ float mount = terrainLevelFromNoise(&tn);
+ noise_terrain_height->result[index] = mount;
+ }
+
+ heatmap = noise_heat->result;
+ humidmap = noise_humidity->result;
+}
+
+
+// This keeps us from having to maintain two similar sets of
+// complicated code to determine ground level.
+float MapgenValleys::terrainLevelFromNoise(TerrainNoise *tn)
+{
+ // The square function changes the behaviour of this noise:
+ // very often small, and sometimes very high.
+ float valley_d = MYSQUARE(*tn->valley);
+
+ // valley_d is here because terrain is generally higher where valleys
+ // are deep (mountains). base represents the height of the
+ // rivers, most of the surface is above.
+ float base = tn->terrain_height + valley_d;
+
+ // "river" represents the distance from the river, in arbitrary units.
+ float river = fabs(*tn->rivers) - river_size_factor;
+
+ // Use the curve of the function 1-exp(-(x/a)^2) to model valleys.
+ // Making "a" vary (0 < a <= 1) changes the shape of the valleys.
+ // Try it with a geometry software !
+ // (here x = "river" and a = valley_profile).
+ // "valley" represents the height of the terrain, from the rivers.
+ {
+ float t = river / tn->valley_profile;
+ *tn->valley = valley_d * (1.f - exp(- MYSQUARE(t)));
+ }
+
+ // approximate height of the terrain at this point
+ float mount = base + *tn->valley;
+
+ *tn->slope *= *tn->valley;
+
+ // Rivers are placed where "river" is negative, so where the original
+ // noise value is close to zero.
+ // Base ground is returned as rivers since it's basically the water table.
+ *tn->rivers = base;
+ if (river < 0.f) {
+ // Use the the function -sqrt(1-x^2) which models a circle.
+ float depth;
+ {
+ float t = river / river_size_factor + 1;
+ depth = (river_depth_bed * sqrt(MYMAX(0, 1.f - MYSQUARE(t))));
+ }
+
+ // base - depth : height of the bottom of the river
+ // water_level - 3 : don't make rivers below 3 nodes under the surface
+ // We use three because that's as low as the swamp biomes go.
+ // There is no logical equivalent to this using rangelim.
+ mount = MYMIN(MYMAX(base - depth, (float)(water_level - 3)), mount);
+
+ // Slope has no influence on rivers.
+ *tn->slope = 0.f;
+ }
+
+ return mount;
+}
+
+
+// This avoids duplicating the code in terrainLevelFromNoise, adding
+// only the final step of terrain generation without a noise map.
+float MapgenValleys::adjustedTerrainLevelFromNoise(TerrainNoise *tn)
+{
+ float mount = terrainLevelFromNoise(tn);
+ s16 y_start = myround(mount);
+
+ for (s16 y = y_start; y <= y_start + 1000; y++) {
+ float fill = NoisePerlin3D(&noise_inter_valley_fill->np, tn->x, y, tn->z, seed);
+
+ if (fill * *tn->slope < y - mount) {
+ mount = MYMAX(y - 1, mount);
+ break;
+ }
+ }
+
+ return mount;
+}
+
+
+int MapgenValleys::getSpawnLevelAtPoint(v2s16 p)
+{
+ // Check to make sure this isn't a request for a location in a river.
+ float rivers = NoisePerlin2D(&noise_rivers->np, p.X, p.Y, seed);
+ if (fabs(rivers) < river_size_factor)
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+
+ s16 level_at_point = terrainLevelAtPoint(p.X, p.Y);
+ if (level_at_point <= water_level ||
+ level_at_point > water_level + 32)
+ return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
+ else
+ return level_at_point;
+}
+
+
+float MapgenValleys::terrainLevelAtPoint(s16 x, s16 z)
+{
+ TerrainNoise tn;
+
+ float rivers = NoisePerlin2D(&noise_rivers->np, x, z, seed);
+ float valley = NoisePerlin2D(&noise_valley_depth->np, x, z, seed);
+ float inter_valley_slope = NoisePerlin2D(&noise_inter_valley_slope->np, x, z, seed);
+
+ tn.x = x;
+ tn.z = z;
+ tn.terrain_height = NoisePerlin2D(&noise_terrain_height->np, x, z, seed);
+ tn.rivers = &rivers;
+ tn.valley = &valley;
+ tn.valley_profile = NoisePerlin2D(&noise_valley_profile->np, x, z, seed);
+ tn.slope = &inter_valley_slope;
+ tn.inter_valley_fill = 0.f;
+
+ return adjustedTerrainLevelFromNoise(&tn);
+}
+
+
+int MapgenValleys::generateTerrain()
+{
+ // Raising this reduces the rate of evaporation.
+ static const float evaporation = 300.f;
+ // from the lua
+ static const float humidity_dropoff = 4.f;
+ // constant to convert altitude chill (compatible with lua) to heat
+ static const float alt_to_heat = 20.f;
+ // humidity reduction by altitude
+ static const float alt_to_humid = 10.f;
+
+ MapNode n_air(CONTENT_AIR);
+ MapNode n_river_water(c_river_water_source);
+ MapNode n_sand(c_sand);
+ MapNode n_stone(c_stone);
+ MapNode n_water(c_water_source);
+
+ v3s16 em = vm->m_area.getExtent();
+ s16 surface_max_y = -MAX_MAP_GENERATION_LIMIT;
+ u32 index_2d = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index_2d++) {
+ float river_y = noise_rivers->result[index_2d];
+ float surface_y = noise_terrain_height->result[index_2d];
+ float slope = noise_inter_valley_slope->result[index_2d];
+ float t_heat = noise_heat->result[index_2d];
+
+ heightmap[index_2d] = -MAX_MAP_GENERATION_LIMIT;
+
+ if (surface_y > surface_max_y)
+ surface_max_y = ceil(surface_y);
+
+ if (humid_rivers) {
+ // Derive heat from (base) altitude. This will be most correct
+ // at rivers, since other surface heights may vary below.
+ if (use_altitude_chill && (surface_y > 0.f || river_y > 0.f))
+ t_heat -= alt_to_heat * MYMAX(surface_y, river_y) / altitude_chill;
+
+ // If humidity is low or heat is high, lower the water table.
+ float delta = noise_humidity->result[index_2d] - 50.f;
+ if (delta < 0.f) {
+ float t_evap = (t_heat - 32.f) / evaporation;
+ river_y += delta * MYMAX(t_evap, 0.08f);
+ }
+ }
+
+ u32 index_3d = (z - node_min.Z) * zstride + (x - node_min.X);
+ u32 index_data = vm->m_area.index(x, node_min.Y - 1, z);
+
+ // Mapgens concern themselves with stone and water.
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
+ if (vm->m_data[index_data].getContent() == CONTENT_IGNORE) {
+ float fill = noise_inter_valley_fill->result[index_3d];
+ float surface_delta = (float)y - surface_y;
+ bool river = y + 1 < river_y;
+
+ if (fabs(surface_delta) <= 0.5f && y > water_level && river) {
+ // river bottom
+ vm->m_data[index_data] = n_sand;
+ } else if (slope * fill > surface_delta) {
+ // ground
+ vm->m_data[index_data] = n_stone;
+ if (y > heightmap[index_2d])
+ heightmap[index_2d] = y;
+ if (y > surface_max_y)
+ surface_max_y = y;
+ } else if (y <= water_level) {
+ // sea
+ vm->m_data[index_data] = n_water;
+ } else if (river) {
+ // river
+ vm->m_data[index_data] = n_river_water;
+ } else {
+ vm->m_data[index_data] = n_air;
+ }
+ }
+
+ vm->m_area.add_y(em, index_data, 1);
+ index_3d += ystride;
+ }
+
+ // This happens if we're generating a chunk that doesn't
+ // contain the terrain surface, in which case, we need
+ // to set heightmap to a value outside of the chunk,
+ // to avoid confusing lua mods that use heightmap.
+ if (heightmap[index_2d] == -MAX_MAP_GENERATION_LIMIT) {
+ s16 surface_y_int = myround(surface_y);
+ if (surface_y_int > node_max.Y + 1 || surface_y_int < node_min.Y - 1) {
+ // If surface_y is outside the chunk, it's good enough.
+ heightmap[index_2d] = surface_y_int;
+ } else {
+ // If the ground is outside of this chunk, but surface_y
+ // is within the chunk, give a value outside.
+ heightmap[index_2d] = node_min.Y - 2;
+ }
+ }
+
+ if (humid_rivers) {
+ // Use base ground (water table) in a riverbed, to
+ // avoid an unnatural rise in humidity.
+ float t_alt = MYMAX(noise_rivers->result[index_2d], (float)heightmap[index_2d]);
+ float humid = noise_humidity->result[index_2d];
+ float water_depth = (t_alt - river_y) / humidity_dropoff;
+ humid *= 1.f + pow(0.5f, MYMAX(water_depth, 1.f));
+
+ // Reduce humidity with altitude (ignoring riverbeds).
+ // This is similar to the lua version's seawater adjustment,
+ // but doesn't increase the base humidity, which causes
+ // problems with the default biomes.
+ if (t_alt > 0.f)
+ humid -= alt_to_humid * t_alt / altitude_chill;
+
+ noise_humidity->result[index_2d] = humid;
+ }
+
+ // Assign the heat adjusted by any changed altitudes.
+ // The altitude will change about half the time.
+ if (use_altitude_chill) {
+ // ground height ignoring riverbeds
+ float t_alt = MYMAX(noise_rivers->result[index_2d], (float)heightmap[index_2d]);
+ if (humid_rivers && heightmap[index_2d] == (s16)myround(surface_y))
+ // The altitude hasn't changed. Use the first result.
+ noise_heat->result[index_2d] = t_heat;
+ else if (t_alt > 0.f)
+ noise_heat->result[index_2d] -= alt_to_heat * t_alt / altitude_chill;
+ }
+ }
+
+ return surface_max_y;
+}
+
+
+MgStoneType MapgenValleys::generateBiomes(float *heat_map, float *humidity_map)
+{
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+ MgStoneType stone_type = STONE;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = NULL;
+ u16 depth_top = 0;
+ u16 base_filler = 0;
+ u16 depth_water_top = 0;
+ u32 vi = vm->m_area.index(x, node_max.Y, z);
+
+ // Check node at base of mapchunk above, either a node of a previously
+ // generated mapchunk or if not, a node of overgenerated base terrain.
+ content_t c_above = vm->m_data[vi + em.X].getContent();
+ bool air_above = c_above == CONTENT_AIR;
+ bool water_above = (c_above == c_water_source || c_above == c_river_water_source);
+
+ // If there is air or water above enable top/filler placement, otherwise force
+ // nplaced to stone level by setting a number exceeding any possible filler depth.
+ u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
+
+ for (s16 y = node_max.Y; y >= node_min.Y; y--) {
+ content_t c = vm->m_data[vi].getContent();
+
+ // Biome is recalculated each time an upper surface is detected while
+ // working down a column. The selected biome then remains in effect for
+ // all nodes below until the next surface and biome recalculation.
+ // Biome is recalculated:
+ // 1. At the surface of stone below air or water.
+ // 2. At the surface of water below air.
+ // 3. When stone or water is detected but biome has not yet been calculated.
+ if ((c == c_stone && (air_above || water_above || !biome))
+ || ((c == c_water_source || c == c_river_water_source)
+ && (air_above || !biome))) {
+ // Both heat and humidity have already been adjusted for altitude.
+ biome = bmgr->getBiome(heat_map[index], humidity_map[index], y);
+
+ depth_top = biome->depth_top;
+ base_filler = MYMAX(depth_top
+ + biome->depth_filler
+ + noise_filler_depth->result[index], 0.f);
+ depth_water_top = biome->depth_water_top;
+
+ // Detect stone type for dungeons during every biome calculation.
+ // This is more efficient than detecting per-node and will not
+ // miss any desert stone or sandstone biomes.
+ if (biome->c_stone == c_desert_stone)
+ stone_type = DESERT_STONE;
+ else if (biome->c_stone == c_sandstone)
+ stone_type = SANDSTONE;
+ }
+
+ if (c == c_stone) {
+ content_t c_below = vm->m_data[vi - em.X].getContent();
+
+ // If the node below isn't solid, make this node stone, so that
+ // any top/filler nodes above are structurally supported.
+ // This is done by aborting the cycle of top/filler placement
+ // immediately by forcing nplaced to stone level.
+ if (c_below == CONTENT_AIR
+ || c_below == c_water_source
+ || c_below == c_river_water_source)
+ nplaced = U16_MAX;
+
+ if (nplaced < depth_top) {
+ vm->m_data[vi] = MapNode(biome->c_top);
+ nplaced++;
+ } else if (nplaced < base_filler) {
+ vm->m_data[vi] = MapNode(biome->c_filler);
+ nplaced++;
+ } else {
+ vm->m_data[vi] = MapNode(biome->c_stone);
+ }
+
+ air_above = false;
+ water_above = false;
+ } else if (c == c_water_source) {
+ vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top))
+ ? biome->c_water_top : biome->c_water);
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = false;
+ water_above = true;
+ } else if (c == c_river_water_source) {
+ vm->m_data[vi] = MapNode(biome->c_river_water);
+ nplaced = depth_top; // Enable filler placement for next surface
+ air_above = false;
+ water_above = true;
+ } else if (c == CONTENT_AIR) {
+ nplaced = 0; // Enable top/filler placement for next surface
+ air_above = true;
+ water_above = false;
+ } else { // Possible various nodes overgenerated from neighbouring mapchunks
+ nplaced = U16_MAX; // Disable top/filler placement
+ air_above = false;
+ water_above = false;
+ }
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+ }
+
+ return stone_type;
+}
+
+
+void MapgenValleys::dustTopNodes()
+{
+ if (node_max.Y < water_level)
+ return;
+
+ v3s16 em = vm->m_area.getExtent();
+ u32 index = 0;
+
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index]);
+
+ if (biome->c_dust == CONTENT_IGNORE)
+ continue;
+
+ u32 vi = vm->m_area.index(x, full_node_max.Y, z);
+ content_t c_full_max = vm->m_data[vi].getContent();
+ s16 y_start;
+
+ if (c_full_max == CONTENT_AIR) {
+ y_start = full_node_max.Y - 1;
+ } else if (c_full_max == CONTENT_IGNORE) {
+ vi = vm->m_area.index(x, node_max.Y + 1, z);
+ content_t c_max = vm->m_data[vi].getContent();
+
+ if (c_max == CONTENT_AIR)
+ y_start = node_max.Y;
+ else
+ continue;
+ } else {
+ continue;
+ }
+
+ vi = vm->m_area.index(x, y_start, z);
+ for (s16 y = y_start; y >= node_min.Y - 1; y--) {
+ if (vm->m_data[vi].getContent() != CONTENT_AIR)
+ break;
+
+ vm->m_area.add_y(em, vi, -1);
+ }
+
+ content_t c = vm->m_data[vi].getContent();
+ if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE && c != biome->c_dust) {
+ vm->m_area.add_y(em, vi, 1);
+ vm->m_data[vi] = MapNode(biome->c_dust);
+ }
+ }
+}
+
+
+void MapgenValleys::generateCaves(s16 max_stone_y)
+{
+ if (max_stone_y < node_min.Y)
+ return;
+
+ noise_cave1->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+ noise_cave2->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ PseudoRandom ps(blockseed + 72202);
+
+ MapNode n_air(CONTENT_AIR);
+ MapNode n_lava(c_lava_source);
+ MapNode n_water(c_river_water_source);
+
+ v3s16 em = vm->m_area.getExtent();
+
+ // Cave blend distance near YMIN, YMAX
+ const float massive_cave_blend = 128.f;
+ // noise threshold for massive caves
+ const float massive_cave_threshold = 0.6f;
+ // mct: 1 = small rare caves, 0.5 1/3rd ground volume, 0 = 1/2 ground volume.
+
+ float yblmin = -map_gen_limit + massive_cave_blend * 1.5f;
+ float yblmax = massive_cave_depth - massive_cave_blend * 1.5f;
+ bool made_a_big_one = false;
+
+ // Cache the tcave values as they only vary by altitude.
+ if (node_max.Y <= massive_cave_depth) {
+ noise_massive_caves->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ for (s16 y = node_min.Y - 1; y <= node_max.Y; y++) {
+ float tcave = massive_cave_threshold;
+
+ if (y < yblmin) {
+ float t = (yblmin - y) / massive_cave_blend;
+ tcave += MYSQUARE(t);
+ } else if (y > yblmax) {
+ float t = (y - yblmax) / massive_cave_blend;
+ tcave += MYSQUARE(t);
+ }
+
+ tcave_cache[y - node_min.Y + 1] = tcave;
+ }
+ }
+
+ // lava_depth varies between one and ten as you approach
+ // the bottom of the world.
+ s16 lava_depth = ceil((lava_max_height - node_min.Y + 1) * 10.f / map_gen_limit);
+ // This allows random lava spawns to be less common at the surface.
+ s16 lava_chance = MYCUBE(lava_features_lim) * lava_depth;
+ // water_depth varies between ten and one on the way down.
+ s16 water_depth = ceil((map_gen_limit - abs(node_min.Y) + 1) * 10.f / map_gen_limit);
+ // This allows random water spawns to be more common at the surface.
+ s16 water_chance = MYCUBE(water_features_lim) * water_depth;
+
+ // Reduce the odds of overflows even further.
+ if (node_max.Y > water_level) {
+ lava_chance /= 3;
+ water_chance /= 3;
+ }
+
+ u32 index_2d = 0;
+ for (s16 z = node_min.Z; z <= node_max.Z; z++)
+ for (s16 x = node_min.X; x <= node_max.X; x++, index_2d++) {
+ Biome *biome = (Biome *)bmgr->getRaw(biomemap[index_2d]);
+ bool tunnel_air_above = false;
+ bool underground = false;
+ u32 index_data = vm->m_area.index(x, node_max.Y, z);
+ u32 index_3d = (z - node_min.Z) * zstride_1d + csize.Y * ystride + (x - node_min.X);
+
+ // Dig caves on down loop to check for air above.
+ // Don't excavate the overgenerated stone at node_max.Y + 1,
+ // this creates a 'roof' over the tunnel, preventing light in
+ // tunnels at mapchunk borders when generating mapchunks upwards.
+ // This 'roof' is removed when the mapchunk above is generated.
+ for (s16 y = node_max.Y; y >= node_min.Y - 1; y--,
+ index_3d -= ystride,
+ vm->m_area.add_y(em, index_data, -1)) {
+
+ float terrain = noise_terrain_height->result[index_2d];
+
+ // Saves some time.
+ if (y > terrain + 10)
+ continue;
+ else if (y < terrain - 40)
+ underground = true;
+
+ // Dig massive caves.
+ if (node_max.Y <= massive_cave_depth
+ && noise_massive_caves->result[index_3d]
+ > tcave_cache[y - node_min.Y + 1]) {
+ vm->m_data[index_data] = n_air;
+ made_a_big_one = true;
+ continue;
+ }
+
+ content_t c = vm->m_data[index_data].getContent();
+ float d1 = contour(noise_cave1->result[index_3d]);
+ float d2 = contour(noise_cave2->result[index_3d]);
+
+ // River water is not set as ground content
+ // in the default game. This can produce strange results
+ // when a tunnel undercuts a river. However, that's not for
+ // the mapgen to correct. Fix it in lua.
+
+ if (d1 * d2 > cave_width && ndef->get(c).is_ground_content) {
+ // in a tunnel
+ vm->m_data[index_data] = n_air;
+ tunnel_air_above = true;
+ } else if (c == biome->c_filler || c == biome->c_stone) {
+ if (tunnel_air_above) {
+ // at the tunnel floor
+ s16 sr = ps.range(0, 39);
+ u32 j = index_data;
+ vm->m_area.add_y(em, j, 1);
+
+ if (sr > terrain - y) {
+ // Put dirt in tunnels near the surface.
+ if (underground)
+ vm->m_data[index_data] = MapNode(biome->c_filler);
+ else
+ vm->m_data[index_data] = MapNode(biome->c_top);
+ } else if (sr < 3 && underground) {
+ sr = abs(ps.next());
+ if (lava_features_lim > 0 && y <= lava_max_height
+ && c == biome->c_stone && sr < lava_chance)
+ vm->m_data[j] = n_lava;
+
+ sr -= lava_chance;
+
+ // If sr < 0 then we should have already placed lava --
+ // don't immediately dump water on it.
+ if (water_features_lim > 0 && y <= cave_water_max_height
+ && sr >= 0 && sr < water_chance)
+ vm->m_data[j] = n_water;
+ }
+ }
+
+ tunnel_air_above = false;
+ underground = true;
+ } else {
+ tunnel_air_above = false;
+ }
+ }
+ }
+
+ if (node_max.Y <= large_cave_depth && !made_a_big_one) {
+ u32 bruises_count = ps.range(0, 2);
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV5 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
+ }
+ }
+}
diff --git a/src/mapgen_valleys.h b/src/mapgen_valleys.h
new file mode 100644
index 000000000..5224ea54b
--- /dev/null
+++ b/src/mapgen_valleys.h
@@ -0,0 +1,187 @@
+/*
+Minetest Valleys C
+Copyright (C) 2010-2015 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+Copyright (C) 2010-2015 paramat, Matt Gregory
+Copyright (C) 2016 Duane Robertson <duane@duanerobertson.com>
+
+Based on Valleys Mapgen by Gael de Sailly
+ (https://forum.minetest.net/viewtopic.php?f=9&t=11430)
+and mapgen_v7 by kwolekr and paramat.
+
+Licensing changed by permission of Gael de Sailly.
+
+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.
+*/
+
+#ifndef MAPGEN_VALLEYS_HEADER
+#define MAPGEN_VALLEYS_HEADER
+
+#include "mapgen.h"
+
+////////////// Mapgen Valleys flags
+#define MGVALLEYS_ALT_CHILL 0x01
+#define MGVALLEYS_HUMID_RIVERS 0x02
+
+// Feed only one variable into these.
+#define MYSQUARE(x) (x) * (x)
+#define MYCUBE(x) (x) * (x) * (x)
+
+class BiomeManager;
+
+// Global profiler
+//class Profiler;
+//extern Profiler *mapgen_profiler;
+
+
+struct MapgenValleysParams : public MapgenSpecificParams {
+ u32 spflags;
+ s16 large_cave_depth;
+ s16 massive_cave_depth;
+ u16 altitude_chill;
+ u16 lava_features;
+ u16 river_depth;
+ u16 river_size;
+ u16 water_features;
+ float cave_width;
+ NoiseParams np_cave1;
+ NoiseParams np_cave2;
+ NoiseParams np_filler_depth;
+ NoiseParams np_inter_valley_fill;
+ NoiseParams np_inter_valley_slope;
+ NoiseParams np_rivers;
+ NoiseParams np_massive_caves;
+ NoiseParams np_terrain_height;
+ NoiseParams np_valley_depth;
+ NoiseParams np_valley_profile;
+
+ MapgenValleysParams();
+ ~MapgenValleysParams() {}
+
+ void readParams(const Settings *settings);
+ void writeParams(Settings *settings) const;
+};
+
+struct TerrainNoise {
+ s16 x;
+ s16 z;
+ float terrain_height;
+ float *rivers;
+ float *valley;
+ float valley_profile;
+ float *slope;
+ float inter_valley_fill;
+};
+
+class MapgenValleys : public Mapgen {
+public:
+
+ MapgenValleys(int mapgenid, MapgenParams *params, EmergeManager *emerge);
+ ~MapgenValleys();
+
+ virtual void makeChunk(BlockMakeData *data);
+ int getSpawnLevelAtPoint(v2s16 p);
+
+ s16 large_cave_depth;
+
+private:
+ EmergeManager *m_emerge;
+ BiomeManager *bmgr;
+
+ int ystride;
+ int zstride;
+ int zstride_1d;
+
+ float map_gen_limit;
+
+ bool humid_rivers;
+ bool use_altitude_chill;
+ float humidity_adjust;
+ s16 cave_water_max_height;
+ s16 lava_max_height;
+
+ v3s16 node_min;
+ v3s16 node_max;
+ v3s16 full_node_min;
+ v3s16 full_node_max;
+
+ u32 spflags;
+ float altitude_chill;
+ s16 lava_features_lim;
+ s16 massive_cave_depth;
+ float river_depth_bed;
+ float river_size_factor;
+ float *tcave_cache;
+ s16 water_features_lim;
+ float cave_width;
+ Noise *noise_filler_depth;
+ Noise *noise_cave1;
+ Noise *noise_cave2;
+ Noise *noise_inter_valley_fill;
+ Noise *noise_inter_valley_slope;
+ Noise *noise_rivers;
+ Noise *noise_massive_caves;
+ Noise *noise_terrain_height;
+ Noise *noise_valley_depth;
+ Noise *noise_valley_profile;
+
+ Noise *noise_heat;
+ Noise *noise_heat_blend;
+ Noise *noise_humidity;
+ Noise *noise_humidity_blend;
+
+ content_t c_cobble;
+ content_t c_desert_stone;
+ content_t c_dirt;
+ content_t c_ice;
+ content_t c_lava_source;
+ content_t c_mossycobble;
+ content_t c_river_water_source;
+ content_t c_sand;
+ content_t c_sandstone;
+ content_t c_sandstonebrick;
+ content_t c_stair_cobble;
+ content_t c_stair_sandstonebrick;
+ content_t c_stone;
+ content_t c_water_source;
+
+ float terrainLevelAtPoint(s16 x, s16 z);
+
+ void calculateNoise();
+
+ virtual int generateTerrain();
+ float terrainLevelFromNoise(TerrainNoise *tn);
+ float adjustedTerrainLevelFromNoise(TerrainNoise *tn);
+
+ float humidityByTerrain(float humidity_base, float mount, float rivers, float valley);
+
+ MgStoneType generateBiomes(float *heat_map, float *humidity_map);
+ void dustTopNodes();
+
+ void generateCaves(s16 max_stone_y);
+};
+
+struct MapgenFactoryValleys : public MapgenFactory {
+ Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge)
+ {
+ return new MapgenValleys(mgid, params, emerge);
+ };
+
+ MapgenSpecificParams *createMapgenParams()
+ {
+ return new MapgenValleysParams();
+ };
+};
+
+#endif
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index fe9686f0d..eba47446d 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -159,16 +159,50 @@ v3s16 MapNode::getWallMountedDir(INodeDefManager *nodemgr) const
}
}
-void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) {
+void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot)
+{
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
if (cpt2 == CPT2_FACEDIR) {
- if (param2 >= 4)
- return;
-
- u8 newrot = param2 & 3;
- param2 &= ~3;
- param2 |= (newrot + rot) & 3;
+ static const u8 rotate_facedir[24 * 4] = {
+ // Table value = rotated facedir
+ // Columns: 0, 90, 180, 270 degrees rotation around vertical axis
+ // Rotation is anticlockwise as seen from above (+Y)
+
+ 0, 1, 2, 3, // Initial facedir 0 to 3
+ 1, 2, 3, 0,
+ 2, 3, 0, 1,
+ 3, 0, 1, 2,
+
+ 4, 13, 10, 19, // 4 to 7
+ 5, 14, 11, 16,
+ 6, 15, 8, 17,
+ 7, 12, 9, 18,
+
+ 8, 17, 6, 15, // 8 to 11
+ 9, 18, 7, 12,
+ 10, 19, 4, 13,
+ 11, 16, 5, 14,
+
+ 12, 9, 18, 7, // 12 to 15
+ 13, 10, 19, 4,
+ 14, 11, 16, 5,
+ 15, 8, 17, 6,
+
+ 16, 5, 14, 11, // 16 to 19
+ 17, 6, 15, 8,
+ 18, 7, 12, 9,
+ 19, 4, 13, 10,
+
+ 20, 23, 22, 21, // 20 to 23
+ 21, 20, 23, 22,
+ 22, 21, 20, 23,
+ 23, 22, 21, 20
+ };
+ u8 facedir = (param2 & 31) % 24;
+ u8 index = facedir * 4 + rot;
+ param2 &= ~31;
+ param2 |= rotate_facedir[index];
} else if (cpt2 == CPT2_WALLMOUNTED) {
u8 wmountface = (param2 & 7);
if (wmountface <= 1)
@@ -180,19 +214,19 @@ void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) {
}
}
-static std::vector<aabb3f> transformNodeBox(const MapNode &n,
- const NodeBox &nodebox, INodeDefManager *nodemgr)
+void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
+ INodeDefManager *nodemgr, std::vector<aabb3f> *p_boxes, u8 neighbors = 0)
{
- std::vector<aabb3f> boxes;
- if(nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED)
- {
+ std::vector<aabb3f> &boxes = *p_boxes;
+
+ if (nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED) {
const std::vector<aabb3f> &fixed = nodebox.fixed;
int facedir = n.getFaceDir(nodemgr);
u8 axisdir = facedir>>2;
facedir&=0x03;
for(std::vector<aabb3f>::const_iterator
i = fixed.begin();
- i != fixed.end(); i++)
+ i != fixed.end(); ++i)
{
aabb3f box = *i;
@@ -361,32 +395,71 @@ static std::vector<aabb3f> transformNodeBox(const MapNode &n,
boxes.push_back(box);
}
}
+ else if (nodebox.type == NODEBOX_CONNECTED)
+ {
+ size_t boxes_size = boxes.size();
+ boxes_size += nodebox.fixed.size();
+ if (neighbors & 1)
+ boxes_size += nodebox.connect_top.size();
+ if (neighbors & 2)
+ boxes_size += nodebox.connect_bottom.size();
+ if (neighbors & 4)
+ boxes_size += nodebox.connect_front.size();
+ if (neighbors & 8)
+ boxes_size += nodebox.connect_left.size();
+ if (neighbors & 16)
+ boxes_size += nodebox.connect_back.size();
+ if (neighbors & 32)
+ boxes_size += nodebox.connect_right.size();
+ boxes.reserve(boxes_size);
+
+#define BOXESPUSHBACK(c) do { \
+ for (std::vector<aabb3f>::const_iterator \
+ it = (c).begin(); \
+ it != (c).end(); ++it) \
+ (boxes).push_back(*it); \
+ } while (0)
+
+ BOXESPUSHBACK(nodebox.fixed);
+
+ if (neighbors & 1)
+ BOXESPUSHBACK(nodebox.connect_top);
+ if (neighbors & 2)
+ BOXESPUSHBACK(nodebox.connect_bottom);
+ if (neighbors & 4)
+ BOXESPUSHBACK(nodebox.connect_front);
+ if (neighbors & 8)
+ BOXESPUSHBACK(nodebox.connect_left);
+ if (neighbors & 16)
+ BOXESPUSHBACK(nodebox.connect_back);
+ if (neighbors & 32)
+ BOXESPUSHBACK(nodebox.connect_right);
+ }
else // NODEBOX_REGULAR
{
boxes.push_back(aabb3f(-BS/2,-BS/2,-BS/2,BS/2,BS/2,BS/2));
}
- return boxes;
}
-std::vector<aabb3f> MapNode::getNodeBoxes(INodeDefManager *nodemgr) const
+void MapNode::getNodeBoxes(INodeDefManager *nodemgr, std::vector<aabb3f> *boxes, u8 neighbors)
{
const ContentFeatures &f = nodemgr->get(*this);
- return transformNodeBox(*this, f.node_box, nodemgr);
+ transformNodeBox(*this, f.node_box, nodemgr, boxes, neighbors);
}
-std::vector<aabb3f> MapNode::getCollisionBoxes(INodeDefManager *nodemgr) const
+void MapNode::getCollisionBoxes(INodeDefManager *nodemgr, std::vector<aabb3f> *boxes, u8 neighbors)
{
const ContentFeatures &f = nodemgr->get(*this);
if (f.collision_box.fixed.empty())
- return transformNodeBox(*this, f.node_box, nodemgr);
+ transformNodeBox(*this, f.node_box, nodemgr, boxes, neighbors);
else
- return transformNodeBox(*this, f.collision_box, nodemgr);
+ transformNodeBox(*this, f.collision_box, nodemgr, boxes, neighbors);
}
-std::vector<aabb3f> MapNode::getSelectionBoxes(INodeDefManager *nodemgr) const
+void MapNode::getSelectionBoxes(INodeDefManager *nodemgr, std::vector<aabb3f> *boxes, u8 neighbors)
{
const ContentFeatures &f = nodemgr->get(*this);
- return transformNodeBox(*this, f.selection_box, nodemgr);
+ transformNodeBox(*this, f.selection_box, nodemgr, boxes, neighbors);
}
u8 MapNode::getMaxLevel(INodeDefManager *nodemgr) const
diff --git a/src/mapnode.h b/src/mapnode.h
index 7cc25c60c..2f6224f02 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -240,17 +240,17 @@ struct MapNode
/*
Gets list of node boxes (used for rendering (NDT_NODEBOX))
*/
- std::vector<aabb3f> getNodeBoxes(INodeDefManager *nodemgr) const;
+ void getNodeBoxes(INodeDefManager *nodemgr, std::vector<aabb3f> *boxes, u8 neighbors = 0);
/*
Gets list of selection boxes
*/
- std::vector<aabb3f> getSelectionBoxes(INodeDefManager *nodemgr) const;
+ void getSelectionBoxes(INodeDefManager *nodemg, std::vector<aabb3f> *boxes, u8 neighbors = 0);
/*
Gets list of collision boxes
*/
- std::vector<aabb3f> getCollisionBoxes(INodeDefManager *nodemgr) const;
+ void getCollisionBoxes(INodeDefManager *nodemgr, std::vector<aabb3f> *boxes, u8 neighbors = 0);
/*
Liquid helpers
diff --git a/src/mapsector.cpp b/src/mapsector.cpp
index 9ce3c8eb3..1588a5962 100644
--- a/src/mapsector.cpp
+++ b/src/mapsector.cpp
@@ -220,7 +220,7 @@ ServerMapSector* ServerMapSector::deSerialize(
if(n != sectors.end())
{
- dstream<<"WARNING: deSerializing existent sectors not supported "
+ warningstream<<"deSerializing existent sectors not supported "
"at the moment, because code hasn't been tested."
<<std::endl;
diff --git a/src/mesh.cpp b/src/mesh.cpp
index dab1575f3..b5bf8660a 100644
--- a/src/mesh.cpp
+++ b/src/mesh.cpp
@@ -104,7 +104,7 @@ void scaleMesh(scene::IMesh *mesh, v3f scale)
if (mesh == NULL)
return;
- core::aabbox3d<f32> bbox;
+ aabb3f bbox;
bbox.reset(0, 0, 0);
u32 mc = mesh->getMeshBufferCount();
@@ -132,7 +132,7 @@ void translateMesh(scene::IMesh *mesh, v3f vec)
if (mesh == NULL)
return;
- core::aabbox3d<f32> bbox;
+ aabb3f bbox;
bbox.reset(0, 0, 0);
u32 mc = mesh->getMeshBufferCount();
@@ -206,146 +206,139 @@ void setMeshColorByNormalXYZ(scene::IMesh *mesh,
const video::SColor &colorY,
const video::SColor &colorZ)
{
- if(mesh == NULL)
+ if (mesh == NULL)
return;
-
+
u16 mc = mesh->getMeshBufferCount();
- for(u16 j=0; j<mc; j++)
- {
+ for (u16 j = 0; j < mc; j++) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 vc = buf->getVertexCount();
- for(u16 i=0; i<vc; i++)
- {
- f32 x = fabs(vertices[i].Normal.X);
- f32 y = fabs(vertices[i].Normal.Y);
- f32 z = fabs(vertices[i].Normal.Z);
- if(x >= y && x >= z)
- vertices[i].Color = colorX;
- else if(y >= z)
- vertices[i].Color = colorY;
+ const u32 stride = getVertexPitchFromType(buf->getVertexType());
+ u32 vertex_count = buf->getVertexCount();
+ u8 *vertices = (u8 *)buf->getVertices();
+ for (u32 i = 0; i < vertex_count; i++) {
+ video::S3DVertex *vertex = (video::S3DVertex *)(vertices + i * stride);
+ f32 x = fabs(vertex->Normal.X);
+ f32 y = fabs(vertex->Normal.Y);
+ f32 z = fabs(vertex->Normal.Z);
+ if (x >= y && x >= z)
+ vertex->Color = colorX;
+ else if (y >= z)
+ vertex->Color = colorY;
else
- vertices[i].Color = colorZ;
+ vertex->Color = colorZ;
}
}
}
-void rotateMeshXYby (scene::IMesh *mesh, f64 degrees)
-{
+void rotateMeshXYby(scene::IMesh *mesh, f64 degrees)
+{
u16 mc = mesh->getMeshBufferCount();
- for(u16 j = 0; j < mc; j++)
- {
+ for (u16 j = 0; j < mc; j++) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 vc = buf->getVertexCount();
- for(u16 i = 0; i < vc; i++)
- {
- vertices[i].Pos.rotateXYBy(degrees);
- }
+ const u32 stride = getVertexPitchFromType(buf->getVertexType());
+ u32 vertex_count = buf->getVertexCount();
+ u8 *vertices = (u8 *)buf->getVertices();
+ for (u32 i = 0; i < vertex_count; i++)
+ ((video::S3DVertex *)(vertices + i * stride))->Pos.rotateXYBy(degrees);
}
}
-void rotateMeshXZby (scene::IMesh *mesh, f64 degrees)
-{
+void rotateMeshXZby(scene::IMesh *mesh, f64 degrees)
+{
u16 mc = mesh->getMeshBufferCount();
- for(u16 j = 0; j < mc; j++)
- {
+ for (u16 j = 0; j < mc; j++) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 vc = buf->getVertexCount();
- for(u16 i = 0; i < vc; i++)
- {
- vertices[i].Pos.rotateXZBy(degrees);
- }
+ const u32 stride = getVertexPitchFromType(buf->getVertexType());
+ u32 vertex_count = buf->getVertexCount();
+ u8 *vertices = (u8 *)buf->getVertices();
+ for (u32 i = 0; i < vertex_count; i++)
+ ((video::S3DVertex *)(vertices + i * stride))->Pos.rotateXZBy(degrees);
}
}
-void rotateMeshYZby (scene::IMesh *mesh, f64 degrees)
-{
+void rotateMeshYZby(scene::IMesh *mesh, f64 degrees)
+{
u16 mc = mesh->getMeshBufferCount();
- for(u16 j = 0; j < mc; j++)
- {
+ for (u16 j = 0; j < mc; j++) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 vc = buf->getVertexCount();
- for(u16 i = 0; i < vc; i++)
- {
- vertices[i].Pos.rotateYZBy(degrees);
- }
+ const u32 stride = getVertexPitchFromType(buf->getVertexType());
+ u32 vertex_count = buf->getVertexCount();
+ u8 *vertices = (u8 *)buf->getVertices();
+ for (u32 i = 0; i < vertex_count; i++)
+ ((video::S3DVertex *)(vertices + i * stride))->Pos.rotateYZBy(degrees);
}
}
void rotateMeshBy6dFacedir(scene::IMesh *mesh, int facedir)
-{
- int axisdir = facedir>>2;
+{
+ int axisdir = facedir >> 2;
facedir &= 0x03;
u16 mc = mesh->getMeshBufferCount();
- for(u16 j = 0; j < mc; j++)
- {
+ for (u16 j = 0; j < mc; j++) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 vc = buf->getVertexCount();
- for(u16 i=0; i<vc; i++)
- {
- switch (axisdir)
- {
- case 0:
- if(facedir == 1)
- vertices[i].Pos.rotateXZBy(-90);
- else if(facedir == 2)
- vertices[i].Pos.rotateXZBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateXZBy(90);
- break;
- case 1: // z+
- vertices[i].Pos.rotateYZBy(90);
- if(facedir == 1)
- vertices[i].Pos.rotateXYBy(90);
- else if(facedir == 2)
- vertices[i].Pos.rotateXYBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateXYBy(-90);
- break;
- case 2: //z-
- vertices[i].Pos.rotateYZBy(-90);
- if(facedir == 1)
- vertices[i].Pos.rotateXYBy(-90);
- else if(facedir == 2)
- vertices[i].Pos.rotateXYBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateXYBy(90);
- break;
- case 3: //x+
- vertices[i].Pos.rotateXYBy(-90);
- if(facedir == 1)
- vertices[i].Pos.rotateYZBy(90);
- else if(facedir == 2)
- vertices[i].Pos.rotateYZBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateYZBy(-90);
- break;
- case 4: //x-
- vertices[i].Pos.rotateXYBy(90);
- if(facedir == 1)
- vertices[i].Pos.rotateYZBy(-90);
- else if(facedir == 2)
- vertices[i].Pos.rotateYZBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateYZBy(90);
- break;
- case 5:
- vertices[i].Pos.rotateXYBy(-180);
- if(facedir == 1)
- vertices[i].Pos.rotateXZBy(90);
- else if(facedir == 2)
- vertices[i].Pos.rotateXZBy(180);
- else if(facedir == 3)
- vertices[i].Pos.rotateXZBy(-90);
- break;
- default:
- break;
+ const u32 stride = getVertexPitchFromType(buf->getVertexType());
+ u32 vertex_count = buf->getVertexCount();
+ u8 *vertices = (u8 *)buf->getVertices();
+ for (u32 i = 0; i < vertex_count; i++) {
+ video::S3DVertex *vertex = (video::S3DVertex *)(vertices + i * stride);
+ switch (axisdir) {
+ case 0:
+ if (facedir == 1)
+ vertex->Pos.rotateXZBy(-90);
+ else if (facedir == 2)
+ vertex->Pos.rotateXZBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateXZBy(90);
+ break;
+ case 1: // z+
+ vertex->Pos.rotateYZBy(90);
+ if (facedir == 1)
+ vertex->Pos.rotateXYBy(90);
+ else if (facedir == 2)
+ vertex->Pos.rotateXYBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateXYBy(-90);
+ break;
+ case 2: //z-
+ vertex->Pos.rotateYZBy(-90);
+ if (facedir == 1)
+ vertex->Pos.rotateXYBy(-90);
+ else if (facedir == 2)
+ vertex->Pos.rotateXYBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateXYBy(90);
+ break;
+ case 3: //x+
+ vertex->Pos.rotateXYBy(-90);
+ if (facedir == 1)
+ vertex->Pos.rotateYZBy(90);
+ else if (facedir == 2)
+ vertex->Pos.rotateYZBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateYZBy(-90);
+ break;
+ case 4: //x-
+ vertex->Pos.rotateXYBy(90);
+ if (facedir == 1)
+ vertex->Pos.rotateYZBy(-90);
+ else if (facedir == 2)
+ vertex->Pos.rotateYZBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateYZBy(90);
+ break;
+ case 5:
+ vertex->Pos.rotateXYBy(-180);
+ if (facedir == 1)
+ vertex->Pos.rotateXZBy(90);
+ else if (facedir == 2)
+ vertex->Pos.rotateXZBy(180);
+ else if (facedir == 3)
+ vertex->Pos.rotateXZBy(-90);
+ break;
+ default:
+ break;
}
}
}
@@ -353,13 +346,12 @@ void rotateMeshBy6dFacedir(scene::IMesh *mesh, int facedir)
void recalculateBoundingBox(scene::IMesh *src_mesh)
{
- core::aabbox3d<f32> bbox;
+ aabb3f bbox;
bbox.reset(0,0,0);
- for(u16 j = 0; j < src_mesh->getMeshBufferCount(); j++)
- {
+ for (u16 j = 0; j < src_mesh->getMeshBufferCount(); j++) {
scene::IMeshBuffer *buf = src_mesh->getMeshBuffer(j);
buf->recalculateBoundingBox();
- if(j == 0)
+ if (j == 0)
bbox = buf->getBoundingBox();
else
bbox.addInternalBox(buf->getBoundingBox());
@@ -370,23 +362,54 @@ void recalculateBoundingBox(scene::IMesh *src_mesh)
scene::IMesh* cloneMesh(scene::IMesh *src_mesh)
{
scene::SMesh* dst_mesh = new scene::SMesh();
- for(u16 j = 0; j < src_mesh->getMeshBufferCount(); j++)
- {
+ for (u16 j = 0; j < src_mesh->getMeshBufferCount(); j++) {
scene::IMeshBuffer *buf = src_mesh->getMeshBuffer(j);
- video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices();
- u16 *indices = (u16*)buf->getIndices();
- scene::SMeshBuffer *temp_buf = new scene::SMeshBuffer();
- temp_buf->append(vertices, buf->getVertexCount(),
- indices, buf->getIndexCount());
- dst_mesh->addMeshBuffer(temp_buf);
- temp_buf->drop();
+ switch (buf->getVertexType()) {
+ case video::EVT_STANDARD: {
+ video::S3DVertex *v =
+ (video::S3DVertex *) buf->getVertices();
+ u16 *indices = (u16*)buf->getIndices();
+ scene::SMeshBuffer *temp_buf = new scene::SMeshBuffer();
+ temp_buf->append(v, buf->getVertexCount(),
+ indices, buf->getIndexCount());
+ dst_mesh->addMeshBuffer(temp_buf);
+ temp_buf->drop();
+ break;
+ }
+ case video::EVT_2TCOORDS: {
+ video::S3DVertex2TCoords *v =
+ (video::S3DVertex2TCoords *) buf->getVertices();
+ u16 *indices = (u16*)buf->getIndices();
+ scene::SMeshBufferTangents *temp_buf =
+ new scene::SMeshBufferTangents();
+ temp_buf->append(v, buf->getVertexCount(),
+ indices, buf->getIndexCount());
+ dst_mesh->addMeshBuffer(temp_buf);
+ temp_buf->drop();
+ break;
+ }
+ case video::EVT_TANGENTS: {
+ video::S3DVertexTangents *v =
+ (video::S3DVertexTangents *) buf->getVertices();
+ u16 *indices = (u16*)buf->getIndices();
+ scene::SMeshBufferTangents *temp_buf =
+ new scene::SMeshBufferTangents();
+ temp_buf->append(v, buf->getVertexCount(),
+ indices, buf->getIndexCount());
+ dst_mesh->addMeshBuffer(temp_buf);
+ temp_buf->drop();
+ break;
+ }
+ }
}
- return dst_mesh;
+ return dst_mesh;
}
-scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f)
+scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
+ const f32 *uv_coords, float expand)
{
scene::SMesh* dst_mesh = new scene::SMesh();
+
for (u16 j = 0; j < 6; j++)
{
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
@@ -395,57 +418,49 @@ scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f)
dst_mesh->addMeshBuffer(buf);
buf->drop();
}
-
+
video::SColor c(255,255,255,255);
- std::vector<aabb3f> boxes = f->node_box.fixed;
-
- for(std::vector<aabb3f>::iterator
+ for (std::vector<aabb3f>::const_iterator
i = boxes.begin();
- i != boxes.end(); i++)
+ i != boxes.end(); ++i)
{
aabb3f box = *i;
-
- f32 temp;
- if (box.MinEdge.X > box.MaxEdge.X)
- {
- temp=box.MinEdge.X;
- box.MinEdge.X=box.MaxEdge.X;
- box.MaxEdge.X=temp;
- }
- if (box.MinEdge.Y > box.MaxEdge.Y)
- {
- temp=box.MinEdge.Y;
- box.MinEdge.Y=box.MaxEdge.Y;
- box.MaxEdge.Y=temp;
- }
- if (box.MinEdge.Z > box.MaxEdge.Z)
- {
- temp=box.MinEdge.Z;
- box.MinEdge.Z=box.MaxEdge.Z;
- box.MaxEdge.Z=temp;
- }
- // Compute texture coords
- f32 tx1 = (box.MinEdge.X/BS)+0.5;
- f32 ty1 = (box.MinEdge.Y/BS)+0.5;
- f32 tz1 = (box.MinEdge.Z/BS)+0.5;
- f32 tx2 = (box.MaxEdge.X/BS)+0.5;
- f32 ty2 = (box.MaxEdge.Y/BS)+0.5;
- f32 tz2 = (box.MaxEdge.Z/BS)+0.5;
- f32 txc[24] = {
+ box.repair();
+
+ box.MinEdge.X -= expand;
+ box.MinEdge.Y -= expand;
+ box.MinEdge.Z -= expand;
+ box.MaxEdge.X += expand;
+ box.MaxEdge.Y += expand;
+ box.MaxEdge.Z += expand;
+
+ // Compute texture UV coords
+ f32 tx1 = (box.MinEdge.X / BS) + 0.5;
+ f32 ty1 = (box.MinEdge.Y / BS) + 0.5;
+ f32 tz1 = (box.MinEdge.Z / BS) + 0.5;
+ f32 tx2 = (box.MaxEdge.X / BS) + 0.5;
+ f32 ty2 = (box.MaxEdge.Y / BS) + 0.5;
+ f32 tz2 = (box.MaxEdge.Z / BS) + 0.5;
+
+ f32 txc_default[24] = {
// up
- tx1, 1-tz2, tx2, 1-tz1,
+ tx1, 1 - tz2, tx2, 1 - tz1,
// down
tx1, tz1, tx2, tz2,
// right
- tz1, 1-ty2, tz2, 1-ty1,
+ tz1, 1 - ty2, tz2, 1 - ty1,
// left
- 1-tz2, 1-ty2, 1-tz1, 1-ty1,
+ 1 - tz2, 1 - ty2, 1 - tz1, 1 - ty1,
// back
- 1-tx2, 1-ty2, 1-tx1, 1-ty1,
+ 1 - tx2, 1 - ty2, 1 - tx1, 1 - ty1,
// front
- tx1, 1-ty2, tx2, 1-ty1,
+ tx1, 1 - ty2, tx2, 1 - ty1,
};
+
+ // use default texture UV mapping if not provided
+ const f32 *txc = uv_coords ? uv_coords : txc_default;
+
v3f min = box.MinEdge;
v3f max = box.MaxEdge;
diff --git a/src/mesh.h b/src/mesh.h
index ec109e9e9..8e1893773 100644
--- a/src/mesh.h
+++ b/src/mesh.h
@@ -83,9 +83,13 @@ void rotateMeshYZby (scene::IMesh *mesh, f64 degrees);
scene::IMesh* cloneMesh(scene::IMesh *src_mesh);
/*
- Convert nodebox drawtype node to mesh.
+ Convert nodeboxes to mesh.
+ boxes - set of nodeboxes to be converted into cuboids
+ uv_coords[24] - table of texture uv coords for each cuboid face
+ expand - factor by which cuboids will be resized
*/
-scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f);
+scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
+ const f32 *uv_coords = NULL, float expand = 0);
/*
Update bounding box for a mesh.
diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp
index 055ce0198..9ab8d06cc 100644
--- a/src/mg_biome.cpp
+++ b/src/mg_biome.cpp
@@ -56,7 +56,7 @@ BiomeManager::BiomeManager(IGameDef *gamedef) :
b->m_nodenames.push_back("mapgen_water_source");
b->m_nodenames.push_back("mapgen_water_source");
b->m_nodenames.push_back("mapgen_river_water_source");
- b->m_nodenames.push_back("air");
+ b->m_nodenames.push_back("ignore");
m_ndef->pendNodeResolve(b);
add(b);
@@ -138,5 +138,5 @@ void Biome::resolveNodeNames()
getIdFromNrBacklog(&c_water_top, "mapgen_water_source", CONTENT_AIR);
getIdFromNrBacklog(&c_water, "mapgen_water_source", CONTENT_AIR);
getIdFromNrBacklog(&c_river_water, "mapgen_river_water_source", CONTENT_AIR);
- getIdFromNrBacklog(&c_dust, "air", CONTENT_IGNORE);
+ getIdFromNrBacklog(&c_dust, "ignore", CONTENT_IGNORE);
}
diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp
index 0d6693929..8b6abb5d5 100644
--- a/src/mg_decoration.cpp
+++ b/src/mg_decoration.cpp
@@ -30,6 +30,7 @@ FlagDesc flagdesc_deco[] = {
{"place_center_y", DECO_PLACE_CENTER_Y},
{"place_center_z", DECO_PLACE_CENTER_Z},
{"force_placement", DECO_FORCE_PLACEMENT},
+ {"liquid_surface", DECO_LIQUID_SURFACE},
{NULL, 0}
};
@@ -86,15 +87,13 @@ void Decoration::resolveNodeNames()
size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
{
- PseudoRandom ps(blockseed + 53);
+ PcgRandom ps(blockseed + 53);
int carea_size = nmax.X - nmin.X + 1;
// Divide area into parts
- if (carea_size % sidelen) {
- errorstream << "Decoration::placeDeco: chunk size is not divisible by "
- "sidelen; setting sidelen to " << carea_size << std::endl;
+ // If chunksize is changed it may no longer be divisable by sidelen
+ if (carea_size % sidelen)
sidelen = carea_size;
- }
s16 divlen = carea_size / sidelen;
int area = sidelen * sidelen;
@@ -118,7 +117,15 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
float nval = (flags & DECO_USE_NOISE) ?
NoisePerlin2D(&np, p2d_center.X, p2d_center.Y, mapseed) :
fill_ratio;
- u32 deco_count = area * MYMAX(nval, 0.f);
+ u32 deco_count = 0;
+ float deco_count_f = (float)area * nval;
+ if (deco_count_f >= 1.f) {
+ deco_count = deco_count_f;
+ } else if (deco_count_f > 0.f) {
+ // For low density decorations calculate a chance for 1 decoration
+ if (ps.range(1000) <= deco_count_f * 1000.f)
+ deco_count = 1;
+ }
for (u32 i = 0; i < deco_count; i++) {
s16 x = ps.range(p2d_min.X, p2d_max.X);
@@ -126,9 +133,13 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
int mapindex = carea_size * (z - nmin.Z) + (x - nmin.X);
- s16 y = mg->heightmap ?
- mg->heightmap[mapindex] :
- mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y);
+ s16 y = -MAX_MAP_GENERATION_LIMIT;
+ if (flags & DECO_LIQUID_SURFACE)
+ y = mg->findLiquidSurface(v2s16(x, z), nmin.Y, nmax.Y);
+ else if (mg->heightmap)
+ y = mg->heightmap[mapindex];
+ else
+ y = mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y);
if (y < nmin.Y || y > nmax.Y ||
y < y_min || y > y_max)
@@ -139,7 +150,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
#if 0
printf("Decoration at (%d %d %d) cut off\n", x, y, z);
//add to queue
- JMutexAutoLock cutofflock(cutoff_mutex);
+ MutexAutoLock cutofflock(cutoff_mutex);
cutoffs.push_back(CutoffData(x, y, z, height));
#endif
}
@@ -167,12 +178,12 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
#if 0
void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
{
- PseudoRandom pr(blockseed + 53);
+ PcgRandom pr(blockseed + 53);
std::vector<CutoffData> handled_cutoffs;
// Copy over the cutoffs we're interested in so we don't needlessly hold a lock
{
- JMutexAutoLock cutofflock(cutoff_mutex);
+ MutexAutoLock cutofflock(cutoff_mutex);
for (std::list<CutoffData>::iterator i = cutoffs.begin();
i != cutoffs.end(); ++i) {
CutoffData cutoff = *i;
@@ -203,7 +214,7 @@ void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
// Remove cutoffs that were handled from the cutoff list
{
- JMutexAutoLock cutofflock(cutoff_mutex);
+ MutexAutoLock cutofflock(cutoff_mutex);
for (std::list<CutoffData>::iterator i = cutoffs.begin();
i != cutoffs.end(); ++i) {
@@ -283,7 +294,7 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p)
}
-size_t DecoSimple::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
+size_t DecoSimple::generate(MMVManip *vm, PcgRandom *pr, v3s16 p)
{
if (!canPlaceDecoration(vm, p))
return 0;
@@ -293,13 +304,16 @@ size_t DecoSimple::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
s16 height = (deco_height_max > 0) ?
pr->range(deco_height, deco_height_max) : deco_height;
+ bool force_placement = (flags & DECO_FORCE_PLACEMENT);
+
v3s16 em = vm->m_area.getExtent();
u32 vi = vm->m_area.index(p);
for (int i = 0; i < height; i++) {
vm->m_area.add_y(em, vi, 1);
content_t c = vm->m_data[vi].getContent();
- if (c != CONTENT_AIR && c != CONTENT_IGNORE)
+ if (c != CONTENT_AIR && c != CONTENT_IGNORE &&
+ !force_placement)
break;
vm->m_data[vi] = MapNode(c_place);
@@ -324,7 +338,7 @@ DecoSchematic::DecoSchematic()
}
-size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
+size_t DecoSchematic::generate(MMVManip *vm, PcgRandom *pr, v3s16 p)
{
// Schematic could have been unloaded but not the decoration
// In this case generate() does nothing (but doesn't *fail*)
@@ -348,7 +362,7 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
bool force_placement = (flags & DECO_FORCE_PLACEMENT);
- schematic->blitToVManip(p, vm, rot, force_placement);
+ schematic->blitToVManip(vm, p, rot, force_placement);
return 1;
}
diff --git a/src/mg_decoration.h b/src/mg_decoration.h
index 056748918..ba3e9d3b2 100644
--- a/src/mg_decoration.h
+++ b/src/mg_decoration.h
@@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class Mapgen;
class MMVManip;
-class PseudoRandom;
+class PcgRandom;
class Schematic;
enum DecorationType {
@@ -41,6 +41,7 @@ enum DecorationType {
#define DECO_PLACE_CENTER_Z 0x04
#define DECO_USE_NOISE 0x08
#define DECO_FORCE_PLACEMENT 0x10
+#define DECO_LIQUID_SURFACE 0x20
extern FlagDesc flagdesc_deco[];
@@ -70,7 +71,7 @@ public:
size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
//size_t placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
- virtual size_t generate(MMVManip *vm, PseudoRandom *pr, v3s16 p) = 0;
+ virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p) = 0;
virtual int getHeight() = 0;
u32 flags;
@@ -84,12 +85,12 @@ public:
std::set<u8> biomes;
//std::list<CutoffData> cutoffs;
- //JMutex cutoff_mutex;
+ //Mutex cutoff_mutex;
};
class DecoSimple : public Decoration {
public:
- virtual size_t generate(MMVManip *vm, PseudoRandom *pr, v3s16 p);
+ virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
bool canPlaceDecoration(MMVManip *vm, v3s16 p);
virtual int getHeight();
@@ -106,7 +107,7 @@ class DecoSchematic : public Decoration {
public:
DecoSchematic();
- virtual size_t generate(MMVManip *vm, PseudoRandom *pr, v3s16 p);
+ virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
virtual int getHeight();
Rotation rotation;
diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp
index a94d1d6d9..257901614 100644
--- a/src/mg_ore.cpp
+++ b/src/mg_ore.cpp
@@ -25,8 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
FlagDesc flagdesc_ore[] = {
- {"absheight", OREFLAG_ABSHEIGHT},
- {NULL, 0}
+ {"absheight", OREFLAG_ABSHEIGHT},
+ {"puff_cliffs", OREFLAG_PUFF_CLIFFS},
+ {"puff_additive_composition", OREFLAG_PUFF_ADDITIVE},
+ {NULL, 0}
};
@@ -124,7 +126,7 @@ size_t Ore::placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
- PseudoRandom pr(blockseed);
+ PcgRandom pr(blockseed);
MapNode n_ore(c_ore, 0, ore_param2);
u32 sizex = (nmax.X - nmin.X + 1);
@@ -132,7 +134,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
(nmax.Y - nmin.Y + 1) *
(nmax.Z - nmin.Z + 1);
u32 csize = clust_size;
- u32 orechance = (csize * csize * csize) / clust_num_ores;
+ u32 cvolume = csize * csize * csize;
u32 nclusters = volume / clust_scarcity;
for (u32 i = 0; i != nclusters; i++) {
@@ -154,7 +156,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
for (u32 z1 = 0; z1 != csize; z1++)
for (u32 y1 = 0; y1 != csize; y1++)
for (u32 x1 = 0; x1 != csize; x1++) {
- if (pr.range(1, orechance) != 1)
+ if (pr.range(1, cvolume) > clust_num_ores)
continue;
u32 i = vm->m_area.index(x0 + x1, y0 + y1, z0 + z1);
@@ -173,11 +175,16 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
- PseudoRandom pr(blockseed + 4234);
+ PcgRandom pr(blockseed + 4234);
MapNode n_ore(c_ore, 0, ore_param2);
- int max_height = clust_size;
- int y_start = pr.range(nmin.Y, nmax.Y - max_height);
+ u16 max_height = column_height_max;
+ int y_start_min = nmin.Y + max_height;
+ int y_start_max = nmax.Y - max_height;
+
+ int y_start = y_start_min < y_start_max ?
+ pr.range(y_start_min, y_start_max) :
+ (y_start_min + y_start_max) / 2;
if (!noise) {
int sx = nmax.X - nmin.X + 1;
@@ -200,10 +207,12 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
continue;
}
- int height = max_height * (1. / pr.range(1, 3));
- int y0 = y_start + np.scale * noiseval; //pr.range(1, 3) - 1;
- int y1 = y0 + height;
- for (int y = y0; y != y1; y++) {
+ u16 height = pr.range(column_height_min, column_height_max);
+ int ymidpoint = y_start + noiseval;
+ int y0 = MYMAX(nmin.Y, ymidpoint - height * (1 - column_midpoint_factor));
+ int y1 = MYMIN(nmax.Y, y0 + height - 1);
+
+ for (int y = y0; y <= y1; y++) {
u32 i = vm->m_area.index(x, y, z);
if (!vm->m_area.contains(i))
continue;
@@ -218,10 +227,98 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
+OrePuff::OrePuff() :
+ Ore()
+{
+ noise_puff_top = NULL;
+ noise_puff_bottom = NULL;
+}
+
+
+OrePuff::~OrePuff()
+{
+ delete noise_puff_top;
+ delete noise_puff_bottom;
+}
+
+
+void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
+ v3s16 nmin, v3s16 nmax, u8 *biomemap)
+{
+ PcgRandom pr(blockseed + 4234);
+ MapNode n_ore(c_ore, 0, ore_param2);
+
+ int y_start = pr.range(nmin.Y, nmax.Y);
+
+ if (!noise) {
+ int sx = nmax.X - nmin.X + 1;
+ int sz = nmax.Z - nmin.Z + 1;
+ noise = new Noise(&np, 0, sx, sz);
+ noise_puff_top = new Noise(&np_puff_top, 0, sx, sz);
+ noise_puff_bottom = new Noise(&np_puff_bottom, 0, sx, sz);
+ }
+
+ noise->seed = mapseed + y_start;
+ noise->perlinMap2D(nmin.X, nmin.Z);
+ bool noise_generated = false;
+
+ size_t index = 0;
+ for (int z = nmin.Z; z <= nmax.Z; z++)
+ for (int x = nmin.X; x <= nmax.X; x++, index++) {
+ float noiseval = noise->result[index];
+ if (noiseval < nthresh)
+ continue;
+
+ if (biomemap && !biomes.empty()) {
+ std::set<u8>::iterator it = biomes.find(biomemap[index]);
+ if (it == biomes.end())
+ continue;
+ }
+
+ if (!noise_generated) {
+ noise_generated = true;
+ noise_puff_top->perlinMap2D(nmin.X, nmin.Z);
+ noise_puff_bottom->perlinMap2D(nmin.X, nmin.Z);
+ }
+
+ float ntop = noise_puff_top->result[index];
+ float nbottom = noise_puff_bottom->result[index];
+
+ if (!(flags & OREFLAG_PUFF_CLIFFS)) {
+ float ndiff = noiseval - nthresh;
+ if (ndiff < 1.0f) {
+ ntop *= ndiff;
+ nbottom *= ndiff;
+ }
+ }
+
+ int ymid = y_start;
+ int y0 = ymid - nbottom;
+ int y1 = ymid + ntop;
+
+ if ((flags & OREFLAG_PUFF_ADDITIVE) && (y0 > y1))
+ SWAP(int, y0, y1);
+
+ for (int y = y0; y <= y1; y++) {
+ u32 i = vm->m_area.index(x, y, z);
+ if (!vm->m_area.contains(i))
+ continue;
+ if (!CONTAINS(c_wherein, vm->m_data[i].getContent()))
+ continue;
+
+ vm->m_data[i] = n_ore;
+ }
+ }
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
- PseudoRandom pr(blockseed + 2404);
+ PcgRandom pr(blockseed + 2404);
MapNode n_ore(c_ore, 0, ore_param2);
u32 sizex = (nmax.X - nmin.X + 1);
@@ -266,9 +363,9 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
float noiseval = noise->result[index];
- float xdist = x1 - csize / 2;
- float ydist = y1 - csize / 2;
- float zdist = z1 - csize / 2;
+ float xdist = (s32)x1 - (s32)csize / 2;
+ float ydist = (s32)y1 - (s32)csize / 2;
+ float zdist = (s32)z1 - (s32)csize / 2;
noiseval -= (sqrt(xdist * xdist + ydist * ydist + zdist * zdist) / csize);
@@ -283,7 +380,8 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
-OreVein::OreVein()
+OreVein::OreVein() :
+ Ore()
{
noise2 = NULL;
}
@@ -298,7 +396,7 @@ OreVein::~OreVein()
void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap)
{
- PseudoRandom pr(blockseed + 520);
+ PcgRandom pr(blockseed + 520);
MapNode n_ore(c_ore, 0, ore_param2);
u32 sizex = (nmax.X - nmin.X + 1);
diff --git a/src/mg_ore.h b/src/mg_ore.h
index ffe8cfe50..2e065cee3 100644
--- a/src/mg_ore.h
+++ b/src/mg_ore.h
@@ -30,17 +30,18 @@ class MMVManip;
/////////////////// Ore generation flags
-// Use absolute value of height to determine ore placement
-#define OREFLAG_ABSHEIGHT 0x01
-#define OREFLAG_USE_NOISE 0x08
+#define OREFLAG_ABSHEIGHT 0x01
+#define OREFLAG_PUFF_CLIFFS 0x02
+#define OREFLAG_PUFF_ADDITIVE 0x04
+#define OREFLAG_USE_NOISE 0x08
#define ORE_RANGE_ACTUAL 1
#define ORE_RANGE_MIRROR 2
-
enum OreType {
ORE_SCATTER,
ORE_SHEET,
+ ORE_PUFF,
ORE_BLOB,
ORE_VEIN,
};
@@ -60,7 +61,7 @@ public:
s16 y_max;
u8 ore_param2; // to set node-specific attributes
u32 flags; // attributes for this ore
- float nthresh; // threshhold for noise at which an ore is placed
+ float nthresh; // threshold for noise at which an ore is placed
NoiseParams np; // noise for distribution of clusters (NULL for uniform scattering)
Noise *noise;
std::set<u8> biomes;
@@ -87,6 +88,26 @@ class OreSheet : public Ore {
public:
static const bool NEEDS_NOISE = true;
+ u16 column_height_min;
+ u16 column_height_max;
+ float column_midpoint_factor;
+
+ virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
+ v3s16 nmin, v3s16 nmax, u8 *biomemap);
+};
+
+class OrePuff : public Ore {
+public:
+ static const bool NEEDS_NOISE = true;
+
+ NoiseParams np_puff_top;
+ NoiseParams np_puff_bottom;
+ Noise *noise_puff_top;
+ Noise *noise_puff_bottom;
+
+ OrePuff();
+ virtual ~OrePuff();
+
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, u8 *biomemap);
};
@@ -130,6 +151,8 @@ public:
return new OreScatter;
case ORE_SHEET:
return new OreSheet;
+ case ORE_PUFF:
+ return new OrePuff;
case ORE_BLOB:
return new OreBlob;
case ORE_VEIN:
diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp
index a5ffb20b8..0b95fa267 100644
--- a/src/mg_schematic.cpp
+++ b/src/mg_schematic.cpp
@@ -94,7 +94,7 @@ void Schematic::resolveNodeNames()
}
-void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_place)
+void Schematic::blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place)
{
sanity_check(m_ndef != NULL);
@@ -175,20 +175,52 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla
}
-void Schematic::placeStructure(Map *map, v3s16 p, u32 flags,
+bool Schematic::placeOnVManip(MMVManip *vm, v3s16 p, u32 flags,
Rotation rot, bool force_place)
{
- assert(schemdata != NULL); // Pre-condition
+ assert(vm != NULL);
+ assert(schemdata != NULL);
sanity_check(m_ndef != NULL);
- MMVManip *vm = new MMVManip(map);
+ //// Determine effective rotation and effective schematic dimensions
+ if (rot == ROTATE_RAND)
+ rot = (Rotation)myrand_range(ROTATE_0, ROTATE_270);
+
+ v3s16 s = (rot == ROTATE_90 || rot == ROTATE_270) ?
+ v3s16(size.Z, size.Y, size.X) : size;
+
+ //// Adjust placement position if necessary
+ if (flags & DECO_PLACE_CENTER_X)
+ p.X -= (s.X + 1) / 2;
+ if (flags & DECO_PLACE_CENTER_Y)
+ p.Y -= (s.Y + 1) / 2;
+ if (flags & DECO_PLACE_CENTER_Z)
+ p.Z -= (s.Z + 1) / 2;
+
+ blitToVManip(vm, p, rot, force_place);
+
+ return vm->m_area.contains(VoxelArea(p, p + s - v3s16(1,1,1)));
+}
+
+void Schematic::placeOnMap(Map *map, v3s16 p, u32 flags,
+ Rotation rot, bool force_place)
+{
+ std::map<v3s16, MapBlock *> lighting_modified_blocks;
+ std::map<v3s16, MapBlock *> modified_blocks;
+ std::map<v3s16, MapBlock *>::iterator it;
+ assert(map != NULL);
+ assert(schemdata != NULL);
+ sanity_check(m_ndef != NULL);
+
+ //// Determine effective rotation and effective schematic dimensions
if (rot == ROTATE_RAND)
rot = (Rotation)myrand_range(ROTATE_0, ROTATE_270);
v3s16 s = (rot == ROTATE_90 || rot == ROTATE_270) ?
- v3s16(size.Z, size.Y, size.X) : size;
+ v3s16(size.Z, size.Y, size.X) : size;
+ //// Adjust placement position if necessary
if (flags & DECO_PLACE_CENTER_X)
p.X -= (s.X + 1) / 2;
if (flags & DECO_PLACE_CENTER_Y)
@@ -196,25 +228,29 @@ void Schematic::placeStructure(Map *map, v3s16 p, u32 flags,
if (flags & DECO_PLACE_CENTER_Z)
p.Z -= (s.Z + 1) / 2;
+ //// Create VManip for effected area, emerge our area, modify area
+ //// inside VManip, then blit back.
v3s16 bp1 = getNodeBlockPos(p);
v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1));
- vm->initialEmerge(bp1, bp2);
- blitToVManip(p, vm, rot, force_place);
+ MMVManip vm(map);
+ vm.initialEmerge(bp1, bp2);
- std::map<v3s16, MapBlock *> lighting_modified_blocks;
- std::map<v3s16, MapBlock *> modified_blocks;
- vm->blitBackAll(&modified_blocks);
+ blitToVManip(&vm, p, rot, force_place);
+
+ vm.blitBackAll(&modified_blocks);
+ //// Carry out post-map-modification actions
+
+ //// Update lighting
// TODO: Optimize this by using Mapgen::calcLighting() instead
lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
map->updateLighting(lighting_modified_blocks, modified_blocks);
+ //// Create & dispatch map modification events to observers
MapEditEvent event;
event.type = MEET_OTHER;
- for (std::map<v3s16, MapBlock *>::iterator
- it = modified_blocks.begin();
- it != modified_blocks.end(); ++it)
+ for (it = modified_blocks.begin(); it != modified_blocks.end(); ++it)
event.modified_blocks.insert(it->first);
map->dispatchEvent(&event);
@@ -231,7 +267,7 @@ bool Schematic::deserializeFromMts(std::istream *is,
//// Read signature
u32 signature = readU32(ss);
if (signature != MTSCHEM_FILE_SIGNATURE) {
- errorstream << "Schematic::deserializeFromMts: invalid schematic "
+ errorstream << __FUNCTION__ << ": invalid schematic "
"file" << std::endl;
return false;
}
@@ -239,7 +275,7 @@ bool Schematic::deserializeFromMts(std::istream *is,
//// Read version
u16 version = readU16(ss);
if (version > MTSCHEM_FILE_VER_HIGHEST_READ) {
- errorstream << "Schematic::deserializeFromMts: unsupported schematic "
+ errorstream << __FUNCTION__ << ": unsupported schematic "
"file version" << std::endl;
return false;
}
@@ -403,7 +439,7 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
{
std::ifstream is(filename.c_str(), std::ios_base::binary);
if (!is.good()) {
- errorstream << "Schematic::loadSchematicFile: unable to open file '"
+ errorstream << __FUNCTION__ << ": unable to open file '"
<< filename << "'" << std::endl;
return false;
}
@@ -412,17 +448,19 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
if (!deserializeFromMts(&is, &m_nodenames))
return false;
+ m_nnlistsizes.push_back(m_nodenames.size() - origsize);
+
+ name = filename;
+
if (replace_names) {
- for (size_t i = origsize; i != m_nodenames.size(); i++) {
- std::string &name = m_nodenames[i];
- StringMap::iterator it = replace_names->find(name);
+ for (size_t i = origsize; i < m_nodenames.size(); i++) {
+ std::string &node_name = m_nodenames[i];
+ StringMap::iterator it = replace_names->find(node_name);
if (it != replace_names->end())
- name = it->second;
+ node_name = it->second;
}
}
- m_nnlistsizes.push_back(m_nodenames.size() - origsize);
-
if (ndef)
ndef->pendNodeResolve(this);
diff --git a/src/mg_schematic.h b/src/mg_schematic.h
index 5c732648e..da8859540 100644
--- a/src/mg_schematic.h
+++ b/src/mg_schematic.h
@@ -106,8 +106,9 @@ public:
bool serializeToLua(std::ostream *os, const std::vector<std::string> &names,
bool use_comments, u32 indent_spaces);
- void blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_place);
- void placeStructure(Map *map, v3s16 p, u32 flags, Rotation rot, bool force_place);
+ void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place);
+ bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place);
+ void placeOnMap(Map *map, v3s16 p, u32 flags, Rotation rot, bool force_place);
void applyProbabilities(v3s16 p0,
std::vector<std::pair<v3s16, u8> > *plist,
diff --git a/src/minimap.cpp b/src/minimap.cpp
index d1fb3867d..8cd0a7beb 100644
--- a/src/minimap.cpp
+++ b/src/minimap.cpp
@@ -18,16 +18,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "minimap.h"
-#include <math.h>
-#include "logoutputbuffer.h"
-#include "jthread/jmutexautolock.h"
-#include "jthread/jsemaphore.h"
+#include "threading/mutex_auto_lock.h"
+#include "threading/semaphore.h"
#include "clientmap.h"
#include "settings.h"
#include "nodedef.h"
#include "porting.h"
#include "util/numeric.h"
#include "util/string.h"
+#include <math.h>
////
@@ -52,7 +51,7 @@ MinimapUpdateThread::~MinimapUpdateThread()
bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data)
{
- JMutexAutoLock lock(m_queue_mutex);
+ MutexAutoLock lock(m_queue_mutex);
// Find if block is already in queue.
// If it is, update the data and quit.
@@ -78,7 +77,7 @@ bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data)
bool MinimapUpdateThread::popBlockUpdate(QueuedMinimapUpdate *update)
{
- JMutexAutoLock lock(m_queue_mutex);
+ MutexAutoLock lock(m_queue_mutex);
if (m_update_queue.empty())
return false;
@@ -212,11 +211,14 @@ void MinimapUpdateThread::getMap(v3s16 pos, s16 size, s16 height, bool is_radar)
Mapper::Mapper(IrrlichtDevice *device, Client *client)
{
+ this->client = client;
this->driver = device->getVideoDriver();
this->m_tsrc = client->getTextureSource();
this->m_shdrsrc = client->getShaderSource();
this->m_ndef = client->getNodeDefManager();
+ m_angle = 0.f;
+
// Initialize static settings
m_enable_shaders = g_settings->getBool("enable_shaders");
m_surface_mode_scan_height =
@@ -249,6 +251,8 @@ Mapper::Mapper(IrrlichtDevice *device, Client *client)
// Create player marker texture
data->player_marker = m_tsrc->getTexture("player_marker.png");
+ // Create object marker texture
+ data->object_marker_red = m_tsrc->getTexture("object_marker_red.png");
// Create mesh buffer for minimap
m_meshbuffer = getMinimapMeshBuffer();
@@ -256,13 +260,13 @@ Mapper::Mapper(IrrlichtDevice *device, Client *client)
// Initialize and start thread
m_minimap_update_thread = new MinimapUpdateThread();
m_minimap_update_thread->data = data;
- m_minimap_update_thread->Start();
+ m_minimap_update_thread->start();
}
Mapper::~Mapper()
{
- m_minimap_update_thread->Stop();
- m_minimap_update_thread->Wait();
+ m_minimap_update_thread->stop();
+ m_minimap_update_thread->wait();
m_meshbuffer->drop();
@@ -273,6 +277,7 @@ Mapper::~Mapper()
driver->removeTexture(data->heightmap_texture);
driver->removeTexture(data->minimap_overlay_round);
driver->removeTexture(data->minimap_overlay_square);
+ driver->removeTexture(data->object_marker_red);
delete data;
delete m_minimap_update_thread;
@@ -290,7 +295,7 @@ MinimapMode Mapper::getMinimapMode()
void Mapper::toggleMinimapShape()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
data->minimap_shape_round = !data->minimap_shape_round;
g_settings->setBool("minimap_shape_round", data->minimap_shape_round);
@@ -312,7 +317,7 @@ void Mapper::setMinimapMode(MinimapMode mode)
if (mode >= MINIMAP_MODE_COUNT)
return;
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
data->is_radar = modedefs[mode].is_radar;
data->scan_height = modedefs[mode].scan_height;
@@ -327,7 +332,7 @@ void Mapper::setPos(v3s16 pos)
bool do_update = false;
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
if (pos != data->old_pos) {
data->old_pos = data->pos;
@@ -467,6 +472,7 @@ void Mapper::drawMinimap()
if (!minimap_texture)
return;
+ updateActiveMarkers();
v2u32 screensize = porting::getWindowSize();
const u32 size = 0.25 * screensize.Y;
@@ -526,6 +532,70 @@ void Mapper::drawMinimap()
driver->setTransform(video::ETS_VIEW, oldViewMat);
driver->setTransform(video::ETS_PROJECTION, oldProjMat);
driver->setViewPort(oldViewPort);
+
+ // Draw player markers
+ v2s32 s_pos(screensize.X - size - 10, 10);
+ core::dimension2di imgsize(data->object_marker_red->getOriginalSize());
+ core::rect<s32> img_rect(0, 0, imgsize.Width, imgsize.Height);
+ static const video::SColor col(255, 255, 255, 255);
+ static const video::SColor c[4] = {col, col, col, col};
+ f32 sin_angle = sin(m_angle * core::DEGTORAD);
+ f32 cos_angle = cos(m_angle * core::DEGTORAD);
+ s32 marker_size2 = 0.025 * (float)size;
+ for (std::list<v2f>::const_iterator
+ i = m_active_markers.begin();
+ i != m_active_markers.end(); ++i) {
+ v2f posf = *i;
+ if (data->minimap_shape_round) {
+ f32 t1 = posf.X * cos_angle - posf.Y * sin_angle;
+ f32 t2 = posf.X * sin_angle + posf.Y * cos_angle;
+ posf.X = t1;
+ posf.Y = t2;
+ }
+ posf.X = (posf.X + 0.5) * (float)size;
+ posf.Y = (posf.Y + 0.5) * (float)size;
+ core::rect<s32> dest_rect(
+ s_pos.X + posf.X - marker_size2,
+ s_pos.Y + posf.Y - marker_size2,
+ s_pos.X + posf.X + marker_size2,
+ s_pos.Y + posf.Y + marker_size2);
+ driver->draw2DImage(data->object_marker_red, dest_rect,
+ img_rect, &dest_rect, &c[0], true);
+ }
+}
+
+void Mapper::updateActiveMarkers ()
+{
+ video::IImage *minimap_mask = data->minimap_shape_round ?
+ data->minimap_mask_round : data->minimap_mask_square;
+
+ std::list<Nametag *> *nametags = client->getCamera()->getNametags();
+
+ m_active_markers.clear();
+
+ for (std::list<Nametag *>::const_iterator
+ i = nametags->begin();
+ i != nametags->end(); ++i) {
+ Nametag *nametag = *i;
+ v3s16 pos = floatToInt(nametag->parent_node->getPosition() +
+ intToFloat(client->getCamera()->getOffset(), BS), BS);
+ pos -= data->pos - v3s16(data->map_size / 2,
+ data->scan_height / 2,
+ data->map_size / 2);
+ if (pos.X < 0 || pos.X > data->map_size ||
+ pos.Y < 0 || pos.Y > data->scan_height ||
+ pos.Z < 0 || pos.Z > data->map_size) {
+ continue;
+ }
+ pos.X = ((float)pos.X / data->map_size) * MINIMAP_MAX_SX;
+ pos.Z = ((float)pos.Z / data->map_size) * MINIMAP_MAX_SY;
+ video::SColor mask_col = minimap_mask->getPixel(pos.X, pos.Z);
+ if (!mask_col.getAlpha()) {
+ continue;
+ }
+ m_active_markers.push_back(v2f(((float)pos.X / (float)MINIMAP_MAX_SX) - 0.5,
+ (1.0 - (float)pos.Z / (float)MINIMAP_MAX_SY) - 0.5));
+ }
}
////
diff --git a/src/minimap.h b/src/minimap.h
index 628be7489..743b2bff2 100644
--- a/src/minimap.h
+++ b/src/minimap.h
@@ -20,18 +20,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef MINIMAP_HEADER
#define MINIMAP_HEADER
-#include <map>
-#include <string>
-#include <vector>
#include "irrlichttypes_extrabloated.h"
#include "client.h"
#include "voxel.h"
-#include "jthread/jmutex.h"
-#include "jthread/jsemaphore.h"
+#include "threading/mutex.h"
+#include "threading/semaphore.h"
+#include <map>
+#include <string>
+#include <vector>
+#include "camera.h"
#define MINIMAP_MAX_SX 512
#define MINIMAP_MAX_SY 512
+
enum MinimapMode {
MINIMAP_MODE_OFF,
MINIMAP_MODE_SURFACEx1,
@@ -81,6 +83,7 @@ struct MinimapData {
video::ITexture *minimap_overlay_round;
video::ITexture *minimap_overlay_square;
video::ITexture *player_marker;
+ video::ITexture *object_marker_red;
};
struct QueuedMinimapUpdate {
@@ -90,6 +93,7 @@ struct QueuedMinimapUpdate {
class MinimapUpdateThread : public UpdateThread {
public:
+ MinimapUpdateThread() : UpdateThread("Minimap") {}
virtual ~MinimapUpdateThread();
void getMap(v3s16 pos, s16 size, s16 height, bool radar);
@@ -105,11 +109,10 @@ public:
MinimapData *data;
protected:
- const char *getName() { return "MinimapUpdateThread"; }
virtual void doUpdate();
private:
- JMutex m_queue_mutex;
+ Mutex m_queue_mutex;
std::deque<QueuedMinimapUpdate> m_update_queue;
std::map<v3s16, MinimapMapblock *> m_blocks_cache;
};
@@ -137,9 +140,12 @@ public:
video::IImage *heightmap_image);
scene::SMeshBuffer *getMinimapMeshBuffer();
+
+ void updateActiveMarkers();
void drawMinimap();
video::IVideoDriver *driver;
+ Client* client;
MinimapData *data;
private:
@@ -151,7 +157,8 @@ private:
bool m_enable_shaders;
u16 m_surface_mode_scan_height;
f32 m_angle;
- JMutex m_mutex;
+ Mutex m_mutex;
+ std::list<v2f> m_active_markers;
};
#endif
diff --git a/src/modalMenu.h b/src/modalMenu.h
index 72ecedcb9..43bb8e1b8 100644
--- a/src/modalMenu.h
+++ b/src/modalMenu.h
@@ -31,8 +31,8 @@ class IMenuManager
{
public:
// A GUIModalMenu calls these when this class is passed as a parameter
- virtual void createdMenu(GUIModalMenu *menu) = 0;
- virtual void deletingMenu(GUIModalMenu *menu) = 0;
+ virtual void createdMenu(gui::IGUIElement *menu) = 0;
+ virtual void deletingMenu(gui::IGUIElement *menu) = 0;
};
/*
@@ -108,7 +108,7 @@ public:
this->remove();
#ifdef HAVE_TOUCHSCREENGUI
if (g_touchscreengui)
- g_touchscreengui->Show();
+ g_touchscreengui->show();
#endif
}
diff --git a/src/mods.cpp b/src/mods.cpp
index a81dd4604..1b1bdb07b 100644
--- a/src/mods.cpp
+++ b/src/mods.cpp
@@ -21,12 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <fstream>
#include "mods.h"
#include "filesys.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "log.h"
#include "subgame.h"
#include "settings.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "convert_json.h"
+#include "exceptions.h"
static bool parseDependsLine(std::istream &is,
std::string &dep, std::set<char> &symbols)
@@ -256,7 +257,7 @@ void ModConfiguration::addMods(std::vector<ModSpec> new_mods)
// BAD CASE: name conflict in different levels.
u32 oldindex = existing_mods[mod.name];
const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
- actionstream<<"WARNING: Mod name conflict detected: \""
+ warningstream<<"Mod name conflict detected: \""
<<mod.name<<"\""<<std::endl
<<"Will not load: "<<oldmod.path<<std::endl
<<"Overridden by: "<<mod.path<<std::endl;
@@ -270,7 +271,7 @@ void ModConfiguration::addMods(std::vector<ModSpec> new_mods)
// VERY BAD CASE: name conflict in the same level.
u32 oldindex = existing_mods[mod.name];
const ModSpec &oldmod = m_unsatisfied_mods[oldindex];
- errorstream<<"WARNING: Mod name conflict detected: \""
+ warningstream<<"Mod name conflict detected: \""
<<mod.name<<"\""<<std::endl
<<"Will not load: "<<oldmod.path<<std::endl
<<"Will not load: "<<mod.path<<std::endl;
diff --git a/src/mods.h b/src/mods.h
index f35bd18db..12576516d 100644
--- a/src/mods.h
+++ b/src/mods.h
@@ -26,29 +26,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include <string>
#include <map>
-#include <exception>
#include "json/json.h"
#include "config.h"
#define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_"
-class ModError : public std::exception
-{
-public:
- ModError(const std::string &s)
- {
- m_s = "ModError: ";
- m_s += s;
- }
- virtual ~ModError() throw()
- {}
- virtual const char * what() const throw()
- {
- return m_s.c_str();
- }
- std::string m_s;
-};
-
struct ModSpec
{
std::string name;
diff --git a/src/nameidmapping.cpp b/src/nameidmapping.cpp
index ebe65076e..ed59ddd16 100644
--- a/src/nameidmapping.cpp
+++ b/src/nameidmapping.cpp
@@ -27,7 +27,7 @@ void NameIdMapping::serialize(std::ostream &os) const
writeU16(os, m_id_to_name.size());
for(std::map<u16, std::string>::const_iterator
i = m_id_to_name.begin();
- i != m_id_to_name.end(); i++){
+ i != m_id_to_name.end(); ++i){
writeU16(os, i->first);
os<<serializeString(i->second);
}
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 86091bc88..0498f4048 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -24,10 +24,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "map.h"
#include "mapsector.h"
+#include "minimap.h"
#include "nodedef.h"
#include "serialization.h"
#include "server.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "network/clientopcodes.h"
#include "util/serialize.h"
#include "util/srp.h"
@@ -551,6 +552,7 @@ void Client::handleCommand_MovePlayer(NetworkPacket* pkt)
*pkt >> pos >> pitch >> yaw;
+ player->got_teleported = true;
player->setPosition(pos);
infostream << "Client got TOCLIENT_MOVE_PLAYER"
@@ -578,7 +580,7 @@ void Client::handleCommand_MovePlayer(NetworkPacket* pkt)
void Client::handleCommand_PlayerItem(NetworkPacket* pkt)
{
- infostream << "Client: WARNING: Ignoring TOCLIENT_PLAYERITEM" << std::endl;
+ warningstream << "Client: Ignoring TOCLIENT_PLAYERITEM" << std::endl;
}
void Client::handleCommand_DeathScreen(NetworkPacket* pkt)
@@ -621,7 +623,7 @@ void Client::handleCommand_AnnounceMedia(NetworkPacket* pkt)
// Mesh update thread must be stopped while
// updating content definitions
- sanity_check(!m_mesh_update_thread.IsRunning());
+ sanity_check(!m_mesh_update_thread.isRunning());
for (u16 i = 0; i < num_files; i++) {
std::string name, sha1_base64;
@@ -639,7 +641,7 @@ void Client::handleCommand_AnnounceMedia(NetworkPacket* pkt)
*pkt >> str;
Strfnd sf(str);
- while(!sf.atend()) {
+ while(!sf.at_end()) {
std::string baseurl = trim(sf.next(","));
if (baseurl != "")
m_media_downloader->addRemoteServer(baseurl);
@@ -694,7 +696,7 @@ void Client::handleCommand_Media(NetworkPacket* pkt)
// Mesh update thread must be stopped while
// updating content definitions
- sanity_check(!m_mesh_update_thread.IsRunning());
+ sanity_check(!m_mesh_update_thread.isRunning());
for (u32 i=0; i < num_files; i++) {
std::string name;
@@ -710,7 +712,7 @@ void Client::handleCommand_Media(NetworkPacket* pkt)
void Client::handleCommand_ToolDef(NetworkPacket* pkt)
{
- infostream << "Client: WARNING: Ignoring TOCLIENT_TOOLDEF" << std::endl;
+ warningstream << "Client: Ignoring TOCLIENT_TOOLDEF" << std::endl;
}
void Client::handleCommand_NodeDef(NetworkPacket* pkt)
@@ -720,7 +722,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt)
// Mesh update thread must be stopped while
// updating content definitions
- sanity_check(!m_mesh_update_thread.IsRunning());
+ sanity_check(!m_mesh_update_thread.isRunning());
// Decompress node definitions
std::string datastring(pkt->getString(0), pkt->getSize());
@@ -737,7 +739,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt)
void Client::handleCommand_CraftItemDef(NetworkPacket* pkt)
{
- infostream << "Client: WARNING: Ignoring TOCLIENT_CRAFTITEMDEF" << std::endl;
+ warningstream << "Client: Ignoring TOCLIENT_CRAFTITEMDEF" << std::endl;
}
void Client::handleCommand_ItemDef(NetworkPacket* pkt)
@@ -747,7 +749,7 @@ void Client::handleCommand_ItemDef(NetworkPacket* pkt)
// Mesh update thread must be stopped while
// updating content definitions
- sanity_check(!m_mesh_update_thread.IsRunning());
+ sanity_check(!m_mesh_update_thread.isRunning());
// Decompress item definitions
std::string datastring(pkt->getString(0), pkt->getSize());
@@ -1094,8 +1096,19 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)
Player *player = m_env.getLocalPlayer();
assert(player != NULL);
+ bool was_minimap_visible = player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE;
+
player->hud_flags &= ~mask;
player->hud_flags |= flags;
+
+ m_minimap_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE);
+
+ // Hide minimap if it has been disabled by the server
+ if (m_minimap_disabled_by_server && was_minimap_visible) {
+ // defers a minimap update, therefore only call it if really
+ // needed, by checking that minimap was visible before
+ m_mapper->setMinimapMode(MINIMAP_MODE_OFF);
+ }
}
void Client::handleCommand_HudSetParam(NetworkPacket* pkt)
diff --git a/src/network/connection.cpp b/src/network/connection.cpp
index 7794ce10f..f7452d8e4 100644
--- a/src/network/connection.cpp
+++ b/src/network/connection.cpp
@@ -42,10 +42,10 @@ namespace con
#undef DEBUG_CONNECTION_KBPS
#else
/* this mutex is used to achieve log message consistency */
-JMutex log_message_mutex;
+Mutex log_message_mutex;
#define LOG(a) \
{ \
- JMutexAutoLock loglock(log_message_mutex); \
+ MutexAutoLock loglock(log_message_mutex); \
a; \
}
#define PROFILE(a) a
@@ -209,7 +209,7 @@ ReliablePacketBuffer::ReliablePacketBuffer(): m_list_size(0) {}
void ReliablePacketBuffer::print()
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl);
unsigned int index = 0;
for(std::list<BufferedPacket>::iterator i = m_list.begin();
@@ -223,7 +223,7 @@ void ReliablePacketBuffer::print()
}
bool ReliablePacketBuffer::empty()
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
return m_list.empty();
}
@@ -256,7 +256,7 @@ RPBSearchResult ReliablePacketBuffer::notFound()
}
bool ReliablePacketBuffer::getFirstSeqnum(u16& result)
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
if (m_list.empty())
return false;
BufferedPacket p = *m_list.begin();
@@ -266,7 +266,7 @@ bool ReliablePacketBuffer::getFirstSeqnum(u16& result)
BufferedPacket ReliablePacketBuffer::popFirst()
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
if (m_list.empty())
throw NotFoundException("Buffer is empty");
BufferedPacket p = *m_list.begin();
@@ -283,7 +283,7 @@ BufferedPacket ReliablePacketBuffer::popFirst()
}
BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
RPBSearchResult r = findPacket(seqnum);
if (r == notFound()) {
LOG(dout_con<<"Sequence number: " << seqnum
@@ -294,7 +294,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
RPBSearchResult next = r;
- next++;
+ ++next;
if (next != notFound()) {
u16 s = readU16(&(next->data[BASE_HEADER_SIZE+1]));
m_oldest_non_answered_ack = s;
@@ -311,7 +311,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
}
void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
if (p.data.getSize() < BASE_HEADER_SIZE + 3) {
errorstream << "ReliablePacketBuffer::insert(): Invalid data size for "
"reliable packet" << std::endl;
@@ -358,7 +358,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
/* this is true e.g. on wrap around */
if (seqnum < next_expected) {
while(((s < seqnum) || (s >= next_expected)) && (i != m_list.end())) {
- i++;
+ ++i;
if (i != m_list.end())
s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
}
@@ -367,7 +367,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
else
{
while(((s < seqnum) && (s >= next_expected)) && (i != m_list.end())) {
- i++;
+ ++i;
if (i != m_list.end())
s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
}
@@ -411,7 +411,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
void ReliablePacketBuffer::incrementTimeouts(float dtime)
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
{
@@ -423,7 +423,7 @@ void ReliablePacketBuffer::incrementTimeouts(float dtime)
std::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout,
unsigned int max_packets)
{
- JMutexAutoLock listlock(m_list_mutex);
+ MutexAutoLock listlock(m_list_mutex);
std::list<BufferedPacket> timed_outs;
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
@@ -446,7 +446,7 @@ std::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout,
IncomingSplitBuffer::~IncomingSplitBuffer()
{
- JMutexAutoLock listlock(m_map_mutex);
+ MutexAutoLock listlock(m_map_mutex);
for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
i != m_buf.end(); ++i)
{
@@ -459,7 +459,7 @@ IncomingSplitBuffer::~IncomingSplitBuffer()
*/
SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable)
{
- JMutexAutoLock listlock(m_map_mutex);
+ MutexAutoLock listlock(m_map_mutex);
u32 headersize = BASE_HEADER_SIZE + 7;
if (p.data.getSize() < headersize) {
errorstream << "Invalid data size for split packet" << std::endl;
@@ -546,7 +546,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout)
{
std::list<u16> remove_queue;
{
- JMutexAutoLock listlock(m_map_mutex);
+ MutexAutoLock listlock(m_map_mutex);
for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
i != m_buf.end(); ++i)
{
@@ -562,7 +562,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout)
for(std::list<u16>::iterator j = remove_queue.begin();
j != remove_queue.end(); ++j)
{
- JMutexAutoLock listlock(m_map_mutex);
+ MutexAutoLock listlock(m_map_mutex);
LOG(dout_con<<"NOTE: Removing timed out unreliable split packet"<<std::endl);
delete m_buf[*j];
m_buf.erase(*j);
@@ -605,13 +605,13 @@ Channel::~Channel()
u16 Channel::readNextIncomingSeqNum()
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
return next_incoming_seqnum;
}
u16 Channel::incNextIncomingSeqNum()
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
u16 retval = next_incoming_seqnum;
next_incoming_seqnum++;
return retval;
@@ -619,18 +619,18 @@ u16 Channel::incNextIncomingSeqNum()
u16 Channel::readNextSplitSeqNum()
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
return next_outgoing_split_seqnum;
}
void Channel::setNextSplitSeqNum(u16 seqnum)
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
next_outgoing_split_seqnum = seqnum;
}
u16 Channel::getOutgoingSequenceNumber(bool& successful)
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
u16 retval = next_outgoing_seqnum;
u16 lowest_unacked_seqnumber;
@@ -670,7 +670,7 @@ u16 Channel::getOutgoingSequenceNumber(bool& successful)
u16 Channel::readOutgoingSequenceNumber()
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
return next_outgoing_seqnum;
}
@@ -686,32 +686,32 @@ bool Channel::putBackSequenceNumber(u16 seqnum)
void Channel::UpdateBytesSent(unsigned int bytes, unsigned int packets)
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
current_bytes_transfered += bytes;
current_packet_successfull += packets;
}
void Channel::UpdateBytesReceived(unsigned int bytes) {
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
current_bytes_received += bytes;
}
void Channel::UpdateBytesLost(unsigned int bytes)
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
current_bytes_lost += bytes;
}
void Channel::UpdatePacketLossCounter(unsigned int count)
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
current_packet_loss += count;
}
void Channel::UpdatePacketTooLateCounter()
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
current_packet_too_late++;
}
@@ -731,7 +731,7 @@ void Channel::UpdateTimers(float dtime,bool legacy_peer)
bool reasonable_amount_of_data_transmitted = false;
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
packet_loss = current_packet_loss;
//packet_too_late = current_packet_too_late;
packets_successfull = current_packet_successfull;
@@ -802,7 +802,7 @@ void Channel::UpdateTimers(float dtime,bool legacy_peer)
if (bpm_counter > 10.0)
{
{
- JMutexAutoLock internal(m_internal_mutex);
+ MutexAutoLock internal(m_internal_mutex);
cur_kbps =
(((float) current_bytes_transfered)/bpm_counter)/1024.0;
current_bytes_transfered = 0;
@@ -903,7 +903,7 @@ bool PeerHelper::operator!=(void* ptr)
bool Peer::IncUseCount()
{
- JMutexAutoLock lock(m_exclusive_access_mutex);
+ MutexAutoLock lock(m_exclusive_access_mutex);
if (!m_pending_deletion)
{
@@ -917,7 +917,7 @@ bool Peer::IncUseCount()
void Peer::DecUseCount()
{
{
- JMutexAutoLock lock(m_exclusive_access_mutex);
+ MutexAutoLock lock(m_exclusive_access_mutex);
sanity_check(m_usage > 0);
m_usage--;
@@ -978,7 +978,7 @@ void Peer::RTTStatistics(float rtt, std::string profiler_id,
bool Peer::isTimedOut(float timeout)
{
- JMutexAutoLock lock(m_exclusive_access_mutex);
+ MutexAutoLock lock(m_exclusive_access_mutex);
u32 current_time = porting::getTimeMs();
float dtime = CALC_DTIME(m_last_timeout_check,current_time);
@@ -992,7 +992,7 @@ bool Peer::isTimedOut(float timeout)
void Peer::Drop()
{
{
- JMutexAutoLock usage_lock(m_exclusive_access_mutex);
+ MutexAutoLock usage_lock(m_exclusive_access_mutex);
m_pending_deletion = true;
if (m_usage != 0)
return;
@@ -1051,7 +1051,7 @@ void UDPPeer::reportRTT(float rtt)
if (timeout > RESEND_TIMEOUT_MAX)
timeout = RESEND_TIMEOUT_MAX;
- JMutexAutoLock usage_lock(m_exclusive_access_mutex);
+ MutexAutoLock usage_lock(m_exclusive_access_mutex);
resend_timeout = timeout;
}
@@ -1255,8 +1255,9 @@ SharedBuffer<u8> UDPPeer::addSpiltPacket(u8 channel,
/* Connection Threads */
/******************************************************************************/
-ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size,
- float timeout) :
+ConnectionSendThread::ConnectionSendThread(unsigned int max_packet_size,
+ float timeout) :
+ Thread("ConnectionSend"),
m_connection(NULL),
m_max_packet_size(max_packet_size),
m_timeout(timeout),
@@ -1266,11 +1267,9 @@ ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size,
{
}
-void * ConnectionSendThread::Thread()
+void * ConnectionSendThread::run()
{
- assert(m_connection != NULL);
- ThreadStarted();
- log_register_thread("ConnectionSend");
+ assert(m_connection);
LOG(dout_con<<m_connection->getDesc()
<<"ConnectionSend thread started"<<std::endl);
@@ -1281,21 +1280,19 @@ void * ConnectionSendThread::Thread()
PROFILE(std::stringstream ThreadIdentifier);
PROFILE(ThreadIdentifier << "ConnectionSend: [" << m_connection->getDesc() << "]");
- porting::setThreadName("ConnectionSend");
-
/* if stop is requested don't stop immediately but try to send all */
/* packets first */
- while(!StopRequested() || packetsQueued()) {
+ while(!stopRequested() || packetsQueued()) {
BEGIN_DEBUG_EXCEPTION_HANDLER
PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG));
m_iteration_packets_avaialble = m_max_data_packets_per_iteration;
/* wait for trigger or timeout */
- m_send_sleep_semaphore.Wait(50);
+ m_send_sleep_semaphore.wait(50);
/* remove all triggers */
- while(m_send_sleep_semaphore.Wait(0)) {}
+ while(m_send_sleep_semaphore.wait(0)) {}
lasttime = curtime;
curtime = porting::getTimeMs();
@@ -1319,7 +1316,7 @@ void * ConnectionSendThread::Thread()
/* send non reliable packets */
sendPackets(dtime);
- END_DEBUG_EXCEPTION_HANDLER(errorstream);
+ END_DEBUG_EXCEPTION_HANDLER
}
PROFILE(g_profiler->remove(ThreadIdentifier.str()));
@@ -1328,7 +1325,7 @@ void * ConnectionSendThread::Thread()
void ConnectionSendThread::Trigger()
{
- m_send_sleep_semaphore.Post();
+ m_send_sleep_semaphore.post();
}
bool ConnectionSendThread::packetsQueued()
@@ -1763,7 +1760,7 @@ void ConnectionSendThread::disconnect()
for (std::list<u16>::iterator i = peerids.begin();
i != peerids.end();
- i++)
+ ++i)
{
sendAsPacket(*i, 0,data,false);
}
@@ -1843,7 +1840,7 @@ void ConnectionSendThread::sendToAll(u8 channelnum, SharedBuffer<u8> data)
for (std::list<u16>::iterator i = peerids.begin();
i != peerids.end();
- i++)
+ ++i)
{
send(*i, channelnum, data);
}
@@ -1855,7 +1852,7 @@ void ConnectionSendThread::sendToAllReliable(ConnectionCommand &c)
for (std::list<u16>::iterator i = peerids.begin();
i != peerids.end();
- i++)
+ ++i)
{
PeerHelper peer = m_connection->getPeerNoEx(*i);
@@ -1984,7 +1981,7 @@ void ConnectionSendThread::sendPackets(float dtime)
}
else if (
( peer->m_increment_packets_remaining > 0) ||
- (StopRequested())) {
+ (stopRequested())) {
rawSendAsPacket(packet.peer_id, packet.channelnum,
packet.data, packet.reliable);
peer->m_increment_packets_remaining--;
@@ -2014,15 +2011,14 @@ void ConnectionSendThread::sendAsPacket(u16 peer_id, u8 channelnum,
}
ConnectionReceiveThread::ConnectionReceiveThread(unsigned int max_packet_size) :
+ Thread("ConnectionReceive"),
m_connection(NULL)
{
}
-void * ConnectionReceiveThread::Thread()
+void * ConnectionReceiveThread::run()
{
- assert(m_connection != NULL);
- ThreadStarted();
- log_register_thread("ConnectionReceive");
+ assert(m_connection);
LOG(dout_con<<m_connection->getDesc()
<<"ConnectionReceive thread started"<<std::endl);
@@ -2030,15 +2026,13 @@ void * ConnectionReceiveThread::Thread()
PROFILE(std::stringstream ThreadIdentifier);
PROFILE(ThreadIdentifier << "ConnectionReceive: [" << m_connection->getDesc() << "]");
- porting::setThreadName("ConnectionReceive");
-
#ifdef DEBUG_CONNECTION_KBPS
u32 curtime = porting::getTimeMs();
u32 lasttime = curtime;
float debug_print_timer = 0.0;
#endif
- while(!StopRequested()) {
+ while(!stopRequested()) {
BEGIN_DEBUG_EXCEPTION_HANDLER
PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG));
@@ -2103,8 +2097,9 @@ void * ConnectionReceiveThread::Thread()
}
}
#endif
- END_DEBUG_EXCEPTION_HANDLER(errorstream);
+ END_DEBUG_EXCEPTION_HANDLER
}
+
PROFILE(g_profiler->remove(ThreadIdentifier.str()));
return NULL;
}
@@ -2684,8 +2679,8 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout,
m_sendThread.setParent(this);
m_receiveThread.setParent(this);
- m_sendThread.Start();
- m_receiveThread.Start();
+ m_sendThread.start();
+ m_receiveThread.start();
}
@@ -2694,8 +2689,8 @@ Connection::~Connection()
{
m_shutting_down = true;
// request threads to stop
- m_sendThread.Stop();
- m_receiveThread.Stop();
+ m_sendThread.stop();
+ m_receiveThread.stop();
//TODO for some unkonwn reason send/receive threads do not exit as they're
// supposed to be but wait on peer timeout. To speed up shutdown we reduce
@@ -2703,8 +2698,8 @@ Connection::~Connection()
m_sendThread.setPeerTimeout(0.5);
// wait for threads to finish
- m_sendThread.Wait();
- m_receiveThread.Wait();
+ m_sendThread.wait();
+ m_receiveThread.wait();
// Delete peers
for(std::map<u16, Peer*>::iterator
@@ -2724,7 +2719,7 @@ void Connection::putEvent(ConnectionEvent &e)
PeerHelper Connection::getPeer(u16 peer_id)
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
if (node == m_peers.end()) {
@@ -2739,7 +2734,7 @@ PeerHelper Connection::getPeer(u16 peer_id)
PeerHelper Connection::getPeerNoEx(u16 peer_id)
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
if (node == m_peers.end()) {
@@ -2755,7 +2750,7 @@ PeerHelper Connection::getPeerNoEx(u16 peer_id)
/* find peer_id for address */
u16 Connection::lookupPeer(Address& sender)
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
std::map<u16, Peer*>::iterator j;
j = m_peers.begin();
for(; j != m_peers.end(); ++j)
@@ -2794,7 +2789,7 @@ bool Connection::deletePeer(u16 peer_id, bool timeout)
/* lock list as short as possible */
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
if (m_peers.find(peer_id) == m_peers.end())
return false;
peer = m_peers[peer_id];
@@ -2852,7 +2847,7 @@ void Connection::Connect(Address address)
bool Connection::Connected()
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
if (m_peers.size() != 1)
return false;
@@ -2987,7 +2982,7 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd)
/*
Find an unused peer id
*/
- JMutexAutoLock lock(m_peers_mutex);
+ MutexAutoLock lock(m_peers_mutex);
bool out_of_ids = false;
for(;;) {
// Check if exists
@@ -3038,9 +3033,9 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd)
void Connection::PrintInfo(std::ostream &out)
{
- m_info_mutex.Lock();
+ m_info_mutex.lock();
out<<getDesc()<<": ";
- m_info_mutex.Unlock();
+ m_info_mutex.unlock();
}
void Connection::PrintInfo()
@@ -3091,7 +3086,7 @@ UDPPeer* Connection::createServerPeer(Address& address)
UDPPeer *peer = new UDPPeer(PEER_ID_SERVER, address, this);
{
- JMutexAutoLock lock(m_peers_mutex);
+ MutexAutoLock lock(m_peers_mutex);
m_peers[peer->id] = peer;
m_peer_ids.push_back(peer->id);
}
diff --git a/src/network/connection.h b/src/network/connection.h
index 15ea7e20f..fe2c9819d 100644
--- a/src/network/connection.h
+++ b/src/network/connection.h
@@ -349,7 +349,7 @@ private:
u16 m_oldest_non_answered_ack;
- JMutex m_list_mutex;
+ Mutex m_list_mutex;
};
/*
@@ -372,7 +372,7 @@ private:
// Key is seqnum
std::map<u16, IncomingSplitPacket*> m_buf;
- JMutex m_map_mutex;
+ Mutex m_map_mutex;
};
struct OutgoingPacket
@@ -519,32 +519,32 @@ public:
void UpdateTimers(float dtime, bool legacy_peer);
const float getCurrentDownloadRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return cur_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return cur_kbps; };
const float getMaxDownloadRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return max_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return max_kbps; };
const float getCurrentLossRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; };
+ { MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; };
const float getMaxLossRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return max_kbps_lost; };
+ { MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; };
const float getCurrentIncomingRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; };
const float getMaxIncomingRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; };
const float getAvgDownloadRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return avg_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return avg_kbps; };
const float getAvgLossRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; };
+ { MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; };
const float getAvgIncomingRateKB()
- { JMutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; };
+ { MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; };
const unsigned int getWindowSize() const { return window_size; };
void setWindowSize(unsigned int size) { window_size = size; };
private:
- JMutex m_internal_mutex;
+ Mutex m_internal_mutex;
int window_size;
u16 next_incoming_seqnum;
@@ -675,7 +675,7 @@ class Peer {
};
virtual ~Peer() {
- JMutexAutoLock usage_lock(m_exclusive_access_mutex);
+ MutexAutoLock usage_lock(m_exclusive_access_mutex);
FATAL_ERROR_IF(m_usage != 0, "Reference counting failure");
};
@@ -692,15 +692,15 @@ class Peer {
virtual bool getAddress(MTProtocols type, Address& toset) = 0;
void ResetTimeout()
- {JMutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; };
+ {MutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; };
bool isTimedOut(float timeout);
void setSentWithID()
- { JMutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; };
+ { MutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; };
bool hasSentWithID()
- { JMutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; };
+ { MutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; };
unsigned int m_increment_packets_remaining;
unsigned int m_increment_bytes_remaining;
@@ -744,7 +744,7 @@ class Peer {
bool IncUseCount();
void DecUseCount();
- JMutex m_exclusive_access_mutex;
+ Mutex m_exclusive_access_mutex;
bool m_pending_deletion;
@@ -826,10 +826,10 @@ protected:
unsigned int maxtransfer);
float getResendTimeout()
- { JMutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; }
+ { MutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; }
void setResendTimeout(float timeout)
- { JMutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; }
+ { MutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; }
bool Ping(float dtime,SharedBuffer<u8>& data);
Channel channels[CHANNEL_COUNT];
@@ -910,14 +910,14 @@ struct ConnectionEvent
}
};
-class ConnectionSendThread : public JThread {
+class ConnectionSendThread : public Thread {
public:
friend class UDPPeer;
ConnectionSendThread(unsigned int max_packet_size, float timeout);
- void * Thread ();
+ void *run();
void Trigger();
@@ -961,7 +961,7 @@ private:
unsigned int m_max_packet_size;
float m_timeout;
std::queue<OutgoingPacket> m_outgoing_queue;
- JSemaphore m_send_sleep_semaphore;
+ Semaphore m_send_sleep_semaphore;
unsigned int m_iteration_packets_avaialble;
unsigned int m_max_commands_per_iteration;
@@ -969,24 +969,24 @@ private:
unsigned int m_max_packets_requeued;
};
-class ConnectionReceiveThread : public JThread {
+class ConnectionReceiveThread : public Thread {
public:
ConnectionReceiveThread(unsigned int max_packet_size);
- void * Thread ();
+ void *run();
- void setParent(Connection* parent) {
- assert(parent != NULL); // Pre-condition
+ void setParent(Connection *parent) {
+ assert(parent); // Pre-condition
m_connection = parent;
}
private:
- void receive ();
+ void receive();
// Returns next data from a buffer if possible
// If found, returns true; if not, false.
// If found, sets peer_id and dst
- bool getFromBuffers (u16 &peer_id, SharedBuffer<u8> &dst);
+ bool getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst);
bool checkIncomingBuffers(Channel *channel, u16 &peer_id,
SharedBuffer<u8> &dst);
@@ -1054,7 +1054,7 @@ protected:
std::list<u16> getPeerIDs()
{
- JMutexAutoLock peerlock(m_peers_mutex);
+ MutexAutoLock peerlock(m_peers_mutex);
return m_peer_ids;
}
@@ -1075,12 +1075,12 @@ private:
std::map<u16, Peer*> m_peers;
std::list<u16> m_peer_ids;
- JMutex m_peers_mutex;
+ Mutex m_peers_mutex;
ConnectionSendThread m_sendThread;
ConnectionReceiveThread m_receiveThread;
- JMutex m_info_mutex;
+ Mutex m_info_mutex;
// Backwards compatibility
PeerHandler *m_bc_peerhandler;
diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp
index b5e451cdb..388afc18e 100644
--- a/src/network/networkpacket.cpp
+++ b/src/network/networkpacket.cpp
@@ -77,6 +77,9 @@ void NetworkPacket::putRawString(const char* src, u32 len)
m_data.resize(m_datasize);
}
+ if (len == 0)
+ return;
+
memcpy(&m_data[m_read_offset], src, len);
m_read_offset += len;
}
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index 82c82f79e..177b97680 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -132,16 +132,23 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO
PROTOCOL_VERSION 26:
Add TileDef tileable_horizontal, tileable_vertical flags
+ PROTOCOL_VERSION 27:
+ backface_culling: backwards compatibility for playing with
+ newer client on pre-27 servers.
+ Add nodedef v3 - connected nodeboxes
*/
-#define LATEST_PROTOCOL_VERSION 26
+#define LATEST_PROTOCOL_VERSION 27
// Server's supported network protocol range
#define SERVER_PROTOCOL_VERSION_MIN 13
#define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
// Client's supported network protocol range
-#define CLIENT_PROTOCOL_VERSION_MIN 13
+// The minimal version depends on whether
+// send_pre_v25_init is enabled or not
+#define CLIENT_PROTOCOL_VERSION_MIN 25
+#define CLIENT_PROTOCOL_VERSION_MIN_LEGACY 13
#define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
// Constant that differentiates the protocol from random data and other protocols
@@ -208,7 +215,6 @@ enum ToClientCommand
TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
TOCLIENT_ADDNODE = 0x21,
/*
- u16 command
v3s16 position
serialized mapnode
u8 keep_metadata // Added in protocol version 22
@@ -255,7 +261,6 @@ enum ToClientCommand
/*
Sent as unreliable.
- u16 command
u16 number of player positions
for each player:
u16 peer_id
@@ -271,7 +276,6 @@ enum ToClientCommand
TOCLIENT_TIME_OF_DAY = 0x29,
/*
- u16 command
u16 time (0-23999)
Added in a later version:
f1000 time_speed
@@ -281,14 +285,12 @@ enum ToClientCommand
TOCLIENT_CHAT_MESSAGE = 0x30,
/*
- u16 command
u16 length
wstring message
*/
TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
/*
- u16 command
u16 count of removed objects
for all removed objects {
u16 id
@@ -304,7 +306,6 @@ enum ToClientCommand
TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
/*
- u16 command
for all objects
{
u16 id
@@ -315,13 +316,11 @@ enum ToClientCommand
TOCLIENT_HP = 0x33,
/*
- u16 command
u8 hp
*/
TOCLIENT_MOVE_PLAYER = 0x34,
/*
- u16 command
v3f1000 player position
f1000 player pitch
f1000 player yaw
@@ -329,14 +328,12 @@ enum ToClientCommand
TOCLIENT_ACCESS_DENIED_LEGACY = 0x35,
/*
- u16 command
u16 reason_length
wstring reason
*/
TOCLIENT_PLAYERITEM = 0x36, // Obsolete
/*
- u16 command
u16 count of player items
for all player items {
u16 peer id
@@ -347,14 +344,12 @@ enum ToClientCommand
TOCLIENT_DEATHSCREEN = 0x37,
/*
- u16 command
u8 bool set camera point target
v3f1000 camera point target (to point the death cause or whatever)
*/
TOCLIENT_MEDIA = 0x38,
/*
- u16 command
u16 total number of texture bunches
u16 index of this bunch
u32 number of files in this bunch
@@ -370,21 +365,18 @@ enum ToClientCommand
TOCLIENT_TOOLDEF = 0x39,
/*
- u16 command
u32 length of the next item
serialized ToolDefManager
*/
TOCLIENT_NODEDEF = 0x3a,
/*
- u16 command
u32 length of the next item
serialized NodeDefManager
*/
TOCLIENT_CRAFTITEMDEF = 0x3b,
/*
- u16 command
u32 length of the next item
serialized CraftiItemDefManager
*/
@@ -392,7 +384,6 @@ enum ToClientCommand
TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
/*
- u16 command
u32 number of files
for each texture {
u16 length of name
@@ -404,14 +395,12 @@ enum ToClientCommand
TOCLIENT_ITEMDEF = 0x3d,
/*
- u16 command
u32 length of next item
serialized ItemDefManager
*/
TOCLIENT_PLAY_SOUND = 0x3f,
/*
- u16 command
s32 sound_id
u16 len
u8[len] sound name
@@ -424,13 +413,11 @@ enum ToClientCommand
TOCLIENT_STOP_SOUND = 0x40,
/*
- u16 command
s32 sound_id
*/
TOCLIENT_PRIVILEGES = 0x41,
/*
- u16 command
u16 number of privileges
for each privilege
u16 len
@@ -439,7 +426,6 @@ enum ToClientCommand
TOCLIENT_INVENTORY_FORMSPEC = 0x42,
/*
- u16 command
u32 len
u8[len] formspec
*/
@@ -463,7 +449,6 @@ enum ToClientCommand
TOCLIENT_MOVEMENT = 0x45,
/*
- u16 command
f1000 movement_acceleration_default
f1000 movement_acceleration_air
f1000 movement_acceleration_fast
@@ -480,7 +465,6 @@ enum ToClientCommand
TOCLIENT_SPAWN_PARTICLE = 0x46,
/*
- u16 command
v3f1000 pos
v3f1000 velocity
v3f1000 acceleration
@@ -494,7 +478,6 @@ enum ToClientCommand
TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
/*
- u16 command
u16 amount
f1000 spawntime
v3f1000 minpos
@@ -516,13 +499,11 @@ enum ToClientCommand
TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48,
/*
- u16 command
u16 id
*/
TOCLIENT_HUDADD = 0x49,
/*
- u16 command
u32 id
u8 type
v2f1000 pos
@@ -542,13 +523,11 @@ enum ToClientCommand
TOCLIENT_HUDRM = 0x4a,
/*
- u16 command
u32 id
*/
TOCLIENT_HUDCHANGE = 0x4b,
/*
- u16 command
u32 id
u8 stat
[v2f1000 data |
@@ -559,14 +538,12 @@ enum ToClientCommand
TOCLIENT_HUD_SET_FLAGS = 0x4c,
/*
- u16 command
u32 flags
u32 mask
*/
TOCLIENT_HUD_SET_PARAM = 0x4d,
/*
- u16 command
u16 param
u16 len
u8[len] value
@@ -574,13 +551,11 @@ enum ToClientCommand
TOCLIENT_BREATH = 0x4e,
/*
- u16 command
u16 breath
*/
TOCLIENT_SET_SKY = 0x4f,
/*
- u16 command
u8[4] color (ARGB)
u8 len
u8[len] type
@@ -592,14 +567,12 @@ enum ToClientCommand
TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50,
/*
- u16 command
u8 do_override (boolean)
u16 day-night ratio 0...65535
*/
TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51,
/*
- u16 command
v2s32 stand/idle
v2s32 walk
v2s32 dig
@@ -609,14 +582,12 @@ enum ToClientCommand
TOCLIENT_EYE_OFFSET = 0x52,
/*
- u16 command
v3f1000 first
v3f1000 third
*/
TOCLIENT_DELETE_PARTICLESPAWNER = 0x53,
/*
- u16 command
u32 id
*/
@@ -624,7 +595,6 @@ enum ToClientCommand
/*
Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP.
- u16 command
std::string bytes_s
std::string bytes_B
*/
@@ -735,7 +705,6 @@ enum ToServerCommand
TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
/*
- u16 command
v3s16 blockpos
s16 id
u16 textlen
@@ -749,14 +718,12 @@ enum ToServerCommand
TOSERVER_CHAT_MESSAGE = 0x32,
/*
- u16 command
u16 length
wstring message
*/
TOSERVER_SIGNNODETEXT = 0x33, // obsolete
/*
- u16 command
v3s16 p
u16 textlen
textdata
@@ -773,7 +740,6 @@ enum ToServerCommand
TOSERVER_DAMAGE = 0x35,
/*
- u16 command
u8 amount
*/
@@ -818,14 +784,12 @@ enum ToServerCommand
TOSERVER_REMOVED_SOUNDS = 0x3a,
/*
- u16 command
u16 len
s32[len] sound_id
*/
TOSERVER_NODEMETA_FIELDS = 0x3b,
/*
- u16 command
v3s16 p
u16 len
u8[len] form name (reserved for future use)
@@ -839,7 +803,6 @@ enum ToServerCommand
TOSERVER_INVENTORY_FIELDS = 0x3c,
/*
- u16 command
u16 len
u8[len] form name (reserved for future use)
u16 number of fields
@@ -852,7 +815,6 @@ enum ToServerCommand
TOSERVER_REQUEST_MEDIA = 0x40,
/*
- u16 command
u16 number of files requested
for each file {
u16 length of name
@@ -862,12 +824,11 @@ enum ToServerCommand
TOSERVER_RECEIVED_MEDIA = 0x41,
/*
- u16 command
+ <no payload data>
*/
TOSERVER_BREATH = 0x42,
/*
- u16 command
u16 breath
*/
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index f756d80ef..1bcb78a8a 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -103,7 +103,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
// Use the highest version supported by both
u8 depl_serial_v = std::min(client_max, our_max);
// If it's lower than the lowest supported, give up.
- if (depl_serial_v < SER_FMT_VER_LOWEST)
+ if (depl_serial_v < SER_FMT_VER_LOWEST_READ)
depl_serial_v = SER_FMT_VER_INVALID;
if (depl_serial_v == SER_FMT_VER_INVALID) {
@@ -261,9 +261,9 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
auth_mechs |= AUTH_MECHANISM_FIRST_SRP;
} else {
// Take care of default passwords.
- client->enc_pwd = getSRPVerifier(playerName, default_password);
+ client->enc_pwd = get_encoded_srp_verifier(playerName, default_password);
auth_mechs |= AUTH_MECHANISM_SRP;
- // Create auth, but only on successful login
+ // Allocate player in db, but only on successful login.
client->create_player_on_auth_success = true;
}
}
@@ -347,7 +347,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
// Use the highest version supported by both
int deployed = std::min(client_max, our_max);
// If it's lower than the lowest supported, give up.
- if (deployed < SER_FMT_VER_LOWEST)
+ if (deployed < SER_FMT_VER_LOWEST_READ)
deployed = SER_FMT_VER_INVALID;
if (deployed == SER_FMT_VER_INVALID) {
@@ -549,7 +549,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
std::string raw_default_password =
g_settings->get("default_password");
std::string initial_password =
- translatePassword(playername, raw_default_password);
+ translate_password(playername, raw_default_password);
// If default_password is empty, allow any initial password
if (raw_default_password.length() == 0)
@@ -568,8 +568,10 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
}
if (given_password != checkpwd) {
- actionstream << "Server: " << playername << " supplied wrong password"
- << std::endl;
+ actionstream << "Server: User " << playername
+ << " at " << addr_s
+ << " supplied wrong password (auth mechanism: legacy)."
+ << std::endl;
DenyAccess_Legacy(pkt->getPeerId(), L"Wrong password");
return;
}
@@ -760,14 +762,14 @@ void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
RemoteClient *client = getClient(pkt->getPeerId());
- for (u16 i = 0; i < count; i++) {
- if ((s16)pkt->getSize() < 1 + (i + 1) * 6)
- throw con::InvalidIncomingDataException
+ if ((s16)pkt->getSize() < 1 + (int)count * 6) {
+ throw con::InvalidIncomingDataException
("GOTBLOCKS length is too short");
- v3s16 p;
+ }
+ for (u16 i = 0; i < count; i++) {
+ v3s16 p;
*pkt >> p;
-
client->GotBlock(p);
}
}
@@ -863,13 +865,14 @@ void Server::handleCommand_DeletedBlocks(NetworkPacket* pkt)
RemoteClient *client = getClient(pkt->getPeerId());
- for (u16 i = 0; i < count; i++) {
- if ((s16)pkt->getSize() < 1 + (i + 1) * 6)
- throw con::InvalidIncomingDataException
+ if ((s16)pkt->getSize() < 1 + (int)count * 6) {
+ throw con::InvalidIncomingDataException
("DELETEDBLOCKS length is too short");
+ }
+
+ for (u16 i = 0; i < count; i++) {
v3s16 p;
*pkt >> p;
-
client->SetBlockNotSent(p);
}
}
@@ -1057,69 +1060,15 @@ void Server::handleCommand_ChatMessage(NetworkPacket* pkt)
return;
}
- // If something goes wrong, this player is to blame
- RollbackScopeActor rollback_scope(m_rollback,
- std::string("player:")+player->getName());
-
// Get player name of this client
- std::wstring name = narrow_to_wide(player->getName());
-
- // Run script hook
- bool ate = m_script->on_chat_message(player->getName(),
- wide_to_narrow(message));
- // If script ate the message, don't proceed
- if (ate)
- return;
-
- // Line to send to players
- std::wstring line;
- // Whether to send to the player that sent the line
- bool send_to_sender_only = false;
-
- // Commands are implemented in Lua, so only catch invalid
- // commands that were not "eaten" and send an error back
- if (message[0] == L'/') {
- message = message.substr(1);
- send_to_sender_only = true;
- if (message.length() == 0)
- line += L"-!- Empty command";
- else
- line += L"-!- Invalid command: " + str_split(message, L' ')[0];
- }
- else {
- if (checkPriv(player->getName(), "shout")) {
- line += L"<";
- line += name;
- line += L"> ";
- line += message;
- } else {
- line += L"-!- You don't have permission to shout.";
- send_to_sender_only = true;
- }
- }
+ std::string name = player->getName();
+ std::wstring wname = narrow_to_wide(name);
- if (line != L"")
- {
- /*
- Send the message to sender
- */
- if (send_to_sender_only) {
- SendChatMessage(pkt->getPeerId(), line);
- }
- /*
- Send the message to others
- */
- else {
- actionstream << "CHAT: " << wide_to_narrow(line)<<std::endl;
-
- std::vector<u16> clients = m_clients.getClientIDs();
-
- for (std::vector<u16>::iterator i = clients.begin();
- i != clients.end(); ++i) {
- if (*i != pkt->getPeerId())
- SendChatMessage(*i, line);
- }
- }
+ std::wstring answer_to_sender = handleChat(name, wname, message,
+ true, pkt->getPeerId());
+ if (!answer_to_sender.empty()) {
+ // Send the answer to sender
+ SendChatMessage(pkt->getPeerId(), answer_to_sender);
}
}
@@ -1410,7 +1359,9 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
Check that target is reasonably close
(only when digging or placing things)
*/
- if (action == 0 || action == 2 || action == 3) {
+ static const bool enable_anticheat = !g_settings->getBool("disable_anticheat");
+ if ((action == 0 || action == 2 || action == 3) &&
+ (enable_anticheat && !isSingleplayer())) {
float d = player_pos.getDistanceFrom(pointed_pos_under);
float max_d = BS * 14; // Just some large enough value
if (d > max_d) {
@@ -1467,21 +1418,22 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
NOTE: This can be used in the future to check if
somebody is cheating, by checking the timing.
*/
+
MapNode n(CONTENT_IGNORE);
bool pos_ok;
- n = m_env->getMap().getNodeNoEx(p_under, &pos_ok);
- if (pos_ok)
- n = m_env->getMap().getNodeNoEx(p_under, &pos_ok);
+ n = m_env->getMap().getNodeNoEx(p_under, &pos_ok);
if (!pos_ok) {
infostream << "Server: Not punching: Node not found."
<< " Adding block to emerge queue."
<< std::endl;
- m_emerge->enqueueBlockEmerge(pkt->getPeerId(), getNodeBlockPos(p_above), false);
+ m_emerge->enqueueBlockEmerge(pkt->getPeerId(),
+ getNodeBlockPos(p_above), false);
}
if (n.getContent() != CONTENT_IGNORE)
m_script->node_on_punch(p_under, n, playersao, pointed);
+
// Cheat prevention
playersao->noCheatDigStart(p_under);
}
@@ -1538,14 +1490,15 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
MapNode n = m_env->getMap().getNodeNoEx(p_under, &pos_ok);
if (!pos_ok) {
infostream << "Server: Not finishing digging: Node not found."
- << " Adding block to emerge queue."
- << std::endl;
- m_emerge->enqueueBlockEmerge(pkt->getPeerId(), getNodeBlockPos(p_above), false);
+ << " Adding block to emerge queue."
+ << std::endl;
+ m_emerge->enqueueBlockEmerge(pkt->getPeerId(),
+ getNodeBlockPos(p_above), false);
}
/* Cheat prevention */
bool is_valid_dig = true;
- if (!isSingleplayer() && !g_settings->getBool("disable_anticheat")) {
+ if (enable_anticheat && !isSingleplayer()) {
v3s16 nocheat_p = playersao->getNoCheatDigPos();
float nocheat_t = playersao->getNoCheatDigTime();
playersao->noCheatDigEnd();
@@ -1703,13 +1656,30 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
}
} // action == 4
+
+ /*
+ 5: rightclick air
+ */
+ else if (action == 5) {
+ ItemStack item = playersao->getWieldedItem();
+
+ actionstream << player->getName() << " activates "
+ << item.name << std::endl;
+
+ if (m_script->item_OnSecondaryUse(
+ item, playersao)) {
+ if( playersao->setWieldedItem(item)) {
+ SendInventory(playersao);
+ }
+ }
+ }
/*
Catch invalid actions
*/
else {
- infostream << "WARNING: Server: Invalid action "
+ warningstream << "Server: Invalid action "
<< action << std::endl;
}
}
@@ -1838,7 +1808,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
*pkt >> salt >> verification_key >> is_empty;
verbosestream << "Server: Got TOSERVER_FIRST_SRP from " << addr_s
- << ", with is_empty= " << is_empty << std::endl;
+ << ", with is_empty=" << (is_empty == 1) << std::endl;
// Either this packet is sent because the user is new or to change the password
if (cstate == CS_HelloSent) {
@@ -1861,7 +1831,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
std::string initial_ver_key;
- initial_ver_key = encodeSRPVerifier(verification_key, salt);
+ initial_ver_key = encode_srp_verifier(verification_key, salt);
m_script->createAuth(playername, initial_ver_key);
acceptAuth(pkt->getPeerId(), false);
@@ -1873,7 +1843,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
return;
}
m_clients.event(pkt->getPeerId(), CSE_SudoLeave);
- std::string pw_db_field = encodeSRPVerifier(verification_key, salt);
+ 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;
@@ -1947,22 +1917,14 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
client->chosen_mech = chosen;
- std::string bytes_s;
- std::string bytes_v;
+ std::string salt;
+ std::string verifier;
if (based_on == 0) {
- char *p_bytes_s = 0;
- size_t len_s = 0;
- char *p_bytes_v = 0;
- size_t len_v = 0;
- getSRPVerifier(client->getName(), client->enc_pwd,
- &p_bytes_s, &len_s,
- &p_bytes_v, &len_v);
- bytes_s = std::string(p_bytes_s, len_s);
- bytes_v = std::string(p_bytes_v, len_v);
- free(p_bytes_s);
- free(p_bytes_v);
- } else if (!decodeSRPVerifier(client->enc_pwd, &bytes_s, &bytes_v)) {
+
+ generate_srp_verifier_and_salt(client->getName(), client->enc_pwd,
+ &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"
@@ -1976,8 +1938,8 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
client->auth_data = srp_verifier_new(SRP_SHA256, SRP_NG_2048,
client->getName().c_str(),
- (const unsigned char *) bytes_s.c_str(), bytes_s.size(),
- (const unsigned char *) bytes_v.c_str(), bytes_v.size(),
+ (const unsigned char *) salt.c_str(), salt.size(),
+ (const unsigned char *) verifier.c_str(), verifier.size(),
(const unsigned char *) bytes_A.c_str(), bytes_A.size(),
NULL, 0,
(unsigned char **) &bytes_B, &len_B, NULL, NULL);
@@ -1996,7 +1958,7 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
}
NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, pkt->getPeerId());
- resp_pkt << bytes_s << std::string(bytes_B, len_B);
+ resp_pkt << salt << std::string(bytes_B, len_B);
Send(&resp_pkt);
}
@@ -2060,9 +2022,8 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
} else {
actionstream << "Server: User " << client->getName()
<< " at " << getPeerAddress(pkt->getPeerId()).serializeString()
- << " supplied wrong (SRP) password from address "
- << getPeerAddress(pkt->getPeerId()).serializeString()
- << "." << std::endl;
+ << " supplied wrong password (auth mechanism: SRP)."
+ << std::endl;
DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD);
return;
}
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 269c2b9d6..3a2cb00b1 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "exceptions.h"
#include "debug.h"
#include "gamedef.h"
+#include "mapnode.h"
#include <fstream> // Used in applyTextureOverrides()
/*
@@ -48,44 +49,91 @@ void NodeBox::reset()
wall_top = aabb3f(-BS/2, BS/2-BS/16., -BS/2, BS/2, BS/2, BS/2);
wall_bottom = aabb3f(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2);
wall_side = aabb3f(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2);
+ // no default for other parts
+ connect_top.clear();
+ connect_bottom.clear();
+ connect_front.clear();
+ connect_left.clear();
+ connect_back.clear();
+ connect_right.clear();
}
void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
{
- int version = protocol_version >= 21 ? 2 : 1;
+ int version = 1;
+ if (protocol_version >= 27)
+ version = 3;
+ else if (protocol_version >= 21)
+ version = 2;
writeU8(os, version);
- if (version == 1 && type == NODEBOX_LEVELED)
- writeU8(os, NODEBOX_FIXED);
- else
- writeU8(os, type);
+ switch (type) {
+ case NODEBOX_LEVELED:
+ case NODEBOX_FIXED:
+ if (version == 1)
+ writeU8(os, NODEBOX_FIXED);
+ else
+ writeU8(os, type);
- if(type == NODEBOX_FIXED || type == NODEBOX_LEVELED)
- {
writeU16(os, fixed.size());
- for(std::vector<aabb3f>::const_iterator
+ for (std::vector<aabb3f>::const_iterator
i = fixed.begin();
- i != fixed.end(); i++)
+ i != fixed.end(); ++i)
{
writeV3F1000(os, i->MinEdge);
writeV3F1000(os, i->MaxEdge);
}
- }
- else if(type == NODEBOX_WALLMOUNTED)
- {
+ break;
+ case NODEBOX_WALLMOUNTED:
+ writeU8(os, type);
+
writeV3F1000(os, wall_top.MinEdge);
writeV3F1000(os, wall_top.MaxEdge);
writeV3F1000(os, wall_bottom.MinEdge);
writeV3F1000(os, wall_bottom.MaxEdge);
writeV3F1000(os, wall_side.MinEdge);
writeV3F1000(os, wall_side.MaxEdge);
+ break;
+ case NODEBOX_CONNECTED:
+ if (version <= 2) {
+ // send old clients nodes that can't be walked through
+ // to prevent abuse
+ writeU8(os, NODEBOX_FIXED);
+
+ writeU16(os, 1);
+ writeV3F1000(os, v3f(-BS/2, -BS/2, -BS/2));
+ writeV3F1000(os, v3f(BS/2, BS/2, BS/2));
+ } else {
+ writeU8(os, type);
+
+#define WRITEBOX(box) do { \
+ writeU16(os, (box).size()); \
+ for (std::vector<aabb3f>::const_iterator \
+ i = (box).begin(); \
+ i != (box).end(); ++i) { \
+ writeV3F1000(os, i->MinEdge); \
+ writeV3F1000(os, i->MaxEdge); \
+ }; } while (0)
+
+ WRITEBOX(fixed);
+ WRITEBOX(connect_top);
+ WRITEBOX(connect_bottom);
+ WRITEBOX(connect_front);
+ WRITEBOX(connect_left);
+ WRITEBOX(connect_back);
+ WRITEBOX(connect_right);
+ }
+ break;
+ default:
+ writeU8(os, type);
+ break;
}
}
void NodeBox::deSerialize(std::istream &is)
{
int version = readU8(is);
- if(version < 1 || version > 2)
+ if (version < 1 || version > 3)
throw SerializationError("unsupported NodeBox version");
reset();
@@ -112,6 +160,26 @@ void NodeBox::deSerialize(std::istream &is)
wall_side.MinEdge = readV3F1000(is);
wall_side.MaxEdge = readV3F1000(is);
}
+ else if (type == NODEBOX_CONNECTED)
+ {
+#define READBOXES(box) do { \
+ count = readU16(is); \
+ (box).reserve(count); \
+ while (count--) { \
+ v3f min = readV3F1000(is); \
+ v3f max = readV3F1000(is); \
+ (box).push_back(aabb3f(min, max)); }; } while (0)
+
+ u16 count;
+
+ READBOXES(fixed);
+ READBOXES(connect_top);
+ READBOXES(connect_bottom);
+ READBOXES(connect_front);
+ READBOXES(connect_left);
+ READBOXES(connect_back);
+ READBOXES(connect_right);
+ }
}
/*
@@ -139,7 +207,7 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const
}
}
-void TileDef::deSerialize(std::istream &is)
+void TileDef::deSerialize(std::istream &is, const u8 contenfeatures_version, const NodeDrawType drawtype)
{
int version = readU8(is);
name = deSerializeString(is);
@@ -153,6 +221,13 @@ void TileDef::deSerialize(std::istream &is)
tileable_horizontal = readU8(is);
tileable_vertical = readU8(is);
}
+
+ if ((contenfeatures_version < 8) &&
+ ((drawtype == NDT_MESH) ||
+ (drawtype == NDT_FIRELIKE) ||
+ (drawtype == NDT_LIQUID) ||
+ (drawtype == NDT_PLANTLIKE)))
+ backface_culling = false;
}
@@ -233,6 +308,7 @@ void ContentFeatures::reset()
diggable = true;
climbable = false;
buildable_to = false;
+ floodable = false;
rightclickable = true;
leveled = 0;
liquid_type = LIQUID_NONE;
@@ -253,6 +329,9 @@ void ContentFeatures::reset()
sound_footstep = SimpleSoundSpec();
sound_dig = SimpleSoundSpec("__group");
sound_dug = SimpleSoundSpec();
+ connects_to.clear();
+ connects_to_ids.clear();
+ connect_sides = 0;
}
void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
@@ -262,11 +341,12 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
return;
}
- writeU8(os, 7); // version
+ writeU8(os, protocol_version < 27 ? 7 : 8);
+
os<<serializeString(name);
writeU16(os, groups.size());
for(ItemGroupList::const_iterator
- i = groups.begin(); i != groups.end(); i++){
+ i = groups.begin(); i != groups.end(); ++i){
os<<serializeString(i->first);
writeS16(os, i->second);
}
@@ -318,14 +398,22 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
// the protocol version
os<<serializeString(mesh);
collision_box.serialize(os, protocol_version);
+ writeU8(os, floodable);
+ writeU16(os, connects_to_ids.size());
+ for (std::set<content_t>::const_iterator i = connects_to_ids.begin();
+ i != connects_to_ids.end(); ++i)
+ writeU16(os, *i);
+ writeU8(os, connect_sides);
}
void ContentFeatures::deSerialize(std::istream &is)
{
int version = readU8(is);
- if(version != 7){
+ if (version < 7) {
deSerializeOld(is, version);
return;
+ } else if (version > 8) {
+ throw SerializationError("unsupported ContentFeatures version");
}
name = deSerializeString(is);
@@ -337,15 +425,16 @@ void ContentFeatures::deSerialize(std::istream &is)
groups[name] = value;
}
drawtype = (enum NodeDrawType)readU8(is);
+
visual_scale = readF1000(is);
if(readU8(is) != 6)
throw SerializationError("unsupported tile count");
for(u32 i = 0; i < 6; i++)
- tiledef[i].deSerialize(is);
+ tiledef[i].deSerialize(is, version, drawtype);
if(readU8(is) != CF_SPECIAL_COUNT)
throw SerializationError("unsupported CF_SPECIAL_COUNT");
for(u32 i = 0; i < CF_SPECIAL_COUNT; i++)
- tiledef_special[i].deSerialize(is);
+ tiledef_special[i].deSerialize(is, version, drawtype);
alpha = readU8(is);
post_effect_color.setAlpha(readU8(is));
post_effect_color.setRed(readU8(is));
@@ -388,6 +477,12 @@ void ContentFeatures::deSerialize(std::istream &is)
// otherwise changes the protocol version
mesh = deSerializeString(is);
collision_box.deSerialize(is);
+ floodable = readU8(is);
+ u16 connects_to_size = readU16(is);
+ connects_to_ids.clear();
+ for (u16 i = 0; i < connects_to_size; i++)
+ connects_to_ids.insert(readU16(is));
+ connect_sides = readU8(is);
}catch(SerializationError &e) {};
}
@@ -405,7 +500,7 @@ public:
inline virtual const ContentFeatures& get(const MapNode &n) const;
virtual bool getId(const std::string &name, content_t &result) const;
virtual content_t getId(const std::string &name) const;
- virtual void getIds(const std::string &name, std::set<content_t> &result) const;
+ virtual bool getIds(const std::string &name, std::set<content_t> &result) const;
virtual const ContentFeatures& get(const std::string &name) const;
content_t allocateId();
virtual content_t set(const std::string &name, const ContentFeatures &def);
@@ -425,6 +520,8 @@ public:
virtual bool cancelNodeResolveCallback(NodeResolver *nr);
virtual void runNodeResolveCallbacks();
virtual void resetNodeResolveState();
+ virtual void mapNodeboxConnections();
+ virtual bool nodeboxConnects(MapNode from, MapNode to, u8 connect_face);
private:
void addNameIdMapping(content_t i, std::string name);
@@ -520,6 +617,7 @@ void CNodeDefManager::clear()
f.pointable = false;
f.diggable = false;
f.buildable_to = true;
+ f.floodable = true;
f.is_ground_content = true;
// Insert directly into containers
content_t c = CONTENT_AIR;
@@ -588,22 +686,23 @@ content_t CNodeDefManager::getId(const std::string &name) const
}
-void CNodeDefManager::getIds(const std::string &name,
+bool CNodeDefManager::getIds(const std::string &name,
std::set<content_t> &result) const
{
//TimeTaker t("getIds", NULL, PRECISION_MICRO);
if (name.substr(0,6) != "group:") {
content_t id = CONTENT_IGNORE;
- if(getId(name, id))
+ bool exists = getId(name, id);
+ if (exists)
result.insert(id);
- return;
+ return exists;
}
std::string group = name.substr(6);
std::map<std::string, GroupItems>::const_iterator
i = m_group_to_items.find(group);
if (i == m_group_to_items.end())
- return;
+ return true;
const GroupItems &items = i->second;
for (GroupItems::const_iterator j = items.begin();
@@ -612,6 +711,7 @@ void CNodeDefManager::getIds(const std::string &name,
result.insert((*j).first);
}
//printf("getIds: %dus\n", t.stop());
+ return true;
}
@@ -653,7 +753,7 @@ content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &d
// Don't allow redefining ignore (but allow air and unknown)
if (name == "ignore") {
- infostream << "NodeDefManager: WARNING: Ignoring "
+ warningstream << "NodeDefManager: Ignoring "
"CONTENT_IGNORE redefinition"<<std::endl;
return CONTENT_IGNORE;
}
@@ -663,7 +763,7 @@ content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &d
// Get new id
id = allocateId();
if (id == CONTENT_IGNORE) {
- infostream << "NodeDefManager: WARNING: Absolute "
+ warningstream << "NodeDefManager: Absolute "
"limit reached" << std::endl;
return CONTENT_IGNORE;
}
@@ -709,7 +809,7 @@ void CNodeDefManager::updateAliases(IItemDefManager *idef)
std::set<std::string> all = idef->getAll();
m_name_id_mapping_with_aliases.clear();
for (std::set<std::string>::iterator
- i = all.begin(); i != all.end(); i++) {
+ i = all.begin(); i != all.end(); ++i) {
std::string name = *i;
std::string convert_to = idef->getAlias(name);
content_t id;
@@ -791,7 +891,6 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
scene::ISceneManager* smgr = gamedef->getSceneManager();
scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator();
- bool new_style_water = g_settings->getBool("new_style_water");
bool connected_glass = g_settings->getBool("connected_glass");
bool opaque_water = g_settings->getBool("opaque_water");
bool enable_shaders = g_settings->getBool("enable_shaders");
@@ -839,12 +938,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
assert(f->liquid_type == LIQUID_SOURCE);
if (opaque_water)
f->alpha = 255;
- if (new_style_water){
- f->solidness = 0;
- } else {
- f->solidness = 1;
- f->backface_culling = false;
- }
+ f->solidness = 1;
is_liquid = true;
break;
case NDT_FLOWINGLIQUID:
@@ -895,17 +989,14 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
break;
case NDT_PLANTLIKE:
f->solidness = 0;
- f->backface_culling = false;
if (f->waving == 1)
material_type = TILE_MATERIAL_WAVING_PLANTS;
break;
case NDT_FIRELIKE:
- f->backface_culling = false;
f->solidness = 0;
break;
case NDT_MESH:
f->solidness = 0;
- f->backface_culling = false;
break;
case NDT_TORCHLIKE:
case NDT_SIGNLIKE:
@@ -937,7 +1028,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
// Tiles (fill in f->tiles[])
for (u16 j = 0; j < 6; j++) {
fillTileAttribs(tsrc, &f->tiles[j], &tiledef[j], tile_shader[j],
- use_normal_texture, f->backface_culling, f->alpha, material_type);
+ use_normal_texture, f->tiledef[j].backface_culling, f->alpha, material_type);
}
// Special tiles (fill in f->special_tiles[])
@@ -964,7 +1055,7 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef,
//Convert regular nodebox nodes to meshnodes
//Change the drawtype and apply scale
f->drawtype = NDT_MESH;
- f->mesh_ptr[0] = convertNodeboxNodeToMesh(f);
+ f->mesh_ptr[0] = convertNodeboxesToMesh(f->node_box.fixed);
v3f scale = v3f(1.0, 1.0, 1.0) * f->visual_scale;
scaleMesh(f->mesh_ptr[0], scale);
recalculateBoundingBox(f->mesh_ptr[0]);
@@ -1112,12 +1203,12 @@ void CNodeDefManager::deSerialize(std::istream &is)
// Check error conditions
if (i == CONTENT_IGNORE || i == CONTENT_AIR || i == CONTENT_UNKNOWN) {
- infostream << "NodeDefManager::deSerialize(): WARNING: "
+ warningstream << "NodeDefManager::deSerialize(): "
"not changing builtin node " << i << std::endl;
continue;
}
if (f.name == "") {
- infostream << "NodeDefManager::deSerialize(): WARNING: "
+ warningstream << "NodeDefManager::deSerialize(): "
"received empty name" << std::endl;
continue;
}
@@ -1125,7 +1216,7 @@ void CNodeDefManager::deSerialize(std::istream &is)
// Ignore aliases
u16 existing_id;
if (m_name_id_mapping.getId(f.name, existing_id) && i != existing_id) {
- infostream << "NodeDefManager::deSerialize(): WARNING: "
+ warningstream << "NodeDefManager::deSerialize(): "
"already defined with different ID: " << f.name << std::endl;
continue;
}
@@ -1162,7 +1253,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
os<<serializeString(name);
writeU16(os, groups.size());
for (ItemGroupList::const_iterator
- i = groups.begin(); i != groups.end(); i++) {
+ i = groups.begin(); i != groups.end(); ++i) {
os<<serializeString(i->first);
writeS16(os, i->second);
}
@@ -1210,7 +1301,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
os<<serializeString(name);
writeU16(os, groups.size());
for (ItemGroupList::const_iterator
- i = groups.begin(); i != groups.end(); i++) {
+ i = groups.begin(); i != groups.end(); ++i) {
os<<serializeString(i->first);
writeS16(os, i->second);
}
@@ -1262,7 +1353,6 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const
"Unsupported version requested");
}
-
void ContentFeatures::deSerializeOld(std::istream &is, int version)
{
if (version == 5) // In PROTOCOL_VERSION 13
@@ -1276,15 +1366,16 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
groups[name] = value;
}
drawtype = (enum NodeDrawType)readU8(is);
+
visual_scale = readF1000(is);
if (readU8(is) != 6)
throw SerializationError("unsupported tile count");
for (u32 i = 0; i < 6; i++)
- tiledef[i].deSerialize(is);
+ tiledef[i].deSerialize(is, version, drawtype);
if (readU8(is) != CF_SPECIAL_COUNT)
throw SerializationError("unsupported CF_SPECIAL_COUNT");
for (u32 i = 0; i < CF_SPECIAL_COUNT; i++)
- tiledef_special[i].deSerialize(is);
+ tiledef_special[i].deSerialize(is, version, drawtype);
alpha = readU8(is);
post_effect_color.setAlpha(readU8(is));
post_effect_color.setRed(readU8(is));
@@ -1328,12 +1419,12 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
if (readU8(is) != 6)
throw SerializationError("unsupported tile count");
for (u32 i = 0; i < 6; i++)
- tiledef[i].deSerialize(is);
+ tiledef[i].deSerialize(is, version, drawtype);
// CF_SPECIAL_COUNT in version 6 = 2
if (readU8(is) != 2)
throw SerializationError("unsupported CF_SPECIAL_COUNT");
for (u32 i = 0; i < 2; i++)
- tiledef_special[i].deSerialize(is);
+ tiledef_special[i].deSerialize(is, version, drawtype);
alpha = readU8(is);
post_effect_color.setAlpha(readU8(is));
post_effect_color.setRed(readU8(is));
@@ -1430,6 +1521,57 @@ void CNodeDefManager::resetNodeResolveState()
m_pending_resolve_callbacks.clear();
}
+void CNodeDefManager::mapNodeboxConnections()
+{
+ for (u32 i = 0; i < m_content_features.size(); i++) {
+ ContentFeatures *f = &m_content_features[i];
+ if ((f->drawtype != NDT_NODEBOX) || (f->node_box.type != NODEBOX_CONNECTED))
+ continue;
+ for (std::vector<std::string>::iterator it = f->connects_to.begin();
+ it != f->connects_to.end(); ++it) {
+ getIds(*it, f->connects_to_ids);
+ }
+ }
+}
+
+bool CNodeDefManager::nodeboxConnects(MapNode from, MapNode to, u8 connect_face)
+{
+ const ContentFeatures &f1 = get(from);
+
+ if ((f1.drawtype != NDT_NODEBOX) || (f1.node_box.type != NODEBOX_CONNECTED))
+ return false;
+
+ // lookup target in connected set
+ if (f1.connects_to_ids.find(to.param0) == f1.connects_to_ids.end())
+ return false;
+
+ const ContentFeatures &f2 = get(to);
+
+ if ((f2.drawtype == NDT_NODEBOX) && (f2.node_box.type == NODEBOX_CONNECTED))
+ // ignores actually looking if back connection exists
+ return (f2.connects_to_ids.find(from.param0) != f2.connects_to_ids.end());
+
+ // does to node declare usable faces?
+ if (f2.connect_sides > 0) {
+ if ((f2.param_type_2 == CPT2_FACEDIR) && (connect_face >= 4)) {
+ static const u8 rot[33 * 4] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 32, 16, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4 - back
+ 8, 4, 32, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8 - right
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 8, 4, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - front
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 16, 8, 4 // 32 - left
+ };
+ return (f2.connect_sides & rot[(connect_face * 4) + to.param2]);
+ }
+ return (f2.connect_sides & connect_face);
+ }
+ // the target is just a regular node, so connect no matter back connection
+ return true;
+}
////
//// NodeResolver
diff --git a/src/nodedef.h b/src/nodedef.h
index a4a7b6e41..58d0faffa 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -63,6 +63,8 @@ enum ContentParamType2
CPT2_WALLMOUNTED,
// Block level like FLOWINGLIQUID
CPT2_LEVELED,
+ // 2D rotation for things like plants
+ CPT2_DEGROTATE,
};
enum LiquidType
@@ -78,6 +80,7 @@ enum NodeBoxType
NODEBOX_FIXED, // Static separately defined box(es)
NODEBOX_WALLMOUNTED, // Box for wall mounted nodes; (top, bottom, side)
NODEBOX_LEVELED, // Same as fixed, but with dynamic height from param2. for snow, ...
+ NODEBOX_CONNECTED, // optionally draws nodeboxes if a neighbor node attaches
};
struct NodeBox
@@ -90,6 +93,13 @@ struct NodeBox
aabb3f wall_top;
aabb3f wall_bottom;
aabb3f wall_side; // being at the -X side
+ // NODEBOX_CONNECTED
+ std::vector<aabb3f> connect_top;
+ std::vector<aabb3f> connect_bottom;
+ std::vector<aabb3f> connect_front;
+ std::vector<aabb3f> connect_left;
+ std::vector<aabb3f> connect_back;
+ std::vector<aabb3f> connect_right;
NodeBox()
{ reset(); }
@@ -102,6 +112,30 @@ struct NodeBox
struct MapNode;
class NodeMetadata;
+enum NodeDrawType
+{
+ NDT_NORMAL, // A basic solid block
+ NDT_AIRLIKE, // Nothing is drawn
+ NDT_LIQUID, // Do not draw face towards same kind of flowing/source liquid
+ NDT_FLOWINGLIQUID, // A very special kind of thing
+ NDT_GLASSLIKE, // Glass-like, don't draw faces towards other glass
+ NDT_ALLFACES, // Leaves-like, draw all faces no matter what
+ NDT_ALLFACES_OPTIONAL, // Fancy -> allfaces, fast -> normal
+ NDT_TORCHLIKE,
+ NDT_SIGNLIKE,
+ NDT_PLANTLIKE,
+ NDT_FENCELIKE,
+ NDT_RAILLIKE,
+ NDT_NODEBOX,
+ NDT_GLASSLIKE_FRAMED, // Glass-like, draw connected frames and all all
+ // visible faces
+ // uses 2 textures, one for frames, second for faces
+ NDT_FIRELIKE, // Draw faces slightly rotated and only on connecting nodes,
+ NDT_GLASSLIKE_FRAMED_OPTIONAL, // enabled -> connected, disabled -> Glass-like
+ // uses 2 textures, one for frames, second for faces
+ NDT_MESH, // Uses static meshes
+};
+
/*
Stand-alone definition of a TileSpec (basically a server-side TileSpec)
*/
@@ -135,31 +169,7 @@ struct TileDef
}
void serialize(std::ostream &os, u16 protocol_version) const;
- void deSerialize(std::istream &is);
-};
-
-enum NodeDrawType
-{
- NDT_NORMAL, // A basic solid block
- NDT_AIRLIKE, // Nothing is drawn
- NDT_LIQUID, // Do not draw face towards same kind of flowing/source liquid
- NDT_FLOWINGLIQUID, // A very special kind of thing
- NDT_GLASSLIKE, // Glass-like, don't draw faces towards other glass
- NDT_ALLFACES, // Leaves-like, draw all faces no matter what
- NDT_ALLFACES_OPTIONAL, // Fancy -> allfaces, fast -> normal
- NDT_TORCHLIKE,
- NDT_SIGNLIKE,
- NDT_PLANTLIKE,
- NDT_FENCELIKE,
- NDT_RAILLIKE,
- NDT_NODEBOX,
- NDT_GLASSLIKE_FRAMED, // Glass-like, draw connected frames and all all
- // visible faces
- // uses 2 textures, one for frames, second for faces
- NDT_FIRELIKE, // Draw faces slightly rotated and only on connecting nodes,
- NDT_GLASSLIKE_FRAMED_OPTIONAL, // enabled -> connected, disabled -> Glass-like
- // uses 2 textures, one for frames, second for faces
- NDT_MESH, // Uses static meshes
+ void deSerialize(std::istream &is, const u8 contentfeatures_version, const NodeDrawType drawtype);
};
#define CF_SPECIAL_COUNT 6
@@ -227,6 +237,8 @@ struct ContentFeatures
bool climbable;
// Player can build on these
bool buildable_to;
+ // Liquids flow into and replace node
+ bool floodable;
// Player cannot build to these (placement prediction disabled)
bool rightclickable;
// Flowing liquid or snow, value = default level
@@ -259,12 +271,17 @@ struct ContentFeatures
bool legacy_facedir_simple;
// Set to true if wall_mounted used to be set to true
bool legacy_wallmounted;
+ // for NDT_CONNECTED pairing
+ u8 connect_sides;
// Sound properties
SimpleSoundSpec sound_footstep;
SimpleSoundSpec sound_dig;
SimpleSoundSpec sound_dug;
+ std::vector<std::string> connects_to;
+ std::set<content_t> connects_to_ids;
+
/*
Methods
*/
@@ -299,7 +316,8 @@ public:
virtual bool getId(const std::string &name, content_t &result) const=0;
virtual content_t getId(const std::string &name) const=0;
// Allows "group:name" in addition to regular node names
- virtual void getIds(const std::string &name, std::set<content_t> &result)
+ // returns false if node name not found, true otherwise
+ virtual bool getIds(const std::string &name, std::set<content_t> &result)
const=0;
virtual const ContentFeatures &get(const std::string &name) const=0;
@@ -309,6 +327,7 @@ public:
virtual void pendNodeResolve(NodeResolver *nr)=0;
virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0;
+ virtual bool nodeboxConnects(const MapNode from, const MapNode to, u8 connect_face)=0;
};
class IWritableNodeDefManager : public INodeDefManager {
@@ -323,7 +342,7 @@ public:
// If not found, returns CONTENT_IGNORE
virtual content_t getId(const std::string &name) const=0;
// Allows "group:name" in addition to regular node names
- virtual void getIds(const std::string &name, std::set<content_t> &result)
+ virtual bool getIds(const std::string &name, std::set<content_t> &result)
const=0;
// If not found, returns the features of CONTENT_UNKNOWN
virtual const ContentFeatures &get(const std::string &name) const=0;
@@ -363,6 +382,7 @@ public:
virtual bool cancelNodeResolveCallback(NodeResolver *nr)=0;
virtual void runNodeResolveCallbacks()=0;
virtual void resetNodeResolveState()=0;
+ virtual void mapNodeboxConnections()=0;
};
IWritableNodeDefManager *createNodeDefManager();
diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp
index d4da7a5ed..126889ecf 100644
--- a/src/nodemetadata.cpp
+++ b/src/nodemetadata.cpp
@@ -30,9 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
NodeMetadata
*/
-NodeMetadata::NodeMetadata(IGameDef *gamedef):
+NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr):
m_stringvars(),
- m_inventory(new Inventory(gamedef->idef()))
+ m_inventory(new Inventory(item_def_mgr))
{
}
@@ -96,39 +96,39 @@ void NodeMetadataList::serialize(std::ostream &os) const
for(std::map<v3s16, NodeMetadata*>::const_iterator
i = m_data.begin();
- i != m_data.end(); i++)
+ i != m_data.end(); ++i)
{
v3s16 p = i->first;
NodeMetadata *data = i->second;
- u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X;
+ u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X;
writeU16(os, p16);
data->serialize(os);
}
}
-void NodeMetadataList::deSerialize(std::istream &is, IGameDef *gamedef)
+void NodeMetadataList::deSerialize(std::istream &is, IItemDefManager *item_def_mgr)
{
clear();
u8 version = readU8(is);
- if(version == 0){
+ if (version == 0) {
// Nothing
return;
}
- if(version != 1){
- infostream<<__FUNCTION_NAME<<": version "<<version<<" not supported"
- <<std::endl;
- throw SerializationError("NodeMetadataList::deSerialize");
+ if (version != 1) {
+ std::string err_str = std::string(FUNCTION_NAME)
+ + ": version " + itos(version) + " not supported";
+ infostream << err_str << std::endl;
+ throw SerializationError(err_str);
}
u16 count = readU16(is);
- for(u16 i=0; i<count; i++)
- {
+ for (u16 i=0; i < count; i++) {
u16 p16 = readU16(is);
v3s16 p;
@@ -138,16 +138,15 @@ void NodeMetadataList::deSerialize(std::istream &is, IGameDef *gamedef)
p16 &= MAP_BLOCKSIZE - 1;
p.X = p16;
- if(m_data.find(p) != m_data.end())
- {
- infostream<<"WARNING: NodeMetadataList::deSerialize(): "
+ if (m_data.find(p) != m_data.end()) {
+ warningstream<<"NodeMetadataList::deSerialize(): "
<<"already set data at position"
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring."
<<std::endl;
continue;
}
- NodeMetadata *data = new NodeMetadata(gamedef);
+ NodeMetadata *data = new NodeMetadata(item_def_mgr);
data->deSerialize(is);
m_data[p] = data;
}
diff --git a/src/nodemetadata.h b/src/nodemetadata.h
index 8e84e5af3..8d1298212 100644
--- a/src/nodemetadata.h
+++ b/src/nodemetadata.h
@@ -35,12 +35,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
class Inventory;
-class IGameDef;
+class IItemDefManager;
class NodeMetadata
{
public:
- NodeMetadata(IGameDef *gamedef);
+ NodeMetadata(IItemDefManager *item_def_mgr);
~NodeMetadata();
void serialize(std::ostream &os) const;
@@ -80,7 +80,7 @@ public:
~NodeMetadataList();
void serialize(std::ostream &os) const;
- void deSerialize(std::istream &is, IGameDef *gamedef);
+ void deSerialize(std::istream &is, IItemDefManager *item_def_mgr);
// Add all keys in this list to the vector keys
std::vector<v3s16> getAllKeys();
diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp
index 790b46076..350940546 100644
--- a/src/nodetimer.cpp
+++ b/src/nodetimer.cpp
@@ -45,9 +45,9 @@ void NodeTimer::deSerialize(std::istream &is)
void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const
{
- if(map_format_version == 24){
+ if (map_format_version == 24) {
// Version 0 is a placeholder for "nothing to see here; go away."
- if(m_data.empty()){
+ if (m_data.empty()) {
writeU8(os, 0); // version
return;
}
@@ -55,18 +55,18 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const
writeU16(os, m_data.size());
}
- if(map_format_version >= 25){
- writeU8(os, 2+4+4);
+ if (map_format_version >= 25) {
+ writeU8(os, 2 + 4 + 4); // length of the data for a single timer
writeU16(os, m_data.size());
}
- for(std::map<v3s16, NodeTimer>::const_iterator
+ for (std::map<v3s16, NodeTimer>::const_iterator
i = m_data.begin();
- i != m_data.end(); i++){
+ i != m_data.end(); ++i) {
v3s16 p = i->first;
NodeTimer t = i->second;
- u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X;
+ u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X;
writeU16(os, p16);
t.serialize(os);
}
@@ -75,7 +75,7 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const
void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version)
{
m_data.clear();
-
+
if(map_format_version == 24){
u8 timer_version = readU8(is);
if(timer_version == 0)
@@ -108,7 +108,7 @@ void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version)
if(t.timeout <= 0)
{
- infostream<<"WARNING: NodeTimerList::deSerialize(): "
+ warningstream<<"NodeTimerList::deSerialize(): "
<<"invalid data at position"
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring."
<<std::endl;
@@ -117,7 +117,7 @@ void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version)
if(m_data.find(p) != m_data.end())
{
- infostream<<"WARNING: NodeTimerList::deSerialize(): "
+ warningstream<<"NodeTimerList::deSerialize(): "
<<"already set data at position"
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring."
<<std::endl;
@@ -134,7 +134,7 @@ std::map<v3s16, NodeTimer> NodeTimerList::step(float dtime)
// Increment timers
for(std::map<v3s16, NodeTimer>::iterator
i = m_data.begin();
- i != m_data.end(); i++){
+ i != m_data.end(); ++i){
v3s16 p = i->first;
NodeTimer t = i->second;
t.elapsed += dtime;
@@ -146,7 +146,7 @@ std::map<v3s16, NodeTimer> NodeTimerList::step(float dtime)
// Delete elapsed timers
for(std::map<v3s16, NodeTimer>::const_iterator
i = elapsed_timers.begin();
- i != elapsed_timers.end(); i++){
+ i != elapsed_timers.end(); ++i){
v3s16 p = i->first;
m_data.erase(p);
}
diff --git a/src/noise.cpp b/src/noise.cpp
index 2948fb765..2ddc3926f 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -99,17 +99,17 @@ u32 PcgRandom::range(u32 bound)
Using rand() % 3, the number 0 would be twice as likely to appear.
With a very large RNG range, the effect becomes less prevalent but
still present. This can be solved by modifying the range of the RNG
- to become a multiple of bound by dropping values above the a threshhold.
- In our example, threshhold == 4 - 3 = 1 % 3 == 1, so reject 0, thus
+ to become a multiple of bound by dropping values above the a threshold.
+ In our example, threshold == 4 - 3 = 1 % 3 == 1, so reject 0, thus
making the range 3 with no bias.
This loop looks dangerous, but will always terminate due to the
RNG's property of uniformity.
*/
- u32 threshhold = -bound % bound;
+ u32 threshold = -bound % bound;
u32 r;
- while ((r = next()) < threshhold)
+ while ((r = next()) < threshold)
;
return r % bound;
@@ -158,21 +158,21 @@ s32 PcgRandom::randNormalDist(s32 min, s32 max, int num_trials)
float noise2d(int x, int y, int seed)
{
- int n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y
+ unsigned int n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y
+ NOISE_MAGIC_SEED * seed) & 0x7fffffff;
n = (n >> 13) ^ n;
n = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;
- return 1.f - (float)n / 0x40000000;
+ return 1.f - (float)(int)n / 0x40000000;
}
float noise3d(int x, int y, int z, int seed)
{
- int n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y + NOISE_MAGIC_Z * z
+ unsigned int n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y + NOISE_MAGIC_Z * z
+ NOISE_MAGIC_SEED * seed) & 0x7fffffff;
n = (n >> 13) ^ n;
n = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;
- return 1.f - (float)n / 0x40000000;
+ return 1.f - (float)(int)n / 0x40000000;
}
diff --git a/src/objdef.h b/src/objdef.h
index 65e5c0176..77189e454 100644
--- a/src/objdef.h
+++ b/src/objdef.h
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef OBJDEF_HEADER
#define OBJDEF_HEADER
+#include "util/basic_macros.h"
#include "porting.h"
class IGameDef;
@@ -90,6 +91,9 @@ protected:
INodeDefManager *m_ndef;
std::vector<ObjDef *> m_objects;
ObjDefType m_objtype;
+
+private:
+ DISABLE_CLASS_COPY(ObjDefManager);
};
#endif
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index f560f5934..89ca26274 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -42,7 +42,11 @@ ObjectProperties::ObjectProperties():
automatic_rotate(0),
stepheight(0),
automatic_face_movement_dir(false),
- automatic_face_movement_dir_offset(0.0)
+ automatic_face_movement_dir_offset(0.0),
+ backface_culling(true),
+ nametag(""),
+ nametag_color(255, 255, 255, 255),
+ automatic_face_movement_max_rotation_per_sec(-1)
{
textures.push_back("unknown_object.png");
colors.push_back(video::SColor(255,255,255,255));
@@ -74,6 +78,10 @@ std::string ObjectProperties::dump()
os<<", is_visible="<<is_visible;
os<<", makes_footstep_sound="<<makes_footstep_sound;
os<<", automatic_rotate="<<automatic_rotate;
+ os<<", backface_culling="<<backface_culling;
+ os << ", nametag=" << nametag;
+ os << ", nametag_color=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed()
+ << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" ";
return os.str();
}
@@ -106,6 +114,12 @@ void ObjectProperties::serialize(std::ostream &os) const
writeF1000(os,stepheight);
writeU8(os, automatic_face_movement_dir);
writeF1000(os, automatic_face_movement_dir_offset);
+ writeU8(os, backface_culling);
+ os << serializeString(nametag);
+ writeARGB8(os, nametag_color);
+ writeF1000(os, automatic_face_movement_max_rotation_per_sec);
+ os << serializeString(infotext);
+
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
}
@@ -142,6 +156,11 @@ void ObjectProperties::deSerialize(std::istream &is)
stepheight = readF1000(is);
automatic_face_movement_dir = readU8(is);
automatic_face_movement_dir_offset = readF1000(is);
+ backface_culling = readU8(is);
+ nametag = deSerializeString(is);
+ nametag_color = readARGB8(is);
+ automatic_face_movement_max_rotation_per_sec = readF1000(is);
+ infotext = deSerializeString(is);
}catch(SerializationError &e){}
}
else
@@ -149,4 +168,3 @@ void ObjectProperties::deSerialize(std::istream &is)
throw SerializationError("unsupported ObjectProperties version");
}
}
-
diff --git a/src/object_properties.h b/src/object_properties.h
index 4b7f9a5eb..082d9a529 100644
--- a/src/object_properties.h
+++ b/src/object_properties.h
@@ -33,7 +33,7 @@ struct ObjectProperties
bool physical;
bool collideWithObjects;
float weight;
- core::aabbox3d<f32> collisionbox;
+ aabb3f collisionbox;
std::string visual;
std::string mesh;
v2f visual_size;
@@ -47,7 +47,11 @@ struct ObjectProperties
f32 stepheight;
bool automatic_face_movement_dir;
f32 automatic_face_movement_dir_offset;
-
+ bool backface_culling;
+ std::string nametag;
+ video::SColor nametag_color;
+ f32 automatic_face_movement_max_rotation_per_sec;
+ std::string infotext;
ObjectProperties();
std::string dump();
@@ -56,4 +60,3 @@ struct ObjectProperties
};
#endif
-
diff --git a/src/particles.cpp b/src/particles.cpp
index 15e2a6597..525258a25 100644
--- a/src/particles.cpp
+++ b/src/particles.cpp
@@ -88,7 +88,7 @@ Particle::Particle(
m_vertical = vertical;
// Irrlicht stuff
- m_collisionbox = core::aabbox3d<f32>
+ m_collisionbox = aabb3f
(-size/2,-size/2,-size/2,size/2,size/2,size/2);
this->setAutomaticCulling(scene::EAC_OFF);
@@ -128,17 +128,15 @@ void Particle::step(float dtime)
m_time += dtime;
if (m_collisiondetection)
{
- core::aabbox3d<f32> box = m_collisionbox;
+ aabb3f box = m_collisionbox;
v3f p_pos = m_pos*BS;
v3f p_velocity = m_velocity*BS;
- v3f p_acceleration = m_acceleration*BS;
collisionMoveSimple(m_env, m_gamedef,
BS*0.5, box,
0, dtime,
- p_pos, p_velocity, p_acceleration);
+ &p_pos, &p_velocity, m_acceleration * BS);
m_pos = p_pos/BS;
m_velocity = p_velocity/BS;
- m_acceleration = p_acceleration/BS;
}
else
{
@@ -288,7 +286,7 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
}
else
{
- i++;
+ ++i;
}
}
}
@@ -347,8 +345,8 @@ void ParticleManager::step(float dtime)
void ParticleManager::stepSpawners (float dtime)
{
- JMutexAutoLock lock(m_spawner_list_lock);
- for(std::map<u32, ParticleSpawner*>::iterator i =
+ MutexAutoLock lock(m_spawner_list_lock);
+ for (std::map<u32, ParticleSpawner*>::iterator i =
m_particle_spawners.begin();
i != m_particle_spawners.end();)
{
@@ -360,14 +358,14 @@ void ParticleManager::stepSpawners (float dtime)
else
{
i->second->step(dtime, m_env);
- i++;
+ ++i;
}
}
}
void ParticleManager::stepParticles (float dtime)
{
- JMutexAutoLock lock(m_particle_list_lock);
+ MutexAutoLock lock(m_particle_list_lock);
for(std::vector<Particle*>::iterator i = m_particles.begin();
i != m_particles.end();)
{
@@ -380,15 +378,15 @@ void ParticleManager::stepParticles (float dtime)
else
{
(*i)->step(dtime);
- i++;
+ ++i;
}
}
}
void ParticleManager::clearAll ()
{
- JMutexAutoLock lock(m_spawner_list_lock);
- JMutexAutoLock lock2(m_particle_list_lock);
+ MutexAutoLock lock(m_spawner_list_lock);
+ MutexAutoLock lock2(m_particle_list_lock);
for(std::map<u32, ParticleSpawner*>::iterator i =
m_particle_spawners.begin();
i != m_particle_spawners.end();)
@@ -410,94 +408,92 @@ void ParticleManager::clearAll ()
void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef,
scene::ISceneManager* smgr, LocalPlayer *player)
{
- if (event->type == CE_DELETE_PARTICLESPAWNER) {
- JMutexAutoLock 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);
+ 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);
+ }
+ // no allocated memory in delete event
+ break;
}
- // no allocated memory in delete event
- return;
- }
+ 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);
+ }
+ }
- if (event->type == CE_ADD_PARTICLESPAWNER) {
+ video::ITexture *texture =
+ gamedef->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture));
+
+ ParticleSpawner* toadd = new ParticleSpawner(gamedef, smgr, 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.vertical,
+ texture,
+ event->add_particlespawner.id,
+ 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;
- {
- JMutexAutoLock 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);
+ MutexAutoLock lock(m_spawner_list_lock);
+ m_particle_spawners.insert(
+ std::pair<u32, ParticleSpawner*>(
+ event->add_particlespawner.id,
+ toadd));
}
+ break;
}
- video::ITexture *texture =
- gamedef->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture));
-
- ParticleSpawner* toadd = new ParticleSpawner(gamedef, smgr, 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.vertical,
- texture,
- event->add_particlespawner.id,
- 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;
+ case CE_SPAWN_PARTICLE: {
+ video::ITexture *texture =
+ gamedef->tsrc()->getTextureForMesh(*(event->spawn_particle.texture));
+
+ Particle* toadd = new Particle(gamedef, smgr, 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.vertical,
+ texture,
+ v2f(0.0, 0.0),
+ v2f(1.0, 1.0));
- {
- JMutexAutoLock lock(m_spawner_list_lock);
- m_particle_spawners.insert(
- std::pair<u32, ParticleSpawner*>(
- event->add_particlespawner.id,
- toadd));
- }
+ addParticle(toadd);
- return;
- }
+ delete event->spawn_particle.pos;
+ delete event->spawn_particle.vel;
+ delete event->spawn_particle.acc;
- if (event->type == CE_SPAWN_PARTICLE) {
- video::ITexture *texture =
- gamedef->tsrc()->getTextureForMesh(*(event->spawn_particle.texture));
-
- Particle* toadd = new Particle(gamedef, smgr, 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.vertical,
- texture,
- v2f(0.0, 0.0),
- v2f(1.0, 1.0));
-
- addParticle(toadd);
-
- delete event->spawn_particle.pos;
- delete event->spawn_particle.vel;
- delete event->spawn_particle.acc;
-
- return;
+ break;
+ }
+ default: break;
}
}
@@ -568,6 +564,6 @@ void ParticleManager::addNodeParticle(IGameDef* gamedef, scene::ISceneManager* s
void ParticleManager::addParticle(Particle* toadd)
{
- JMutexAutoLock lock(m_particle_list_lock);
+ MutexAutoLock lock(m_particle_list_lock);
m_particles.push_back(toadd);
}
diff --git a/src/particles.h b/src/particles.h
index 2bc2e7bfa..dda84385c 100644
--- a/src/particles.h
+++ b/src/particles.h
@@ -52,7 +52,7 @@ class Particle : public scene::ISceneNode
);
~Particle();
- virtual const core::aabbox3d<f32>& getBoundingBox() const
+ virtual const aabb3f &getBoundingBox() const
{
return m_box;
}
@@ -85,8 +85,8 @@ private:
ClientEnvironment *m_env;
IGameDef *m_gamedef;
- core::aabbox3d<f32> m_box;
- core::aabbox3d<f32> m_collisionbox;
+ aabb3f m_box;
+ aabb3f m_collisionbox;
video::SMaterial m_material;
v2f m_texpos;
v2f m_texsize;
@@ -190,8 +190,8 @@ private:
std::map<u32, ParticleSpawner*> m_particle_spawners;
ClientEnvironment* m_env;
- JMutex m_particle_list_lock;
- JMutex m_spawner_list_lock;
+ Mutex m_particle_list_lock;
+ Mutex m_spawner_list_lock;
};
#endif
diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp
index 8eb52bfd1..57a008ead 100644
--- a/src/pathfinder.cpp
+++ b/src/pathfinder.cpp
@@ -1,6 +1,7 @@
/*
Minetest
Copyright (C) 2013 sapier, sapier at gmx dot net
+Copyright (C) 2016 est31, <MTest31@outlook.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
@@ -23,11 +24,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "pathfinder.h"
#include "environment.h"
+#include "gamedef.h"
+#include "nodedef.h"
#include "map.h"
#include "log.h"
+#include "irr_aabb3d.h"
+//#define PATHFINDER_DEBUG
+//#define PATHFINDER_CALC_TIME
+
+#ifdef PATHFINDER_DEBUG
+ #include <string>
+#endif
#ifdef PATHFINDER_DEBUG
-#include <iomanip>
+ #include <iomanip>
#endif
#ifdef PATHFINDER_CALC_TIME
#include <sys/time.h>
@@ -37,8 +47,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Typedefs and macros */
/******************************************************************************/
-//#define PATHFINDER_CALC_TIME
-
/** shortcut to print a 3d pos */
#define PPOS(pos) "(" << pos.X << "," << pos.Y << "," << pos.Z << ")"
@@ -51,32 +59,349 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define ERROR_TARGET std::cout
#else
#define DEBUG_OUT(a) while(0)
-#define INFO_TARGET infostream << "pathfinder: "
-#define VERBOSE_TARGET verbosestream << "pathfinder: "
-#define ERROR_TARGET errorstream << "pathfinder: "
+#define INFO_TARGET infostream << "Pathfinder: "
+#define VERBOSE_TARGET verbosestream << "Pathfinder: "
+#define ERROR_TARGET errorstream << "Pathfinder: "
+#endif
+
+/******************************************************************************/
+/* Class definitions */
+/******************************************************************************/
+
+
+/** representation of cost in specific direction */
+class PathCost {
+public:
+
+ /** default constructor */
+ PathCost();
+
+ /** copy constructor */
+ PathCost(const PathCost &b);
+
+ /** assignment operator */
+ PathCost &operator= (const PathCost &b);
+
+ bool valid; /**< movement is possible */
+ int value; /**< cost of movement */
+ int direction; /**< y-direction of movement */
+ bool updated; /**< this cost has ben calculated */
+
+};
+
+
+/** representation of a mapnode to be used for pathfinding */
+class PathGridnode {
+
+public:
+ /** default constructor */
+ PathGridnode();
+
+ /** copy constructor */
+ PathGridnode(const PathGridnode &b);
+
+ /**
+ * assignment operator
+ * @param b node to copy
+ */
+ PathGridnode &operator= (const PathGridnode &b);
+
+ /**
+ * read cost in a specific direction
+ * @param dir direction of cost to fetch
+ */
+ PathCost getCost(v3s16 dir);
+
+ /**
+ * set cost value for movement
+ * @param dir direction to set cost for
+ * @cost cost to set
+ */
+ void setCost(v3s16 dir, PathCost cost);
+
+ bool valid; /**< node is on surface */
+ bool target; /**< node is target position */
+ bool source; /**< node is stating position */
+ int totalcost; /**< cost to move here from starting point */
+ v3s16 sourcedir; /**< origin of movement for current cost */
+ v3s16 pos; /**< real position of node */
+ PathCost directions[4]; /**< cost in different directions */
+
+ /* debug values */
+ bool is_element; /**< node is element of path detected */
+ char type; /**< type of node */
+};
+
+class Pathfinder;
+
+/** Abstract class to manage the map data */
+class GridNodeContainer {
+public:
+ virtual PathGridnode &access(v3s16 p)=0;
+ virtual ~GridNodeContainer() {}
+protected:
+ Pathfinder *m_pathf;
+
+ void initNode(v3s16 ipos, PathGridnode *p_node);
+};
+
+class ArrayGridNodeContainer : public GridNodeContainer {
+public:
+ virtual ~ArrayGridNodeContainer() {}
+ ArrayGridNodeContainer(Pathfinder *pathf, v3s16 dimensions);
+ virtual PathGridnode &access(v3s16 p);
+private:
+ v3s16 m_dimensions;
+
+ int m_x_stride;
+ int m_y_stride;
+ std::vector<PathGridnode> m_nodes_array;
+};
+
+class MapGridNodeContainer : public GridNodeContainer {
+public:
+ virtual ~MapGridNodeContainer() {}
+ MapGridNodeContainer(Pathfinder *pathf);
+ virtual PathGridnode &access(v3s16 p);
+private:
+ std::map<v3s16, PathGridnode> m_nodes;
+};
+
+/** class doing pathfinding */
+class Pathfinder {
+
+public:
+ /**
+ * default constructor
+ */
+ Pathfinder();
+
+ ~Pathfinder();
+
+ /**
+ * path evaluation function
+ * @param env environment to look for path
+ * @param source origin of path
+ * @param destination end position of path
+ * @param searchdistance maximum number of nodes to look in each direction
+ * @param max_jump maximum number of blocks a path may jump up
+ * @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,
+ v3s16 destination,
+ unsigned int searchdistance,
+ unsigned int max_jump,
+ unsigned int max_drop,
+ PathAlgorithm algo);
+
+private:
+ /* helper functions */
+
+ /**
+ * transform index pos to mappos
+ * @param ipos a index position
+ * @return map position
+ */
+ v3s16 getRealPos(v3s16 ipos);
+
+ /**
+ * transform mappos to index pos
+ * @param pos a real pos
+ * @return index position
+ */
+ v3s16 getIndexPos(v3s16 pos);
+
+ /**
+ * get gridnode at a specific index position
+ * @param ipos index position
+ * @return gridnode for index
+ */
+ PathGridnode &getIndexElement(v3s16 ipos);
+
+ /**
+ * Get gridnode at a specific index position
+ * @return gridnode for index
+ */
+ PathGridnode &getIdxElem(s16 x, s16 y, s16 z);
+
+ /**
+ * invert a 3d position
+ * @param pos 3d position
+ * @return pos *-1
+ */
+ v3s16 invert(v3s16 pos);
+
+ /**
+ * check if a index is within current search area
+ * @param index position to validate
+ * @return true/false
+ */
+ bool isValidIndex(v3s16 index);
+
+ /**
+ * translate position to float position
+ * @param pos integer position
+ * @return float position
+ */
+ v3f tov3f(v3s16 pos);
+
+
+ /* algorithm functions */
+
+ /**
+ * calculate 2d manahttan distance to target on the xz plane
+ * @param pos position to calc distance
+ * @return integer distance
+ */
+ int getXZManhattanDist(v3s16 pos);
+
+ /**
+ * get best direction based uppon heuristics
+ * @param directions list of unchecked directions
+ * @param g_pos mapnode to start from
+ * @return direction to check
+ */
+ v3s16 getDirHeuristic(std::vector<v3s16> &directions, PathGridnode &g_pos);
+
+ /**
+ * build internal data representation of search area
+ * @return true/false if costmap creation was successfull
+ */
+ bool buildCostmap();
+
+ /**
+ * calculate cost of movement
+ * @param pos real world position to start movement
+ * @param dir direction to move to
+ * @return cost information
+ */
+ PathCost calcCost(v3s16 pos, v3s16 dir);
+
+ /**
+ * recursive update whole search areas total cost information
+ * @param ipos position to check next
+ * @param srcdir positionc checked last time
+ * @param total_cost cost of moving to ipos
+ * @param level current recursion depth
+ * @return true/false path to destination has been found
+ */
+ bool updateAllCosts(v3s16 ipos, v3s16 srcdir, int total_cost, int level);
+
+ /**
+ * recursive try to find a patrh to destionation
+ * @param ipos position to check next
+ * @param srcdir positionc checked last time
+ * @param total_cost cost of moving to ipos
+ * @param level current recursion depth
+ * @return true/false path to destination has been found
+ */
+ bool updateCostHeuristic(v3s16 ipos, v3s16 srcdir, int current_cost, int level);
+
+ /**
+ * recursive build a vector containing all nodes from source to destination
+ * @param path vector to add nodes to
+ * @param pos pos to check next
+ * @param level recursion depth
+ */
+ void buildPath(std::vector<v3s16> &path, v3s16 pos, int level);
+
+ /* variables */
+ int m_max_index_x; /**< max index of search area in x direction */
+ int m_max_index_y; /**< max index of search area in y direction */
+ int m_max_index_z; /**< max index of search area in z direction */
+
+
+ int m_searchdistance; /**< max distance to search in each direction */
+ int m_maxdrop; /**< maximum number of blocks a path may drop */
+ int m_maxjump; /**< maximum number of blocks a path may jump */
+ int m_min_target_distance; /**< current smalest path to target */
+
+ bool m_prefetch; /**< prefetch cost data */
+
+ v3s16 m_start; /**< source position */
+ v3s16 m_destination; /**< destination position */
+
+ core::aabbox3d<s16> m_limits; /**< position limits in real map coordinates */
+
+ /** contains all map data already collected and analyzed.
+ Access it via the getIndexElement/getIdxElem methods. */
+ friend class GridNodeContainer;
+ GridNodeContainer *m_nodes_container;
+
+ ServerEnvironment *m_env; /**< minetest environment pointer */
+
+#ifdef PATHFINDER_DEBUG
+
+ /**
+ * print collected cost information
+ */
+ void printCost();
+
+ /**
+ * print collected cost information in a specific direction
+ * @param dir direction to print
+ */
+ void printCost(PathDirections dir);
+
+ /**
+ * print type of node as evaluated
+ */
+ void printType();
+
+ /**
+ * print pathlenght for all nodes in search area
+ */
+ void printPathLen();
+
+ /**
+ * print a path
+ * @param path path to show
+ */
+ void printPath(std::vector<v3s16> path);
+
+ /**
+ * print y direction for all movements
+ */
+ void printYdir();
+
+ /**
+ * print y direction for moving in a specific direction
+ * @param dir direction to show data
+ */
+ void printYdir(PathDirections dir);
+
+ /**
+ * helper function to translate a direction to speaking text
+ * @param dir direction to translate
+ * @return textual name of direction
+ */
+ std::string dirToName(PathDirections dir);
#endif
+};
/******************************************************************************/
/* implementation */
/******************************************************************************/
-std::vector<v3s16> get_Path(ServerEnvironment* env,
+std::vector<v3s16> get_path(ServerEnvironment* env,
v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
unsigned int max_drop,
- algorithm algo) {
-
- pathfinder searchclass;
+ PathAlgorithm algo)
+{
+ Pathfinder searchclass;
- return searchclass.get_Path(env,
- source,destination,
- searchdistance,max_jump,max_drop,algo);
+ return searchclass.getPath(env,
+ source, destination,
+ searchdistance, max_jump, max_drop, algo);
}
/******************************************************************************/
-path_cost::path_cost()
+PathCost::PathCost()
: valid(false),
value(0),
direction(0),
@@ -86,7 +411,8 @@ path_cost::path_cost()
}
/******************************************************************************/
-path_cost::path_cost(const path_cost& b) {
+PathCost::PathCost(const PathCost &b)
+{
valid = b.valid;
direction = b.direction;
value = b.value;
@@ -94,7 +420,8 @@ path_cost::path_cost(const path_cost& b) {
}
/******************************************************************************/
-path_cost& path_cost::operator= (const path_cost& b) {
+PathCost &PathCost::operator= (const PathCost &b)
+{
valid = b.valid;
direction = b.direction;
value = b.value;
@@ -104,14 +431,13 @@ path_cost& path_cost::operator= (const path_cost& b) {
}
/******************************************************************************/
-path_gridnode::path_gridnode()
+PathGridnode::PathGridnode()
: valid(false),
target(false),
source(false),
totalcost(-1),
- sourcedir(v3s16(0,0,0)),
- surfaces(0),
- pos(v3s16(0,0,0)),
+ sourcedir(v3s16(0, 0, 0)),
+ pos(v3s16(0, 0, 0)),
is_element(false),
type('u')
{
@@ -119,17 +445,16 @@ path_gridnode::path_gridnode()
}
/******************************************************************************/
-path_gridnode::path_gridnode(const path_gridnode& b)
+PathGridnode::PathGridnode(const PathGridnode &b)
: valid(b.valid),
target(b.target),
source(b.source),
totalcost(b.totalcost),
sourcedir(b.sourcedir),
- surfaces(b.surfaces),
pos(b.pos),
is_element(b.is_element),
type(b.type)
- {
+{
directions[DIR_XP] = b.directions[DIR_XP];
directions[DIR_XM] = b.directions[DIR_XM];
@@ -138,14 +463,14 @@ path_gridnode::path_gridnode(const path_gridnode& b)
}
/******************************************************************************/
-path_gridnode& path_gridnode::operator= (const path_gridnode& b) {
+PathGridnode &PathGridnode::operator= (const PathGridnode &b)
+{
valid = b.valid;
target = b.target;
source = b.source;
is_element = b.is_element;
totalcost = b.totalcost;
sourcedir = b.sourcedir;
- surfaces = b.surfaces;
pos = b.pos;
type = b.type;
@@ -158,7 +483,8 @@ path_gridnode& path_gridnode::operator= (const path_gridnode& b) {
}
/******************************************************************************/
-path_cost path_gridnode::get_cost(v3s16 dir) {
+PathCost PathGridnode::getCost(v3s16 dir)
+{
if (dir.X > 0) {
return directions[DIR_XP];
}
@@ -171,12 +497,13 @@ path_cost path_gridnode::get_cost(v3s16 dir) {
if (dir.Z < 0) {
return directions[DIR_ZM];
}
- path_cost retval;
+ PathCost retval;
return retval;
}
/******************************************************************************/
-void path_gridnode::set_cost(v3s16 dir,path_cost cost) {
+void PathGridnode::setCost(v3s16 dir, PathCost cost)
+{
if (dir.X > 0) {
directions[DIR_XP] = cost;
}
@@ -191,14 +518,105 @@ void path_gridnode::set_cost(v3s16 dir,path_cost cost) {
}
}
+void GridNodeContainer::initNode(v3s16 ipos, PathGridnode *p_node)
+{
+ INodeDefManager *ndef = m_pathf->m_env->getGameDef()->ndef();
+ PathGridnode &elem = *p_node;
+
+ v3s16 realpos = m_pathf->getRealPos(ipos);
+
+ MapNode current = m_pathf->m_env->getMap().getNodeNoEx(realpos);
+ MapNode below = m_pathf->m_env->getMap().getNodeNoEx(realpos + v3s16(0, -1, 0));
+
+
+ if ((current.param0 == CONTENT_IGNORE) ||
+ (below.param0 == CONTENT_IGNORE)) {
+ DEBUG_OUT("Pathfinder: " << PPOS(realpos) <<
+ " current or below is invalid element" << std::endl);
+ if (current.param0 == CONTENT_IGNORE) {
+ elem.type = 'i';
+ DEBUG_OUT(PPOS(ipos) << ": " << 'i' << std::endl);
+ }
+ return;
+ }
+
+ //don't add anything if it isn't an air node
+ if (ndef->get(current).walkable || !ndef->get(below).walkable) {
+ DEBUG_OUT("Pathfinder: " << PPOS(realpos)
+ << " not on surface" << std::endl);
+ if (ndef->get(current).walkable) {
+ elem.type = 's';
+ DEBUG_OUT(PPOS(ipos) << ": " << 's' << std::endl);
+ } else {
+ elem.type = '-';
+ DEBUG_OUT(PPOS(ipos) << ": " << '-' << std::endl);
+ }
+ return;
+ }
+
+ elem.valid = true;
+ elem.pos = realpos;
+ elem.type = 'g';
+ DEBUG_OUT(PPOS(ipos) << ": " << 'a' << std::endl);
+
+ if (m_pathf->m_prefetch) {
+ elem.directions[DIR_XP] = m_pathf->calcCost(realpos, v3s16( 1, 0, 0));
+ elem.directions[DIR_XM] = m_pathf->calcCost(realpos, v3s16(-1, 0, 0));
+ elem.directions[DIR_ZP] = m_pathf->calcCost(realpos, v3s16( 0, 0, 1));
+ elem.directions[DIR_ZM] = m_pathf->calcCost(realpos, v3s16( 0, 0,-1));
+ }
+}
+
+ArrayGridNodeContainer::ArrayGridNodeContainer(Pathfinder *pathf, v3s16 dimensions) :
+ m_x_stride(dimensions.Y * dimensions.Z),
+ m_y_stride(dimensions.Z)
+{
+ m_pathf = pathf;
+
+ m_nodes_array.resize(dimensions.X * dimensions.Y * dimensions.Z);
+ INFO_TARGET << "Pathfinder ArrayGridNodeContainer constructor." << std::endl;
+ for (int x = 0; x < dimensions.X; x++) {
+ for (int y = 0; y < dimensions.Y; y++) {
+ for (int z= 0; z < dimensions.Z; z++) {
+ v3s16 ipos(x, y, z);
+ initNode(ipos, &access(ipos));
+ }
+ }
+ }
+}
+
+PathGridnode &ArrayGridNodeContainer::access(v3s16 p)
+{
+ return m_nodes_array[p.X * m_x_stride + p.Y * m_y_stride + p.Z];
+}
+
+MapGridNodeContainer::MapGridNodeContainer(Pathfinder *pathf)
+{
+ m_pathf = pathf;
+}
+
+PathGridnode &MapGridNodeContainer::access(v3s16 p)
+{
+ std::map<v3s16, PathGridnode>::iterator it = m_nodes.find(p);
+ if (it != m_nodes.end()) {
+ return it->second;
+ }
+ PathGridnode &n = m_nodes[p];
+ initNode(p, &n);
+ return n;
+}
+
+
+
/******************************************************************************/
-std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
+std::vector<v3s16> Pathfinder::getPath(ServerEnvironment *env,
v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
unsigned int max_drop,
- algorithm algo) {
+ PathAlgorithm algo)
+{
#ifdef PATHFINDER_CALC_TIME
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
@@ -220,47 +638,51 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
m_min_target_distance = -1;
m_prefetch = true;
- if (algo == A_PLAIN_NP) {
+ if (algo == PA_PLAIN_NP) {
m_prefetch = false;
}
- int min_x = MYMIN(source.X,destination.X);
- int max_x = MYMAX(source.X,destination.X);
+ int min_x = MYMIN(source.X, destination.X);
+ int max_x = MYMAX(source.X, destination.X);
- int min_y = MYMIN(source.Y,destination.Y);
- int max_y = MYMAX(source.Y,destination.Y);
+ int min_y = MYMIN(source.Y, destination.Y);
+ int max_y = MYMAX(source.Y, destination.Y);
- int min_z = MYMIN(source.Z,destination.Z);
- int max_z = MYMAX(source.Z,destination.Z);
+ int min_z = MYMIN(source.Z, destination.Z);
+ int max_z = MYMAX(source.Z, destination.Z);
- m_limits.X.min = min_x - searchdistance;
- m_limits.X.max = max_x + searchdistance;
- m_limits.Y.min = min_y - searchdistance;
- m_limits.Y.max = max_y + searchdistance;
- m_limits.Z.min = min_z - searchdistance;
- m_limits.Z.max = max_z + searchdistance;
+ m_limits.MinEdge.X = min_x - searchdistance;
+ m_limits.MinEdge.Y = min_y - searchdistance;
+ m_limits.MinEdge.Z = min_z - searchdistance;
- m_max_index_x = m_limits.X.max - m_limits.X.min;
- m_max_index_y = m_limits.Y.max - m_limits.Y.min;
- m_max_index_z = m_limits.Z.max - m_limits.Z.min;
+ m_limits.MaxEdge.X = max_x + searchdistance;
+ m_limits.MaxEdge.Y = max_y + searchdistance;
+ m_limits.MaxEdge.Z = max_z + searchdistance;
- //build data map
- if (!build_costmap()) {
- ERROR_TARGET << "failed to build costmap" << std::endl;
- return retval;
+ v3s16 diff = m_limits.MaxEdge - m_limits.MinEdge;
+
+ m_max_index_x = diff.X;
+ m_max_index_y = diff.Y;
+ m_max_index_z = diff.Z;
+
+ delete m_nodes_container;
+ if (diff.getLength() > 5) {
+ m_nodes_container = new MapGridNodeContainer(this);
+ } else {
+ m_nodes_container = new ArrayGridNodeContainer(this, diff);
}
#ifdef PATHFINDER_DEBUG
- print_type();
- print_cost();
- print_ydir();
+ printType();
+ printCost();
+ printYdir();
#endif
//validate and mark start and end pos
v3s16 StartIndex = getIndexPos(source);
v3s16 EndIndex = getIndexPos(destination);
- path_gridnode& startpos = getIndexElement(StartIndex);
- path_gridnode& endpos = getIndexElement(EndIndex);
+ PathGridnode &startpos = getIndexElement(StartIndex);
+ PathGridnode &endpos = getIndexElement(EndIndex);
if (!startpos.valid) {
VERBOSE_TARGET << "invalid startpos" <<
@@ -282,15 +704,15 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
bool update_cost_retval = false;
switch (algo) {
- case DIJKSTRA:
- update_cost_retval = update_all_costs(StartIndex,v3s16(0,0,0),0,0);
+ case PA_DIJKSTRA:
+ update_cost_retval = updateAllCosts(StartIndex, v3s16(0, 0, 0), 0, 0);
break;
- case A_PLAIN_NP:
- case A_PLAIN:
- update_cost_retval = update_cost_heuristic(StartIndex,v3s16(0,0,0),0,0);
+ case PA_PLAIN_NP:
+ case PA_PLAIN:
+ update_cost_retval = updateCostHeuristic(StartIndex, v3s16(0, 0, 0), 0, 0);
break;
default:
- ERROR_TARGET << "missing algorithm"<< std::endl;
+ ERROR_TARGET << "missing PathAlgorithm"<< std::endl;
break;
}
@@ -298,28 +720,28 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
#ifdef PATHFINDER_DEBUG
std::cout << "Path to target found!" << std::endl;
- print_pathlen();
+ printPathLen();
#endif
//find path
std::vector<v3s16> path;
- build_path(path,EndIndex,0);
+ buildPath(path, EndIndex, 0);
#ifdef PATHFINDER_DEBUG
std::cout << "Full index path:" << std::endl;
- print_path(path);
+ printPath(path);
#endif
//finalize path
std::vector<v3s16> full_path;
for (std::vector<v3s16>::iterator i = path.begin();
- i != path.end(); i++) {
+ i != path.end(); ++i) {
full_path.push_back(getIndexElement(*i).pos);
}
#ifdef PATHFINDER_DEBUG
std::cout << "full path:" << std::endl;
- print_path(full_path);
+ printPath(full_path);
#endif
#ifdef PATHFINDER_CALC_TIME
timespec ts2;
@@ -337,7 +759,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
}
else {
#ifdef PATHFINDER_DEBUG
- print_pathlen();
+ printPathLen();
#endif
ERROR_TARGET << "failed to update cost map"<< std::endl;
}
@@ -348,7 +770,7 @@ std::vector<v3s16> pathfinder::get_Path(ServerEnvironment* env,
}
/******************************************************************************/
-pathfinder::pathfinder() :
+Pathfinder::Pathfinder() :
m_max_index_x(0),
m_max_index_y(0),
m_max_index_z(0),
@@ -357,123 +779,36 @@ pathfinder::pathfinder() :
m_maxjump(0),
m_min_target_distance(0),
m_prefetch(true),
- m_start(0,0,0),
- m_destination(0,0,0),
- m_limits(),
- m_data(),
+ m_start(0, 0, 0),
+ m_destination(0, 0, 0),
+ m_nodes_container(NULL),
m_env(0)
{
//intentionaly empty
}
-/******************************************************************************/
-v3s16 pathfinder::getRealPos(v3s16 ipos) {
-
- v3s16 retval = ipos;
-
- retval.X += m_limits.X.min;
- retval.Y += m_limits.Y.min;
- retval.Z += m_limits.Z.min;
-
- return retval;
+Pathfinder::~Pathfinder()
+{
+ delete m_nodes_container;
}
-
/******************************************************************************/
-bool pathfinder::build_costmap()
+v3s16 Pathfinder::getRealPos(v3s16 ipos)
{
- INFO_TARGET << "Pathfinder build costmap: (" << m_limits.X.min << ","
- << m_limits.Z.min << ") ("
- << m_limits.X.max << ","
- << m_limits.Z.max << ")"
- << std::endl;
- m_data.resize(m_max_index_x);
- for (int x = 0; x < m_max_index_x; x++) {
- m_data[x].resize(m_max_index_z);
- for (int z = 0; z < m_max_index_z; z++) {
- m_data[x][z].resize(m_max_index_y);
-
- int surfaces = 0;
- for (int y = 0; y < m_max_index_y; y++) {
- v3s16 ipos(x,y,z);
-
- v3s16 realpos = getRealPos(ipos);
-
- MapNode current = m_env->getMap().getNodeNoEx(realpos);
- MapNode below = m_env->getMap().getNodeNoEx(realpos + v3s16(0,-1,0));
-
-
- if ((current.param0 == CONTENT_IGNORE) ||
- (below.param0 == CONTENT_IGNORE)) {
- DEBUG_OUT("Pathfinder: " << PPOS(realpos) <<
- " current or below is invalid element" << std::endl);
- if (current.param0 == CONTENT_IGNORE) {
- m_data[x][z][y].type = 'i';
- DEBUG_OUT(x << "," << y << "," << z << ": " << 'i' << std::endl);
- }
- continue;
- }
-
- //don't add anything if it isn't an air node
- if ((current.param0 != CONTENT_AIR) ||
- (below.param0 == CONTENT_AIR )) {
- DEBUG_OUT("Pathfinder: " << PPOS(realpos)
- << " not on surface" << std::endl);
- if (current.param0 != CONTENT_AIR) {
- m_data[x][z][y].type = 's';
- DEBUG_OUT(x << "," << y << "," << z << ": " << 's' << std::endl);
- }
- else {
- m_data[x][z][y].type = '-';
- DEBUG_OUT(x << "," << y << "," << z << ": " << '-' << std::endl);
- }
- continue;
- }
-
- surfaces++;
-
- m_data[x][z][y].valid = true;
- m_data[x][z][y].pos = realpos;
- m_data[x][z][y].type = 'g';
- DEBUG_OUT(x << "," << y << "," << z << ": " << 'a' << std::endl);
-
- if (m_prefetch) {
- m_data[x][z][y].directions[DIR_XP] =
- calc_cost(realpos,v3s16( 1,0, 0));
- m_data[x][z][y].directions[DIR_XM] =
- calc_cost(realpos,v3s16(-1,0, 0));
- m_data[x][z][y].directions[DIR_ZP] =
- calc_cost(realpos,v3s16( 0,0, 1));
- m_data[x][z][y].directions[DIR_ZM] =
- calc_cost(realpos,v3s16( 0,0,-1));
- }
-
- }
-
- if (surfaces >= 1 ) {
- for (int y = 0; y < m_max_index_y; y++) {
- if (m_data[x][z][y].valid) {
- m_data[x][z][y].surfaces = surfaces;
- }
- }
- }
- }
- }
- return true;
+ return m_limits.MinEdge + ipos;
}
/******************************************************************************/
-path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
- path_cost retval;
+PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
+{
+ INodeDefManager *ndef = m_env->getGameDef()->ndef();
+ PathCost retval;
retval.updated = true;
v3s16 pos2 = pos + dir;
//check limits
- if ( (pos2.X < m_limits.X.min) ||
- (pos2.X >= m_limits.X.max) ||
- (pos2.Z < m_limits.Z.min) ||
- (pos2.Z >= m_limits.Z.max)) {
+ if (!m_limits.isPointInside(pos2)) {
DEBUG_OUT("Pathfinder: " << PPOS(pos2) <<
" no cost -> out of limits" << std::endl);
return retval;
@@ -488,18 +823,18 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
return retval;
}
- if (node_at_pos2.param0 == CONTENT_AIR) {
+ if (!ndef->get(node_at_pos2).walkable) {
MapNode node_below_pos2 =
- m_env->getMap().getNodeNoEx(pos2 + v3s16(0,-1,0));
+ m_env->getMap().getNodeNoEx(pos2 + v3s16(0, -1, 0));
//did we get information about node?
if (node_below_pos2.param0 == CONTENT_IGNORE ) {
VERBOSE_TARGET << "Pathfinder: (2) area at pos: "
- << PPOS((pos2 + v3s16(0,-1,0))) << " not loaded";
+ << PPOS((pos2 + v3s16(0, -1, 0))) << " not loaded";
return retval;
}
- if (node_below_pos2.param0 != CONTENT_AIR) {
+ if (ndef->get(node_below_pos2).walkable) {
retval.valid = true;
retval.value = 1;
retval.direction = 0;
@@ -507,20 +842,20 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
<< " cost same height found" << std::endl);
}
else {
- v3s16 testpos = pos2 - v3s16(0,-1,0);
+ v3s16 testpos = pos2 - v3s16(0, -1, 0);
MapNode node_at_pos = m_env->getMap().getNodeNoEx(testpos);
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
- (node_at_pos.param0 == CONTENT_AIR) &&
- (testpos.Y > m_limits.Y.min)) {
- testpos += v3s16(0,-1,0);
+ (!ndef->get(node_at_pos).walkable) &&
+ (testpos.Y > m_limits.MinEdge.Y)) {
+ testpos += v3s16(0, -1, 0);
node_at_pos = m_env->getMap().getNodeNoEx(testpos);
}
//did we find surface?
- if ((testpos.Y >= m_limits.Y.min) &&
+ if ((testpos.Y >= m_limits.MinEdge.Y) &&
(node_at_pos.param0 != CONTENT_IGNORE) &&
- (node_at_pos.param0 != CONTENT_AIR)) {
+ (ndef->get(node_at_pos).walkable)) {
if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) {
retval.valid = true;
retval.value = 2;
@@ -545,15 +880,15 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
MapNode node_at_pos = m_env->getMap().getNodeNoEx(testpos);
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
- (node_at_pos.param0 != CONTENT_AIR) &&
- (testpos.Y < m_limits.Y.max)) {
- testpos += v3s16(0,1,0);
+ (ndef->get(node_at_pos).walkable) &&
+ (testpos.Y < m_limits.MaxEdge.Y)) {
+ testpos += v3s16(0, 1, 0);
node_at_pos = m_env->getMap().getNodeNoEx(testpos);
}
//did we find surface?
- if ((testpos.Y <= m_limits.Y.max) &&
- (node_at_pos.param0 == CONTENT_AIR)) {
+ if ((testpos.Y <= m_limits.MaxEdge.Y) &&
+ (!ndef->get(node_at_pos).walkable)) {
if (testpos.Y - pos2.Y <= m_maxjump) {
retval.valid = true;
@@ -575,23 +910,26 @@ path_cost pathfinder::calc_cost(v3s16 pos,v3s16 dir) {
}
/******************************************************************************/
-v3s16 pathfinder::getIndexPos(v3s16 pos) {
-
- v3s16 retval = pos;
- retval.X -= m_limits.X.min;
- retval.Y -= m_limits.Y.min;
- retval.Z -= m_limits.Z.min;
+v3s16 Pathfinder::getIndexPos(v3s16 pos)
+{
+ return pos - m_limits.MinEdge;
+}
- return retval;
+/******************************************************************************/
+PathGridnode &Pathfinder::getIndexElement(v3s16 ipos)
+{
+ return m_nodes_container->access(ipos);
}
/******************************************************************************/
-path_gridnode& pathfinder::getIndexElement(v3s16 ipos) {
- return m_data[ipos.X][ipos.Z][ipos.Y];
+inline PathGridnode &Pathfinder::getIdxElem(s16 x, s16 y, s16 z)
+{
+ return m_nodes_container->access(v3s16(x,y,z));
}
/******************************************************************************/
-bool pathfinder::valid_index(v3s16 index) {
+bool Pathfinder::isValidIndex(v3s16 index)
+{
if ( (index.X < m_max_index_x) &&
(index.Y < m_max_index_y) &&
(index.Z < m_max_index_z) &&
@@ -604,7 +942,8 @@ bool pathfinder::valid_index(v3s16 index) {
}
/******************************************************************************/
-v3s16 pathfinder::invert(v3s16 pos) {
+v3s16 Pathfinder::invert(v3s16 pos)
+{
v3s16 retval = pos;
retval.X *=-1;
@@ -615,12 +954,12 @@ v3s16 pathfinder::invert(v3s16 pos) {
}
/******************************************************************************/
-bool pathfinder::update_all_costs( v3s16 ipos,
- v3s16 srcdir,
- int current_cost,
- int level) {
-
- path_gridnode& g_pos = getIndexElement(ipos);
+bool Pathfinder::updateAllCosts(v3s16 ipos,
+ v3s16 srcdir,
+ int current_cost,
+ int level)
+{
+ PathGridnode &g_pos = getIndexElement(ipos);
g_pos.totalcost = current_cost;
g_pos.sourcedir = srcdir;
@@ -644,22 +983,20 @@ bool pathfinder::update_all_costs( v3s16 ipos,
for (unsigned int i=0; i < directions.size(); i++) {
if (directions[i] != srcdir) {
- path_cost cost = g_pos.get_cost(directions[i]);
+ PathCost cost = g_pos.getCost(directions[i]);
if (cost.valid) {
directions[i].Y = cost.direction;
v3s16 ipos2 = ipos + directions[i];
- if (!valid_index(ipos2)) {
+ if (!isValidIndex(ipos2)) {
DEBUG_OUT(LVL " Pathfinder: " << PPOS(ipos2) <<
- " out of range (" << m_limits.X.max << "," <<
- m_limits.Y.max << "," << m_limits.Z.max
- <<")" << std::endl);
+ " out of range, max=" << PPOS(m_limits.MaxEdge) << std::endl);
continue;
}
- path_gridnode& g_pos2 = getIndexElement(ipos2);
+ PathGridnode &g_pos2 = getIndexElement(ipos2);
if (!g_pos2.valid) {
VERBOSE_TARGET << LVL "Pathfinder: no data for new position: "
@@ -682,8 +1019,8 @@ bool pathfinder::update_all_costs( v3s16 ipos,
DEBUG_OUT(LVL "Pathfinder: updating path at: "<<
PPOS(ipos2) << " from: " << g_pos2.totalcost << " to "<<
new_cost << std::endl);
- if (update_all_costs(ipos2,invert(directions[i]),
- new_cost,level)) {
+ if (updateAllCosts(ipos2, invert(directions[i]),
+ new_cost, level)) {
retval = true;
}
}
@@ -704,36 +1041,37 @@ bool pathfinder::update_all_costs( v3s16 ipos,
}
/******************************************************************************/
-int pathfinder::get_manhattandistance(v3s16 pos) {
-
- int min_x = MYMIN(pos.X,m_destination.X);
- int max_x = MYMAX(pos.X,m_destination.X);
- int min_z = MYMIN(pos.Z,m_destination.Z);
- int max_z = MYMAX(pos.Z,m_destination.Z);
+int Pathfinder::getXZManhattanDist(v3s16 pos)
+{
+ int min_x = MYMIN(pos.X, m_destination.X);
+ int max_x = MYMAX(pos.X, m_destination.X);
+ int min_z = MYMIN(pos.Z, m_destination.Z);
+ int max_z = MYMAX(pos.Z, m_destination.Z);
return (max_x - min_x) + (max_z - min_z);
}
/******************************************************************************/
-v3s16 pathfinder::get_dir_heuristic(std::vector<v3s16>& directions,path_gridnode& g_pos) {
+v3s16 Pathfinder::getDirHeuristic(std::vector<v3s16> &directions, PathGridnode &g_pos)
+{
int minscore = -1;
- v3s16 retdir = v3s16(0,0,0);
+ v3s16 retdir = v3s16(0, 0, 0);
v3s16 srcpos = g_pos.pos;
DEBUG_OUT("Pathfinder: remaining dirs at beginning:"
<< directions.size() << std::endl);
for (std::vector<v3s16>::iterator iter = directions.begin();
iter != directions.end();
- iter ++) {
+ ++iter) {
- v3s16 pos1 = v3s16(srcpos.X + iter->X,0,srcpos.Z+iter->Z);
+ v3s16 pos1 = v3s16(srcpos.X + iter->X, 0, srcpos.Z+iter->Z);
- int cur_manhattan = get_manhattandistance(pos1);
- path_cost cost = g_pos.get_cost(*iter);
+ int cur_manhattan = getXZManhattanDist(pos1);
+ PathCost cost = g_pos.getCost(*iter);
if (!cost.updated) {
- cost = calc_cost(g_pos.pos,*iter);
- g_pos.set_cost(*iter,cost);
+ cost = calcCost(g_pos.pos, *iter);
+ g_pos.setCost(*iter, cost);
}
if (cost.valid) {
@@ -746,10 +1084,10 @@ v3s16 pathfinder::get_dir_heuristic(std::vector<v3s16>& directions,path_gridnode
}
}
- if (retdir != v3s16(0,0,0)) {
+ if (retdir != v3s16(0, 0, 0)) {
for (std::vector<v3s16>::iterator iter = directions.begin();
iter != directions.end();
- iter ++) {
+ ++iter) {
if(*iter == retdir) {
DEBUG_OUT("Pathfinder: removing return direction" << std::endl);
directions.erase(iter);
@@ -768,12 +1106,13 @@ v3s16 pathfinder::get_dir_heuristic(std::vector<v3s16>& directions,path_gridnode
}
/******************************************************************************/
-bool pathfinder::update_cost_heuristic( v3s16 ipos,
- v3s16 srcdir,
- int current_cost,
- int level) {
+bool Pathfinder::updateCostHeuristic( v3s16 ipos,
+ v3s16 srcdir,
+ int current_cost,
+ int level)
+{
- path_gridnode& g_pos = getIndexElement(ipos);
+ PathGridnode &g_pos = getIndexElement(ipos);
g_pos.totalcost = current_cost;
g_pos.sourcedir = srcdir;
@@ -790,38 +1129,36 @@ bool pathfinder::update_cost_heuristic( v3s16 ipos,
std::vector<v3s16> directions;
- directions.push_back(v3s16( 1,0, 0));
- directions.push_back(v3s16(-1,0, 0));
- directions.push_back(v3s16( 0,0, 1));
- directions.push_back(v3s16( 0,0,-1));
+ directions.push_back(v3s16( 1, 0, 0));
+ directions.push_back(v3s16(-1, 0, 0));
+ directions.push_back(v3s16( 0, 0, 1));
+ directions.push_back(v3s16( 0, 0, -1));
- v3s16 direction = get_dir_heuristic(directions,g_pos);
+ v3s16 direction = getDirHeuristic(directions, g_pos);
- while (direction != v3s16(0,0,0) && (!retval)) {
+ while (direction != v3s16(0, 0, 0) && (!retval)) {
if (direction != srcdir) {
- path_cost cost = g_pos.get_cost(direction);
+ PathCost cost = g_pos.getCost(direction);
if (cost.valid) {
direction.Y = cost.direction;
v3s16 ipos2 = ipos + direction;
- if (!valid_index(ipos2)) {
+ if (!isValidIndex(ipos2)) {
DEBUG_OUT(LVL " Pathfinder: " << PPOS(ipos2) <<
- " out of range (" << m_limits.X.max << "," <<
- m_limits.Y.max << "," << m_limits.Z.max
- <<")" << std::endl);
- direction = get_dir_heuristic(directions,g_pos);
+ " out of range, max=" << PPOS(m_limits.MaxEdge) << std::endl);
+ direction = getDirHeuristic(directions, g_pos);
continue;
}
- path_gridnode& g_pos2 = getIndexElement(ipos2);
+ PathGridnode &g_pos2 = getIndexElement(ipos2);
if (!g_pos2.valid) {
VERBOSE_TARGET << LVL "Pathfinder: no data for new position: "
<< PPOS(ipos2) << std::endl;
- direction = get_dir_heuristic(directions,g_pos);
+ direction = getDirHeuristic(directions, g_pos);
continue;
}
@@ -844,8 +1181,8 @@ bool pathfinder::update_cost_heuristic( v3s16 ipos,
PPOS(ipos2) << " from: " << g_pos2.totalcost << " to "<<
new_cost << " srcdir=" <<
PPOS(invert(direction))<< std::endl);
- if (update_cost_heuristic(ipos2,invert(direction),
- new_cost,level)) {
+ if (updateCostHeuristic(ipos2, invert(direction),
+ new_cost, level)) {
retval = true;
}
}
@@ -866,24 +1203,25 @@ bool pathfinder::update_cost_heuristic( v3s16 ipos,
" skipping srcdir: "
<< PPOS(direction) << std::endl);
}
- direction = get_dir_heuristic(directions,g_pos);
+ direction = getDirHeuristic(directions, g_pos);
}
return retval;
}
/******************************************************************************/
-void pathfinder::build_path(std::vector<v3s16>& path,v3s16 pos, int level) {
+void Pathfinder::buildPath(std::vector<v3s16> &path, v3s16 pos, int level)
+{
level ++;
if (level > 700) {
ERROR_TARGET
- << LVL "Pathfinder: path is too long aborting" << std::endl;
+ << LVL "Pathfinder: path is too long aborting" << std::endl;
return;
}
- path_gridnode& g_pos = getIndexElement(pos);
+ PathGridnode &g_pos = getIndexElement(pos);
if (!g_pos.valid) {
ERROR_TARGET
- << LVL "Pathfinder: invalid next pos detected aborting" << std::endl;
+ << LVL "Pathfinder: invalid next pos detected aborting" << std::endl;
return;
}
@@ -895,37 +1233,40 @@ void pathfinder::build_path(std::vector<v3s16>& path,v3s16 pos, int level) {
return;
}
- build_path(path,pos + g_pos.sourcedir,level);
+ buildPath(path, pos + g_pos.sourcedir, level);
path.push_back(pos);
}
/******************************************************************************/
-v3f pathfinder::tov3f(v3s16 pos) {
- return v3f(BS*pos.X,BS*pos.Y,BS*pos.Z);
+v3f Pathfinder::tov3f(v3s16 pos)
+{
+ return v3f(BS * pos.X, BS * pos.Y, BS * pos.Z);
}
#ifdef PATHFINDER_DEBUG
/******************************************************************************/
-void pathfinder::print_cost() {
- print_cost(DIR_XP);
- print_cost(DIR_XM);
- print_cost(DIR_ZP);
- print_cost(DIR_ZM);
+void Pathfinder::printCost()
+{
+ printCost(DIR_XP);
+ printCost(DIR_XM);
+ printCost(DIR_ZP);
+ printCost(DIR_ZM);
}
/******************************************************************************/
-void pathfinder::print_ydir() {
- print_ydir(DIR_XP);
- print_ydir(DIR_XM);
- print_ydir(DIR_ZP);
- print_ydir(DIR_ZM);
+void Pathfinder::printYdir()
+{
+ printYdir(DIR_XP);
+ printYdir(DIR_XM);
+ printYdir(DIR_ZP);
+ printYdir(DIR_ZM);
}
/******************************************************************************/
-void pathfinder::print_cost(path_directions dir) {
-
- std::cout << "Cost in direction: " << dir_to_name(dir) << std::endl;
+void Pathfinder::printCost(PathDirections dir)
+{
+ std::cout << "Cost in direction: " << dirToName(dir) << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
@@ -941,9 +1282,9 @@ void pathfinder::print_cost(path_directions dir) {
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(4) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
- if (m_data[x][z][y].directions[dir].valid)
+ if (getIdxElem(x, y, z).directions[dir].valid)
std::cout << std::setw(4)
- << m_data[x][z][y].directions[dir].value;
+ << getIdxElem(x, y, z).directions[dir].value;
else
std::cout << std::setw(4) << "-";
}
@@ -954,9 +1295,9 @@ void pathfinder::print_cost(path_directions dir) {
}
/******************************************************************************/
-void pathfinder::print_ydir(path_directions dir) {
-
- std::cout << "Height difference in direction: " << dir_to_name(dir) << std::endl;
+void Pathfinder::printYdir(PathDirections dir)
+{
+ std::cout << "Height difference in direction: " << dirToName(dir) << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
@@ -972,9 +1313,9 @@ void pathfinder::print_ydir(path_directions dir) {
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(4) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
- if (m_data[x][z][y].directions[dir].valid)
+ if (getIdxElem(x, y, z).directions[dir].valid)
std::cout << std::setw(4)
- << m_data[x][z][y].directions[dir].direction;
+ << getIdxElem(x, y, z).directions[dir].direction;
else
std::cout << std::setw(4) << "-";
}
@@ -985,7 +1326,8 @@ void pathfinder::print_ydir(path_directions dir) {
}
/******************************************************************************/
-void pathfinder::print_type() {
+void Pathfinder::printType()
+{
std::cout << "Type of node:" << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
@@ -1002,7 +1344,7 @@ void pathfinder::print_type() {
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(3) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
- char toshow = m_data[x][z][y].type;
+ char toshow = getIdxElem(x, y, z).type;
std::cout << std::setw(3) << toshow;
}
std::cout << std::endl;
@@ -1013,7 +1355,8 @@ void pathfinder::print_type() {
}
/******************************************************************************/
-void pathfinder::print_pathlen() {
+void Pathfinder::printPathLen()
+{
std::cout << "Pathlen:" << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
@@ -1030,7 +1373,7 @@ void pathfinder::print_pathlen() {
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(3) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
- std::cout << std::setw(3) << m_data[x][z][y].totalcost;
+ std::cout << std::setw(3) << getIdxElem(x, y, z).totalcost;
}
std::cout << std::endl;
}
@@ -1040,7 +1383,8 @@ void pathfinder::print_pathlen() {
}
/******************************************************************************/
-std::string pathfinder::dir_to_name(path_directions dir) {
+std::string Pathfinder::dirToName(PathDirections dir)
+{
switch (dir) {
case DIR_XP:
return "XP";
@@ -1060,11 +1404,11 @@ std::string pathfinder::dir_to_name(path_directions dir) {
}
/******************************************************************************/
-void pathfinder::print_path(std::vector<v3s16> path) {
-
+void Pathfinder::printPath(std::vector<v3s16> path)
+{
unsigned int current = 0;
for (std::vector<v3s16>::iterator i = path.begin();
- i != path.end(); i++) {
+ i != path.end(); ++i) {
std::cout << std::setw(3) << current << ":" << PPOS((*i)) << std::endl;
current++;
}
diff --git a/src/pathfinder.h b/src/pathfinder.h
index dd41227f7..ba95aaf1c 100644
--- a/src/pathfinder.h
+++ b/src/pathfinder.h
@@ -24,10 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Includes */
/******************************************************************************/
#include <vector>
-
#include "irr_v3d.h"
-
/******************************************************************************/
/* Forward declarations */
/******************************************************************************/
@@ -38,313 +36,31 @@ class ServerEnvironment;
/* Typedefs and macros */
/******************************************************************************/
-//#define PATHFINDER_DEBUG
-
typedef enum {
DIR_XP,
DIR_XM,
DIR_ZP,
DIR_ZM
-} path_directions;
+} PathDirections;
/** List of supported algorithms */
typedef enum {
- DIJKSTRA, /**< Dijkstra shortest path algorithm */
- A_PLAIN, /**< A* algorithm using heuristics to find a path */
- A_PLAIN_NP /**< A* algorithm without prefetching of map data */
-} algorithm;
+ PA_DIJKSTRA, /**< Dijkstra shortest path algorithm */
+ PA_PLAIN, /**< A* algorithm using heuristics to find a path */
+ PA_PLAIN_NP /**< A* algorithm without prefetching of map data */
+} PathAlgorithm;
/******************************************************************************/
/* declarations */
/******************************************************************************/
/** c wrapper function to use from scriptapi */
-std::vector<v3s16> get_Path(ServerEnvironment* env,
+std::vector<v3s16> get_path(ServerEnvironment *env,
v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
unsigned int max_drop,
- algorithm algo);
-
-/** representation of cost in specific direction */
-class path_cost {
-public:
-
- /** default constructor */
- path_cost();
-
- /** copy constructor */
- path_cost(const path_cost& b);
-
- /** assignment operator */
- path_cost& operator= (const path_cost& b);
-
- bool valid; /**< movement is possible */
- int value; /**< cost of movement */
- int direction; /**< y-direction of movement */
- bool updated; /**< this cost has ben calculated */
-
-};
-
-
-/** representation of a mapnode to be used for pathfinding */
-class path_gridnode {
-
-public:
- /** default constructor */
- path_gridnode();
-
- /** copy constructor */
- path_gridnode(const path_gridnode& b);
-
- /**
- * assignment operator
- * @param b node to copy
- */
- path_gridnode& operator= (const path_gridnode& b);
-
- /**
- * read cost in a specific direction
- * @param dir direction of cost to fetch
- */
- path_cost get_cost(v3s16 dir);
-
- /**
- * set cost value for movement
- * @param dir direction to set cost for
- * @cost cost to set
- */
- void set_cost(v3s16 dir,path_cost cost);
-
- bool valid; /**< node is on surface */
- bool target; /**< node is target position */
- bool source; /**< node is stating position */
- int totalcost; /**< cost to move here from starting point */
- v3s16 sourcedir; /**< origin of movement for current cost */
- int surfaces; /**< number of surfaces with same x,z value*/
- v3s16 pos; /**< real position of node */
- path_cost directions[4]; /**< cost in different directions */
-
- /* debug values */
- bool is_element; /**< node is element of path detected */
- char type; /**< type of node */
-};
-
-/** class doing pathfinding */
-class pathfinder {
-
-public:
- /**
- * default constructor
- */
- pathfinder();
-
- /**
- * path evaluation function
- * @param env environment to look for path
- * @param source origin of path
- * @param destination end position of path
- * @param searchdistance maximum number of nodes to look in each direction
- * @param max_jump maximum number of blocks a path may jump up
- * @param max_drop maximum number of blocks a path may drop
- * @param algo algorithm to use for finding a path
- */
- std::vector<v3s16> get_Path(ServerEnvironment* env,
- v3s16 source,
- v3s16 destination,
- unsigned int searchdistance,
- unsigned int max_jump,
- unsigned int max_drop,
- algorithm algo);
-
-private:
- /** data struct for storing internal information */
- struct limits {
- struct limit {
- int min;
- int max;
- };
-
- limit X;
- limit Y;
- limit Z;
- };
-
- /* helper functions */
-
- /**
- * transform index pos to mappos
- * @param ipos a index position
- * @return map position
- */
- v3s16 getRealPos(v3s16 ipos);
-
- /**
- * transform mappos to index pos
- * @param pos a real pos
- * @return index position
- */
- v3s16 getIndexPos(v3s16 pos);
-
- /**
- * get gridnode at a specific index position
- * @param ipos index position
- * @return gridnode for index
- */
- path_gridnode& getIndexElement(v3s16 ipos);
-
- /**
- * invert a 3d position
- * @param pos 3d position
- * @return pos *-1
- */
- v3s16 invert(v3s16 pos);
-
- /**
- * check if a index is within current search area
- * @param index position to validate
- * @return true/false
- */
- bool valid_index(v3s16 index);
-
- /**
- * translate position to float position
- * @param pos integer position
- * @return float position
- */
- v3f tov3f(v3s16 pos);
-
-
- /* algorithm functions */
-
- /**
- * calculate 2d manahttan distance to target
- * @param pos position to calc distance
- * @return integer distance
- */
- int get_manhattandistance(v3s16 pos);
-
- /**
- * get best direction based uppon heuristics
- * @param directions list of unchecked directions
- * @param g_pos mapnode to start from
- * @return direction to check
- */
- v3s16 get_dir_heuristic(std::vector<v3s16>& directions,path_gridnode& g_pos);
-
- /**
- * build internal data representation of search area
- * @return true/false if costmap creation was successfull
- */
- bool build_costmap();
-
- /**
- * calculate cost of movement
- * @param pos real world position to start movement
- * @param dir direction to move to
- * @return cost information
- */
- path_cost calc_cost(v3s16 pos,v3s16 dir);
-
- /**
- * recursive update whole search areas total cost information
- * @param ipos position to check next
- * @param srcdir positionc checked last time
- * @param total_cost cost of moving to ipos
- * @param level current recursion depth
- * @return true/false path to destination has been found
- */
- bool update_all_costs(v3s16 ipos,v3s16 srcdir,int total_cost,int level);
-
- /**
- * recursive try to find a patrh to destionation
- * @param ipos position to check next
- * @param srcdir positionc checked last time
- * @param total_cost cost of moving to ipos
- * @param level current recursion depth
- * @return true/false path to destination has been found
- */
- bool update_cost_heuristic(v3s16 ipos,v3s16 srcdir,int current_cost,int level);
-
- /**
- * recursive build a vector containing all nodes from source to destination
- * @param path vector to add nodes to
- * @param pos pos to check next
- * @param level recursion depth
- */
- void build_path(std::vector<v3s16>& path,v3s16 pos, int level);
-
- /* variables */
- int m_max_index_x; /**< max index of search area in x direction */
- int m_max_index_y; /**< max index of search area in y direction */
- int m_max_index_z; /**< max index of search area in z direction */
-
-
- int m_searchdistance; /**< max distance to search in each direction */
- int m_maxdrop; /**< maximum number of blocks a path may drop */
- int m_maxjump; /**< maximum number of blocks a path may jump */
- int m_min_target_distance; /**< current smalest path to target */
-
- bool m_prefetch; /**< prefetch cost data */
-
- v3s16 m_start; /**< source position */
- v3s16 m_destination; /**< destination position */
-
- limits m_limits; /**< position limits in real map coordinates */
-
- /** 3d grid containing all map data already collected and analyzed */
- std::vector<std::vector<std::vector<path_gridnode> > > m_data;
-
- ServerEnvironment* m_env; /**< minetest environment pointer */
-
-#ifdef PATHFINDER_DEBUG
-
- /**
- * print collected cost information
- */
- void print_cost();
-
- /**
- * print collected cost information in a specific direction
- * @param dir direction to print
- */
- void print_cost(path_directions dir);
-
- /**
- * print type of node as evaluated
- */
- void print_type();
-
- /**
- * print pathlenght for all nodes in search area
- */
- void print_pathlen();
-
- /**
- * print a path
- * @param path path to show
- */
- void print_path(std::vector<v3s16> path);
-
- /**
- * print y direction for all movements
- */
- void print_ydir();
-
- /**
- * print y direction for moving in a specific direction
- * @param dir direction to show data
- */
- void print_ydir(path_directions dir);
-
- /**
- * helper function to translate a direction to speaking text
- * @param dir direction to translate
- * @return textual name of direction
- */
- std::string dir_to_name(path_directions dir);
-#endif
-};
+ PathAlgorithm algo);
#endif /* PATHFINDER_H_ */
diff --git a/src/player.cpp b/src/player.cpp
index cb2286ef6..5949712a5 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
#include <fstream>
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#include "util/numeric.h"
#include "hud.h"
#include "constants.h"
@@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Player::Player(IGameDef *gamedef, const char *name):
+ got_teleported(false),
touching_ground(false),
in_liquid(false),
in_liquid_stable(false),
@@ -111,41 +112,6 @@ Player::~Player()
clearHud();
}
-// Horizontal acceleration (X and Z), Y direction is ignored
-void Player::accelerateHorizontal(v3f target_speed, f32 max_increase)
-{
- if(max_increase == 0)
- return;
-
- v3f d_wanted = target_speed - m_speed;
- d_wanted.Y = 0;
- f32 dl = d_wanted.getLength();
- if(dl > max_increase)
- dl = max_increase;
-
- v3f d = d_wanted.normalize() * dl;
-
- m_speed.X += d.X;
- m_speed.Z += d.Z;
-
-}
-
-// Vertical acceleration (Y), X and Z directions are ignored
-void Player::accelerateVertical(v3f target_speed, f32 max_increase)
-{
- if(max_increase == 0)
- return;
-
- f32 d_wanted = target_speed.Y - m_speed.Y;
- if(d_wanted > max_increase)
- d_wanted = max_increase;
- else if(d_wanted < -max_increase)
- d_wanted = -max_increase;
-
- m_speed.Y += d_wanted;
-
-}
-
v3s16 Player::getLightPosition() const
{
return floatToInt(m_position + v3f(0,BS+BS/2,0), BS);
@@ -217,7 +183,7 @@ void Player::deSerialize(std::istream &is, std::string playername)
u32 Player::addHud(HudElement *toadd)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
u32 id = getFreeHudID();
@@ -231,7 +197,7 @@ u32 Player::addHud(HudElement *toadd)
HudElement* Player::getHud(u32 id)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
if (id < hud.size())
return hud[id];
@@ -241,7 +207,7 @@ HudElement* Player::getHud(u32 id)
HudElement* Player::removeHud(u32 id)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
HudElement* retval = NULL;
if (id < hud.size()) {
@@ -253,7 +219,7 @@ HudElement* Player::removeHud(u32 id)
void Player::clearHud()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
while(!hud.empty()) {
delete hud.back();
@@ -261,6 +227,23 @@ void Player::clearHud()
}
}
+RemotePlayer::RemotePlayer(IGameDef *gamedef, const char *name):
+ Player(gamedef, name),
+ m_sao(NULL)
+{
+ movement_acceleration_default = g_settings->getFloat("movement_acceleration_default") * BS;
+ movement_acceleration_air = g_settings->getFloat("movement_acceleration_air") * BS;
+ movement_acceleration_fast = g_settings->getFloat("movement_acceleration_fast") * BS;
+ movement_speed_walk = g_settings->getFloat("movement_speed_walk") * BS;
+ movement_speed_crouch = g_settings->getFloat("movement_speed_crouch") * BS;
+ movement_speed_fast = g_settings->getFloat("movement_speed_fast") * BS;
+ movement_speed_climb = g_settings->getFloat("movement_speed_climb") * BS;
+ movement_speed_jump = g_settings->getFloat("movement_speed_jump") * BS;
+ movement_liquid_fluidity = g_settings->getFloat("movement_liquid_fluidity") * BS;
+ movement_liquid_fluidity_smooth = g_settings->getFloat("movement_liquid_fluidity_smooth") * BS;
+ movement_liquid_sink = g_settings->getFloat("movement_liquid_sink") * BS;
+ movement_gravity = g_settings->getFloat("movement_gravity") * BS;
+}
void RemotePlayer::save(std::string savedir)
{
diff --git a/src/player.h b/src/player.h
index 3a336afc4..b317cda4f 100644
--- a/src/player.h
+++ b/src/player.h
@@ -23,12 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include "inventory.h"
#include "constants.h" // BS
-#include "jthread/jmutex.h"
+#include "threading/mutex.h"
#include <list>
#define PLAYERNAME_SIZE 20
#define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
+#define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'"
struct PlayerControl
{
@@ -118,9 +119,6 @@ public:
m_speed = speed;
}
- void accelerateHorizontal(v3f target_speed, f32 max_increase);
- void accelerateVertical(v3f target_speed, f32 max_increase);
-
v3f getPosition()
{
return m_position;
@@ -197,7 +195,7 @@ public:
return m_name;
}
- core::aabbox3d<f32> getCollisionbox()
+ aabb3f getCollisionbox()
{
return m_collisionbox;
}
@@ -320,6 +318,7 @@ public:
// Use a function, if isDead can be defined by other conditions
bool isDead() { return hp == 0; }
+ bool got_teleported;
bool touching_ground;
// This oscillates so that the player jumps a bit above the surface
bool in_liquid;
@@ -397,7 +396,7 @@ protected:
f32 m_yaw;
v3f m_speed;
v3f m_position;
- core::aabbox3d<f32> m_collisionbox;
+ aabb3f m_collisionbox;
bool m_dirty;
@@ -413,7 +412,7 @@ private:
// Protect some critical areas
// hud for example can be modified by EmergeThread
// and ServerThread
- JMutex m_mutex;
+ Mutex m_mutex;
};
@@ -423,10 +422,7 @@ private:
class RemotePlayer : public Player
{
public:
- RemotePlayer(IGameDef *gamedef, const char *name):
- Player(gamedef, name),
- m_sao(NULL)
- {}
+ RemotePlayer(IGameDef *gamedef, const char *name);
virtual ~RemotePlayer() {}
void save(std::string savedir);
diff --git a/src/porting.cpp b/src/porting.cpp
index 44f1fcff1..98b85b7d0 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -29,6 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <sys/types.h>
#include <sys/sysctl.h>
#elif defined(_WIN32)
+ #include <windows.h>
+ #include <wincrypt.h>
#include <algorithm>
#endif
#if !defined(_WIN32)
@@ -75,13 +77,13 @@ bool * signal_handler_killstatus(void)
void sigint_handler(int sig)
{
- if(!g_killed) {
- dstream<<DTIME<<"INFO: sigint_handler(): "
- <<"Ctrl-C pressed, shutting down."<<std::endl;
+ if (!g_killed) {
+ dstream << "INFO: sigint_handler(): "
+ << "Ctrl-C pressed, shutting down." << std::endl;
// Comment out for less clutter when testing scripts
- /*dstream<<DTIME<<"INFO: sigint_handler(): "
- <<"Printing debug stacks"<<std::endl;
+ /*dstream << "INFO: sigint_handler(): "
+ << "Printing debug stacks" << std::endl;
debug_stacks_print();*/
g_killed = true;
@@ -105,8 +107,8 @@ BOOL WINAPI event_handler(DWORD sig)
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
- if (g_killed == false) {
- dstream << DTIME << "INFO: event_handler(): "
+ if (!g_killed) {
+ dstream << "INFO: event_handler(): "
<< "Ctrl+C, Close Event, Logoff Event or Shutdown Event,"
" shutting down." << std::endl;
g_killed = true;
@@ -130,136 +132,15 @@ void signal_handler_init(void)
/*
- Multithreading support
-*/
-int getNumberOfProcessors()
-{
-#if defined(_SC_NPROCESSORS_ONLN)
-
- return sysconf(_SC_NPROCESSORS_ONLN);
-
-#elif defined(__FreeBSD__) || defined(__APPLE__)
-
- unsigned int len, count;
- len = sizeof(count);
- return sysctlbyname("hw.ncpu", &count, &len, NULL, 0);
-
-#elif defined(_GNU_SOURCE)
-
- return get_nprocs();
-
-#elif defined(_WIN32)
-
- SYSTEM_INFO sysinfo;
- GetSystemInfo(&sysinfo);
- return sysinfo.dwNumberOfProcessors;
-
-#elif defined(PTW32_VERSION) || defined(__hpux)
-
- return pthread_num_processors_np();
-
-#else
-
- return 1;
-
-#endif
-}
-
-
-#ifndef __ANDROID__
-bool threadBindToProcessor(threadid_t tid, int pnumber)
-{
-#if defined(_WIN32)
-
- HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid);
- if (!hThread)
- return false;
-
- bool success = SetThreadAffinityMask(hThread, 1 << pnumber) != 0;
-
- CloseHandle(hThread);
- return success;
-
-#elif (defined(__FreeBSD__) && (__FreeBSD_version >= 702106)) \
- || defined(__linux) || defined(linux)
-
- cpu_set_t cpuset;
-
- CPU_ZERO(&cpuset);
- CPU_SET(pnumber, &cpuset);
- return pthread_setaffinity_np(tid, sizeof(cpuset), &cpuset) == 0;
-
-#elif defined(__sun) || defined(sun)
-
- return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(tid),
- pnumber, NULL) == 0;
-
-#elif defined(_AIX)
-
- return bindprocessor(BINDTHREAD, (tid_t)tid, pnumber) == 0;
-
-#elif defined(__hpux) || defined(hpux)
-
- pthread_spu_t answer;
-
- return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP,
- &answer, pnumber, tid) == 0;
-
-#elif defined(__APPLE__)
-
- struct thread_affinity_policy tapol;
-
- thread_port_t threadport = pthread_mach_thread_np(tid);
- tapol.affinity_tag = pnumber + 1;
- return thread_policy_set(threadport, THREAD_AFFINITY_POLICY,
- (thread_policy_t)&tapol, THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS;
-
-#else
-
- return false;
-
-#endif
-}
-#endif
-
-bool threadSetPriority(threadid_t tid, int prio)
-{
-#if defined(_WIN32)
-
- HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid);
- if (!hThread)
- return false;
-
- bool success = SetThreadPriority(hThread, prio) != 0;
-
- CloseHandle(hThread);
- return success;
-
-#else
-
- struct sched_param sparam;
- int policy;
-
- if (pthread_getschedparam(tid, &policy, &sparam) != 0)
- return false;
-
- int min = sched_get_priority_min(policy);
- int max = sched_get_priority_max(policy);
-
- sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST;
- return pthread_setschedparam(tid, policy, &sparam) == 0;
-
-#endif
-}
-
-
-/*
Path mangler
*/
// Default to RUN_IN_PLACE style relative paths
std::string path_share = "..";
std::string path_user = "..";
+std::string path_locale = path_share + DIR_DELIM + "locale";
+std::string path_cache = path_user + DIR_DELIM + "cache";
+
std::string getDataPath(const char *subpath)
{
@@ -282,6 +163,8 @@ bool detectMSVCBuildDir(const std::string &path)
{
const char *ends[] = {
"bin\\Release",
+ "bin\\MinSizeRel",
+ "bin\\RelWithDebInfo",
"bin\\Debug",
"bin\\Build",
NULL
@@ -523,14 +406,14 @@ bool setSystemPaths()
const std::string &trypath = *i;
if (!fs::PathExists(trypath) ||
!fs::PathExists(trypath + DIR_DELIM + "builtin")) {
- dstream << "WARNING: system-wide share not found at \""
+ warningstream << "system-wide share not found at \""
<< trypath << "\""<< std::endl;
continue;
}
// Warn if was not the first alternative
if (i != trylist.begin()) {
- dstream << "WARNING: system-wide share found at \""
+ warningstream << "system-wide share found at \""
<< trypath << "\"" << std::endl;
}
@@ -559,7 +442,7 @@ bool setSystemPaths()
TRUE, (UInt8 *)path, PATH_MAX)) {
path_share = std::string(path);
} else {
- dstream << "WARNING: Could not determine bundle resource path" << std::endl;
+ warningstream << "Could not determine bundle resource path" << std::endl;
}
CFRelease(resources_url);
@@ -583,6 +466,25 @@ bool setSystemPaths()
#endif
+void migrateCachePath()
+{
+ const std::string local_cache_path = path_user + DIR_DELIM + "cache";
+
+ // Delete tmp folder if it exists (it only ever contained
+ // a temporary ogg file, which is no longer used).
+ if (fs::PathExists(local_cache_path + DIR_DELIM + "tmp"))
+ fs::RecursiveDelete(local_cache_path + DIR_DELIM + "tmp");
+
+ // Bail if migration impossible
+ if (path_cache == local_cache_path || !fs::PathExists(local_cache_path)
+ || fs::PathExists(path_cache)) {
+ return;
+ }
+ if (!fs::Rename(local_cache_path, path_cache)) {
+ errorstream << "Failed to migrate local cache path "
+ "to system path!" << std::endl;
+ }
+}
void initializePaths()
{
@@ -627,17 +529,61 @@ void initializePaths()
path_share = execpath;
path_user = execpath;
}
-
+ path_cache = path_user + DIR_DELIM + "cache";
#else
infostream << "Using system-wide paths (NOT RUN_IN_PLACE)" << std::endl;
if (!setSystemPaths())
errorstream << "Failed to get one or more system-wide path" << std::endl;
+ // Initialize path_cache
+ // First try $XDG_CACHE_HOME/PROJECT_NAME
+ const char *cache_dir = getenv("XDG_CACHE_HOME");
+ const char *home_dir = getenv("HOME");
+ if (cache_dir) {
+ path_cache = std::string(cache_dir) + DIR_DELIM + PROJECT_NAME;
+ } else if (home_dir) {
+ // Then try $HOME/.cache/PROJECT_NAME
+ path_cache = std::string(home_dir) + DIR_DELIM + ".cache"
+ + DIR_DELIM + PROJECT_NAME;
+ } else {
+ // If neither works, use $PATH_USER/cache
+ path_cache = path_user + DIR_DELIM + "cache";
+ }
+ // Migrate cache folder to new location if possible
+ migrateCachePath();
#endif
infostream << "Detected share path: " << path_share << std::endl;
infostream << "Detected user path: " << path_user << std::endl;
+ infostream << "Detected cache path: " << path_cache << std::endl;
+
+#ifdef USE_GETTEXT
+ bool found_localedir = false;
+# ifdef STATIC_LOCALEDIR
+ if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) {
+ found_localedir = true;
+ path_locale = STATIC_LOCALEDIR;
+ infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl;
+ } else {
+ path_locale = getDataPath("locale");
+ if (fs::PathExists(path_locale)) {
+ found_localedir = true;
+ infostream << "Using in-place locale directory " << path_locale
+ << " even though a static one was provided "
+ << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl;
+ }
+ }
+# else
+ path_locale = getDataPath("locale");
+ if (fs::PathExists(path_locale)) {
+ found_localedir = true;
+ }
+# endif
+ if (!found_localedir) {
+ warningstream << "Couldn't find a locale directory!" << std::endl;
+ }
+#endif // USE_GETTEXT
}
@@ -798,5 +744,44 @@ v2u32 getDisplaySize()
# endif // __ANDROID__
#endif // SERVER
-} //namespace porting
+////
+//// OS-specific Secure Random
+////
+
+#ifdef WIN32
+
+bool secure_rand_fill_buf(void *buf, size_t len)
+{
+ HCRYPTPROV wctx;
+
+ if (!CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
+ return false;
+
+ CryptGenRandom(wctx, len, (BYTE *)buf);
+ CryptReleaseContext(wctx, 0);
+ return true;
+}
+
+#else
+
+bool secure_rand_fill_buf(void *buf, size_t len)
+{
+ // N.B. This function checks *only* for /dev/urandom, because on most
+ // common OSes it is non-blocking, whereas /dev/random is blocking, and it
+ // is exceptionally uncommon for there to be a situation where /dev/random
+ // exists but /dev/urandom does not. This guesswork is necessary since
+ // random devices are not covered by any POSIX standard...
+ FILE *fp = fopen("/dev/urandom", "rb");
+ if (!fp)
+ return false;
+
+ bool success = fread(buf, len, 1, fp) == 1;
+
+ fclose(fp);
+ return success;
+}
+
+#endif
+
+} //namespace porting
diff --git a/src/porting.h b/src/porting.h
index 2a91fdd06..4d51c5058 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -64,28 +64,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define _GNU_SOURCE
#endif
- #include <sched.h>
-
- #ifdef __FreeBSD__
- #include <pthread_np.h>
- typedef cpuset_t cpu_set_t;
- #elif defined(__sun) || defined(sun)
- #include <sys/types.h>
- #include <sys/processor.h>
- #elif defined(_AIX)
- #include <sys/processor.h>
- #elif __APPLE__
- #include <mach/mach_init.h>
- #include <mach/thread_policy.h>
- #endif
-
#define sleep_ms(x) usleep(x*1000)
-
- #define THREAD_PRIORITY_LOWEST 0
- #define THREAD_PRIORITY_BELOW_NORMAL 1
- #define THREAD_PRIORITY_NORMAL 2
- #define THREAD_PRIORITY_ABOVE_NORMAL 3
- #define THREAD_PRIORITY_HIGHEST 4
#endif
#ifdef _MSC_VER
@@ -129,6 +108,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <CoreFoundation/CoreFoundation.h>
#endif
+#ifndef _WIN32 // Posix
+ #include <sys/time.h>
+ #include <time.h>
+ #if defined(__MACH__) && defined(__APPLE__)
+ #include <mach/clock.h>
+ #include <mach/mach.h>
+ #endif
+#endif
+
namespace porting
{
@@ -155,30 +143,31 @@ extern std::string path_share;
extern std::string path_user;
/*
- Get full path of stuff in data directory.
- Example: "stone.png" -> "../data/stone.png"
+ Path to gettext locale files
*/
-std::string getDataPath(const char *subpath);
+extern std::string path_locale;
/*
- Initialize path_share and path_user.
+ Path to directory for storing caches.
*/
-void initializePaths();
+extern std::string path_cache;
/*
- Get number of online processors in the system.
+ Get full path of stuff in data directory.
+ Example: "stone.png" -> "../data/stone.png"
*/
-int getNumberOfProcessors();
+std::string getDataPath(const char *subpath);
/*
- Set a thread's affinity to a particular processor.
+ Move cache folder from path_user to the
+ system cache location if possible.
*/
-bool threadBindToProcessor(threadid_t tid, int pnumber);
+void migrateCachePath();
/*
- Set a thread's priority.
+ Initialize path_*.
*/
-bool threadSetPriority(threadid_t tid, int prio);
+void initializePaths();
/*
Return system information
@@ -194,10 +183,6 @@ void initIrrlicht(irr::IrrlichtDevice * );
Overflow can occur at any value higher than 10000000.
*/
#ifdef _WIN32 // Windows
-#ifndef _WIN32_WINNT
- #define _WIN32_WINNT 0x0501
-#endif
- #include <windows.h>
inline u32 getTimeS()
{
@@ -226,49 +211,56 @@ void initIrrlicht(irr::IrrlichtDevice * );
}
#else // Posix
-#include <sys/time.h>
-#include <time.h>
+ inline void _os_get_clock(struct timespec *ts)
+ {
#if defined(__MACH__) && defined(__APPLE__)
-#include <mach/clock.h>
-#include <mach/mach.h>
-#endif
+ // from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
+ // OS X does not have clock_gettime, use clock_get_time
+ clock_serv_t cclock;
+ mach_timespec_t mts;
+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+ clock_get_time(cclock, &mts);
+ mach_port_deallocate(mach_task_self(), cclock);
+ ts->tv_sec = mts.tv_sec;
+ ts->tv_nsec = mts.tv_nsec;
+#elif defined(CLOCK_MONOTONIC_RAW)
+ clock_gettime(CLOCK_MONOTONIC_RAW, ts);
+#elif defined(_POSIX_MONOTONIC_CLOCK)
+ clock_gettime(CLOCK_MONOTONIC, ts);
+#else
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ TIMEVAL_TO_TIMESPEC(&tv, ts);
+#endif // defined(__MACH__) && defined(__APPLE__)
+ }
+ // Note: these clock functions do not return wall time, but
+ // generally a clock that starts at 0 when the process starts.
inline u32 getTimeS()
{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_sec;
+ struct timespec ts;
+ _os_get_clock(&ts);
+ return ts.tv_sec;
}
inline u32 getTimeMs()
{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+ struct timespec ts;
+ _os_get_clock(&ts);
+ return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
}
inline u32 getTimeUs()
{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_sec * 1000000 + tv.tv_usec;
+ struct timespec ts;
+ _os_get_clock(&ts);
+ return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
}
inline u32 getTimeNs()
{
struct timespec ts;
- // from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
-#if defined(__MACH__) && defined(__APPLE__) // OS X does not have clock_gettime, use clock_get_time
- clock_serv_t cclock;
- mach_timespec_t mts;
- host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
- clock_get_time(cclock, &mts);
- mach_port_deallocate(mach_task_self(), cclock);
- ts.tv_sec = mts.tv_sec;
- ts.tv_nsec = mts.tv_nsec;
-#else
- clock_gettime(CLOCK_REALTIME, &ts);
-#endif
+ _os_get_clock(&ts);
return ts.tv_sec * 1000000000 + ts.tv_nsec;
}
@@ -311,59 +303,6 @@ inline u32 getDeltaMs(u32 old_time_ms, u32 new_time_ms)
}
}
-#if defined(linux) || defined(__linux)
- #include <sys/prctl.h>
-
- inline void setThreadName(const char *name) {
- /* It would be cleaner to do this with pthread_setname_np,
- * which was added to glibc in version 2.12, but some major
- * distributions are still runing 2.11 and previous versions.
- */
- prctl(PR_SET_NAME, name);
- }
-#elif defined(__FreeBSD__) || defined(__OpenBSD__)
- #include <pthread.h>
- #include <pthread_np.h>
-
- inline void setThreadName(const char *name) {
- pthread_set_name_np(pthread_self(), name);
- }
-#elif defined(__NetBSD__)
- #include <pthread.h>
-
- inline void setThreadName(const char *name) {
- pthread_setname_np(pthread_self(), name);
- }
-#elif defined(_MSC_VER)
- typedef struct tagTHREADNAME_INFO {
- DWORD dwType; // must be 0x1000
- LPCSTR szName; // pointer to name (in user addr space)
- DWORD dwThreadID; // thread ID (-1=caller thread)
- DWORD dwFlags; // reserved for future use, must be zero
- } THREADNAME_INFO;
-
- inline void setThreadName(const char *name) {
- THREADNAME_INFO info;
- info.dwType = 0x1000;
- info.szName = name;
- info.dwThreadID = -1;
- info.dwFlags = 0;
- __try {
- RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD), (ULONG_PTR *) &info);
- } __except (EXCEPTION_CONTINUE_EXECUTION) {}
- }
-#elif defined(__APPLE__)
- #include <pthread.h>
-
- inline void setThreadName(const char *name) {
- pthread_setname_np(name);
- }
-#elif defined(_WIN32) || defined(__GNU__)
- inline void setThreadName(const char* name) {}
-#else
- #warning "Unrecognized platform, thread names will not be available."
- inline void setThreadName(const char* name) {}
-#endif
#ifndef SERVER
float getDisplayDensity();
@@ -428,6 +367,7 @@ void setXorgClassHint(const video::SExposedVideoData &video_data,
// threads in the process inherit this exception handler
void setWin32ExceptionHandler();
+bool secure_rand_fill_buf(void *buf, size_t len);
} // namespace porting
#ifdef __ANDROID__
diff --git a/src/porting_android.cpp b/src/porting_android.cpp
index 6871ce465..72b625d73 100644
--- a/src/porting_android.cpp
+++ b/src/porting_android.cpp
@@ -21,12 +21,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#error This file may only be compiled for android!
#endif
+#include "util/numeric.h"
#include "porting.h"
#include "porting_android.h"
+#include "threading/thread.h"
#include "config.h"
#include "filesys.h"
#include "log.h"
+
#include <sstream>
+#include <exception>
+#include <stdlib.h>
#ifdef GPROF
#include "prof.h"
@@ -39,30 +44,23 @@ void android_main(android_app *app)
int retval = 0;
porting::app_global = app;
- porting::setThreadName("MainThread");
+ Thread::setName("Main");
try {
app_dummy();
- char *argv[] = { (char*) "minetest" };
- main(sizeof(argv) / sizeof(argv[0]), argv);
- }
- catch(BaseException e) {
- std::stringstream msg;
- msg << "Exception handled by main: " << e.what();
- const char* message = msg.str().c_str();
- __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, "%s", message);
- errorstream << msg << std::endl;
+ char *argv[] = {strdup(PROJECT_NAME), NULL};
+ main(ARRLEN(argv) - 1, argv);
+ free(argv[0]);
+ } catch (std::exception &e) {
+ errorstream << "Uncaught exception in main thread: " << e.what() << std::endl;
retval = -1;
- }
- catch(...) {
- __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME,
- "Some exception occured");
+ } catch (...) {
errorstream << "Uncaught exception in main thread!" << std::endl;
retval = -1;
}
porting::cleanupAndroid();
- errorstream << "Shutting down minetest." << std::endl;
+ infostream << "Shutting down." << std::endl;
exit(retval);
}
@@ -126,7 +124,7 @@ void initAndroid()
JavaVM *jvm = app_global->activity->vm;
JavaVMAttachArgs lJavaVMAttachArgs;
lJavaVMAttachArgs.version = JNI_VERSION_1_6;
- lJavaVMAttachArgs.name = "MinetestNativeThread";
+ lJavaVMAttachArgs.name = PROJECT_NAME_C "NativeThread";
lJavaVMAttachArgs.group = NULL;
#ifdef NDEBUG
// This is a ugly hack as arm v7a non debuggable builds crash without this
@@ -147,7 +145,7 @@ void initAndroid()
#ifdef GPROF
/* in the start-up code */
- __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME,
+ __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C,
"Initializing GPROF profiler");
monstartup("libminetest.so");
#endif
@@ -166,29 +164,63 @@ void cleanupAndroid()
jvm->DetachCurrentThread();
}
-void setExternalStorageDir(JNIEnv* lJNIEnv)
+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);
+ // Save it
+ str = c_str;
+ // And free the c-string
+ jnienv->ReleaseStringUTFChars(js, c_str);
+ return str;
+}
+
+// Calls static method if obj is NULL
+static std::string getAndroidPath(jclass cls, jobject obj, jclass cls_File,
+ jmethodID mt_getAbsPath, const char *getter)
+{
+ // Get getter method
+ jmethodID mt_getter;
+ if (obj)
+ mt_getter = jnienv->GetMethodID(cls, getter,
+ "()Ljava/io/File;");
+ else
+ mt_getter = jnienv->GetStaticMethodID(cls, getter,
+ "()Ljava/io/File;");
+
+ // Call getter
+ jobject ob_file;
+ if (obj)
+ ob_file = jnienv->CallObjectMethod(obj, mt_getter);
+ else
+ ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter);
+
+ // Call getAbsolutePath
+ jstring js_path = (jstring) jnienv->CallObjectMethod(ob_file,
+ mt_getAbsPath);
+
+ return javaStringToUTF8(js_path);
+}
+
+void initializePathsAndroid()
{
- // Android: Retrieve ablsolute path to external storage device (sdcard)
- jclass ClassEnv = lJNIEnv->FindClass("android/os/Environment");
- jmethodID MethodDir =
- lJNIEnv->GetStaticMethodID(ClassEnv,
- "getExternalStorageDirectory","()Ljava/io/File;");
- jobject ObjectFile = lJNIEnv->CallStaticObjectMethod(ClassEnv, MethodDir);
- jclass ClassFile = lJNIEnv->FindClass("java/io/File");
-
- jmethodID MethodPath =
- lJNIEnv->GetMethodID(ClassFile, "getAbsolutePath",
- "()Ljava/lang/String;");
- jstring StringPath =
- (jstring) lJNIEnv->CallObjectMethod(ObjectFile, MethodPath);
-
- const char *externalPath = lJNIEnv->GetStringUTFChars(StringPath, NULL);
- std::string userPath(externalPath);
- lJNIEnv->ReleaseStringUTFChars(StringPath, externalPath);
-
- path_storage = userPath;
- path_user = userPath + DIR_DELIM + PROJECT_NAME;
- path_share = userPath + DIR_DELIM + PROJECT_NAME;
+ // Get Environment class
+ jclass cls_Env = jnienv->FindClass("android/os/Environment");
+ // Get File class
+ jclass cls_File = jnienv->FindClass("java/io/File");
+ // Get getAbsolutePath method
+ jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File,
+ "getAbsolutePath", "()Ljava/lang/String;");
+
+ 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;
+
+ migrateCachePath();
}
void showInputDialog(const std::string& acceptButton, const std::string& hint,
@@ -241,7 +273,7 @@ std::string getInputDialogValue()
return text;
}
-#if not defined(SERVER)
+#ifndef SERVER
float getDisplayDensity()
{
static bool firstrun = true;
@@ -291,5 +323,5 @@ v2u32 getDisplaySize()
}
return retval;
}
-#endif //SERVER
+#endif // ndef SERVER
}
diff --git a/src/porting_android.h b/src/porting_android.h
index bfdadfbff..e4be0740d 100644
--- a/src/porting_android.h
+++ b/src/porting_android.h
@@ -43,10 +43,10 @@ void initAndroid();
void cleanupAndroid();
/**
- * set storage dir on external sdcard#
- * @param lJNIEnv environment from android
+ * Initializes path_* variables for Android
+ * @param env Android JNI environment
*/
-void setExternalStorageDir(JNIEnv* lJNIEnv);
+void initializePathsAndroid();
/**
* use java function to copy media from assets to external storage
diff --git a/src/profiler.h b/src/profiler.h
index 78d3b08e0..e8eac86b1 100644
--- a/src/profiler.h
+++ b/src/profiler.h
@@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include <map>
-#include "jthread/jmutex.h"
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex.h"
+#include "threading/mutex_auto_lock.h"
#include "util/timetaker.h"
#include "util/numeric.h" // paging()
#include "debug.h" // assert()
@@ -49,7 +49,7 @@ public:
void add(const std::string &name, float value)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
{
/* No average shall have been used; mark add used as -2 */
std::map<std::string, int>::iterator n = m_avgcounts.find(name);
@@ -72,7 +72,7 @@ public:
void avg(const std::string &name, float value)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
int &count = m_avgcounts[name];
assert(count != -2);
@@ -82,7 +82,7 @@ public:
void clear()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
for(std::map<std::string, float>::iterator
i = m_data.begin();
i != m_data.end(); ++i)
@@ -114,7 +114,7 @@ public:
void printPage(std::ostream &o, u32 page, u32 pagecount)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
u32 minindex, maxindex;
paging(m_data.size(), page, pagecount, minindex, maxindex);
@@ -159,7 +159,7 @@ public:
void graphAdd(const std::string &id, float value)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
std::map<std::string, float>::iterator i =
m_graphvalues.find(id);
if(i == m_graphvalues.end())
@@ -169,20 +169,20 @@ public:
}
void graphGet(GraphValues &result)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
result = m_graphvalues;
m_graphvalues.clear();
}
void remove(const std::string& name)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
m_avgcounts.erase(name);
m_data.erase(name);
}
private:
- JMutex m_mutex;
+ Mutex m_mutex;
std::map<std::string, float> m_data;
std::map<std::string, int> m_avgcounts;
std::map<std::string, float> m_graphvalues;
diff --git a/src/quicktune.cpp b/src/quicktune.cpp
index 2f9f987bd..b0e2dc6d5 100644
--- a/src/quicktune.cpp
+++ b/src/quicktune.cpp
@@ -18,8 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "quicktune.h"
-#include "jthread/jmutex.h"
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex.h"
+#include "threading/mutex_auto_lock.h"
#include "util/string.h"
std::string QuicktuneValue::getString()
@@ -49,12 +49,12 @@ void QuicktuneValue::relativeAdd(float amount)
static std::map<std::string, QuicktuneValue> g_values;
static std::vector<std::string> g_names;
-JMutex *g_mutex = NULL;
+Mutex *g_mutex = NULL;
static void makeMutex()
{
if(!g_mutex){
- g_mutex = new JMutex();
+ g_mutex = new Mutex();
}
}
@@ -66,7 +66,7 @@ std::vector<std::string> getQuicktuneNames()
QuicktuneValue getQuicktuneValue(const std::string &name)
{
makeMutex();
- JMutexAutoLock lock(*g_mutex);
+ MutexAutoLock lock(*g_mutex);
std::map<std::string, QuicktuneValue>::iterator i = g_values.find(name);
if(i == g_values.end()){
QuicktuneValue val;
@@ -79,7 +79,7 @@ QuicktuneValue getQuicktuneValue(const std::string &name)
void setQuicktuneValue(const std::string &name, const QuicktuneValue &val)
{
makeMutex();
- JMutexAutoLock lock(*g_mutex);
+ MutexAutoLock lock(*g_mutex);
g_values[name] = val;
g_values[name].modified = true;
}
@@ -87,7 +87,7 @@ void setQuicktuneValue(const std::string &name, const QuicktuneValue &val)
void updateQuicktuneValue(const std::string &name, QuicktuneValue &val)
{
makeMutex();
- JMutexAutoLock lock(*g_mutex);
+ MutexAutoLock lock(*g_mutex);
std::map<std::string, QuicktuneValue>::iterator i = g_values.find(name);
if(i == g_values.end()){
g_values[name] = val;
diff --git a/src/rollback.cpp b/src/rollback.cpp
index 7267a50f6..2367c3a21 100644
--- a/src/rollback.cpp
+++ b/src/rollback.cpp
@@ -107,6 +107,8 @@ RollbackManager::RollbackManager(const std::string & world_path,
RollbackManager::~RollbackManager()
{
+ flush();
+
SQLOK(sqlite3_finalize(stmt_insert));
SQLOK(sqlite3_finalize(stmt_replace));
SQLOK(sqlite3_finalize(stmt_select));
@@ -240,8 +242,7 @@ bool RollbackManager::createTables()
" FOREIGN KEY (`oldNode`) REFERENCES `node`(`id`),\n"
" FOREIGN KEY (`newNode`) REFERENCES `node`(`id`)\n"
");\n"
- "CREATE INDEX IF NOT EXISTS `actionActor` ON `action`(`actor`);\n"
- "CREATE INDEX IF NOT EXISTS `actionTimestamp` ON `action`(`timestamp`);\n",
+ "CREATE INDEX IF NOT EXISTS `actionIndex` ON `action`(`x`,`y`,`z`,`timestamp`,`actor`);\n",
NULL, NULL, NULL));
verbosestream << "SQL Rollback: SQLite3 database structure was created" << std::endl;
@@ -858,7 +859,7 @@ std::string RollbackManager::getSuspect(v3s16 p, float nearness_shortcut,
float likely_suspect_nearness = 0;
for (std::list<RollbackAction>::const_reverse_iterator
i = action_latest_buffer.rbegin();
- i != action_latest_buffer.rend(); i++) {
+ i != action_latest_buffer.rend(); ++i) {
if (i->unix_time < first_time) {
break;
}
@@ -897,7 +898,7 @@ void RollbackManager::flush()
for (iter = action_todisk_buffer.begin();
iter != action_todisk_buffer.end();
- iter++) {
+ ++iter) {
if (iter->actor == "") {
continue;
}
@@ -930,6 +931,7 @@ std::list<RollbackAction> RollbackManager::getEntriesSince(time_t first_time)
std::list<RollbackAction> RollbackManager::getNodeActors(v3s16 pos, int range,
time_t seconds, int limit)
{
+ flush();
time_t cur_time = time(0);
time_t first_time = cur_time - seconds;
diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp
index b3f457029..bffe0a82c 100644
--- a/src/rollback_interface.cpp
+++ b/src/rollback_interface.cpp
@@ -155,7 +155,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam
} else {
NodeMetadata *meta = map->getNodeMetadata(p);
if (!meta) {
- meta = new NodeMetadata(gamedef);
+ meta = new NodeMetadata(gamedef->idef());
if (!map->setNodeMetadata(p, meta)) {
delete meta;
infostream << "RollbackAction::applyRevert(): "
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 3754fc2ff..06e20c2a0 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -76,7 +76,7 @@ ItemDefinition read_item_definition(lua_State* L,int index,
getboolfield(L, index, "liquids_pointable", def.liquids_pointable);
warn_if_field_exists(L, index, "tool_digging_properties",
- "deprecated: use tool_capabilities");
+ "Deprecated; use tool_capabilities");
lua_getfield(L, index, "tool_capabilities");
if(lua_istable(L, -1)){
@@ -100,6 +100,9 @@ ItemDefinition read_item_definition(lua_State* L,int index,
lua_getfield(L, -1, "place");
read_soundspec(L, -1, def.sound_place);
lua_pop(L, 1);
+ lua_getfield(L, -1, "place_failed");
+ read_soundspec(L, -1, def.sound_place_failed);
+ lua_pop(L, 1);
}
lua_pop(L, 1);
@@ -197,6 +200,23 @@ void read_object_properties(lua_State *L, int index,
prop->automatic_face_movement_dir_offset = 0.0;
}
lua_pop(L, 1);
+ getboolfield(L, -1, "backface_culling", prop->backface_culling);
+
+ getstringfield(L, -1, "nametag", prop->nametag);
+ lua_getfield(L, -1, "nametag_color");
+ if (!lua_isnil(L, -1)) {
+ video::SColor color = prop->nametag_color;
+ if (read_color(L, -1, &color))
+ prop->nametag_color = color;
+ }
+ lua_pop(L, 1);
+
+ lua_getfield(L, -1, "automatic_face_movement_max_rotation_per_sec");
+ if (lua_isnumber(L, -1)) {
+ prop->automatic_face_movement_max_rotation_per_sec = luaL_checknumber(L, -1);
+ }
+ lua_pop(L, 1);
+ getstringfield(L, -1, "infotext", prop->infotext);
}
/******************************************************************************/
@@ -255,6 +275,16 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
else
lua_pushboolean(L, false);
lua_setfield(L, -2, "automatic_face_movement_dir");
+ lua_pushboolean(L, prop->backface_culling);
+ lua_setfield(L, -2, "backface_culling");
+ lua_pushlstring(L, prop->nametag.c_str(), prop->nametag.size());
+ lua_setfield(L, -2, "nametag");
+ push_ARGB8(L, prop->nametag_color);
+ lua_setfield(L, -2, "nametag_color");
+ lua_pushnumber(L, prop->automatic_face_movement_max_rotation_per_sec);
+ lua_setfield(L, -2, "automatic_face_movement_max_rotation_per_sec");
+ lua_pushlstring(L, prop->infotext.c_str(), prop->infotext.size());
+ lua_setfield(L, -2, "infotext");
}
/******************************************************************************/
@@ -264,14 +294,31 @@ TileDef read_tiledef(lua_State *L, int index, u8 drawtype)
index = lua_gettop(L) + 1 + index;
TileDef tiledef;
- bool default_tiling = (drawtype == NDT_PLANTLIKE || drawtype == NDT_FIRELIKE)
- ? false : true;
+
+ bool default_tiling = true;
+ bool default_culling = true;
+ switch (drawtype) {
+ case NDT_PLANTLIKE:
+ case NDT_FIRELIKE:
+ default_tiling = false;
+ // "break" is omitted here intentionaly, as PLANTLIKE
+ // FIRELIKE drawtype both should default to having
+ // backface_culling to false.
+ case NDT_MESH:
+ case NDT_LIQUID:
+ default_culling = false;
+ break;
+ default:
+ break;
+ }
+
// key at index -2 and value at index
if(lua_isstring(L, index)){
// "default_lava.png"
tiledef.name = lua_tostring(L, index);
tiledef.tileable_vertical = default_tiling;
tiledef.tileable_horizontal = default_tiling;
+ tiledef.backface_culling = default_culling;
}
else if(lua_istable(L, index))
{
@@ -280,7 +327,7 @@ TileDef read_tiledef(lua_State *L, int index, u8 drawtype)
getstringfield(L, index, "name", tiledef.name);
getstringfield(L, index, "image", tiledef.name); // MaterialSpec compat.
tiledef.backface_culling = getboolfield_default(
- L, index, "backface_culling", true);
+ L, index, "backface_culling", default_culling);
tiledef.tileable_horizontal = getboolfield_default(
L, index, "tileable_horizontal", default_tiling);
tiledef.tileable_vertical = getboolfield_default(
@@ -427,17 +474,17 @@ ContentFeatures read_content_features(lua_State *L, int index)
// Warn about some deprecated fields
warn_if_field_exists(L, index, "wall_mounted",
- "deprecated: use paramtype2 = 'wallmounted'");
+ "Deprecated; use paramtype2 = 'wallmounted'");
warn_if_field_exists(L, index, "light_propagates",
- "deprecated: determined from paramtype");
+ "Deprecated; determined from paramtype");
warn_if_field_exists(L, index, "dug_item",
- "deprecated: use 'drop' field");
+ "Deprecated; use 'drop' field");
warn_if_field_exists(L, index, "extra_dug_item",
- "deprecated: use 'drop' field");
+ "Deprecated; use 'drop' field");
warn_if_field_exists(L, index, "extra_dug_item_rarity",
- "deprecated: use 'drop' field");
+ "Deprecated; use 'drop' field");
warn_if_field_exists(L, index, "metadata_name",
- "deprecated: use on_add and metadata callbacks");
+ "Deprecated; use on_add and metadata callbacks");
// True for all ground-like things like stone and mud, false for eg. trees
getboolfield(L, index, "is_ground_content", f.is_ground_content);
@@ -454,6 +501,8 @@ ContentFeatures read_content_features(lua_State *L, int index)
getboolfield(L, index, "climbable", f.climbable);
// Player can build on these
getboolfield(L, index, "buildable_to", f.buildable_to);
+ // Liquids flow into and replace node
+ getboolfield(L, index, "floodable", f.floodable);
// Whether the node is non-liquid, source liquid or flowing liquid
f.liquid_type = (LiquidType)getenumfield(L, index, "liquidtype",
ScriptApiNode::es_LiquidType, LIQUID_NONE);
@@ -486,6 +535,46 @@ ContentFeatures read_content_features(lua_State *L, int index)
f.node_box = read_nodebox(L, -1);
lua_pop(L, 1);
+ lua_getfield(L, index, "connects_to");
+ if (lua_istable(L, -1)) {
+ int table = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, table) != 0) {
+ // Value at -1
+ f.connects_to.push_back(lua_tostring(L, -1));
+ lua_pop(L, 1);
+ }
+ }
+ lua_pop(L, 1);
+
+ lua_getfield(L, index, "connect_sides");
+ if (lua_istable(L, -1)) {
+ int table = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, table) != 0) {
+ // Value at -1
+ std::string side(lua_tostring(L, -1));
+ // Note faces are flipped to make checking easier
+ if (side == "top")
+ f.connect_sides |= 2;
+ else if (side == "bottom")
+ f.connect_sides |= 1;
+ else if (side == "front")
+ f.connect_sides |= 16;
+ else if (side == "left")
+ f.connect_sides |= 32;
+ else if (side == "back")
+ f.connect_sides |= 4;
+ else if (side == "right")
+ f.connect_sides |= 8;
+ else
+ warningstream << "Unknown value for \"connect_sides\": "
+ << side << std::endl;
+ lua_pop(L, 1);
+ }
+ }
+ lua_pop(L, 1);
+
lua_getfield(L, index, "selection_box");
if(lua_istable(L, -1))
f.selection_box = read_nodebox(L, -1);
@@ -578,25 +667,31 @@ NodeBox read_nodebox(lua_State *L, int index)
nodebox.type = (NodeBoxType)getenumfield(L, index, "type",
ScriptApiNode::es_NodeBoxType, NODEBOX_REGULAR);
- lua_getfield(L, index, "fixed");
- if(lua_istable(L, -1))
- nodebox.fixed = read_aabb3f_vector(L, -1, BS);
- lua_pop(L, 1);
-
- lua_getfield(L, index, "wall_top");
- if(lua_istable(L, -1))
- nodebox.wall_top = read_aabb3f(L, -1, BS);
- lua_pop(L, 1);
-
- lua_getfield(L, index, "wall_bottom");
- if(lua_istable(L, -1))
- nodebox.wall_bottom = read_aabb3f(L, -1, BS);
- lua_pop(L, 1);
-
- lua_getfield(L, index, "wall_side");
- if(lua_istable(L, -1))
- nodebox.wall_side = read_aabb3f(L, -1, BS);
- lua_pop(L, 1);
+#define NODEBOXREAD(n, s) \
+ do { \
+ lua_getfield(L, index, (s)); \
+ if (lua_istable(L, -1)) \
+ (n) = read_aabb3f(L, -1, BS); \
+ lua_pop(L, 1); \
+ } while (0)
+
+#define NODEBOXREADVEC(n, s) \
+ do { \
+ lua_getfield(L, index, (s)); \
+ if (lua_istable(L, -1)) \
+ (n) = read_aabb3f_vector(L, -1, BS); \
+ lua_pop(L, 1); \
+ } while (0)
+ 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");
}
return nodebox;
}
@@ -639,14 +734,13 @@ void pushnode(lua_State *L, const MapNode &n, INodeDefManager *ndef)
/******************************************************************************/
void warn_if_field_exists(lua_State *L, int table,
- const char *fieldname, const std::string &message)
+ const char *name, const std::string &message)
{
- lua_getfield(L, table, fieldname);
- if(!lua_isnil(L, -1)){
-//TODO find way to access backtrace fct from here
- // infostream<<script_get_backtrace(L)<<std::endl;
- infostream<<"WARNING: field \""<<fieldname<<"\": "
- <<message<<std::endl;
+ lua_getfield(L, table, name);
+ if (!lua_isnil(L, -1)) {
+ warningstream << "Field \"" << name << "\": "
+ << message << std::endl;
+ infostream << script_get_backtrace(L) << std::endl;
}
lua_pop(L, 1);
}
@@ -705,7 +799,7 @@ ItemStack read_item(lua_State* L, int index,Server* srv)
}
catch(SerializationError &e)
{
- infostream<<"WARNING: unable to create item from itemstring"
+ warningstream<<"unable to create item from itemstring"
<<": "<<itemstring<<std::endl;
return ItemStack();
}
@@ -840,14 +934,14 @@ ToolCapabilities read_tool_capabilities(
getintfield(L, table_groupcap, "uses", groupcap.uses);
// DEPRECATED: maxwear
float maxwear = 0;
- if(getfloatfield(L, table_groupcap, "maxwear", maxwear)){
- if(maxwear != 0)
+ if (getfloatfield(L, table_groupcap, "maxwear", maxwear)){
+ if (maxwear != 0)
groupcap.uses = 1.0/maxwear;
else
groupcap.uses = 0;
- infostream<<script_get_backtrace(L)<<std::endl;
- infostream<<"WARNING: field \"maxwear\" is deprecated; "
- <<"should replace with uses=1/maxwear"<<std::endl;
+ warningstream << "Field \"maxwear\" is deprecated; "
+ << "replace with uses=1/maxwear" << std::endl;
+ infostream << script_get_backtrace(L) << std::endl;
}
// Read "times" table
lua_getfield(L, table_groupcap, "times");
@@ -1232,4 +1326,3 @@ void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion)
}
lua_pop(L, 1); // Pop value
}
-
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp
index f1d3cc421..55c4a5f5a 100644
--- a/src/script/common/c_converter.cpp
+++ b/src/script/common/c_converter.cpp
@@ -517,6 +517,15 @@ bool getboolfield_default(lua_State *L, int table,
return result;
}
+void setstringfield(lua_State *L, int table,
+ const char *fieldname, const char *value)
+{
+ lua_pushstring(L, value);
+ if(table < 0)
+ table -= 1;
+ lua_setfield(L, table, fieldname);
+}
+
void setintfield(lua_State *L, int table,
const char *fieldname, int value)
{
diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h
index 18a045d2a..eefac0ed7 100644
--- a/src/script/common/c_converter.h
+++ b/src/script/common/c_converter.h
@@ -69,6 +69,8 @@ bool getfloatfield(lua_State *L, int table,
std::string checkstringfield(lua_State *L, int table,
const char *fieldname);
+void setstringfield(lua_State *L, int table,
+ const char *fieldname, const char *value);
void setintfield(lua_State *L, int table,
const char *fieldname, int value);
void setfloatfield(lua_State *L, int table,
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp
index 2a10ce0f2..b349f9dd1 100644
--- a/src/script/common/c_internal.cpp
+++ b/src/script/common/c_internal.cpp
@@ -136,61 +136,56 @@ void script_run_callbacks_f(lua_State *L, int nargs,
FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments");
// Insert error handler
- lua_pushcfunction(L, script_error_handler);
- int errorhandler = lua_gettop(L) - nargs - 1;
- lua_insert(L, errorhandler);
+ PUSH_ERROR_HANDLER(L);
+ int error_handler = lua_gettop(L) - nargs - 1;
+ lua_insert(L, error_handler);
// Insert run_callbacks between error handler and table
lua_getglobal(L, "core");
lua_getfield(L, -1, "run_callbacks");
lua_remove(L, -2);
- lua_insert(L, errorhandler + 1);
+ lua_insert(L, error_handler + 1);
// Insert mode after table
lua_pushnumber(L, (int) mode);
- lua_insert(L, errorhandler + 3);
+ lua_insert(L, error_handler + 3);
// Stack now looks like this:
// ... <error handler> <run_callbacks> <table> <mode> <arg#1> <arg#2> ... <arg#n>
- int result = lua_pcall(L, nargs + 2, 1, errorhandler);
+ int result = lua_pcall(L, nargs + 2, 1, error_handler);
if (result != 0)
script_error(L, result, NULL, fxn);
- lua_remove(L, -2); // Remove error handler
+ lua_remove(L, error_handler);
}
void log_deprecated(lua_State *L, const std::string &message)
{
static bool configured = false;
- static bool dolog = false;
- static bool doerror = false;
+ static bool do_log = false;
+ static bool do_error = false;
- // performance optimization to not have to read and compare setting for every logline
+ // Only read settings on first call
if (!configured) {
std::string value = g_settings->get("deprecated_lua_api_handling");
if (value == "log") {
- dolog = true;
+ do_log = true;
} else if (value == "error") {
- dolog = true;
- doerror = true;
+ do_log = true;
+ do_error = true;
}
}
- if (doerror) {
- if (L != NULL) {
- script_error(L, LUA_ERRRUN, NULL, NULL);
- } else {
- FATAL_ERROR("Can't do a scripterror for this deprecated message, "
- "so exit completely!");
- }
- }
-
- if (dolog) {
- /* abusing actionstream because of lack of file-only-logged loglevel */
- actionstream << message << std::endl;
- if (L != NULL) {
- actionstream << script_get_backtrace(L) << std::endl;
+ if (do_log) {
+ warningstream << message << std::endl;
+ // L can be NULL if we get called by log_deprecated(const std::string &msg)
+ // from scripting_game.cpp.
+ if (L) {
+ if (do_error)
+ script_error(L, LUA_ERRRUN, NULL, NULL);
+ else
+ infostream << script_get_backtrace(L) << std::endl;
}
}
}
diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h
index ecb514c8f..fc59b0e2e 100644
--- a/src/script/common/c_internal.h
+++ b/src/script/common/c_internal.h
@@ -34,6 +34,31 @@ extern "C" {
#include "common/c_types.h"
+
+/*
+ Define our custom indices into the Lua registry table.
+
+ Lua 5.2 and above define the LUA_RIDX_LAST macro. Only numbers above that
+ may be used for custom indices, anything else is reserved.
+
+ Lua 5.1 / LuaJIT do not use any numeric indices (only string indices),
+ so we can use numeric indices freely.
+*/
+#ifdef LUA_RIDX_LAST
+#define CUSTOM_RIDX_BASE ((LUA_RIDX_LAST)+1)
+#else
+#define CUSTOM_RIDX_BASE 1
+#endif
+
+#define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE)
+#define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1)
+#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2)
+#define CUSTOM_RIDX_ERROR_HANDLER (CUSTOM_RIDX_BASE + 3)
+
+// Pushes the error handler onto the stack and returns its index
+#define PUSH_ERROR_HANDLER(L) \
+ (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER), lua_gettop((L)))
+
#define PCALL_RESL(L, RES) do { \
int result_ = (RES); \
if (result_ != 0) { \
diff --git a/src/script/common/c_types.h b/src/script/common/c_types.h
index 706470737..056f30251 100644
--- a/src/script/common/c_types.h
+++ b/src/script/common/c_types.h
@@ -52,10 +52,10 @@ public:
}
};
-class LuaError : public ServerError
+class LuaError : public ModError
{
public:
- LuaError(const std::string &s) : ServerError(s) {}
+ LuaError(const std::string &s) : ModError(s) {}
};
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp
index c00b22f98..9bf3fcf49 100644
--- a/src/script/cpp_api/s_async.cpp
+++ b/src/script/cpp_api/s_async.cpp
@@ -47,32 +47,31 @@ AsyncEngine::~AsyncEngine()
// Request all threads to stop
for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
it != workerThreads.end(); it++) {
- (*it)->Stop();
+ (*it)->stop();
}
// Wake up all threads
for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
it != workerThreads.end(); it++) {
- jobQueueCounter.Post();
+ jobQueueCounter.post();
}
// Wait for threads to finish
for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
it != workerThreads.end(); it++) {
- (*it)->Wait();
+ (*it)->wait();
}
// Force kill all threads
for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
it != workerThreads.end(); it++) {
- (*it)->Kill();
delete *it;
}
- jobQueueMutex.Lock();
+ jobQueueMutex.lock();
jobQueue.clear();
- jobQueueMutex.Unlock();
+ jobQueueMutex.unlock();
workerThreads.clear();
}
@@ -92,16 +91,17 @@ void AsyncEngine::initialize(unsigned int numEngines)
initDone = true;
for (unsigned int i = 0; i < numEngines; i++) {
- AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, i);
+ AsyncWorkerThread *toAdd = new AsyncWorkerThread(this,
+ std::string("AsyncWorker-") + itos(i));
workerThreads.push_back(toAdd);
- toAdd->Start();
+ toAdd->start();
}
}
/******************************************************************************/
unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params)
{
- jobQueueMutex.Lock();
+ jobQueueMutex.lock();
LuaJobInfo toAdd;
toAdd.id = jobIdCounter++;
toAdd.serializedFunction = func;
@@ -109,9 +109,9 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params)
jobQueue.push_back(toAdd);
- jobQueueCounter.Post();
+ jobQueueCounter.post();
- jobQueueMutex.Unlock();
+ jobQueueMutex.unlock();
return toAdd.id;
}
@@ -119,8 +119,8 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params)
/******************************************************************************/
LuaJobInfo AsyncEngine::getJob()
{
- jobQueueCounter.Wait();
- jobQueueMutex.Lock();
+ jobQueueCounter.wait();
+ jobQueueMutex.lock();
LuaJobInfo retval;
retval.valid = false;
@@ -130,7 +130,7 @@ LuaJobInfo AsyncEngine::getJob()
jobQueue.pop_front();
retval.valid = true;
}
- jobQueueMutex.Unlock();
+ jobQueueMutex.unlock();
return retval;
}
@@ -138,16 +138,17 @@ LuaJobInfo AsyncEngine::getJob()
/******************************************************************************/
void AsyncEngine::putJobResult(LuaJobInfo result)
{
- resultQueueMutex.Lock();
+ resultQueueMutex.lock();
resultQueue.push_back(result);
- resultQueueMutex.Unlock();
+ resultQueueMutex.unlock();
}
/******************************************************************************/
-void AsyncEngine::step(lua_State *L, int errorhandler)
+void AsyncEngine::step(lua_State *L)
{
+ int error_handler = PUSH_ERROR_HANDLER(L);
lua_getglobal(L, "core");
- resultQueueMutex.Lock();
+ resultQueueMutex.lock();
while (!resultQueue.empty()) {
LuaJobInfo jobDone = resultQueue.front();
resultQueue.pop_front();
@@ -164,16 +165,16 @@ void AsyncEngine::step(lua_State *L, int errorhandler)
lua_pushlstring(L, jobDone.serializedResult.data(),
jobDone.serializedResult.size());
- PCALL_RESL(L, lua_pcall(L, 2, 0, errorhandler));
+ PCALL_RESL(L, lua_pcall(L, 2, 0, error_handler));
}
- resultQueueMutex.Unlock();
- lua_pop(L, 1); // Pop core
+ resultQueueMutex.unlock();
+ lua_pop(L, 2); // Pop core and error handler
}
/******************************************************************************/
void AsyncEngine::pushFinishedJobs(lua_State* L) {
// Result Table
- resultQueueMutex.Lock();
+ MutexAutoLock l(resultQueueMutex);
unsigned int index = 1;
lua_createtable(L, resultQueue.size(), 0);
@@ -197,8 +198,6 @@ void AsyncEngine::pushFinishedJobs(lua_State* L) {
lua_rawseti(L, top, index++);
}
-
- resultQueueMutex.Unlock();
}
/******************************************************************************/
@@ -214,10 +213,10 @@ void AsyncEngine::prepareEnvironment(lua_State* L, int top)
/******************************************************************************/
AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher,
- unsigned int threadNum) :
+ const std::string &name) :
+ Thread(name),
ScriptApiBase(),
- jobDispatcher(jobDispatcher),
- threadnum(threadNum)
+ jobDispatcher(jobDispatcher)
{
lua_State *L = getStack();
@@ -235,50 +234,42 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher,
/******************************************************************************/
AsyncWorkerThread::~AsyncWorkerThread()
{
- sanity_check(IsRunning() == false);
+ sanity_check(!isRunning());
}
/******************************************************************************/
-void* AsyncWorkerThread::Thread()
+void* AsyncWorkerThread::run()
{
- ThreadStarted();
-
- // Register thread for error logging
- char number[21];
- snprintf(number, sizeof(number), "%u", threadnum);
- log_register_thread(std::string("AsyncWorkerThread_") + number);
-
- porting::setThreadName((std::string("AsyncWorkTh_") + number).c_str());
-
lua_State *L = getStack();
std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua";
- if (!loadScript(script)) {
- errorstream
- << "AsyncWorkerThread execution of async base environment failed!"
- << std::endl;
- abort();
+ try {
+ loadScript(script);
+ } catch (const ModError &e) {
+ errorstream << "Execution of async base environment failed: "
+ << e.what() << std::endl;
+ FATAL_ERROR("Execution of async base environment failed");
}
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
lua_getglobal(L, "core");
if (lua_isnil(L, -1)) {
- errorstream << "Unable to find core within async environment!";
- abort();
+ FATAL_ERROR("Unable to find core within async environment!");
}
// Main loop
- while (!StopRequested()) {
+ while (!stopRequested()) {
// Wait for job
LuaJobInfo toProcess = jobDispatcher->getJob();
- if (toProcess.valid == false || StopRequested()) {
+ if (toProcess.valid == false || stopRequested()) {
continue;
}
lua_getfield(L, -1, "job_processor");
if (lua_isnil(L, -1)) {
- errorstream << "Unable to get async job processor!" << std::endl;
- abort();
+ FATAL_ERROR("Unable to get async job processor!");
}
luaL_checktype(L, -1, LUA_TFUNCTION);
@@ -291,7 +282,7 @@ void* AsyncWorkerThread::Thread()
toProcess.serializedParams.data(),
toProcess.serializedParams.size());
- int result = lua_pcall(L, 2, 1, m_errorhandler);
+ int result = lua_pcall(L, 2, 1, error_handler);
if (result) {
PCALL_RES(result);
toProcess.serializedResult = "";
@@ -308,9 +299,7 @@ void* AsyncWorkerThread::Thread()
jobDispatcher->putJobResult(toProcess);
}
- lua_pop(L, 1); // Pop core
-
- log_deregister_thread();
+ lua_pop(L, 2); // Pop core and error handler
return 0;
}
diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h
index a6459c18d..8d612d58c 100644
--- a/src/script/cpp_api/s_async.h
+++ b/src/script/cpp_api/s_async.h
@@ -24,9 +24,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <deque>
#include <map>
-#include "jthread/jthread.h"
-#include "jthread/jmutex.h"
-#include "jthread/jsemaphore.h"
+#include "threading/thread.h"
+#include "threading/mutex.h"
+#include "threading/semaphore.h"
#include "debug.h"
#include "lua.h"
#include "cpp_api/s_base.h"
@@ -52,24 +52,15 @@ struct LuaJobInfo {
};
// Asynchronous working environment
-class AsyncWorkerThread : public JThread, public ScriptApiBase {
+class AsyncWorkerThread : public Thread, public ScriptApiBase {
public:
- /**
- * default constructor
- * @param pointer to job dispatcher
- */
- AsyncWorkerThread(AsyncEngine* jobDispatcher, unsigned int threadNum);
-
+ AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name);
virtual ~AsyncWorkerThread();
- void *Thread();
+ void *run();
private:
AsyncEngine *jobDispatcher;
-
- // Thread number. Used for debug output
- unsigned int threadnum;
-
};
// Asynchornous thread and job management
@@ -104,9 +95,8 @@ public:
* Engine step to process finished jobs
* the engine step is one way to pass events back, PushFinishedJobs another
* @param L The Lua stack
- * @param errorhandler Stack index of the Lua error handler
*/
- void step(lua_State *L, int errorhandler);
+ void step(lua_State *L);
/**
* Push a list of finished jobs onto the stack
@@ -148,13 +138,13 @@ private:
unsigned int jobIdCounter;
// Mutex to protect job queue
- JMutex jobQueueMutex;
+ Mutex jobQueueMutex;
// Job queue
std::deque<LuaJobInfo> jobQueue;
// Mutex to protect result queue
- JMutex resultQueueMutex;
+ Mutex resultQueueMutex;
// Result queue
std::deque<LuaJobInfo> resultQueue;
@@ -162,7 +152,7 @@ private:
std::vector<AsyncWorkerThread*> workerThreads;
// Counter semaphore for job dispatching
- JSemaphore jobQueueCounter;
+ Semaphore jobQueueCounter;
};
#endif // CPP_API_ASYNC_EVENTS_HEADER
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index dcfbac4bf..679a517ee 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -52,13 +52,13 @@ public:
{
// Store current mod name in registry
lua_pushstring(L, mod_name.c_str());
- lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
}
~ModNameStorer()
{
// Clear current mod name from registry
lua_pushnil(L);
- lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
}
};
@@ -67,10 +67,11 @@ public:
ScriptApiBase
*/
-ScriptApiBase::ScriptApiBase()
+ScriptApiBase::ScriptApiBase() :
+ m_luastackmutex()
{
#ifdef SCRIPTAPI_LOCK_DEBUG
- m_locked = false;
+ m_lock_recursion_count = 0;
#endif
m_luastack = luaL_newstate();
@@ -78,13 +79,13 @@ ScriptApiBase::ScriptApiBase()
luaL_openlibs(m_luastack);
- // Add and save an error handler
- lua_pushcfunction(m_luastack, script_error_handler);
- m_errorhandler = lua_gettop(m_luastack);
-
// Make the ScriptApiBase* accessible to ModApiBase
lua_pushlightuserdata(m_luastack, this);
- lua_setfield(m_luastack, LUA_REGISTRYINDEX, "scriptapi");
+ lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
+
+ // Add and save an error handler
+ lua_pushcfunction(m_luastack, script_error_handler);
+ lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER);
// If we are using LuaJIT add a C++ wrapper function to catch
// exceptions thrown in Lua -> C++ calls
@@ -119,40 +120,36 @@ ScriptApiBase::~ScriptApiBase()
lua_close(m_luastack);
}
-bool ScriptApiBase::loadMod(const std::string &script_path,
- const std::string &mod_name, std::string *error)
+void ScriptApiBase::loadMod(const std::string &script_path,
+ const std::string &mod_name)
{
ModNameStorer mod_name_storer(getStack(), mod_name);
- return loadScript(script_path, error);
+ loadScript(script_path);
}
-bool ScriptApiBase::loadScript(const std::string &script_path, std::string *error)
+void ScriptApiBase::loadScript(const std::string &script_path)
{
verbosestream << "Loading and running script from " << script_path << std::endl;
lua_State *L = getStack();
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
bool ok;
if (m_secure) {
ok = ScriptApiSecurity::safeLoadFile(L, script_path.c_str());
} else {
ok = !luaL_loadfile(L, script_path.c_str());
}
- ok = ok && !lua_pcall(L, 0, 0, m_errorhandler);
+ ok = ok && !lua_pcall(L, 0, 0, error_handler);
if (!ok) {
std::string error_msg = lua_tostring(L, -1);
- if (error)
- *error = error_msg;
- errorstream << "========== ERROR FROM LUA ===========" << std::endl
- << "Failed to load and run script from " << std::endl
- << script_path << ":" << std::endl << std::endl
- << error_msg << std::endl << std::endl
- << "======= END OF ERROR FROM LUA ========" << std::endl;
- lua_pop(L, 1); // Pop error message from stack
- return false;
+ lua_pop(L, 2); // Pop error message and error handler
+ throw ModError("Failed to load and run script from " +
+ script_path + ":\n" + error_msg);
}
- return true;
+ lua_pop(L, 1); // Pop error handler
}
// Push the list of callbacks (a lua table).
@@ -161,35 +158,40 @@ bool ScriptApiBase::loadScript(const std::string &script_path, std::string *erro
// - runs the callbacks
// - replaces the table and arguments with the return value,
// computed depending on mode
+// This function must only be called with scriptlock held (i.e. inside of a
+// code block with SCRIPTAPI_PRECHECKHEADER declared)
void ScriptApiBase::runCallbacksRaw(int nargs,
RunCallbacksMode mode, const char *fxn)
{
+#ifdef SCRIPTAPI_LOCK_DEBUG
+ assert(m_lock_recursion_count > 0);
+#endif
lua_State *L = getStack();
FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments");
// Insert error handler
- lua_pushcfunction(L, script_error_handler);
- int errorhandler = lua_gettop(L) - nargs - 1;
- lua_insert(L, errorhandler);
+ PUSH_ERROR_HANDLER(L);
+ int error_handler = lua_gettop(L) - nargs - 1;
+ lua_insert(L, error_handler);
// Insert run_callbacks between error handler and table
lua_getglobal(L, "core");
lua_getfield(L, -1, "run_callbacks");
lua_remove(L, -2);
- lua_insert(L, errorhandler + 1);
+ lua_insert(L, error_handler + 1);
// Insert mode after table
lua_pushnumber(L, (int)mode);
- lua_insert(L, errorhandler + 3);
+ lua_insert(L, error_handler + 3);
// Stack now looks like this:
// ... <error handler> <run_callbacks> <table> <mode> <arg#1> <arg#2> ... <arg#n>
- int result = lua_pcall(L, nargs + 2, 1, errorhandler);
+ int result = lua_pcall(L, nargs + 2, 1, error_handler);
if (result != 0)
scriptError(result, fxn);
- lua_remove(L, -2); // Remove error handler
+ lua_remove(L, error_handler);
}
void ScriptApiBase::realityCheck()
diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h
index d653b5bac..f52474f00 100644
--- a/src/script/cpp_api/s_base.h
+++ b/src/script/cpp_api/s_base.h
@@ -28,15 +28,15 @@ extern "C" {
}
#include "irrlichttypes.h"
-#include "jthread/jmutex.h"
-#include "jthread/jmutexautolock.h"
+#include "threads.h"
+#include "threading/mutex.h"
+#include "threading/mutex_auto_lock.h"
#include "common/c_types.h"
#include "common/c_internal.h"
#define SCRIPTAPI_LOCK_DEBUG
#define SCRIPTAPI_DEBUG
-#define SCRIPT_MOD_NAME_FIELD "current_mod_name"
// MUST be an invalid mod name so that mods can't
// use that name to bypass security!
#define BUILTIN_MOD_NAME "*builtin*"
@@ -64,9 +64,9 @@ public:
ScriptApiBase();
virtual ~ScriptApiBase();
- bool loadMod(const std::string &script_path, const std::string &mod_name,
- std::string *error=NULL);
- bool loadScript(const std::string &script_path, std::string *error=NULL);
+ // These throw a ModError on failure
+ void loadMod(const std::string &script_path, const std::string &mod_name);
+ void loadScript(const std::string &script_path);
void runCallbacksRaw(int nargs,
RunCallbacksMode mode, const char *fxn);
@@ -83,6 +83,7 @@ public:
protected:
friend class LuaABM;
+ friend class LuaLBM;
friend class InvRef;
friend class ObjectRef;
friend class NodeMetaRef;
@@ -108,13 +109,12 @@ protected:
void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj);
void objectrefGet(lua_State *L, u16 id);
- JMutex m_luastackmutex;
+ RecursiveMutex m_luastackmutex;
std::string m_last_run_mod;
- // Stack index of Lua error handler
- int m_errorhandler;
bool m_secure;
#ifdef SCRIPTAPI_LOCK_DEBUG
- bool m_locked;
+ int m_lock_recursion_count;
+ threadid_t m_owning_thread;
#endif
private:
diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp
index 0d159846a..378a6bf09 100644
--- a/src/script/cpp_api/s_entity.cpp
+++ b/src/script/cpp_api/s_entity.cpp
@@ -80,6 +80,8 @@ void ScriptApiEntity::luaentity_Activate(u16 id,
verbosestream << "scriptapi_luaentity_activate: id=" << id << std::endl;
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.luaentities[id]
luaentity_get(L, id);
int object = lua_gettop(L);
@@ -93,11 +95,11 @@ void ScriptApiEntity::luaentity_Activate(u16 id,
lua_pushinteger(L, dtime_s);
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 3, 0, error_handler));
} else {
lua_pop(L, 1);
}
- lua_pop(L, 1); // Pop object
+ lua_pop(L, 2); // Pop object and error handler
}
void ScriptApiEntity::luaentity_Remove(u16 id)
@@ -126,6 +128,8 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id)
//infostream<<"scriptapi_luaentity_get_staticdata: id="<<id<<std::endl;
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.luaentities[id]
luaentity_get(L, id);
int object = lua_gettop(L);
@@ -140,9 +144,10 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id)
lua_pushvalue(L, object); // self
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 1, error_handler));
- lua_remove(L, object); // Remove object
+ lua_remove(L, object);
+ lua_remove(L, error_handler);
size_t len = 0;
const char *s = lua_tolstring(L, -1, &len);
@@ -196,6 +201,8 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime)
//infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.luaentities[id]
luaentity_get(L, id);
int object = lua_gettop(L);
@@ -211,9 +218,9 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime)
lua_pushnumber(L, dtime); // dtime
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 0, error_handler));
- lua_pop(L, 1); // Pop object
+ lua_pop(L, 2); // Pop object and error handler
}
// Calls entity:on_punch(ObjectRef puncher, time_from_last_punch,
@@ -226,6 +233,8 @@ void ScriptApiEntity::luaentity_Punch(u16 id,
//infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.luaentities[id]
luaentity_get(L,id);
int object = lua_gettop(L);
@@ -244,9 +253,9 @@ void ScriptApiEntity::luaentity_Punch(u16 id,
push_v3f(L, dir);
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 0, error_handler));
- lua_pop(L, 1); // Pop object
+ lua_pop(L, 2); // Pop object and error handler
}
// Calls entity:on_rightclick(ObjectRef clicker)
@@ -257,6 +266,8 @@ void ScriptApiEntity::luaentity_Rightclick(u16 id,
//infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.luaentities[id]
luaentity_get(L, id);
int object = lua_gettop(L);
@@ -272,8 +283,8 @@ void ScriptApiEntity::luaentity_Rightclick(u16 id,
objectrefGetOrCreate(L, clicker); // Clicker reference
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 0, error_handler));
- lua_pop(L, 1); // Pop object
+ lua_pop(L, 2); // Pop object and error handler
}
diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp
index 9c733773a..82d0d4f0e 100644
--- a/src/script/cpp_api/s_env.cpp
+++ b/src/script/cpp_api/s_env.cpp
@@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp,
- u32 blockseed)
+ u32 blockseed)
{
SCRIPTAPI_PRECHECKHEADER
@@ -44,7 +44,7 @@ void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp,
void ScriptApiEnv::environment_Step(float dtime)
{
SCRIPTAPI_PRECHECKHEADER
- //infostream<<"scriptapi_environment_step"<<std::endl;
+ //infostream << "scriptapi_environment_step" << std::endl;
// Get core.registered_globalsteps
lua_getglobal(L, "core");
@@ -58,7 +58,7 @@ void ScriptApiEnv::environment_Step(float dtime)
}
}
-void ScriptApiEnv::player_event(ServerActiveObject* player, std::string type)
+void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &type)
{
SCRIPTAPI_PRECHECKHEADER
@@ -82,75 +82,166 @@ void ScriptApiEnv::player_event(ServerActiveObject* player, std::string type)
void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
{
SCRIPTAPI_PRECHECKHEADER
- verbosestream<<"scriptapi_add_environment"<<std::endl;
+ verbosestream << "scriptapi_add_environment" << std::endl;
setEnv(env);
/*
- Add ActiveBlockModifiers to environment
+ Add {Loading,Active}BlockModifiers to environment
*/
// Get core.registered_abms
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_abms");
- luaL_checktype(L, -1, LUA_TTABLE);
int registered_abms = lua_gettop(L);
- if(lua_istable(L, registered_abms)){
- int table = lua_gettop(L);
- lua_pushnil(L);
- while(lua_next(L, table) != 0){
- // key at index -2 and value at index -1
- int id = lua_tonumber(L, -2);
- int current_abm = lua_gettop(L);
-
- std::set<std::string> trigger_contents;
- lua_getfield(L, current_abm, "nodenames");
- if(lua_istable(L, -1)){
- int table = lua_gettop(L);
- lua_pushnil(L);
- while(lua_next(L, table) != 0){
- // key at index -2 and value at index -1
- luaL_checktype(L, -1, LUA_TSTRING);
- trigger_contents.insert(lua_tostring(L, -1));
- // removes value, keeps key for next iteration
- lua_pop(L, 1);
- }
- } else if(lua_isstring(L, -1)){
+ if (!lua_istable(L, registered_abms)) {
+ lua_pop(L, 1);
+ throw LuaError("core.registered_abms was not a lua table, as expected.");
+ }
+ lua_pushnil(L);
+ while (lua_next(L, registered_abms)) {
+ // key at index -2 and value at index -1
+ int id = lua_tonumber(L, -2);
+ int current_abm = lua_gettop(L);
+
+ std::set<std::string> trigger_contents;
+ lua_getfield(L, current_abm, "nodenames");
+ if (lua_istable(L, -1)) {
+ int table = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, table)) {
+ // key at index -2 and value at index -1
+ luaL_checktype(L, -1, LUA_TSTRING);
trigger_contents.insert(lua_tostring(L, -1));
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
}
- lua_pop(L, 1);
-
- std::set<std::string> required_neighbors;
- lua_getfield(L, current_abm, "neighbors");
- if(lua_istable(L, -1)){
- int table = lua_gettop(L);
- lua_pushnil(L);
- while(lua_next(L, table) != 0){
- // key at index -2 and value at index -1
- luaL_checktype(L, -1, LUA_TSTRING);
- required_neighbors.insert(lua_tostring(L, -1));
- // removes value, keeps key for next iteration
- lua_pop(L, 1);
- }
- } else if(lua_isstring(L, -1)){
+ } else if (lua_isstring(L, -1)) {
+ trigger_contents.insert(lua_tostring(L, -1));
+ }
+ lua_pop(L, 1);
+
+ std::set<std::string> required_neighbors;
+ lua_getfield(L, current_abm, "neighbors");
+ if (lua_istable(L, -1)) {
+ int table = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, table)) {
+ // key at index -2 and value at index -1
+ luaL_checktype(L, -1, LUA_TSTRING);
required_neighbors.insert(lua_tostring(L, -1));
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
}
- lua_pop(L, 1);
+ } else if (lua_isstring(L, -1)) {
+ required_neighbors.insert(lua_tostring(L, -1));
+ }
+ lua_pop(L, 1);
+
+ float trigger_interval = 10.0;
+ getfloatfield(L, current_abm, "interval", trigger_interval);
+
+ int trigger_chance = 50;
+ getintfield(L, current_abm, "chance", trigger_chance);
- float trigger_interval = 10.0;
- getfloatfield(L, current_abm, "interval", trigger_interval);
+ bool simple_catch_up = true;
+ getboolfield(L, current_abm, "catch_up", simple_catch_up);
- int trigger_chance = 50;
- getintfield(L, current_abm, "chance", trigger_chance);
+ LuaABM *abm = new LuaABM(L, id, trigger_contents, required_neighbors,
+ trigger_interval, trigger_chance, simple_catch_up);
+
+ env->addActiveBlockModifier(abm);
+
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
+ }
+ lua_pop(L, 1);
- LuaABM *abm = new LuaABM(L, id, trigger_contents,
- required_neighbors, trigger_interval, trigger_chance);
+ // Get core.registered_lbms
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "registered_lbms");
+ int registered_lbms = lua_gettop(L);
- env->addActiveBlockModifier(abm);
+ if (!lua_istable(L, registered_lbms)) {
+ lua_pop(L, 1);
+ throw LuaError("core.registered_lbms was not a lua table, as expected.");
+ }
- // removes value, keeps key for next iteration
- lua_pop(L, 1);
+ lua_pushnil(L);
+ while (lua_next(L, registered_lbms)) {
+ // key at index -2 and value at index -1
+ int id = lua_tonumber(L, -2);
+ int current_lbm = lua_gettop(L);
+
+ std::set<std::string> trigger_contents;
+ lua_getfield(L, current_lbm, "nodenames");
+ if (lua_istable(L, -1)) {
+ int table = lua_gettop(L);
+ lua_pushnil(L);
+ while (lua_next(L, table)) {
+ // key at index -2 and value at index -1
+ luaL_checktype(L, -1, LUA_TSTRING);
+ trigger_contents.insert(lua_tostring(L, -1));
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
+ }
+ } else if (lua_isstring(L, -1)) {
+ trigger_contents.insert(lua_tostring(L, -1));
}
+ lua_pop(L, 1);
+
+ std::string name;
+ getstringfield(L, current_lbm, "name", name);
+
+ bool run_at_every_load = getboolfield_default(L, current_lbm,
+ "run_at_every_load", false);
+
+ LuaLBM *lbm = new LuaLBM(L, id, trigger_contents, name,
+ run_at_every_load);
+
+ env->addLoadingBlockModifierDef(lbm);
+
+ // removes value, keeps key for next iteration
+ lua_pop(L, 1);
}
lua_pop(L, 1);
}
+
+void ScriptApiEnv::on_emerge_area_completion(
+ v3s16 blockpos, int action, ScriptCallbackState *state)
+{
+ Server *server = getServer();
+
+ // Note that the order of these locks is important! Envlock must *ALWAYS*
+ // be acquired before attempting to acquire scriptlock, or else ServerThread
+ // will try to acquire scriptlock after it already owns envlock, thus
+ // deadlocking EmergeThread and ServerThread
+ MutexAutoLock envlock(server->m_env_mutex);
+
+ SCRIPTAPI_PRECHECKHEADER
+
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
+ lua_rawgeti(L, LUA_REGISTRYINDEX, state->callback_ref);
+ luaL_checktype(L, -1, LUA_TFUNCTION);
+
+ push_v3s16(L, blockpos);
+ lua_pushinteger(L, action);
+ lua_pushinteger(L, state->refcount);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, state->args_ref);
+
+ setOriginDirect(state->origin.c_str());
+
+ try {
+ PCALL_RES(lua_pcall(L, 4, 0, error_handler));
+ } catch (LuaError &e) {
+ server->setAsyncFatalError(e.what());
+ }
+
+ lua_pop(L, 1); // Pop error handler
+
+ if (state->refcount == 0) {
+ luaL_unref(L, LUA_REGISTRYINDEX, state->callback_ref);
+ luaL_unref(L, LUA_REGISTRYINDEX, state->args_ref);
+ }
+}
diff --git a/src/script/cpp_api/s_env.h b/src/script/cpp_api/s_env.h
index 180cfabd0..e07024565 100644
--- a/src/script/cpp_api/s_env.h
+++ b/src/script/cpp_api/s_env.h
@@ -24,19 +24,23 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irr_v3d.h"
class ServerEnvironment;
-struct MapgenParams;
+struct ScriptCallbackState;
-class ScriptApiEnv
- : virtual public ScriptApiBase
+class ScriptApiEnv : virtual public ScriptApiBase
{
public:
- // On environment step
+ // Called on environment step
void environment_Step(float dtime);
- // After generating a piece of map
- void environment_OnGenerated(v3s16 minp, v3s16 maxp,u32 blockseed);
- //called on player event
- void player_event(ServerActiveObject* player, std::string type);
+ // Called after generating a piece of map
+ void environment_OnGenerated(v3s16 minp, v3s16 maxp, u32 blockseed);
+
+ // Called on player event
+ void player_event(ServerActiveObject *player, const std::string &type);
+
+ // Called after emerge of a block queued from core.emerge_area()
+ void on_emerge_area_completion(v3s16 blockpos, int action,
+ ScriptCallbackState *state);
void initializeEnvironment(ServerEnvironment *env);
};
diff --git a/src/script/cpp_api/s_internal.h b/src/script/cpp_api/s_internal.h
index 9999a584a..37473c497 100644
--- a/src/script/cpp_api/s_internal.h
+++ b/src/script/cpp_api/s_internal.h
@@ -32,28 +32,50 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifdef SCRIPTAPI_LOCK_DEBUG
#include "debug.h" // assert()
+
class LockChecker {
public:
- LockChecker(bool* variable) {
- assert(*variable == false);
+ LockChecker(int *recursion_counter, threadid_t *owning_thread)
+ {
+ m_lock_recursion_counter = recursion_counter;
+ m_owning_thread = owning_thread;
+ m_original_level = *recursion_counter;
+
+ if (*m_lock_recursion_counter > 0)
+ assert(thr_is_current_thread(*m_owning_thread));
+ else
+ *m_owning_thread = thr_get_current_thread_id();
- m_variable = variable;
- *m_variable = true;
+ (*m_lock_recursion_counter)++;
}
- ~LockChecker() {
- *m_variable = false;
+
+ ~LockChecker()
+ {
+ assert(thr_is_current_thread(*m_owning_thread));
+ assert(*m_lock_recursion_counter > 0);
+
+ (*m_lock_recursion_counter)--;
+
+ assert(*m_lock_recursion_counter == m_original_level);
}
+
private:
-bool* m_variable;
+ int *m_lock_recursion_counter;
+ int m_original_level;
+ threadid_t *m_owning_thread;
};
-#define SCRIPTAPI_LOCK_CHECK LockChecker(&(this->m_locked))
+#define SCRIPTAPI_LOCK_CHECK \
+ LockChecker scriptlock_checker( \
+ &this->m_lock_recursion_count, \
+ &this->m_owning_thread)
+
#else
-#define SCRIPTAPI_LOCK_CHECK while(0)
+ #define SCRIPTAPI_LOCK_CHECK while(0)
#endif
#define SCRIPTAPI_PRECHECKHEADER \
- JMutexAutoLock(this->m_luastackmutex); \
+ RecursiveMutexAutoLock scriptlock(this->m_luastackmutex); \
SCRIPTAPI_LOCK_CHECK; \
realityCheck(); \
lua_State *L = getStack(); \
diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp
index 019d1ccc0..c90c7d4e2 100644
--- a/src/script/cpp_api/s_inventory.cpp
+++ b/src/script/cpp_api/s_inventory.cpp
@@ -33,6 +33,8 @@ int ScriptApiDetached::detached_inventory_AllowMove(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "allow_move"))
return count;
@@ -48,11 +50,11 @@ int ScriptApiDetached::detached_inventory_AllowMove(
lua_pushinteger(L, to_index + 1); // to_index
lua_pushinteger(L, count); // count
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 7, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 7, 1, error_handler));
if(!lua_isnumber(L, -1))
throw LuaError("allow_move should return a number. name=" + name);
int ret = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return ret;
}
@@ -64,6 +66,8 @@ int ScriptApiDetached::detached_inventory_AllowPut(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "allow_put"))
return stack.count; // All will be accepted
@@ -76,11 +80,11 @@ int ScriptApiDetached::detached_inventory_AllowPut(
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 1, error_handler));
if (!lua_isnumber(L, -1))
throw LuaError("allow_put should return a number. name=" + name);
int ret = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return ret;
}
@@ -92,6 +96,8 @@ int ScriptApiDetached::detached_inventory_AllowTake(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "allow_take"))
return stack.count; // All will be accepted
@@ -104,11 +110,11 @@ int ScriptApiDetached::detached_inventory_AllowTake(
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 1, error_handler));
if (!lua_isnumber(L, -1))
throw LuaError("allow_take should return a number. name=" + name);
int ret = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return ret;
}
@@ -121,6 +127,8 @@ void ScriptApiDetached::detached_inventory_OnMove(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "on_move"))
return;
@@ -136,7 +144,8 @@ void ScriptApiDetached::detached_inventory_OnMove(
lua_pushinteger(L, to_index + 1); // to_index
lua_pushinteger(L, count); // count
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 7, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 7, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
// Report put items
@@ -147,6 +156,8 @@ void ScriptApiDetached::detached_inventory_OnPut(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "on_put"))
return;
@@ -160,7 +171,8 @@ void ScriptApiDetached::detached_inventory_OnPut(
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
// Report taken items
@@ -171,6 +183,8 @@ void ScriptApiDetached::detached_inventory_OnTake(
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getDetachedInventoryCallback(name, "on_take"))
return;
@@ -184,7 +198,8 @@ void ScriptApiDetached::detached_inventory_OnTake(
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
// Retrieves core.detached_inventories[name][callbackname]
diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp
index 4d4d416ec..3c84fb8cf 100644
--- a/src/script/cpp_api/s_item.cpp
+++ b/src/script/cpp_api/s_item.cpp
@@ -34,6 +34,8 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getItemCallback(item.name.c_str(), "on_drop"))
return false;
@@ -42,7 +44,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item,
LuaItemStack::create(L, item);
objectrefGetOrCreate(L, dropper);
pushFloatPos(L, pos);
- PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
item = read_item(L,-1, getServer());
@@ -50,7 +52,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item,
throw LuaError(std::string(e.what()) + ". item=" + item.name);
}
}
- lua_pop(L, 1); // Pop item
+ lua_pop(L, 2); // Pop item and error handler
return true;
}
@@ -59,6 +61,8 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getItemCallback(item.name.c_str(), "on_place"))
return false;
@@ -67,7 +71,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item,
LuaItemStack::create(L, item);
objectrefGetOrCreate(L, placer);
pushPointedThing(pointed);
- PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
item = read_item(L,-1, getServer());
@@ -75,7 +79,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item,
throw LuaError(std::string(e.what()) + ". item=" + item.name);
}
}
- lua_pop(L, 1); // Pop item
+ lua_pop(L, 2); // Pop item and error handler
return true;
}
@@ -84,6 +88,8 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Push callback function on stack
if (!getItemCallback(item.name.c_str(), "on_use"))
return false;
@@ -92,7 +98,7 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
LuaItemStack::create(L, item);
objectrefGetOrCreate(L, user);
pushPointedThing(pointed);
- PCALL_RES(lua_pcall(L, 3, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if(!lua_isnil(L, -1)) {
try {
item = read_item(L,-1, getServer());
@@ -100,7 +106,33 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
throw LuaError(std::string(e.what()) + ". item=" + item.name);
}
}
- lua_pop(L, 1); // Pop item
+ lua_pop(L, 2); // Pop item and error handler
+ return true;
+}
+
+bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, ServerActiveObject *user)
+{
+ SCRIPTAPI_PRECHECKHEADER
+
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
+ if (!getItemCallback(item.name.c_str(), "on_secondary_use"))
+ return false;
+
+ LuaItemStack::create(L, item);
+ objectrefGetOrCreate(L, user);
+ PointedThing pointed;
+ pointed.type = POINTEDTHING_NOTHING;
+ pushPointedThing(pointed);
+ PCALL_RES(lua_pcall(L, 3, 1, error_handler));
+ if (!lua_isnil(L, -1)) {
+ try {
+ item = read_item(L, -1, getServer());
+ } catch (LuaError &e) {
+ throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ }
+ }
+ lua_pop(L, 2); // Pop item and error handler
return true;
}
@@ -109,6 +141,8 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
lua_getglobal(L, "core");
lua_getfield(L, -1, "on_craft");
LuaItemStack::create(L, item);
@@ -122,7 +156,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
push_items(L, items);
InvRef::create(L, craft_inv);
- PCALL_RES(lua_pcall(L, 4, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 4, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
item = read_item(L,-1, getServer());
@@ -130,7 +164,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
throw LuaError(std::string(e.what()) + ". item=" + item.name);
}
}
- lua_pop(L, 1); // Pop item
+ lua_pop(L, 2); // Pop item and error handler
return true;
}
@@ -139,6 +173,8 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
lua_getglobal(L, "core");
lua_getfield(L, -1, "craft_predict");
LuaItemStack::create(L, item);
@@ -152,7 +188,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
push_items(L, items);
InvRef::create(L, craft_inv);
- PCALL_RES(lua_pcall(L, 4, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 4, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
item = read_item(L,-1, getServer());
@@ -160,7 +196,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
throw LuaError(std::string(e.what()) + ". item=" + item.name);
}
}
- lua_pop(L, 1); // Pop item
+ lua_pop(L, 2); // Pop item and error handler
return true;
}
diff --git a/src/script/cpp_api/s_item.h b/src/script/cpp_api/s_item.h
index 88cc1909d..7350a71c5 100644
--- a/src/script/cpp_api/s_item.h
+++ b/src/script/cpp_api/s_item.h
@@ -42,6 +42,8 @@ public:
ServerActiveObject *placer, const PointedThing &pointed);
bool item_OnUse(ItemStack &item,
ServerActiveObject *user, const PointedThing &pointed);
+ bool item_OnSecondaryUse(ItemStack &item,
+ ServerActiveObject *user);
bool item_OnCraft(ItemStack &item, ServerActiveObject *user,
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv);
bool item_CraftPredict(ItemStack &item, ServerActiveObject *user,
diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp
index 17ceff082..e9a7a13b9 100644
--- a/src/script/cpp_api/s_mainmenu.cpp
+++ b/src/script/cpp_api/s_mainmenu.cpp
@@ -43,6 +43,8 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get handler function
lua_getglobal(L, "core");
lua_getfield(L, -1, "event_handler");
@@ -55,13 +57,16 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
// Call it
lua_pushstring(L, text.c_str());
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get handler function
lua_getglobal(L, "core");
lua_getfield(L, -1, "button_handler");
@@ -84,6 +89,7 @@ void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields)
}
// Call it
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp
index dac058b13..17f0f0dac 100644
--- a/src/script/cpp_api/s_node.cpp
+++ b/src/script/cpp_api/s_node.cpp
@@ -57,6 +57,7 @@ struct EnumString ScriptApiNode::es_ContentParamType2[] =
{CPT2_FACEDIR, "facedir"},
{CPT2_WALLMOUNTED, "wallmounted"},
{CPT2_LEVELED, "leveled"},
+ {CPT2_DEGROTATE, "degrotate"},
{0, NULL},
};
@@ -81,6 +82,7 @@ struct EnumString ScriptApiNode::es_NodeBoxType[] =
{NODEBOX_FIXED, "fixed"},
{NODEBOX_WALLMOUNTED, "wallmounted"},
{NODEBOX_LEVELED, "leveled"},
+ {NODEBOX_CONNECTED, "connected"},
{0, NULL},
};
@@ -95,6 +97,8 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -106,7 +110,8 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
pushnode(L, node, ndef);
objectrefGetOrCreate(L, puncher);
pushPointedThing(pointed);
- PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 4, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
return true;
}
@@ -115,6 +120,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -125,7 +132,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
push_v3s16(L, p);
pushnode(L, node, ndef);
objectrefGetOrCreate(L, digger);
- PCALL_RES(lua_pcall(L, 3, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 3, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
return true;
}
@@ -133,6 +141,8 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -141,13 +151,16 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
// Call function
push_v3s16(L, p);
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -156,13 +169,16 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node)
// Call function
push_v3s16(L, p);
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -172,13 +188,16 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node)
// Call function
push_v3s16(L, p);
pushnode(L, node, ndef);
- PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// Push callback function on stack
@@ -188,7 +207,8 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
// Call function
push_v3s16(L, p);
lua_pushnumber(L,dtime);
- PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 1, error_handler));
+ lua_remove(L, error_handler);
return (bool) lua_isboolean(L, -1) && (bool) lua_toboolean(L, -1) == true;
}
@@ -199,6 +219,8 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -223,23 +245,30 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
lua_settable(L, -3);
}
objectrefGetOrCreate(L, sender); // player
- PCALL_RES(lua_pcall(L, 4, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 4, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
void ScriptApiNode::node_falling_update(v3s16 p)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
lua_getglobal(L, "nodeupdate");
push_v3s16(L, p);
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
void ScriptApiNode::node_falling_update_single(v3s16 p)
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
lua_getglobal(L, "nodeupdate_single");
push_v3s16(L, p);
- PCALL_RES(lua_pcall(L, 1, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp
index 638750b0e..d050c0bc9 100644
--- a/src/script/cpp_api/s_nodemeta.cpp
+++ b/src/script/cpp_api/s_nodemeta.cpp
@@ -34,6 +34,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -54,12 +56,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p,
lua_pushinteger(L, to_index + 1); // to_index
lua_pushinteger(L, count); // count
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 7, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 7, 1, error_handler));
if (!lua_isnumber(L, -1))
throw LuaError("allow_metadata_inventory_move should"
" return a number, guilty node: " + nodename);
int num = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return num;
}
@@ -70,6 +72,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -88,12 +92,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p,
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 1, error_handler));
if(!lua_isnumber(L, -1))
throw LuaError("allow_metadata_inventory_put should"
" return a number, guilty node: " + nodename);
int num = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return num;
}
@@ -104,6 +108,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -122,12 +128,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p,
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 1, error_handler));
if (!lua_isnumber(L, -1))
throw LuaError("allow_metadata_inventory_take should"
" return a number, guilty node: " + nodename);
int num = luaL_checkinteger(L, -1);
- lua_pop(L, 1); // Pop integer
+ lua_pop(L, 2); // Pop integer and error handler
return num;
}
@@ -139,6 +145,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -159,7 +167,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
lua_pushinteger(L, to_index + 1); // to_index
lua_pushinteger(L, count); // count
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 7, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 7, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
// Report put items
@@ -169,6 +178,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -187,7 +198,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p,
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
// Report taken items
@@ -197,6 +209,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
INodeDefManager *ndef = getServer()->ndef();
// If node doesn't exist, we don't know what callback to call
@@ -215,7 +229,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p,
lua_pushinteger(L, index + 1); // index
LuaItemStack::create(L, stack); // stack
objectrefGetOrCreate(L, player); // player
- PCALL_RES(lua_pcall(L, 5, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 5, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
ScriptApiNodemeta::ScriptApiNodemeta()
diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
index ef3c31cfd..807430678 100644
--- a/src/script/cpp_api/s_player.cpp
+++ b/src/script/cpp_api/s_player.cpp
@@ -74,6 +74,8 @@ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
// Get core.registered_on_player_hpchange
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_player_hpchange");
@@ -81,9 +83,9 @@ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
objectrefGetOrCreate(L, player);
lua_pushnumber(L, hp_change);
- PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 1, error_handler));
hp_change = lua_tointeger(L, -1);
- lua_pop(L, -1);
+ lua_pop(L, 2); // Pop result and error handler
return hp_change;
}
diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp
index 6a6d40307..730235c7b 100644
--- a/src/script/cpp_api/s_security.cpp
+++ b/src/script/cpp_api/s_security.cpp
@@ -47,7 +47,7 @@ static inline void copy_safe(lua_State *L, const char *list[], unsigned len, int
// Pushes the original version of a library function on the stack, from the old version
static inline void push_original(lua_State *L, const char *lib, const char *func)
{
- lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
lua_getfield(L, -1, lib);
lua_remove(L, -2); // Remove globals_backup
lua_getfield(L, -1, func);
@@ -116,7 +116,6 @@ void ScriptApiSecurity::initializeSecurity()
"upvaluejoin",
"sethook",
"debug",
- "getupvalue",
"setlocal",
};
static const char *package_whitelist[] = {
@@ -143,7 +142,7 @@ void ScriptApiSecurity::initializeSecurity()
// Backup globals to the registry
lua_getglobal(L, "_G");
- lua_setfield(L, LUA_REGISTRYINDEX, "globals_backup");
+ lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
// Replace the global environment with an empty one
#if LUA_VERSION_NUM <= 501
@@ -165,7 +164,7 @@ void ScriptApiSecurity::initializeSecurity()
#endif
// Get old globals
- lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
int old_globals = lua_gettop(L);
@@ -241,7 +240,7 @@ void ScriptApiSecurity::initializeSecurity()
bool ScriptApiSecurity::isSecure(lua_State *L)
{
- lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
bool secure = !lua_isnil(L, -1);
lua_pop(L, 1);
return secure;
@@ -356,7 +355,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path)
if (!removed.empty()) abs_path += DIR_DELIM + removed;
// Get server from registry
- lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1);
lua_pop(L, 1);
const Server *server = script->getServer();
@@ -364,7 +363,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path)
if (!server) return false;
// Get mod name
- lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
if (lua_isstring(L, -1)) {
std::string mod_name = lua_tostring(L, -1);
diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h
index 4a4389cf5..97bc5c067 100644
--- a/src/script/cpp_api/s_security.h
+++ b/src/script/cpp_api/s_security.h
@@ -25,9 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define CHECK_SECURE_PATH(L, path) \
if (!ScriptApiSecurity::checkPath(L, path)) { \
- lua_pushstring(L, (std::string("Attempt to access external file ") + \
- path + " with mod security on.").c_str()); \
- lua_error(L); \
+ throw LuaError(std::string("Attempt to access external file ") + \
+ path + " with mod security on."); \
}
#define CHECK_SECURE_PATH_OPTIONAL(L, path) \
if (ScriptApiSecurity::isSecure(L)) { \
diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp
index ec2f9c0af..38bd41f87 100644
--- a/src/script/cpp_api/s_server.cpp
+++ b/src/script/cpp_api/s_server.cpp
@@ -27,13 +27,15 @@ bool ScriptApiServer::getAuth(const std::string &playername,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
getAuthHandler();
lua_getfield(L, -1, "get_auth");
if (lua_type(L, -1) != LUA_TFUNCTION)
throw LuaError("Authentication handler missing get_auth");
lua_pushstring(L, playername.c_str());
- PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 1, 1, error_handler));
lua_remove(L, -2); // Remove auth handler
+ lua_remove(L, error_handler);
// nil = login not allowed
if (lua_isnil(L, -1))
@@ -99,6 +101,7 @@ void ScriptApiServer::createAuth(const std::string &playername,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
getAuthHandler();
lua_getfield(L, -1, "create_auth");
lua_remove(L, -2); // Remove auth handler
@@ -106,7 +109,8 @@ void ScriptApiServer::createAuth(const std::string &playername,
throw LuaError("Authentication handler missing create_auth");
lua_pushstring(L, playername.c_str());
lua_pushstring(L, password.c_str());
- PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 0, error_handler));
+ lua_pop(L, 1); // Pop error handler
}
bool ScriptApiServer::setPassword(const std::string &playername,
@@ -114,6 +118,7 @@ bool ScriptApiServer::setPassword(const std::string &playername,
{
SCRIPTAPI_PRECHECKHEADER
+ int error_handler = PUSH_ERROR_HANDLER(L);
getAuthHandler();
lua_getfield(L, -1, "set_password");
lua_remove(L, -2); // Remove auth handler
@@ -121,7 +126,8 @@ bool ScriptApiServer::setPassword(const std::string &playername,
throw LuaError("Authentication handler missing set_password");
lua_pushstring(L, playername.c_str());
lua_pushstring(L, password.c_str());
- PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler));
+ PCALL_RES(lua_pcall(L, 2, 1, error_handler));
+ lua_remove(L, error_handler);
return lua_toboolean(L, -1);
}
diff --git a/src/script/lua_api/CMakeLists.txt b/src/script/lua_api/CMakeLists.txt
index 2501ce6d6..d507dcf70 100644
--- a/src/script/lua_api/CMakeLists.txt
+++ b/src/script/lua_api/CMakeLists.txt
@@ -16,6 +16,7 @@ set(common_SCRIPT_LUA_API_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/l_util.cpp
${CMAKE_CURRENT_SOURCE_DIR}/l_vmanip.cpp
${CMAKE_CURRENT_SOURCE_DIR}/l_settings.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/l_http.cpp
PARENT_SCOPE)
set(client_SCRIPT_LUA_API_SRCS
diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp
index 1e9075119..20e7875c7 100644
--- a/src/script/lua_api/l_areastore.cpp
+++ b/src/script/lua_api/l_areastore.cpp
@@ -22,11 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_internal.h"
#include "common/c_converter.h"
#include "cpp_api/s_security.h"
-#include "areastore.h"
+#include "irr_v3d.h"
+#include "util/areastore.h"
#include "filesys.h"
-#ifndef ANDROID
- #include "cmake_config.h"
-#endif
#include <fstream>
static inline void get_data_and_border_flags(lua_State *L, u8 start_i,
@@ -45,6 +43,7 @@ static void push_area(lua_State *L, const Area *a,
{
if (!include_borders && !include_data) {
lua_pushboolean(L, true);
+ return;
}
lua_newtable(L);
if (include_borders) {
@@ -71,6 +70,22 @@ static inline void push_areas(lua_State *L, const std::vector<Area *> &areas,
}
}
+// Deserializes value and handles errors
+static int deserialization_helper(lua_State *L, AreaStore *as,
+ std::istream &is)
+{
+ try {
+ as->deserialize(is);
+ } catch (const SerializationError &e) {
+ lua_pushboolean(L, false);
+ lua_pushstring(L, e.what());
+ return 2;
+ }
+
+ lua_pushboolean(L, true);
+ return 1;
+}
+
// garbage collector
int LuaAreaStore::gc_object(lua_State *L)
{
@@ -149,7 +164,7 @@ int LuaAreaStore::l_get_areas_in_area(lua_State *L)
return 1;
}
-// insert_area(edge1, edge2, data)
+// insert_area(edge1, edge2, data, id)
int LuaAreaStore::l_insert_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -157,26 +172,18 @@ int LuaAreaStore::l_insert_area(lua_State *L)
LuaAreaStore *o = checkobject(L, 1);
AreaStore *ast = o->as;
- Area a;
-
- a.minedge = check_v3s16(L, 2);
- a.maxedge = check_v3s16(L, 3);
-
- a.extremifyEdges();
- a.id = ast->getFreeId(a.minedge, a.maxedge);
-
- if (a.id == AREA_ID_INVALID) {
- // couldn't get free id
- lua_pushnil(L);
- return 1;
- }
+ Area a(check_v3s16(L, 2), check_v3s16(L, 3));
size_t d_len;
const char *data = luaL_checklstring(L, 4, &d_len);
a.data = std::string(data, d_len);
- ast->insertArea(a);
+ if (lua_isnumber(L, 5))
+ a.id = lua_tonumber(L, 5);
+
+ if (!ast->insertArea(&a))
+ return 0;
lua_pushnumber(L, a.id);
return 1;
@@ -229,17 +236,15 @@ int LuaAreaStore::l_set_cache_params(lua_State *L)
return 0;
}
-#if 0
// to_string()
int LuaAreaStore::l_to_string(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaAreaStore *o = checkobject(L, 1);
- AreaStore *ast = o->as;
std::ostringstream os(std::ios_base::binary);
- ast->serialize(os);
+ o->as->serialize(os);
std::string str = os.str();
lua_pushlstring(L, str.c_str(), str.length());
@@ -270,16 +275,12 @@ int LuaAreaStore::l_from_string(lua_State *L)
NO_MAP_LOCK_REQUIRED;
LuaAreaStore *o = checkobject(L, 1);
- AreaStore *ast = o->as;
size_t len;
const char *str = luaL_checklstring(L, 2, &len);
std::istringstream is(std::string(str, len), std::ios::binary);
- bool success = ast->deserialize(is);
-
- lua_pushboolean(L, success);
- return 1;
+ return deserialization_helper(L, o->as, is);
}
// from_file(filename)
@@ -288,26 +289,17 @@ int LuaAreaStore::l_from_file(lua_State *L)
NO_MAP_LOCK_REQUIRED;
LuaAreaStore *o = checkobject(L, 1);
- AreaStore *ast = o->as;
const char *filename = luaL_checkstring(L, 2);
CHECK_SECURE_PATH_OPTIONAL(L, filename);
std::ifstream is(filename, std::ios::binary);
- bool success = ast->deserialize(is);
-
- lua_pushboolean(L, success);
- return 1;
+ return deserialization_helper(L, o->as, is);
}
-#endif
LuaAreaStore::LuaAreaStore()
{
-#if USE_SPATIAL
- this->as = new SpatialAreaStore();
-#else
- this->as = new VectorAreaStore();
-#endif
+ this->as = AreaStore::getOptimalImplementation();
}
LuaAreaStore::LuaAreaStore(const std::string &type)
@@ -393,9 +385,9 @@ const luaL_reg LuaAreaStore::methods[] = {
luamethod(LuaAreaStore, reserve),
luamethod(LuaAreaStore, remove_area),
luamethod(LuaAreaStore, set_cache_params),
- /* luamethod(LuaAreaStore, to_string),
+ luamethod(LuaAreaStore, to_string),
luamethod(LuaAreaStore, to_file),
luamethod(LuaAreaStore, from_string),
- luamethod(LuaAreaStore, from_file),*/
+ luamethod(LuaAreaStore, from_file),
{0,0}
};
diff --git a/src/script/lua_api/l_areastore.h b/src/script/lua_api/l_areastore.h
index a25529627..4bd94cebe 100644
--- a/src/script/lua_api/l_areastore.h
+++ b/src/script/lua_api/l_areastore.h
@@ -17,16 +17,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef L_AREASTORE_H_
-#define L_AREASTORE_H_
+#ifndef L_AREA_STORE_H_
+#define L_AREA_STORE_H_
#include "lua_api/l_base.h"
-#include "irr_v3d.h"
-#include "areastore.h"
-/*
- AreaStore
- */
+
+class AreaStore;
+
class LuaAreaStore : public ModApiBase {
private:
@@ -45,11 +43,11 @@ private:
static int l_set_cache_params(lua_State *L);
- /* static int l_to_string(lua_State *L);
+ static int l_to_string(lua_State *L);
static int l_to_file(lua_State *L);
static int l_from_string(lua_State *L);
- static int l_from_file(lua_State *L); */
+ static int l_from_file(lua_State *L);
public:
AreaStore *as;
@@ -67,4 +65,4 @@ public:
static void Register(lua_State *L);
};
-#endif /* L_AREASTORE_H_ */
+#endif // L_AREA_STORE_H_
diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp
index 6ad3e4ba2..515a7d933 100644
--- a/src/script/lua_api/l_base.cpp
+++ b/src/script/lua_api/l_base.cpp
@@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
ScriptApiBase *ModApiBase::getScriptApiBase(lua_State *L)
{
// Get server from registry
- lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1);
lua_pop(L, 1);
return sapi_ptr;
@@ -49,7 +49,7 @@ GUIEngine *ModApiBase::getGuiEngine(lua_State *L)
std::string ModApiBase::getCurrentModPath(lua_State *L)
{
- lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
const char *current_mod_name = lua_tostring(L, -1);
if (!current_mod_name)
return ".";
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 28afdd071..8284c3fcb 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -33,11 +33,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/pointedthing.h"
#include "content_sao.h"
#include "treegen.h"
+#include "emerge.h"
#include "pathfinder.h"
-#define GET_ENV_PTR ServerEnvironment* env = \
- dynamic_cast<ServerEnvironment*>(getEnv(L)); \
- if (env == NULL) return 0
+struct EnumString ModApiEnvMod::es_ClearObjectsMode[] =
+{
+ {CLEAR_OBJECTS_MODE_FULL, "full"},
+ {CLEAR_OBJECTS_MODE_QUICK, "quick"},
+ {0, NULL},
+};
///////////////////////////////////////////////////////////////////////////////
@@ -52,8 +56,7 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
sanity_check(lua_checkstack(L, 20));
StackUnroller stack_unroller(L);
- lua_pushcfunction(L, script_error_handler);
- int errorhandler = lua_gettop(L);
+ int error_handler = PUSH_ERROR_HANDLER(L);
// Get registered_abms
lua_getglobal(L, "core");
@@ -80,13 +83,68 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
lua_pushnumber(L, active_object_count);
lua_pushnumber(L, active_object_count_wider);
- int result = lua_pcall(L, 4, 0, errorhandler);
+ int result = lua_pcall(L, 4, 0, error_handler);
if (result)
scriptIface->scriptError(result, "LuaABM::trigger");
lua_pop(L, 1); // Pop error handler
}
+void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
+{
+ GameScripting *scriptIface = env->getScriptIface();
+ scriptIface->realityCheck();
+
+ lua_State *L = scriptIface->getStack();
+ sanity_check(lua_checkstack(L, 20));
+ StackUnroller stack_unroller(L);
+
+ int error_handler = PUSH_ERROR_HANDLER(L);
+
+ // Get registered_lbms
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "registered_lbms");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_remove(L, -2); // Remove core
+
+ // Get registered_lbms[m_id]
+ lua_pushnumber(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
+
+ scriptIface->setOriginFromTable(-1);
+
+ // Call action
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_getfield(L, -1, "action");
+ luaL_checktype(L, -1, LUA_TFUNCTION);
+ lua_remove(L, -2); // Remove registered_lbms[m_id]
+ push_v3s16(L, p);
+ pushnode(L, n, env->getGameDef()->ndef());
+
+ int result = lua_pcall(L, 2, 0, error_handler);
+ if (result)
+ scriptIface->scriptError(result, "LuaLBM::trigger");
+
+ lua_pop(L, 1); // Pop error handler
+}
+
+void LuaEmergeAreaCallback(v3s16 blockpos, EmergeAction action, void *param)
+{
+ ScriptCallbackState *state = (ScriptCallbackState *)param;
+ assert(state != NULL);
+ assert(state->script != NULL);
+ assert(state->refcount > 0);
+
+ state->refcount--;
+
+ state->script->on_emerge_area_completion(blockpos, action, state);
+
+ if (state->refcount == 0)
+ delete state;
+}
+
// Exported functions
// set_node(pos, node)
@@ -412,8 +470,7 @@ int ModApiEnvMod::l_add_item(lua_State *L)
if(item.empty() || !item.isKnown(getServer(L)->idef()))
return 0;
- lua_pushcfunction(L, script_error_handler);
- int errorhandler = lua_gettop(L);
+ int error_handler = PUSH_ERROR_HANDLER(L);
// Use spawn_item to spawn a __builtin:item
lua_getglobal(L, "core");
@@ -424,9 +481,9 @@ int ModApiEnvMod::l_add_item(lua_State *L)
lua_pushvalue(L, 1);
lua_pushstring(L, item.getItemString().c_str());
- PCALL_RESL(L, lua_pcall(L, 2, 1, errorhandler));
+ PCALL_RESL(L, lua_pcall(L, 2, 1, error_handler));
- lua_remove(L, errorhandler); // Remove error handler
+ lua_remove(L, error_handler);
return 1;
}
@@ -504,6 +561,15 @@ int ModApiEnvMod::l_get_timeofday(lua_State *L)
return 1;
}
+// get_day_count() -> int
+int ModApiEnvMod::l_get_day_count(lua_State *L)
+{
+ GET_ENV_PTR;
+
+ lua_pushnumber(L, env->getDayCount());
+ return 1;
+}
+
// get_gametime()
int ModApiEnvMod::l_get_gametime(lua_State *L)
{
@@ -659,7 +725,7 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
// returns world-specific PerlinNoise
int ModApiEnvMod::l_get_perlin(lua_State *L)
{
- GET_ENV_PTR;
+ GET_ENV_PTR_NO_MAP_LOCK;
NoiseParams params;
@@ -685,7 +751,7 @@ int ModApiEnvMod::l_get_perlin(lua_State *L)
// returns world-specific PerlinNoiseMap
int ModApiEnvMod::l_get_perlin_map(lua_State *L)
{
- GET_ENV_PTR;
+ GET_ENV_PTR_NO_MAP_LOCK;
NoiseParams np;
if (!read_noiseparams(L, 1, &np))
@@ -717,13 +783,20 @@ int ModApiEnvMod::l_get_voxel_manip(lua_State *L)
return 1;
}
-// clear_objects()
+// clear_objects([options])
// clear all objects in the environment
+// where options = {mode = "full" or "quick"}
int ModApiEnvMod::l_clear_objects(lua_State *L)
{
GET_ENV_PTR;
- env->clearAllObjects();
+ ClearObjectsMode mode = CLEAR_OBJECTS_MODE_FULL;
+ if (lua_istable(L, 1)) {
+ mode = (ClearObjectsMode)getenumfield(L, 1, "mode",
+ ModApiEnvMod::es_ClearObjectsMode, mode);
+ }
+
+ env->clearObjects(mode);
return 0;
}
@@ -753,6 +826,51 @@ int ModApiEnvMod::l_line_of_sight(lua_State *L)
return 1;
}
+// emerge_area(p1, p2, [callback, context])
+// emerge mapblocks in area p1..p2, calls callback with context upon completion
+int ModApiEnvMod::l_emerge_area(lua_State *L)
+{
+ GET_ENV_PTR;
+
+ EmergeCompletionCallback callback = NULL;
+ ScriptCallbackState *state = NULL;
+
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+
+ v3s16 bpmin = getNodeBlockPos(read_v3s16(L, 1));
+ v3s16 bpmax = getNodeBlockPos(read_v3s16(L, 2));
+ sortBoxVerticies(bpmin, bpmax);
+
+ size_t num_blocks = VoxelArea(bpmin, bpmax).getVolume();
+ assert(num_blocks != 0);
+
+ if (lua_isfunction(L, 3)) {
+ callback = LuaEmergeAreaCallback;
+
+ lua_pushvalue(L, 3);
+ int callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ lua_pushvalue(L, 4);
+ int args_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ state = new ScriptCallbackState;
+ state->script = getServer(L)->getScriptIface();
+ state->callback_ref = callback_ref;
+ state->args_ref = args_ref;
+ state->refcount = num_blocks;
+ state->origin = getScriptApiBase(L)->getOrigin();
+ }
+
+ for (s16 z = bpmin.Z; z <= bpmax.Z; z++)
+ for (s16 y = bpmin.Y; y <= bpmax.Y; y++)
+ for (s16 x = bpmin.X; x <= bpmax.X; x++) {
+ emerge->enqueueBlockEmergeEx(v3s16(x, y, z), PEER_ID_INEXISTENT,
+ BLOCK_EMERGE_ALLOW_GEN | BLOCK_EMERGE_FORCE_QUEUE, callback, state);
+ }
+
+ return 0;
+}
+
// delete_area(p1, p2)
// delete mapblocks in area p1..p2
int ModApiEnvMod::l_delete_area(lua_State *L)
@@ -797,19 +915,19 @@ int ModApiEnvMod::l_find_path(lua_State *L)
unsigned int searchdistance = luaL_checkint(L, 3);
unsigned int max_jump = luaL_checkint(L, 4);
unsigned int max_drop = luaL_checkint(L, 5);
- algorithm algo = A_PLAIN_NP;
+ PathAlgorithm algo = PA_PLAIN_NP;
if (!lua_isnil(L, 6)) {
std::string algorithm = luaL_checkstring(L,6);
if (algorithm == "A*")
- algo = A_PLAIN;
+ algo = PA_PLAIN;
if (algorithm == "Dijkstra")
- algo = DIJKSTRA;
+ algo = PA_DIJKSTRA;
}
- std::vector<v3s16> path =
- get_Path(env,pos1,pos2,searchdistance,max_jump,max_drop,algo);
+ std::vector<v3s16> path = get_path(env, pos1, pos2,
+ searchdistance, max_jump, max_drop, algo);
if (path.size() > 0)
{
@@ -920,13 +1038,6 @@ int ModApiEnvMod::l_forceload_free_block(lua_State *L)
return 0;
}
-// get_us_time()
-int ModApiEnvMod::l_get_us_time(lua_State *L)
-{
- lua_pushnumber(L, porting::getTimeUs());
- return 1;
-}
-
void ModApiEnvMod::Initialize(lua_State *L, int top)
{
API_FCT(set_node);
@@ -953,9 +1064,11 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(set_timeofday);
API_FCT(get_timeofday);
API_FCT(get_gametime);
+ API_FCT(get_day_count);
API_FCT(find_node_near);
API_FCT(find_nodes_in_area);
API_FCT(find_nodes_in_area_under_air);
+ API_FCT(emerge_area);
API_FCT(delete_area);
API_FCT(get_perlin);
API_FCT(get_perlin_map);
@@ -967,5 +1080,4 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(transforming_liquid_add);
API_FCT(forceload_block);
API_FCT(forceload_free_block);
- API_FCT(get_us_time);
}
diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h
index 0d4ca788e..89dd7978f 100644
--- a/src/script/lua_api/l_env.h
+++ b/src/script/lua_api/l_env.h
@@ -113,6 +113,9 @@ private:
// get_gametime()
static int l_get_gametime(lua_State *L);
+ // get_day_count() -> int
+ static int l_get_day_count(lua_State *L);
+
// find_node_near(pos, radius, nodenames) -> pos or nil
// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
static int l_find_node_near(lua_State *L);
@@ -125,6 +128,9 @@ private:
// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
static int l_find_nodes_in_area_under_air(lua_State *L);
+ // emerge_area(p1, p2)
+ static int l_emerge_area(lua_State *L);
+
// delete_area(p1, p2) -> true/false
static int l_delete_area(lua_State *L);
@@ -165,15 +171,13 @@ private:
// stops forceloading a position
static int l_forceload_free_block(lua_State *L);
- // get us precision time
- static int l_get_us_time(lua_State *L);
-
public:
static void Initialize(lua_State *L, int top);
+
+ static struct EnumString es_ClearObjectsMode[];
};
-class LuaABM : public ActiveBlockModifier
-{
+class LuaABM : public ActiveBlockModifier {
private:
int m_id;
@@ -181,16 +185,18 @@ private:
std::set<std::string> m_required_neighbors;
float m_trigger_interval;
u32 m_trigger_chance;
+ bool m_simple_catch_up;
public:
LuaABM(lua_State *L, int id,
const std::set<std::string> &trigger_contents,
const std::set<std::string> &required_neighbors,
- float trigger_interval, u32 trigger_chance):
+ float trigger_interval, u32 trigger_chance, bool simple_catch_up):
m_id(id),
m_trigger_contents(trigger_contents),
m_required_neighbors(required_neighbors),
m_trigger_interval(trigger_interval),
- m_trigger_chance(trigger_chance)
+ m_trigger_chance(trigger_chance),
+ m_simple_catch_up(simple_catch_up)
{
}
virtual std::set<std::string> getTriggerContents()
@@ -209,8 +215,38 @@ public:
{
return m_trigger_chance;
}
+ virtual bool getSimpleCatchUp()
+ {
+ return m_simple_catch_up;
+ }
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n,
u32 active_object_count, u32 active_object_count_wider);
};
+class LuaLBM : public LoadingBlockModifierDef
+{
+private:
+ int m_id;
+public:
+ LuaLBM(lua_State *L, int id,
+ const std::set<std::string> &trigger_contents,
+ const std::string &name,
+ bool run_at_every_load):
+ m_id(id)
+ {
+ this->run_at_every_load = run_at_every_load;
+ this->trigger_contents = trigger_contents;
+ this->name = name;
+ }
+ virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n);
+};
+
+struct ScriptCallbackState {
+ GameScripting *script;
+ int callback_ref;
+ int args_ref;
+ unsigned int refcount;
+ std::string origin;
+};
+
#endif /* L_ENV_H_ */
diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp
new file mode 100644
index 000000000..8bd39b6ed
--- /dev/null
+++ b/src/script/lua_api/l_http.cpp
@@ -0,0 +1,193 @@
+/*
+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 "lua_api/l_internal.h"
+#include "common/c_converter.h"
+#include "common/c_content.h"
+#include "lua_api/l_http.h"
+#include "httpfetch.h"
+#include "settings.h"
+#include "debug.h"
+#include "log.h"
+
+#include <algorithm>
+#include <iomanip>
+#include <cctype>
+
+#define HTTP_API(name) \
+ lua_pushstring(L, #name); \
+ lua_pushcfunction(L, l_http_##name); \
+ lua_settable(L, -3);
+
+#if USE_CURL
+void ModApiHttp::read_http_fetch_request(lua_State *L, HTTPFetchRequest &req)
+{
+ luaL_checktype(L, 1, LUA_TTABLE);
+
+ req.caller = httpfetch_caller_alloc_secure();
+ getstringfield(L, 1, "url", req.url);
+ lua_getfield(L, 1, "user_agent");
+ if (lua_isstring(L, -1))
+ req.useragent = getstringfield_default(L, 1, "user_agent", "");
+ lua_pop(L, 1);
+ req.multipart = getboolfield_default(L, 1, "multipart", false);
+ req.timeout = getintfield_default(L, 1, "timeout", 3) * 1000;
+
+ // post_data: if table, post form data, otherwise raw data
+ lua_getfield(L, 1, "post_data");
+ if (lua_istable(L, 2)) {
+ lua_pushnil(L);
+ while (lua_next(L, 2) != 0)
+ {
+ req.post_fields[luaL_checkstring(L, -2)] = luaL_checkstring(L, -1);
+ lua_pop(L, 1);
+ }
+ } else if (lua_isstring(L, 2)) {
+ req.post_data = lua_tostring(L, 2);
+ }
+ lua_pop(L, 1);
+
+ lua_getfield(L, 1, "extra_headers");
+ if (lua_istable(L, 2)) {
+ lua_pushnil(L);
+ while (lua_next(L, 2) != 0)
+ {
+ const char *header = luaL_checkstring(L, -1);
+ req.extra_headers.push_back(header);
+ lua_pop(L, 1);
+ }
+ }
+ lua_pop(L, 1);
+}
+
+void ModApiHttp::push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool completed)
+{
+ lua_newtable(L);
+ setboolfield(L, -1, "succeeded", res.succeeded);
+ setboolfield(L, -1, "timeout", res.timeout);
+ setboolfield(L, -1, "completed", completed);
+ setintfield(L, -1, "code", res.response_code);
+ setstringfield(L, -1, "data", res.data.c_str());
+}
+
+// http_api.fetch_async(HTTPRequest definition)
+int ModApiHttp::l_http_fetch_async(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ HTTPFetchRequest req;
+ read_http_fetch_request(L, req);
+
+ actionstream << "Mod performs HTTP request with URL " << req.url << std::endl;
+ httpfetch_async(req);
+
+ // Convert handle to hex string since lua can't handle 64-bit integers
+ std::stringstream handle_conversion_stream;
+ handle_conversion_stream << std::hex << req.caller;
+ std::string caller_handle(handle_conversion_stream.str());
+
+ lua_pushstring(L, caller_handle.c_str());
+ return 1;
+}
+
+// http_api.fetch_async_get(handle)
+int ModApiHttp::l_http_fetch_async_get(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ std::string handle_str = luaL_checkstring(L, 1);
+
+ // Convert hex string back to 64-bit handle
+ u64 handle;
+ std::stringstream handle_conversion_stream;
+ handle_conversion_stream << std::hex << handle_str;
+ handle_conversion_stream >> handle;
+
+ HTTPFetchResult res;
+ bool completed = httpfetch_async_get(handle, res);
+
+ push_http_fetch_result(L, res, completed);
+
+ return 1;
+}
+
+int ModApiHttp::l_request_http_api(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ // We have to make sure that this function is being called directly by
+ // a mod, otherwise a malicious mod could override this function and
+ // steal its return value.
+ lua_Debug info;
+
+ // Make sure there's only one item below this function on the stack...
+ if (lua_getstack(L, 2, &info)) {
+ return 0;
+ }
+ FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed");
+ FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed");
+
+ // ...and that that item is the main file scope.
+ if (strcmp(info.what, "main") != 0) {
+ return 0;
+ }
+
+ // Mod must be listed in secure.http_mods or secure.trusted_mods
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
+ if (!lua_isstring(L, -1)) {
+ return 0;
+ }
+
+ const char *mod_name = lua_tostring(L, -1);
+ std::string http_mods = g_settings->get("secure.http_mods");
+ http_mods.erase(std::remove(http_mods.begin(), http_mods.end(), ' '), http_mods.end());
+ std::vector<std::string> mod_list_http = str_split(http_mods, ',');
+
+ std::string trusted_mods = g_settings->get("secure.trusted_mods");
+ trusted_mods.erase(std::remove(trusted_mods.begin(), trusted_mods.end(), ' '), trusted_mods.end());
+ std::vector<std::string> mod_list_trusted = str_split(trusted_mods, ',');
+
+ mod_list_http.insert(mod_list_http.end(), mod_list_trusted.begin(), mod_list_trusted.end());
+ if (std::find(mod_list_http.begin(), mod_list_http.end(), mod_name) == mod_list_http.end()) {
+ lua_pushnil(L);
+ return 1;
+ }
+
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "http_add_fetch");
+
+ lua_newtable(L);
+ HTTP_API(fetch_async);
+ HTTP_API(fetch_async_get);
+
+ // Stack now looks like this:
+ // <core.http_add_fetch> <table with fetch_async, fetch_async_get>
+ // Now call core.http_add_fetch to append .fetch(request, callback) to table
+ lua_call(L, 1, 1);
+
+ return 1;
+}
+#endif
+
+void ModApiHttp::Initialize(lua_State *L, int top)
+{
+#if USE_CURL
+ API_FCT(request_http_api);
+#endif
+}
diff --git a/src/logoutputbuffer.h b/src/script/lua_api/l_http.h
index 69f06c444..077ade691 100644
--- a/src/logoutputbuffer.h
+++ b/src/script/lua_api/l_http.h
@@ -17,42 +17,34 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef LOGOUTPUTBUFFER_HEADER
-#define LOGOUTPUTBUFFER_HEADER
+#ifndef L_HTTP_H_
+#define L_HTTP_H_
-#include "log.h"
-#include <queue>
+#include "lua_api/l_base.h"
+#include "config.h"
-class LogOutputBuffer : public ILogOutput
-{
-public:
- LogOutputBuffer(LogMessageLevel maxlev)
- {
- log_add_output(this, maxlev);
- }
- ~LogOutputBuffer()
- {
- log_remove_output(this);
- }
- virtual void printLog(const std::string &line)
- {
- m_buf.push(line);
- }
- std::string get()
- {
- if(empty())
- return "";
- std::string s = m_buf.front();
- m_buf.pop();
- return s;
- }
- bool empty()
- {
- return m_buf.empty();
- }
+struct HTTPFetchRequest;
+struct HTTPFetchResult;
+
+class ModApiHttp : public ModApiBase {
private:
- std::queue<std::string> m_buf;
-};
+#if USE_CURL
+ // Helpers for HTTP fetch functions
+ 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_async({url=, timeout=, post_data=})
+ static int l_http_fetch_async(lua_State *L);
+ // http_fetch_async_get(handle)
+ static int l_http_fetch_async_get(lua_State *L);
+
+ // request_http_api()
+ static int l_request_http_api(lua_State *L);
#endif
+public:
+ static void Initialize(lua_State *L, int top);
+};
+
+#endif /* L_HTTP_H_ */
diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h
index 1e40c5c4a..456c8fcce 100644
--- a/src/script/lua_api/l_internal.h
+++ b/src/script/lua_api/l_internal.h
@@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define API_FCT(name) registerFunction(L, #name, l_##name,top)
#define ASYNC_API_FCT(name) engine.registerFunction(#name, l_##name)
+#define MAP_LOCK_REQUIRED
#define NO_MAP_LOCK_REQUIRED
/*
@@ -45,4 +46,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#endif
*/
+#define GET_ENV_PTR_NO_MAP_LOCK \
+ ServerEnvironment *env = (ServerEnvironment *)getEnv(L); \
+ if (env == NULL) \
+ return 0
+
+#define GET_ENV_PTR \
+ MAP_LOCK_REQUIRED; \
+ GET_ENV_PTR_NO_MAP_LOCK
+
#endif /* L_INTERNAL_H_ */
diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index f48f6083b..de9f9374a 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -491,6 +491,7 @@ int ModApiInventory::l_get_inventory(lua_State *L)
std::string type = checkstringfield(L, 1, "type");
if(type == "node"){
+ MAP_LOCK_REQUIRED;
lua_getfield(L, 1, "pos");
v3s16 pos = check_v3s16(L, -1);
loc.setNodeMeta(pos);
@@ -514,7 +515,7 @@ int ModApiInventory::l_get_inventory(lua_State *L)
InvRef::create(L, loc);
else
lua_pushnil(L);
- return 1;
+ return 1;
// END NO_MAP_LOCK_REQUIRED;
}
}
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index 842b15709..5381cba76 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -94,7 +94,7 @@ int LuaItemStack::l_set_count(lua_State *L)
bool status;
lua_Integer count = luaL_checkinteger(L, 2);
- if (count <= 65535) {
+ if (count > 0 && count <= 65535) {
item.count = count;
status = true;
} else {
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 92311d6fc..7b29db159 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -706,16 +706,13 @@ int ModApiMainMenu::l_set_topleft_text(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_mapgen_names(lua_State *L)
{
- lua_newtable(L);
-
- std::list<const char *> names;
- EmergeManager::getMapgenNames(names);
+ std::vector<const char *> names;
+ EmergeManager::getMapgenNames(&names, lua_toboolean(L, 1));
- int i = 1;
- for (std::list<const char *>::const_iterator
- it = names.begin(); it != names.end(); ++it) {
- lua_pushstring(L, *it);
- lua_rawseti(L, -2, i++);
+ lua_newtable(L);
+ for (size_t i = 0; i != names.size(); i++) {
+ lua_pushstring(L, names[i]);
+ lua_rawseti(L, -2, i + 1);
}
return 1;
@@ -725,8 +722,8 @@ int ModApiMainMenu::l_get_mapgen_names(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_modpath(lua_State *L)
{
- std::string modpath
- = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "mods" + DIR_DELIM);
+ std::string modpath = fs::RemoveRelativePathComponents(
+ porting::path_user + DIR_DELIM + "mods" + DIR_DELIM);
lua_pushstring(L, modpath.c_str());
return 1;
}
@@ -734,8 +731,8 @@ int ModApiMainMenu::l_get_modpath(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_gamepath(lua_State *L)
{
- std::string gamepath
- = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "games" + DIR_DELIM);
+ std::string gamepath = fs::RemoveRelativePathComponents(
+ porting::path_user + DIR_DELIM + "games" + DIR_DELIM);
lua_pushstring(L, gamepath.c_str());
return 1;
}
@@ -743,44 +740,46 @@ int ModApiMainMenu::l_get_gamepath(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_texturepath(lua_State *L)
{
- std::string gamepath
- = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "textures");
+ std::string gamepath = fs::RemoveRelativePathComponents(
+ porting::path_user + DIR_DELIM + "textures");
lua_pushstring(L, gamepath.c_str());
return 1;
}
int ModApiMainMenu::l_get_texturepath_share(lua_State *L)
{
- std::string gamepath
- = fs::RemoveRelativePathComponents(porting::path_share + DIR_DELIM + "textures");
+ std::string gamepath = fs::RemoveRelativePathComponents(
+ porting::path_share + DIR_DELIM + "textures");
lua_pushstring(L, gamepath.c_str());
return 1;
}
/******************************************************************************/
int ModApiMainMenu::l_create_dir(lua_State *L) {
- const char *path = luaL_checkstring(L, 1);
+ const char *path = luaL_checkstring(L, 1);
if (ModApiMainMenu::isMinetestPath(path)) {
- lua_pushboolean(L,fs::CreateAllDirs(path));
+ lua_pushboolean(L, fs::CreateAllDirs(path));
return 1;
}
- lua_pushboolean(L,false);
+
+ lua_pushboolean(L, false);
return 1;
}
/******************************************************************************/
int ModApiMainMenu::l_delete_dir(lua_State *L)
{
- const char *path = luaL_checkstring(L, 1);
+ const char *path = luaL_checkstring(L, 1);
std::string absolute_path = fs::RemoveRelativePathComponents(path);
if (ModApiMainMenu::isMinetestPath(absolute_path)) {
- lua_pushboolean(L,fs::RecursiveDelete(absolute_path));
+ lua_pushboolean(L, fs::RecursiveDelete(absolute_path));
return 1;
}
- lua_pushboolean(L,false);
+
+ lua_pushboolean(L, false);
return 1;
}
@@ -1060,8 +1059,8 @@ int ModApiMainMenu::l_get_video_modes(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_gettext(lua_State *L)
{
- std::wstring wtext = wstrgettext((std::string) luaL_checkstring(L, 1));
- lua_pushstring(L, wide_to_utf8(wtext).c_str());
+ std::string text = strgettext(std::string(luaL_checkstring(L, 1)));
+ lua_pushstring(L, text.c_str());
return 1;
}
@@ -1096,7 +1095,9 @@ int ModApiMainMenu::l_get_screen_info(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_min_supp_proto(lua_State *L)
{
- lua_pushinteger(L, CLIENT_PROTOCOL_VERSION_MIN);
+ u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
+ CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
+ lua_pushinteger(L, proto_version_min);
return 1;
}
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index 9c1fed272..405af25e8 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -119,8 +119,6 @@ private:
static int l_get_texturepath_share(lua_State *L);
- static int l_get_dirlist(lua_State *L);
-
static int l_create_dir(lua_State *L);
static int l_delete_dir(lua_State *L);
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index d30b68054..fb839176b 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -70,6 +70,7 @@ struct EnumString ModApiMapgen::es_OreType[] =
{
{ORE_SCATTER, "scatter"},
{ORE_SHEET, "sheet"},
+ {ORE_PUFF, "puff"},
{ORE_BLOB, "blob"},
{ORE_VEIN, "vein"},
{0, NULL},
@@ -449,10 +450,38 @@ size_t get_biome_list(lua_State *L, int index,
///////////////////////////////////////////////////////////////////////////////
+// get_biome_id(biomename)
+// returns the biome id used in biomemap
+int ModApiMapgen::l_get_biome_id(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ const char *biome_str = lua_tostring(L, 1);
+ if (!biome_str)
+ return 0;
+
+ BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+
+ if (!bmgr)
+ return 0;
+
+ Biome *biome = (Biome *)bmgr->getByName(biome_str);
+
+ if (!biome || biome->index == OBJDEF_INVALID_INDEX)
+ return 0;
+
+ lua_pushinteger(L, biome->index);
+
+ return 1;
+}
+
+
// get_mapgen_object(objectname)
// returns the requested object used during map generation
int ModApiMapgen::l_get_mapgen_object(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
const char *mgobjstr = lua_tostring(L, 1);
int mgobjint;
@@ -464,7 +493,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
EmergeManager *emerge = getServer(L)->getEmergeManager();
Mapgen *mg = emerge->getCurrentMapgen();
if (!mg)
- return 0;
+ throw LuaError("Must only be called in a mapgen thread!");
size_t maplen = mg->csize.X * mg->csize.Z;
@@ -563,6 +592,8 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
int ModApiMapgen::l_get_mapgen_params(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
MapgenParams *params = &getServer(L)->getEmergeManager()->params;
lua_newtable(L);
@@ -579,7 +610,7 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L)
lua_pushinteger(L, params->chunksize);
lua_setfield(L, -2, "chunksize");
- std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, (u32)-1);
+ std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, U32_MAX);
lua_pushstring(L, flagstr.c_str());
lua_setfield(L, -2, "flags");
@@ -591,10 +622,16 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L)
// set mapgen parameters
int ModApiMapgen::l_set_mapgen_params(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
if (!lua_istable(L, 1))
return 0;
- MapgenParams *params = &getServer(L)->getEmergeManager()->params;
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+ if (emerge->isRunning())
+ throw LuaError("Cannot set parameters while mapgen is running");
+
+ MapgenParams *params = &emerge->params;
u32 flags = 0, flagmask = 0;
lua_getfield(L, 1, "mgname");
@@ -612,6 +649,10 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
if (lua_isnumber(L, -1))
params->water_level = lua_tointeger(L, -1);
+ lua_getfield(L, 1, "chunksize");
+ if (lua_isnumber(L, -1))
+ params->chunksize = lua_tointeger(L, -1);
+
warn_if_field_exists(L, 1, "flagmask",
"Deprecated: flags field now includes unset flags.");
lua_getfield(L, 1, "flagmask");
@@ -631,6 +672,8 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
// set global config values for noise parameters
int ModApiMapgen::l_set_noiseparams(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
const char *name = luaL_checkstring(L, 1);
NoiseParams np;
@@ -648,6 +691,8 @@ int ModApiMapgen::l_set_noiseparams(lua_State *L)
// get_noiseparams(name)
int ModApiMapgen::l_get_noiseparams(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
std::string name = luaL_checkstring(L, 1);
NoiseParams np;
@@ -662,6 +707,8 @@ int ModApiMapgen::l_get_noiseparams(lua_State *L)
// set_gen_notify(flags, {deco_id_table})
int ModApiMapgen::l_set_gen_notify(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
u32 flags = 0, flagmask = 0;
EmergeManager *emerge = getServer(L)->getEmergeManager();
@@ -686,6 +733,8 @@ int ModApiMapgen::l_set_gen_notify(lua_State *L)
// get_gen_notify()
int ModApiMapgen::l_get_gen_notify(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
EmergeManager *emerge = getServer(L)->getEmergeManager();
push_flags_string(L, flagdesc_gennotify, emerge->gen_notify_on,
emerge->gen_notify_on);
@@ -705,6 +754,8 @@ int ModApiMapgen::l_get_gen_notify(lua_State *L)
// register_biome({lots of stuff})
int ModApiMapgen::l_register_biome(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
int index = 1;
luaL_checktype(L, index, LUA_TTABLE);
@@ -729,6 +780,8 @@ int ModApiMapgen::l_register_biome(lua_State *L)
// register_decoration({lots of stuff})
int ModApiMapgen::l_register_decoration(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
int index = 1;
luaL_checktype(L, index, LUA_TTABLE);
@@ -869,6 +922,8 @@ bool read_deco_schematic(lua_State *L, SchematicManager *schemmgr, DecoSchematic
// register_ore({lots of stuff})
int ModApiMapgen::l_register_ore(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
int index = 1;
luaL_checktype(L, index, LUA_TTABLE);
@@ -880,7 +935,7 @@ int ModApiMapgen::l_register_ore(lua_State *L)
"ore_type", es_OreType, ORE_SCATTER);
Ore *ore = oremgr->create(oretype);
if (!ore) {
- errorstream << "register_ore: ore_type " << oretype << " not implemented";
+ errorstream << "register_ore: ore_type " << oretype << " not implemented\n";
return 0;
}
@@ -889,10 +944,19 @@ int ModApiMapgen::l_register_ore(lua_State *L)
ore->clust_scarcity = getintfield_default(L, index, "clust_scarcity", 1);
ore->clust_num_ores = getintfield_default(L, index, "clust_num_ores", 1);
ore->clust_size = getintfield_default(L, index, "clust_size", 0);
- ore->nthresh = getfloatfield_default(L, index, "noise_threshhold", 0);
ore->noise = NULL;
ore->flags = 0;
+ //// Get noise_threshold
+ warn_if_field_exists(L, index, "noise_threshhold",
+ "Deprecated: new name is \"noise_threshold\".");
+
+ float nthresh;
+ if (!getfloatfield(L, index, "noise_threshold", nthresh) &&
+ !getfloatfield(L, index, "noise_threshhold", nthresh))
+ nthresh = 0;
+ ore->nthresh = nthresh;
+
//// Get y_min/y_max
warn_if_field_exists(L, index, "height_min",
"Deprecated: new name is \"y_min\".");
@@ -937,10 +1001,43 @@ int ModApiMapgen::l_register_ore(lua_State *L)
}
lua_pop(L, 1);
- if (oretype == ORE_VEIN) {
- OreVein *orevein = (OreVein *)ore;
- orevein->random_factor = getfloatfield_default(L, index,
- "random_factor", 1.f);
+ //// Get type-specific parameters
+ switch (oretype) {
+ case ORE_SHEET: {
+ OreSheet *oresheet = (OreSheet *)ore;
+
+ oresheet->column_height_min = getintfield_default(L, index,
+ "column_height_min", 1);
+ oresheet->column_height_max = getintfield_default(L, index,
+ "column_height_max", ore->clust_size);
+ oresheet->column_midpoint_factor = getfloatfield_default(L, index,
+ "column_midpoint_factor", 0.5f);
+
+ break;
+ }
+ case ORE_PUFF: {
+ OrePuff *orepuff = (OrePuff *)ore;
+
+ lua_getfield(L, index, "np_puff_top");
+ read_noiseparams(L, -1, &orepuff->np_puff_top);
+ lua_pop(L, 1);
+
+ lua_getfield(L, index, "np_puff_bottom");
+ read_noiseparams(L, -1, &orepuff->np_puff_bottom);
+ lua_pop(L, 1);
+
+ break;
+ }
+ case ORE_VEIN: {
+ OreVein *orevein = (OreVein *)ore;
+
+ orevein->random_factor = getfloatfield_default(L, index,
+ "random_factor", 1.f);
+
+ break;
+ }
+ default:
+ break;
}
ObjDefHandle handle = oremgr->add(ore);
@@ -964,6 +1061,8 @@ int ModApiMapgen::l_register_ore(lua_State *L)
// register_schematic({schematic}, replacements={})
int ModApiMapgen::l_register_schematic(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
StringMap replace_names;
@@ -989,6 +1088,8 @@ int ModApiMapgen::l_register_schematic(lua_State *L)
// clear_registered_biomes()
int ModApiMapgen::l_clear_registered_biomes(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
bmgr->clear();
return 0;
@@ -998,6 +1099,8 @@ int ModApiMapgen::l_clear_registered_biomes(lua_State *L)
// clear_registered_decorations()
int ModApiMapgen::l_clear_registered_decorations(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr;
dmgr->clear();
return 0;
@@ -1007,6 +1110,8 @@ int ModApiMapgen::l_clear_registered_decorations(lua_State *L)
// clear_registered_ores()
int ModApiMapgen::l_clear_registered_ores(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
OreManager *omgr = getServer(L)->getEmergeManager()->oremgr;
omgr->clear();
return 0;
@@ -1016,6 +1121,8 @@ int ModApiMapgen::l_clear_registered_ores(lua_State *L)
// clear_registered_schematics()
int ModApiMapgen::l_clear_registered_schematics(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
SchematicManager *smgr = getServer(L)->getEmergeManager()->schemmgr;
smgr->clear();
return 0;
@@ -1025,6 +1132,8 @@ int ModApiMapgen::l_clear_registered_schematics(lua_State *L)
// generate_ores(vm, p1, p2, [ore_id])
int ModApiMapgen::l_generate_ores(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
EmergeManager *emerge = getServer(L)->getEmergeManager();
Mapgen mg;
@@ -1049,6 +1158,8 @@ int ModApiMapgen::l_generate_ores(lua_State *L)
// generate_decorations(vm, p1, p2, [deco_id])
int ModApiMapgen::l_generate_decorations(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
EmergeManager *emerge = getServer(L)->getEmergeManager();
Mapgen mg;
@@ -1073,6 +1184,8 @@ int ModApiMapgen::l_generate_decorations(lua_State *L)
// create_schematic(p1, p2, probability_list, filename, y_slice_prob_list)
int ModApiMapgen::l_create_schematic(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
INodeDefManager *ndef = getServer(L)->getNodeDefManager();
const char *filename = luaL_checkstring(L, 4);
@@ -1136,6 +1249,8 @@ int ModApiMapgen::l_create_schematic(lua_State *L)
// place_schematic(p, schematic, rotation, replacement)
int ModApiMapgen::l_place_schematic(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
Map *map = &(getEnv(L)->getMap());
SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
@@ -1165,15 +1280,59 @@ int ModApiMapgen::l_place_schematic(lua_State *L)
return 0;
}
- schem->placeStructure(map, p, 0, (Rotation)rot, force_placement);
+ schem->placeOnMap(map, p, 0, (Rotation)rot, force_placement);
lua_pushboolean(L, true);
return 1;
}
+int ModApiMapgen::l_place_schematic_on_vmanip(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
+
+ //// Read VoxelManip object
+ MMVManip *vm = LuaVoxelManip::checkobject(L, 1)->vm;
+
+ //// Read position
+ v3s16 p = check_v3s16(L, 2);
+
+ //// Read rotation
+ int rot = ROTATE_0;
+ const char *enumstr = lua_tostring(L, 4);
+ if (enumstr)
+ string_to_enum(es_Rotation, rot, std::string(enumstr));
+
+ //// Read force placement
+ bool force_placement = true;
+ if (lua_isboolean(L, 6))
+ force_placement = lua_toboolean(L, 6);
+
+ //// Read node replacements
+ StringMap replace_names;
+ if (lua_istable(L, 5))
+ read_schematic_replacements(L, 5, &replace_names);
+
+ //// Read schematic
+ Schematic *schem = get_or_load_schematic(L, 3, schemmgr, &replace_names);
+ if (!schem) {
+ errorstream << "place_schematic: failed to get schematic" << std::endl;
+ return 0;
+ }
+
+ bool schematic_did_fit = schem->placeOnVManip(
+ vm, p, 0, (Rotation)rot, force_placement);
+
+ lua_pushboolean(L, schematic_did_fit);
+ return 1;
+}
+
// serialize_schematic(schematic, format, options={...})
int ModApiMapgen::l_serialize_schematic(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
//// Read options
@@ -1223,6 +1382,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
void ModApiMapgen::Initialize(lua_State *L, int top)
{
+ API_FCT(get_biome_id);
API_FCT(get_mapgen_object);
API_FCT(get_mapgen_params);
@@ -1246,5 +1406,6 @@ void ModApiMapgen::Initialize(lua_State *L, int top)
API_FCT(generate_decorations);
API_FCT(create_schematic);
API_FCT(place_schematic);
+ API_FCT(place_schematic_on_vmanip);
API_FCT(serialize_schematic);
}
diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h
index 7440d1285..9751c0db6 100644
--- a/src/script/lua_api/l_mapgen.h
+++ b/src/script/lua_api/l_mapgen.h
@@ -24,6 +24,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class ModApiMapgen : public ModApiBase {
private:
+ // get_biome_id(biomename)
+ // returns the biome id used in biomemap
+ static int l_get_biome_id(lua_State *L);
+
// get_mapgen_object(objectname)
// returns the requested object used during map generation
static int l_get_mapgen_object(lua_State *L);
@@ -81,9 +85,13 @@ private:
// create_schematic(p1, p2, probability_list, filename)
static int l_create_schematic(lua_State *L);
- // place_schematic(p, schematic, rotation, replacement)
+ // place_schematic(p, schematic, rotation, replacements, force_placement)
static int l_place_schematic(lua_State *L);
+ // place_schematic_on_vmanip(vm, p, schematic,
+ // rotation, replacements, force_placement)
+ static int l_place_schematic_on_vmanip(lua_State *L);
+
// serialize_schematic(schematic, format, options={...})
static int l_serialize_schematic(lua_State *L);
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 6cdbe5c68..c8bc7d558 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "environment.h"
#include "map.h"
+#include "gamedef.h"
#include "nodemetadata.h"
@@ -43,7 +44,7 @@ NodeMetadata* NodeMetaRef::getmeta(NodeMetaRef *ref, bool auto_create)
{
NodeMetadata *meta = ref->m_env->getMap().getNodeMetadata(ref->m_p);
if(meta == NULL && auto_create) {
- meta = new NodeMetadata(ref->m_env->getGameDef());
+ meta = new NodeMetadata(ref->m_env->getGameDef()->idef());
if(!ref->m_env->getMap().setNodeMetadata(ref->m_p, meta)) {
delete meta;
return NULL;
@@ -81,6 +82,8 @@ int NodeMetaRef::gc_object(lua_State *L) {
// get_string(self, name)
int NodeMetaRef::l_get_string(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
@@ -97,6 +100,8 @@ int NodeMetaRef::l_get_string(lua_State *L)
// set_string(self, name, var)
int NodeMetaRef::l_set_string(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
size_t len = 0;
@@ -114,6 +119,8 @@ int NodeMetaRef::l_set_string(lua_State *L)
// get_int(self, name)
int NodeMetaRef::l_get_int(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = lua_tostring(L, 2);
@@ -130,6 +137,8 @@ int NodeMetaRef::l_get_int(lua_State *L)
// set_int(self, name, var)
int NodeMetaRef::l_set_int(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = lua_tostring(L, 2);
int a = lua_tointeger(L, 3);
@@ -146,6 +155,8 @@ int NodeMetaRef::l_set_int(lua_State *L)
// get_float(self, name)
int NodeMetaRef::l_get_float(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = lua_tostring(L, 2);
@@ -162,6 +173,8 @@ int NodeMetaRef::l_get_float(lua_State *L)
// set_float(self, name, var)
int NodeMetaRef::l_set_float(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
std::string name = lua_tostring(L, 2);
float a = lua_tonumber(L, 3);
@@ -178,6 +191,8 @@ int NodeMetaRef::l_set_float(lua_State *L)
// get_inventory(self)
int NodeMetaRef::l_get_inventory(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
getmeta(ref, true); // try to ensure the metadata exists
InvRef::createNodeMeta(L, ref->m_p);
@@ -187,6 +202,8 @@ int NodeMetaRef::l_get_inventory(lua_State *L)
// to_table(self)
int NodeMetaRef::l_to_table(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
NodeMetadata *meta = getmeta(ref, true);
@@ -229,6 +246,8 @@ int NodeMetaRef::l_to_table(lua_State *L)
// from_table(self, table)
int NodeMetaRef::l_from_table(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
NodeMetaRef *ref = checkobject(L, 1);
int base = 2;
diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp
index c81a7ebc9..601113516 100644
--- a/src/script/lua_api/l_nodetimer.cpp
+++ b/src/script/lua_api/l_nodetimer.cpp
@@ -39,6 +39,7 @@ NodeTimerRef* NodeTimerRef::checkobject(lua_State *L, int narg)
int NodeTimerRef::l_set(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
@@ -50,6 +51,7 @@ int NodeTimerRef::l_set(lua_State *L)
int NodeTimerRef::l_start(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
@@ -60,6 +62,7 @@ int NodeTimerRef::l_start(lua_State *L)
int NodeTimerRef::l_stop(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
@@ -69,6 +72,7 @@ int NodeTimerRef::l_stop(lua_State *L)
int NodeTimerRef::l_is_started(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
@@ -80,6 +84,7 @@ int NodeTimerRef::l_is_started(lua_State *L)
int NodeTimerRef::l_get_timeout(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
@@ -91,6 +96,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L)
int NodeTimerRef::l_get_elapsed(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp
index c8dc2d2dc..04dc6048f 100644
--- a/src/script/lua_api/l_noise.cpp
+++ b/src/script/lua_api/l_noise.cpp
@@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "log.h"
+#include "porting.h"
+#include "util/numeric.h"
///////////////////////////////////////
/*
@@ -410,6 +412,7 @@ const luaL_reg LuaPerlinNoiseMap::methods[] = {
int LuaPseudoRandom::l_next(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
+
LuaPseudoRandom *o = checkobject(L, 1);
int min = 0;
int max = 32767;
@@ -437,7 +440,9 @@ int LuaPseudoRandom::l_next(lua_State *L)
int LuaPseudoRandom::create_object(lua_State *L)
{
- int seed = luaL_checknumber(L, 1);
+ NO_MAP_LOCK_REQUIRED;
+
+ u64 seed = luaL_checknumber(L, 1);
LuaPseudoRandom *o = new LuaPseudoRandom(seed);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
@@ -532,8 +537,10 @@ int LuaPcgRandom::l_rand_normal_dist(lua_State *L)
int LuaPcgRandom::create_object(lua_State *L)
{
- lua_Integer seed = luaL_checknumber(L, 1);
- LuaPcgRandom *o = lua_isnumber(L, 2) ?
+ NO_MAP_LOCK_REQUIRED;
+
+ u64 seed = luaL_checknumber(L, 1);
+ LuaPcgRandom *o = lua_isnumber(L, 2) ?
new LuaPcgRandom(seed, lua_tointeger(L, 2)) :
new LuaPcgRandom(seed);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
@@ -595,3 +602,116 @@ const luaL_reg LuaPcgRandom::methods[] = {
luamethod(LuaPcgRandom, rand_normal_dist),
{0,0}
};
+
+///////////////////////////////////////
+/*
+ LuaSecureRandom
+*/
+
+bool LuaSecureRandom::fillRandBuf()
+{
+ return porting::secure_rand_fill_buf(m_rand_buf, RAND_BUF_SIZE);
+}
+
+int LuaSecureRandom::l_next_bytes(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ LuaSecureRandom *o = checkobject(L, 1);
+ u32 count = lua_isnumber(L, 2) ? lua_tointeger(L, 2) : 1;
+
+ // Limit count
+ count = MYMIN(RAND_BUF_SIZE, count);
+
+ // Find out whether we can pass directly from our array, or have to do some gluing
+ size_t count_remaining = RAND_BUF_SIZE - o->m_rand_idx;
+ if (count_remaining >= count) {
+ lua_pushlstring(L, o->m_rand_buf + o->m_rand_idx, count);
+ o->m_rand_idx += count;
+ } else {
+ char output_buf[RAND_BUF_SIZE];
+
+ // Copy over with what we have left from our current buffer
+ memcpy(output_buf, o->m_rand_buf + o->m_rand_idx, count_remaining);
+
+ // Refill buffer and copy over the remainder of what was requested
+ o->fillRandBuf();
+ memcpy(output_buf + count_remaining, o->m_rand_buf, count - count_remaining);
+
+ // Update index
+ o->m_rand_idx = count - count_remaining;
+
+ lua_pushlstring(L, output_buf, count);
+ }
+
+ return 1;
+}
+
+
+int LuaSecureRandom::create_object(lua_State *L)
+{
+ LuaSecureRandom *o = new LuaSecureRandom();
+
+ // Fail and return nil if we can't securely fill the buffer
+ if (!o->fillRandBuf()) {
+ delete o;
+ return 0;
+ }
+
+ *(void **)(lua_newuserdata(L, sizeof(void *))) = o;
+ luaL_getmetatable(L, className);
+ lua_setmetatable(L, -2);
+ return 1;
+}
+
+
+int LuaSecureRandom::gc_object(lua_State *L)
+{
+ LuaSecureRandom *o = *(LuaSecureRandom **)(lua_touserdata(L, 1));
+ delete o;
+ return 0;
+}
+
+
+LuaSecureRandom *LuaSecureRandom::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 *(LuaSecureRandom **)ud;
+}
+
+
+void LuaSecureRandom::Register(lua_State *L)
+{
+ lua_newtable(L);
+ int methodtable = lua_gettop(L);
+ luaL_newmetatable(L, className);
+ int metatable = lua_gettop(L);
+
+ lua_pushliteral(L, "__metatable");
+ lua_pushvalue(L, methodtable);
+ lua_settable(L, metatable);
+
+ lua_pushliteral(L, "__index");
+ lua_pushvalue(L, methodtable);
+ lua_settable(L, metatable);
+
+ lua_pushliteral(L, "__gc");
+ lua_pushcfunction(L, gc_object);
+ lua_settable(L, metatable);
+
+ lua_pop(L, 1);
+
+ luaL_openlib(L, 0, methods, 0);
+ lua_pop(L, 1);
+
+ lua_register(L, className, create_object);
+}
+
+const char LuaSecureRandom::className[] = "SecureRandom";
+const luaL_reg LuaSecureRandom::methods[] = {
+ luamethod(LuaSecureRandom, next_bytes),
+ {0,0}
+};
diff --git a/src/script/lua_api/l_noise.h b/src/script/lua_api/l_noise.h
index e958c5a23..492eb7550 100644
--- a/src/script/lua_api/l_noise.h
+++ b/src/script/lua_api/l_noise.h
@@ -160,4 +160,37 @@ public:
static void Register(lua_State *L);
};
+
+/*
+ LuaSecureRandom
+*/
+class LuaSecureRandom : public ModApiBase {
+private:
+ static const size_t RAND_BUF_SIZE = 2048;
+ static const char className[];
+ static const luaL_reg methods[];
+
+ u32 m_rand_idx;
+ char m_rand_buf[RAND_BUF_SIZE];
+
+ // Exported functions
+
+ // garbage collector
+ static int gc_object(lua_State *L);
+
+ // next_bytes(self, count) -> get count many bytes
+ static int l_next_bytes(lua_State *L);
+
+public:
+ bool fillRandBuf();
+
+ // LuaSecureRandom()
+ // Creates an LuaSecureRandom and leaves it on top of stack
+ static int create_object(lua_State *L);
+
+ static LuaSecureRandom *checkobject(lua_State *L, int narg);
+
+ static void Register(lua_State *L);
+};
+
#endif /* L_NOISE_H_ */
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 3ac8eeefb..6d6614e7d 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -31,10 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "hud.h"
#include "scripting_game.h"
-#define GET_ENV_PTR ServerEnvironment* env = \
- dynamic_cast<ServerEnvironment*>(getEnv(L)); \
- if (env == NULL) return 0
-
struct EnumString es_HudElementType[] =
{
{HUD_ELEM_IMAGE, "image"},
@@ -132,7 +128,6 @@ int ObjectRef::gc_object(lua_State *L) {
// remove(self)
int ObjectRef::l_remove(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;
ObjectRef *ref = checkobject(L, 1);
@@ -409,6 +404,7 @@ int ObjectRef::l_get_armor_groups(lua_State *L)
// physics_override_gravity, sneak, sneak_glitch)
int ObjectRef::l_set_physics_override(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
PlayerSAO *co = (PlayerSAO *) getobject(ref);
if (co == NULL) return 0;
@@ -441,6 +437,7 @@ int ObjectRef::l_set_physics_override(lua_State *L)
// get_physics_override(self)
int ObjectRef::l_get_physics_override(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
PlayerSAO *co = (PlayerSAO *)getobject(ref);
if (co == NULL)
@@ -509,7 +506,7 @@ int ObjectRef::l_get_animation(lua_State *L)
// set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed)
int ObjectRef::l_set_local_animation(lua_State *L)
{
- //NO_MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -534,7 +531,7 @@ int ObjectRef::l_set_local_animation(lua_State *L)
// get_local_animation(self)
int ObjectRef::l_get_local_animation(lua_State *L)
{
- //NO_MAP_LOCK_REQUIRED
+ NO_MAP_LOCK_REQUIRED
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -555,7 +552,7 @@ int ObjectRef::l_get_local_animation(lua_State *L)
// set_eye_offset(self, v3f first pv, v3f third pv)
int ObjectRef::l_set_eye_offset(lua_State *L)
{
- //NO_MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -585,7 +582,7 @@ int ObjectRef::l_set_eye_offset(lua_State *L)
// get_eye_offset(self)
int ObjectRef::l_get_eye_offset(lua_State *L)
{
- //NO_MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -642,7 +639,6 @@ int ObjectRef::l_get_bone_position(lua_State *L)
// set_attach(self, parent, bone, position, rotation)
int ObjectRef::l_set_attach(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;
ObjectRef *ref = checkobject(L, 1);
@@ -681,7 +677,6 @@ int ObjectRef::l_set_attach(lua_State *L)
// get_attach(self)
int ObjectRef::l_get_attach(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;
ObjectRef *ref = checkobject(L, 1);
@@ -709,7 +704,6 @@ int ObjectRef::l_get_attach(lua_State *L)
// set_detach(self)
int ObjectRef::l_set_detach(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED;
GET_ENV_PTR;
ObjectRef *ref = checkobject(L, 1);
@@ -773,6 +767,59 @@ int ObjectRef::l_is_player(lua_State *L)
return 1;
}
+// set_nametag_attributes(self, attributes)
+int ObjectRef::l_set_nametag_attributes(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ObjectRef *ref = checkobject(L, 1);
+ ServerActiveObject *co = getobject(ref);
+
+ if (co == NULL)
+ return 0;
+ ObjectProperties *prop = co->accessObjectProperties();
+ if (!prop)
+ return 0;
+
+ lua_getfield(L, 2, "color");
+ if (!lua_isnil(L, -1)) {
+ video::SColor color = prop->nametag_color;
+ read_color(L, -1, &color);
+ prop->nametag_color = color;
+ }
+ lua_pop(L, 1);
+
+ std::string nametag = getstringfield_default(L, 2, "text", "");
+ if (nametag != "")
+ prop->nametag = nametag;
+
+ co->notifyObjectPropertiesModified();
+ lua_pushboolean(L, true);
+ return 1;
+}
+
+// get_nametag_attributes(self)
+int ObjectRef::l_get_nametag_attributes(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ObjectRef *ref = checkobject(L, 1);
+ ServerActiveObject *co = getobject(ref);
+
+ if (co == NULL)
+ return 0;
+ ObjectProperties *prop = co->accessObjectProperties();
+ if (!prop)
+ return 0;
+
+ video::SColor color = prop->nametag_color;
+
+ lua_newtable(L);
+ push_ARGB8(L, color);
+ lua_setfield(L, -2, "color");
+ lua_pushstring(L, prop->nametag.c_str());
+ lua_setfield(L, -2, "text");
+ return 1;
+}
+
/* LuaEntitySAO-only */
// setvelocity(self, {x=num, y=num, z=num})
@@ -1137,6 +1184,7 @@ int ObjectRef::l_get_player_control_bits(lua_State *L)
// hud_add(self, form)
int ObjectRef::l_hud_add(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1187,7 +1235,7 @@ int ObjectRef::l_hud_add(lua_State *L)
}
u32 id = getServer(L)->hudAdd(player, elem);
- if (id == (u32)-1) {
+ if (id == U32_MAX) {
delete elem;
return 0;
}
@@ -1199,6 +1247,7 @@ int ObjectRef::l_hud_add(lua_State *L)
// hud_remove(self, id)
int ObjectRef::l_hud_remove(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1218,6 +1267,7 @@ int ObjectRef::l_hud_remove(lua_State *L)
// hud_change(self, id, stat, data)
int ObjectRef::l_hud_change(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1294,6 +1344,7 @@ int ObjectRef::l_hud_change(lua_State *L)
// hud_get(self, id)
int ObjectRef::l_hud_get(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1344,6 +1395,7 @@ int ObjectRef::l_hud_get(lua_State *L)
// hud_set_flags(self, flags)
int ObjectRef::l_hud_set_flags(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1369,6 +1421,7 @@ int ObjectRef::l_hud_set_flags(lua_State *L)
int ObjectRef::l_hud_get_flags(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1394,6 +1447,7 @@ int ObjectRef::l_hud_get_flags(lua_State *L)
// hud_set_hotbar_itemcount(self, hotbar_itemcount)
int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1411,6 +1465,7 @@ int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L)
// hud_get_hotbar_itemcount(self)
int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1425,6 +1480,7 @@ int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L)
// hud_set_hotbar_image(self, name)
int ObjectRef::l_hud_set_hotbar_image(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1439,6 +1495,7 @@ int ObjectRef::l_hud_set_hotbar_image(lua_State *L)
// hud_get_hotbar_image(self)
int ObjectRef::l_hud_get_hotbar_image(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1452,6 +1509,7 @@ int ObjectRef::l_hud_get_hotbar_image(lua_State *L)
// hud_set_hotbar_selected_image(self, name)
int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1466,6 +1524,7 @@ int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L)
// hud_get_hotbar_selected_image(self)
int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1479,6 +1538,7 @@ int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L)
// set_sky(self, bgcolor, type, list)
int ObjectRef::l_set_sky(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1517,6 +1577,7 @@ int ObjectRef::l_set_sky(lua_State *L)
// get_sky(self)
int ObjectRef::l_get_sky(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1544,6 +1605,7 @@ int ObjectRef::l_get_sky(lua_State *L)
// override_day_night_ratio(self, brightness=0...1)
int ObjectRef::l_override_day_night_ratio(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1566,6 +1628,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L)
// get_day_night_ratio(self)
int ObjectRef::l_get_day_night_ratio(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
if (player == NULL)
@@ -1583,45 +1646,6 @@ int ObjectRef::l_get_day_night_ratio(lua_State *L)
return 1;
}
-// set_nametag_attributes(self, attributes)
-int ObjectRef::l_set_nametag_attributes(lua_State *L)
-{
- NO_MAP_LOCK_REQUIRED;
- ObjectRef *ref = checkobject(L, 1);
- PlayerSAO *playersao = getplayersao(ref);
- if (playersao == NULL)
- return 0;
-
- lua_getfield(L, 2, "color");
- if (!lua_isnil(L, -1)) {
- video::SColor color = playersao->getNametagColor();
- if (!read_color(L, -1, &color))
- return 0;
- playersao->setNametagColor(color);
- }
-
- lua_pushboolean(L, true);
- return 1;
-}
-
-// get_nametag_attributes(self)
-int ObjectRef::l_get_nametag_attributes(lua_State *L)
-{
- NO_MAP_LOCK_REQUIRED;
- ObjectRef *ref = checkobject(L, 1);
- PlayerSAO *playersao = getplayersao(ref);
- if (playersao == NULL)
- return 0;
-
- video::SColor color = playersao->getNametagColor();
-
- lua_newtable(L);
- push_ARGB8(L, color);
- lua_setfield(L, -2, "color");
-
- return 1;
-}
-
ObjectRef::ObjectRef(ServerActiveObject *object):
m_object(object)
{
@@ -1709,6 +1733,8 @@ const luaL_reg ObjectRef::methods[] = {
luamethod(ObjectRef, set_detach),
luamethod(ObjectRef, set_properties),
luamethod(ObjectRef, get_properties),
+ luamethod(ObjectRef, set_nametag_attributes),
+ luamethod(ObjectRef, get_nametag_attributes),
// LuaEntitySAO-only
luamethod(ObjectRef, setvelocity),
luamethod(ObjectRef, getvelocity),
@@ -1758,7 +1784,5 @@ const luaL_reg ObjectRef::methods[] = {
luamethod(ObjectRef, get_local_animation),
luamethod(ObjectRef, set_eye_offset),
luamethod(ObjectRef, get_eye_offset),
- luamethod(ObjectRef, set_nametag_attributes),
- luamethod(ObjectRef, get_nametag_attributes),
{0,0}
};
diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp
index 2532b2b08..f6c1725de 100644
--- a/src/script/lua_api/l_particles.cpp
+++ b/src/script/lua_api/l_particles.cpp
@@ -32,6 +32,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particle(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
// Get parameters
v3f pos, vel, acc;
pos = vel = acc = v3f(0, 0, 0);
@@ -119,6 +121,8 @@ int ModApiParticles::l_add_particle(lua_State *L)
// texture = e.g."default_wood.png"
int ModApiParticles::l_add_particlespawner(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
// Get parameters
u16 amount = 1;
v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
@@ -208,6 +212,8 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
// player (string) is optional
int ModApiParticles::l_delete_particlespawner(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
// Get parameters
u32 id = luaL_checknumber(L, 1);
std::string playername = "";
diff --git a/src/script/lua_api/l_rollback.cpp b/src/script/lua_api/l_rollback.cpp
index 5744e6813..482b0cbf5 100644
--- a/src/script/lua_api/l_rollback.cpp
+++ b/src/script/lua_api/l_rollback.cpp
@@ -38,6 +38,8 @@ void push_RollbackNode(lua_State *L, RollbackNode &node)
// rollback_get_node_actions(pos, range, seconds, limit) -> {{actor, pos, time, oldnode, newnode}, ...}
int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
v3s16 pos = read_v3s16(L, 1);
int range = luaL_checknumber(L, 2);
time_t seconds = (time_t) luaL_checknumber(L, 3);
@@ -79,6 +81,8 @@ int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
// rollback_revert_actions_by(actor, seconds) -> bool, log messages
int ModApiRollback::l_rollback_revert_actions_by(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
std::string actor = luaL_checkstring(L, 1);
int seconds = luaL_checknumber(L, 2);
Server *server = getServer(L);
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 73eca9d60..59d3f5c70 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// request_shutdown()
int ModApiServer::l_request_shutdown(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
const char *msg = lua_tolstring(L, 1, NULL);
bool reconnect = lua_toboolean(L, 2);
getServer(L)->requestShutdown(msg ? msg : "", reconnect);
@@ -44,6 +45,16 @@ int ModApiServer::l_get_server_status(lua_State *L)
return 1;
}
+// print(text)
+int ModApiServer::l_print(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ std::string text;
+ text = luaL_checkstring(L, 1);
+ getServer(L)->printToConsoleOnly(text);
+ return 0;
+}
+
// chat_send_all(text)
int ModApiServer::l_chat_send_all(lua_State *L)
{
@@ -110,7 +121,7 @@ int ModApiServer::l_get_player_ip(lua_State *L)
}
catch(con::PeerNotFoundException) // unlikely
{
- dstream << __FUNCTION_NAME << ": peer was not found" << std::endl;
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
lua_pushnil(L); // error
return 1;
}
@@ -136,7 +147,7 @@ int ModApiServer::l_get_player_information(lua_State *L)
}
catch(con::PeerNotFoundException) // unlikely
{
- dstream << __FUNCTION_NAME << ": peer was not found" << std::endl;
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
lua_pushnil(L); // error
return 1;
}
@@ -150,7 +161,7 @@ int ModApiServer::l_get_player_information(lua_State *L)
#define ERET(code) \
if (!(code)) { \
- dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; \
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \
lua_pushnil(L); /* error */ \
return 1; \
}
@@ -281,7 +292,7 @@ int ModApiServer::l_ban_player(lua_State *L)
}
catch(con::PeerNotFoundException) // unlikely
{
- dstream << __FUNCTION_NAME << ": peer was not found" << std::endl;
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
lua_pushboolean(L, false); // error
return 1;
}
@@ -345,7 +356,7 @@ int ModApiServer::l_show_formspec(lua_State *L)
int ModApiServer::l_get_current_modname(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
return 1;
}
@@ -442,7 +453,7 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L)
int ModApiServer::l_get_last_run_mod(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
const char *current_mod = lua_tostring(L, -1);
if (current_mod == NULL || current_mod[0] == '\0') {
lua_pop(L, 1);
@@ -504,6 +515,8 @@ void ModApiServer::Initialize(lua_State *L, int top)
API_FCT(get_modpath);
API_FCT(get_modnames);
+ API_FCT(print);
+
API_FCT(chat_send_all);
API_FCT(chat_send_player);
API_FCT(show_formspec);
diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h
index df31f325f..06a5ddc24 100644
--- a/src/script/lua_api/l_server.h
+++ b/src/script/lua_api/l_server.h
@@ -46,6 +46,9 @@ private:
// the returned list is sorted alphabetically for you
static int l_get_modnames(lua_State *L);
+ // print(text)
+ static int l_print(lua_State *L);
+
// chat_send_all(text)
static int l_chat_send_all(lua_State *L);
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index 12146e80a..c3e6c8964 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -25,9 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "serialization.h"
#include "json/json.h"
#include "cpp_api/s_security.h"
-#include "areastore.h"
-#include "debug.h"
#include "porting.h"
+#include "debug.h"
#include "log.h"
#include "tool.h"
#include "filesys.h"
@@ -35,70 +34,49 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/auth.h"
#include <algorithm>
-// debug(...)
-// Writes a line to dstream
-int ModApiUtil::l_debug(lua_State *L)
-{
- NO_MAP_LOCK_REQUIRED;
- // Handle multiple parameters to behave like standard lua print()
- int n = lua_gettop(L);
- lua_getglobal(L, "tostring");
- for (int i = 1; i <= n; i++) {
- /*
- Call tostring(i-th argument).
- This is what print() does, and it behaves a bit
- differently from directly calling lua_tostring.
- */
- lua_pushvalue(L, -1); /* function to be called */
- lua_pushvalue(L, i); /* value to print */
- lua_call(L, 1, 1);
- size_t len;
- const char *s = lua_tolstring(L, -1, &len);
- if (i > 1)
- dstream << "\t";
- if (s)
- dstream << std::string(s, len);
- lua_pop(L, 1);
- }
- dstream << std::endl;
- return 0;
-}
-
// log([level,] text)
// Writes a line to the logger.
// The one-argument version logs to infostream.
-// The two-argument version accept a log level: error, action, info, or verbose.
+// The two-argument version accepts a log level.
+// Either the special case "deprecated" for deprecation notices, or any specified in
+// Logger::stringToLevel(name).
int ModApiUtil::l_log(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
std::string text;
- LogMessageLevel level = LMT_INFO;
+ LogLevel level = LL_NONE;
if (lua_isnone(L, 2)) {
- text = lua_tostring(L, 1);
- }
- else {
- std::string levelname = luaL_checkstring(L, 1);
+ text = luaL_checkstring(L, 1);
+ } else {
+ std::string name = luaL_checkstring(L, 1);
text = luaL_checkstring(L, 2);
- if(levelname == "error")
- level = LMT_ERROR;
- else if(levelname == "action")
- level = LMT_ACTION;
- else if(levelname == "verbose")
- level = LMT_VERBOSE;
- else if (levelname == "deprecated") {
- log_deprecated(L,text);
+ if (name == "deprecated") {
+ log_deprecated(L, text);
return 0;
}
-
+ level = Logger::stringToLevel(name);
+ if (level == LL_MAX) {
+ warningstream << "Tried to log at unknown level '" << name
+ << "'. Defaulting to \"none\"." << std::endl;
+ level = LL_NONE;
+ }
}
- log_printline(level, text);
+ g_logger.log(level, text);
return 0;
}
+// get_us_time()
+int ModApiUtil::l_get_us_time(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ lua_pushnumber(L, porting::getTimeUs());
+ return 1;
+}
+
#define CHECK_SECURE_SETTING(L, name) \
- if (name.compare(0, 7, "secure.") == 0) {\
- lua_pushliteral(L, "Attempt to set secure setting.");\
- lua_error(L);\
+ if (ScriptApiSecurity::isSecure(L) && \
+ name.compare(0, 7, "secure.") == 0) { \
+ throw LuaError("Attempt to set secure setting."); \
}
// setting_set(name, value)
@@ -183,8 +161,14 @@ int ModApiUtil::l_parse_json(lua_State *L)
if (!reader.parse(stream, root)) {
errorstream << "Failed to parse json data "
<< reader.getFormattedErrorMessages();
- errorstream << "data: \"" << jsonstr << "\""
- << std::endl;
+ size_t jlen = strlen(jsonstr);
+ if (jlen > 100) {
+ errorstream << "Data (" << jlen
+ << " bytes) printed to warningstream." << std::endl;
+ warningstream << "data: \"" << jsonstr << "\"" << std::endl;
+ } else {
+ errorstream << "data: \"" << jsonstr << "\"" << std::endl;
+ }
lua_pushnil(L);
return 1;
}
@@ -267,7 +251,7 @@ int ModApiUtil::l_get_password_hash(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string name = luaL_checkstring(L, 1);
std::string raw_password = luaL_checkstring(L, 2);
- std::string hash = translatePassword(name, raw_password);
+ std::string hash = translate_password(name, raw_password);
lua_pushstring(L, hash.c_str());
return 1;
}
@@ -290,6 +274,8 @@ int ModApiUtil::l_is_yes(lua_State *L)
int ModApiUtil::l_get_builtin_path(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
std::string path = porting::path_share + DIR_DELIM + "builtin";
lua_pushstring(L, path.c_str());
return 1;
@@ -298,6 +284,8 @@ int ModApiUtil::l_get_builtin_path(lua_State *L)
// compress(data, method, level)
int ModApiUtil::l_compress(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
size_t size;
const char *data = luaL_checklstring(L, 1, &size);
@@ -317,6 +305,8 @@ int ModApiUtil::l_compress(lua_State *L)
// decompress(data, method)
int ModApiUtil::l_decompress(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
size_t size;
const char *data = luaL_checklstring(L, 1, &size);
@@ -367,32 +357,57 @@ int ModApiUtil::l_get_dir_list(lua_State *L)
int ModApiUtil::l_request_insecure_environment(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
+
+ // Just return _G if security is disabled
if (!ScriptApiSecurity::isSecure(L)) {
lua_getglobal(L, "_G");
return 1;
}
- lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
+
+ // We have to make sure that this function is being called directly by
+ // a mod, otherwise a malicious mod could override this function and
+ // steal its return value.
+ lua_Debug info;
+ // Make sure there's only one item below this function on the stack...
+ if (lua_getstack(L, 2, &info)) {
+ return 0;
+ }
+ FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed");
+ FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed");
+ // ...and that that item is the main file scope.
+ if (strcmp(info.what, "main") != 0) {
+ return 0;
+ }
+
+ // Get mod name
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
if (!lua_isstring(L, -1)) {
- lua_pushnil(L);
- return 1;
+ return 0;
}
+
+ // Check secure.trusted_mods
const char *mod_name = lua_tostring(L, -1);
std::string trusted_mods = g_settings->get("secure.trusted_mods");
+ trusted_mods.erase(std::remove(trusted_mods.begin(),
+ trusted_mods.end(), ' '), trusted_mods.end());
std::vector<std::string> mod_list = str_split(trusted_mods, ',');
- if (std::find(mod_list.begin(), mod_list.end(), mod_name) == mod_list.end()) {
- lua_pushnil(L);
- return 1;
+ if (std::find(mod_list.begin(), mod_list.end(), mod_name) ==
+ mod_list.end()) {
+ return 0;
}
- lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup");
+
+ // Push insecure environment
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP);
return 1;
}
void ModApiUtil::Initialize(lua_State *L, int top)
{
- API_FCT(debug);
API_FCT(log);
+ API_FCT(get_us_time);
+
API_FCT(setting_set);
API_FCT(setting_get);
API_FCT(setting_setbool);
@@ -422,9 +437,10 @@ void ModApiUtil::Initialize(lua_State *L, int top)
void ModApiUtil::InitializeAsync(AsyncEngine& engine)
{
- ASYNC_API_FCT(debug);
ASYNC_API_FCT(log);
+ ASYNC_API_FCT(get_us_time);
+
//ASYNC_API_FCT(setting_set);
ASYNC_API_FCT(setting_get);
//ASYNC_API_FCT(setting_setbool);
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index e75aa28cb..6fac7e7eb 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -35,16 +35,15 @@ private:
GUIEngine instance should be in here.
*/
- // debug(text)
- // Writes a line to dstream
- static int l_debug(lua_State *L);
-
// log([level,] text)
// Writes a line to the logger.
// The one-argument version logs to infostream.
- // The two-argument version accept a log level: error, action, info, or verbose.
+ // The two-argument version accepts a log level.
static int l_log(lua_State *L);
+ // get us precision time
+ static int l_get_us_time(lua_State *L);
+
// setting_set(name, value)
static int l_setting_set(lua_State *L);
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index ac6c10303..f13866408 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -28,10 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
#include "mapgen.h"
-#define GET_ENV_PTR ServerEnvironment* env = \
- dynamic_cast<ServerEnvironment*>(getEnv(L)); \
- if (env == NULL) return 0
-
// garbage collector
int LuaVoxelManip::gc_object(lua_State *L)
{
@@ -43,6 +39,8 @@ int LuaVoxelManip::gc_object(lua_State *L)
int LuaVoxelManip::l_read_from_map(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;
@@ -108,6 +106,8 @@ int LuaVoxelManip::l_set_data(lua_State *L)
int LuaVoxelManip::l_write_to_map(lua_State *L)
{
+ MAP_LOCK_REQUIRED;
+
LuaVoxelManip *o = checkobject(L, 1);
MMVManip *vm = o->vm;
@@ -119,23 +119,25 @@ int LuaVoxelManip::l_write_to_map(lua_State *L)
int LuaVoxelManip::l_get_node_at(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- GET_ENV_PTR;
+
+ INodeDefManager *ndef = getServer(L)->getNodeDefManager();
LuaVoxelManip *o = checkobject(L, 1);
v3s16 pos = check_v3s16(L, 2);
- pushnode(L, o->vm->getNodeNoExNoEmerge(pos), env->getGameDef()->ndef());
+ pushnode(L, o->vm->getNodeNoExNoEmerge(pos), ndef);
return 1;
}
int LuaVoxelManip::l_set_node_at(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- GET_ENV_PTR;
+
+ INodeDefManager *ndef = getServer(L)->getNodeDefManager();
LuaVoxelManip *o = checkobject(L, 1);
v3s16 pos = check_v3s16(L, 2);
- MapNode n = readnode(L, 3, env->getGameDef()->ndef());
+ MapNode n = readnode(L, 3, ndef);
o->vm->setNodeNoEmerge(pos, n);
@@ -179,6 +181,7 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L)
v3s16 fpmax = vm->m_area.MaxEdge;
v3s16 pmin = lua_istable(L, 2) ? check_v3s16(L, 2) : fpmin + yblock;
v3s16 pmax = lua_istable(L, 3) ? check_v3s16(L, 3) : fpmax - yblock;
+ bool propagate_shadow = lua_isboolean(L, 4) ? lua_toboolean(L, 4) : true;
sortBoxVerticies(pmin, pmax);
if (!vm->m_area.contains(VoxelArea(pmin, pmax)))
@@ -189,7 +192,7 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L)
mg.ndef = ndef;
mg.water_level = emerge->params.water_level;
- mg.calcLighting(pmin, pmax, fpmin, fpmax);
+ mg.calcLighting(pmin, pmax, fpmin, fpmax, propagate_shadow);
return 0;
}
@@ -313,14 +316,12 @@ int LuaVoxelManip::l_set_param2_data(lua_State *L)
int LuaVoxelManip::l_update_map(lua_State *L)
{
+ GET_ENV_PTR;
+
LuaVoxelManip *o = checkobject(L, 1);
if (o->is_mapgen_vm)
return 0;
- Environment *env = getEnv(L);
- if (!env)
- return 0;
-
Map *map = &(env->getMap());
// TODO: Optimize this by using Mapgen::calcLighting() instead
@@ -359,6 +360,8 @@ int LuaVoxelManip::l_was_modified(lua_State *L)
int LuaVoxelManip::l_get_emerged_area(lua_State *L)
{
+ NO_MAP_LOCK_REQUIRED;
+
LuaVoxelManip *o = checkobject(L, 1);
push_v3s16(L, o->vm->m_area.MinEdge);
@@ -400,11 +403,7 @@ LuaVoxelManip::~LuaVoxelManip()
// Creates an LuaVoxelManip and leaves it on top of stack
int LuaVoxelManip::create_object(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED;
-
- Environment *env = getEnv(L);
- if (!env)
- return 0;
+ GET_ENV_PTR;
Map *map = &(env->getMap());
LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ?
diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp
index 4f0350d41..e313d55f8 100644
--- a/src/script/scripting_game.cpp
+++ b/src/script/scripting_game.cpp
@@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_util.h"
#include "lua_api/l_vmanip.h"
#include "lua_api/l_settings.h"
+#include "lua_api/l_http.h"
extern "C" {
#include "lualib.h"
@@ -89,6 +90,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top)
ModApiRollback::Initialize(L, top);
ModApiServer::Initialize(L, top);
ModApiUtil::Initialize(L, top);
+ ModApiHttp::Initialize(L, top);
// Register reference classes (userdata)
InvRef::Register(L);
@@ -98,6 +100,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top)
LuaPerlinNoiseMap::Register(L);
LuaPseudoRandom::Register(L);
LuaPcgRandom::Register(L);
+ LuaSecureRandom::Register(L);
LuaVoxelManip::Register(L);
NodeMetaRef::Register(L);
NodeTimerRef::Register(L);
diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp
index c74c18edc..b1e50c94b 100644
--- a/src/script/scripting_mainmenu.cpp
+++ b/src/script/scripting_mainmenu.cpp
@@ -78,7 +78,7 @@ void MainMenuScripting::initializeModApi(lua_State *L, int top)
/******************************************************************************/
void MainMenuScripting::step() {
- asyncEngine.step(getStack(), m_errorhandler);
+ asyncEngine.step(getStack());
}
/******************************************************************************/
diff --git a/src/serialization.cpp b/src/serialization.cpp
index c0fbe10e2..79f66fcae 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -133,7 +133,8 @@ void decompressZlib(std::istream &is, std::ostream &os)
if(z.avail_in == 0)
{
z.next_in = (Bytef*)input_buffer;
- input_buffer_len = is.readsome(input_buffer, bufsize);
+ is.read(input_buffer, bufsize);
+ input_buffer_len = is.gcount();
z.avail_in = input_buffer_len;
//dstream<<"read fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
}
@@ -166,6 +167,7 @@ void decompressZlib(std::istream &is, std::ostream &os)
//dstream<<"z.avail_in="<<z.avail_in<<std::endl;
//dstream<<"fail="<<is.fail()<<" bad="<<is.bad()<<std::endl;
// Unget all the data that inflate didn't take
+ is.clear(); // Just in case EOF is set
for(u32 i=0; i < z.avail_in; i++)
{
is.unget();
diff --git a/src/serialization.h b/src/serialization.h
index ab6fe0f79..01d37d363 100644
--- a/src/serialization.h
+++ b/src/serialization.h
@@ -30,11 +30,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
--------------------------------
For map data (blocks, nodes, sectors).
-
+
NOTE: The goal is to increment this so that saved maps will be
loadable by any version. Other compatibility is not
maintained.
-
+
0: original networked test with 1-byte nodes
1: update with 2-byte nodes
2: lighting is transmitted in param
@@ -70,14 +70,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// Saved on disk version
#define SER_FMT_VER_HIGHEST_WRITE 25
// Lowest supported serialization version
-#define SER_FMT_VER_LOWEST 0
-// Lowest client supported serialization version
+#define SER_FMT_VER_LOWEST_READ 0
+// Lowest serialization version for writing
// Can't do < 24 anymore; we have 16-bit dynamically allocated node IDs
// in memory; conversion just won't work in this direction.
-#define SER_FMT_CLIENT_VER_LOWEST 24
+#define SER_FMT_VER_LOWEST_WRITE 24
inline bool ser_ver_supported(s32 v) {
- return v >= SER_FMT_VER_LOWEST && v <= SER_FMT_VER_HIGHEST_READ;
+ return v >= SER_FMT_VER_LOWEST_READ && v <= SER_FMT_VER_HIGHEST_READ;
}
/*
diff --git a/src/server.cpp b/src/server.cpp
index dc7b101a6..a3b686c25 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "ban.h"
#include "environment.h"
#include "map.h"
-#include "jthread/jmutexautolock.h"
+#include "threading/mutex_auto_lock.h"
#include "constants.h"
#include "voxel.h"
#include "config.h"
@@ -71,35 +71,29 @@ public:
{}
};
-class ServerThread : public JThread
+class ServerThread : public Thread
{
- Server *m_server;
-
public:
ServerThread(Server *server):
- JThread(),
+ Thread("Server"),
m_server(server)
- {
- }
+ {}
+
+ void *run();
- void * Thread();
+private:
+ Server *m_server;
};
-void *ServerThread::Thread()
+void *ServerThread::run()
{
- log_register_thread("ServerThread");
-
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
BEGIN_DEBUG_EXCEPTION_HANDLER
m_server->AsyncRunStep(true);
- ThreadStarted();
-
- porting::setThreadName("ServerThread");
-
- while (!StopRequested()) {
+ while (!stopRequested()) {
try {
//TimeTaker timer("AsyncRunStep() + Receive()");
@@ -118,7 +112,7 @@ void *ServerThread::Thread()
}
}
- END_DEBUG_EXCEPTION_HANDLER(errorstream)
+ END_DEBUG_EXCEPTION_HANDLER
return NULL;
}
@@ -154,7 +148,8 @@ Server::Server(
const std::string &path_world,
const SubgameSpec &gamespec,
bool simple_singleplayer_mode,
- bool ipv6
+ bool ipv6,
+ ChatInterface *iface
):
m_path_world(path_world),
m_gamespec(gamespec),
@@ -181,6 +176,7 @@ Server::Server(
m_clients(&m_con),
m_shutdown_requested(false),
m_shutdown_ask_reconnect(false),
+ m_admin_chat(iface),
m_ignore_map_edit_events(false),
m_ignore_map_edit_events_peer_id(0),
m_next_sound_id(0)
@@ -267,8 +263,8 @@ Server::Server(
errorstream << std::endl;
}
- // Lock environment
- JMutexAutoLock envlock(m_env_mutex);
+ //lock environment
+ MutexAutoLock envlock(m_env_mutex);
// Load mapgen params from Settings
m_emerge->loadMapgenParams();
@@ -282,41 +278,30 @@ Server::Server(
m_script = new GameScripting(this);
std::string script_path = getBuiltinLuaPath() + DIR_DELIM "init.lua";
- std::string error_msg;
- if (!m_script->loadMod(script_path, BUILTIN_MOD_NAME, &error_msg))
- throw ModError("Failed to load and run " + script_path
- + "\nError from Lua:\n" + error_msg);
+ m_script->loadMod(script_path, BUILTIN_MOD_NAME);
// Print mods
infostream << "Server: Loading mods: ";
for(std::vector<ModSpec>::iterator i = m_mods.begin();
- i != m_mods.end(); i++) {
+ i != m_mods.end(); ++i) {
const ModSpec &mod = *i;
infostream << mod.name << " ";
}
infostream << std::endl;
// Load and run "mod" scripts
- for (std::vector<ModSpec>::iterator i = m_mods.begin();
- i != m_mods.end(); i++) {
- const ModSpec &mod = *i;
+ for (std::vector<ModSpec>::iterator it = m_mods.begin();
+ it != m_mods.end(); ++it) {
+ const ModSpec &mod = *it;
if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
- std::ostringstream err;
- err << "Error loading mod \"" << mod.name
- << "\": mod_name does not follow naming conventions: "
- << "Only chararacters [a-z0-9_] are allowed." << std::endl;
- errorstream << err.str().c_str();
- throw ModError(err.str());
+ throw ModError("Error loading mod \"" + mod.name +
+ "\": Mod name does not follow naming conventions: "
+ "Only chararacters [a-z0-9_] are allowed.");
}
- std::string script_path = mod.path + DIR_DELIM "init.lua";
+ std::string script_path = mod.path + DIR_DELIM + "init.lua";
infostream << " [" << padStringRight(mod.name, 12) << "] [\""
<< script_path << "\"]" << std::endl;
- if (!m_script->loadMod(script_path, mod.name, &error_msg)) {
- errorstream << "Server: Failed to load and run "
- << script_path << std::endl;
- throw ModError("Failed to load and run " + script_path
- + "\nError from Lua:\n" + error_msg);
- }
+ m_script->loadMod(script_path, mod.name);
}
// Read Textures and calculate sha1 sums
@@ -335,6 +320,9 @@ Server::Server(
// Perform pending node name resolutions
m_nodedef->runNodeResolveCallbacks();
+ // unmap node names for connected nodeboxes
+ m_nodedef->mapNodeboxConnections();
+
// init the recipe hashes to speed up crafting
m_craftdef->initHashes(this);
@@ -359,10 +347,11 @@ Server::Server(
servermap->addEventReceiver(this);
// If file exists, load environment metadata
- if(fs::PathExists(m_path_world + DIR_DELIM "env_meta.txt"))
- {
- infostream<<"Server: Loading environment metadata"<<std::endl;
+ if (fs::PathExists(m_path_world + DIR_DELIM "env_meta.txt")) {
+ infostream << "Server: Loading environment metadata" << std::endl;
m_env->loadMeta();
+ } else {
+ m_env->loadDefaultMeta();
}
// Add some test ActiveBlockModifiers to environment
@@ -379,7 +368,7 @@ Server::~Server()
SendChatMessage(PEER_ID_INEXISTENT, L"*** Server shutting down");
{
- JMutexAutoLock envlock(m_env_mutex);
+ MutexAutoLock envlock(m_env_mutex);
// Execute script shutdown hooks
m_script->on_shutdown();
@@ -432,14 +421,14 @@ Server::~Server()
// Delete detached inventories
for (std::map<std::string, Inventory*>::iterator
i = m_detached_inventories.begin();
- i != m_detached_inventories.end(); i++) {
+ i != m_detached_inventories.end(); ++i) {
delete i->second;
}
}
void Server::start(Address bind_addr)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
m_bind_addr = bind_addr;
@@ -447,14 +436,14 @@ void Server::start(Address bind_addr)
<< bind_addr.serializeString() <<"..."<<std::endl;
// Stop thread if already running
- m_thread->Stop();
+ m_thread->stop();
// Initialize connection
m_con.SetTimeoutMs(30);
m_con.Serve(bind_addr);
// Start thread
- m_thread->Start();
+ m_thread->start();
// ASCII art for the win!
actionstream
@@ -472,14 +461,14 @@ void Server::start(Address bind_addr)
void Server::stop()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
infostream<<"Server: Stopping and waiting threads"<<std::endl;
// Stop threads (set run=false first so both start stopping)
- m_thread->Stop();
+ m_thread->stop();
//m_emergethread.setRun(false);
- m_thread->Wait();
+ m_thread->wait();
//m_emergethread.stop();
infostream<<"Server: Threads stopped"<<std::endl;
@@ -487,41 +476,35 @@ void Server::stop()
void Server::step(float dtime)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Limit a bit
- if(dtime > 2.0)
+ if (dtime > 2.0)
dtime = 2.0;
{
- JMutexAutoLock lock(m_step_dtime_mutex);
+ MutexAutoLock lock(m_step_dtime_mutex);
m_step_dtime += dtime;
}
// Throw if fatal error occurred in thread
std::string async_err = m_async_fatal_error.get();
- if(async_err != "") {
- if (m_simple_singleplayer_mode) {
- throw ServerError(async_err);
- }
- else {
+ if (!async_err.empty()) {
+ if (!m_simple_singleplayer_mode) {
m_env->kickAllPlayers(SERVER_ACCESSDENIED_CRASH,
g_settings->get("kick_msg_crash"),
g_settings->getBool("ask_reconnect_on_crash"));
- errorstream << "UNRECOVERABLE error occurred. Stopping server. "
- << "Please fix the following error:" << std::endl
- << async_err << std::endl;
- FATAL_ERROR(async_err.c_str());
}
+ throw ServerError(async_err);
}
}
void Server::AsyncRunStep(bool initial_step)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
g_profiler->add("Server::AsyncRunStep (num)", 1);
float dtime;
{
- JMutexAutoLock lock1(m_step_dtime_mutex);
+ MutexAutoLock lock1(m_step_dtime_mutex);
dtime = m_step_dtime;
}
@@ -539,7 +522,7 @@ void Server::AsyncRunStep(bool initial_step)
//infostream<<"Server::AsyncRunStep(): dtime="<<dtime<<std::endl;
{
- JMutexAutoLock lock1(m_step_dtime_mutex);
+ MutexAutoLock lock1(m_step_dtime_mutex);
m_step_dtime -= dtime;
}
@@ -570,7 +553,7 @@ void Server::AsyncRunStep(bool initial_step)
}
{
- JMutexAutoLock lock(m_env_mutex);
+ MutexAutoLock lock(m_env_mutex);
// Figure out and report maximum lag to environment
float max_lag = m_env->getMaxLagEstimate();
max_lag *= 0.9998; // Decrease slowly (about half per 5 minutes)
@@ -590,12 +573,28 @@ void Server::AsyncRunStep(bool initial_step)
static const float map_timer_and_unload_dtime = 2.92;
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime))
{
- JMutexAutoLock lock(m_env_mutex);
+ MutexAutoLock lock(m_env_mutex);
// Run Map's timers and unload unused data
ScopeProfiler sp(g_profiler, "Server: map timer and unload");
m_env->getMap().timerUpdate(map_timer_and_unload_dtime,
g_settings->getFloat("server_unload_unused_data_timeout"),
- (u32)-1);
+ U32_MAX);
+ }
+
+ /*
+ Listen to the admin chat, if available
+ */
+ if (m_admin_chat) {
+ if (!m_admin_chat->command_queue.empty()) {
+ MutexAutoLock lock(m_env_mutex);
+ while (!m_admin_chat->command_queue.empty()) {
+ ChatEvent *evt = m_admin_chat->command_queue.pop_frontNoEx();
+ handleChatInterfaceEvent(evt);
+ delete evt;
+ }
+ }
+ m_admin_chat->outgoing_queue.push_back(
+ new ChatEventTimeInfo(m_env->getGameTime(), m_env->getTimeOfDay()));
}
/*
@@ -608,7 +607,7 @@ void Server::AsyncRunStep(bool initial_step)
{
m_liquid_transform_timer -= m_liquid_transform_every;
- JMutexAutoLock lock(m_env_mutex);
+ MutexAutoLock lock(m_env_mutex);
ScopeProfiler sp(g_profiler, "Server: liquid transform");
@@ -669,27 +668,28 @@ void Server::AsyncRunStep(bool initial_step)
*/
{
//infostream<<"Server: Checking added and deleted active objects"<<std::endl;
- JMutexAutoLock envlock(m_env_mutex);
+ MutexAutoLock envlock(m_env_mutex);
- m_clients.Lock();
+ m_clients.lock();
std::map<u16, RemoteClient*> clients = m_clients.getClientList();
ScopeProfiler sp(g_profiler, "Server: checking added and deleted objs");
// Radius inside which objects are active
- s16 radius = g_settings->getS16("active_object_send_range_blocks");
- s16 player_radius = g_settings->getS16("player_transfer_distance");
-
- if (player_radius == 0 && g_settings->exists("unlimited_player_transfer_distance") &&
- !g_settings->getBool("unlimited_player_transfer_distance"))
+ static const s16 radius =
+ g_settings->getS16("active_object_send_range_blocks") * MAP_BLOCKSIZE;
+
+ // Radius inside which players are active
+ static const bool is_transfer_limited =
+ g_settings->exists("unlimited_player_transfer_distance") &&
+ !g_settings->getBool("unlimited_player_transfer_distance");
+ static const s16 player_transfer_dist = g_settings->getS16("player_transfer_distance") * MAP_BLOCKSIZE;
+ s16 player_radius = player_transfer_dist;
+ if (player_radius == 0 && is_transfer_limited)
player_radius = radius;
- radius *= MAP_BLOCKSIZE;
- player_radius *= MAP_BLOCKSIZE;
-
- for(std::map<u16, RemoteClient*>::iterator
+ for (std::map<u16, RemoteClient*>::iterator
i = clients.begin();
- i != clients.end(); ++i)
- {
+ i != clients.end(); ++i) {
RemoteClient *client = i->second;
// If definitions and textures have not been sent, don't
@@ -698,27 +698,23 @@ void Server::AsyncRunStep(bool initial_step)
continue;
Player *player = m_env->getPlayer(client->peer_id);
- if(player==NULL)
- {
+ if(player == NULL) {
// This can happen if the client timeouts somehow
- /*infostream<<"WARNING: "<<__FUNCTION_NAME<<": Client "
+ /*warningstream<<FUNCTION_NAME<<": Client "
<<client->peer_id
<<" has no associated player"<<std::endl;*/
continue;
}
- v3s16 pos = floatToInt(player->getPosition(), BS);
- std::set<u16> removed_objects;
- std::set<u16> added_objects;
- m_env->getRemovedActiveObjects(pos, radius, player_radius,
+ std::queue<u16> removed_objects;
+ std::queue<u16> added_objects;
+ m_env->getRemovedActiveObjects(player, radius, player_radius,
client->m_known_objects, removed_objects);
- m_env->getAddedActiveObjects(pos, radius, player_radius,
+ m_env->getAddedActiveObjects(player, radius, player_radius,
client->m_known_objects, added_objects);
// Ignore if nothing happened
- if(removed_objects.empty() && added_objects.empty())
- {
- //infostream<<"active objects: none changed"<<std::endl;
+ if (removed_objects.empty() && added_objects.empty()) {
continue;
}
@@ -729,12 +725,9 @@ void Server::AsyncRunStep(bool initial_step)
// Handle removed objects
writeU16((u8*)buf, removed_objects.size());
data_buffer.append(buf, 2);
- for(std::set<u16>::iterator
- i = removed_objects.begin();
- i != removed_objects.end(); ++i)
- {
+ while (!removed_objects.empty()) {
// Get object
- u16 id = *i;
+ u16 id = removed_objects.front();
ServerActiveObject* obj = m_env->getActiveObject(id);
// Add to data buffer for sending
@@ -746,23 +739,21 @@ void Server::AsyncRunStep(bool initial_step)
if(obj && obj->m_known_by_count > 0)
obj->m_known_by_count--;
+ removed_objects.pop();
}
// Handle added objects
writeU16((u8*)buf, added_objects.size());
data_buffer.append(buf, 2);
- for(std::set<u16>::iterator
- i = added_objects.begin();
- i != added_objects.end(); ++i)
- {
+ while (!added_objects.empty()) {
// Get object
- u16 id = *i;
+ u16 id = added_objects.front();
ServerActiveObject* obj = m_env->getActiveObject(id);
// Get object type
u8 type = ACTIVEOBJECT_TYPE_INVALID;
if(obj == NULL)
- infostream<<"WARNING: "<<__FUNCTION_NAME
+ warningstream<<FUNCTION_NAME
<<": NULL object"<<std::endl;
else
type = obj->getSendType();
@@ -784,6 +775,8 @@ void Server::AsyncRunStep(bool initial_step)
if(obj)
obj->m_known_by_count++;
+
+ added_objects.pop();
}
u32 pktSize = SendActiveObjectRemoveAdd(client->peer_id, data_buffer);
@@ -792,14 +785,14 @@ void Server::AsyncRunStep(bool initial_step)
<< added_objects.size() << " added, "
<< "packet size is " << pktSize << std::endl;
}
- m_clients.Unlock();
+ m_clients.unlock();
}
/*
Send object messages
*/
{
- JMutexAutoLock envlock(m_env_mutex);
+ MutexAutoLock envlock(m_env_mutex);
ScopeProfiler sp(g_profiler, "Server: sending object messages");
// Key = object id
@@ -825,7 +818,7 @@ void Server::AsyncRunStep(bool initial_step)
message_list->push_back(aom);
}
- m_clients.Lock();
+ m_clients.lock();
std::map<u16, RemoteClient*> clients = m_clients.getClientList();
// Route data to every client
for (std::map<u16, RemoteClient*>::iterator
@@ -876,7 +869,7 @@ void Server::AsyncRunStep(bool initial_step)
SendActiveObjectMessages(client->peer_id, unreliable_data, false);
}
}
- m_clients.Unlock();
+ m_clients.unlock();
// Clear buffered_messages
for(std::map<u16, std::vector<ActiveObjectMessage>* >::iterator
@@ -891,7 +884,7 @@ void Server::AsyncRunStep(bool initial_step)
*/
{
// We will be accessing the environment
- JMutexAutoLock lock(m_env_mutex);
+ MutexAutoLock lock(m_env_mutex);
// Don't send too many at a time
//u32 count = 0;
@@ -945,7 +938,7 @@ void Server::AsyncRunStep(bool initial_step)
break;
default:
prof.add("unknown", 1);
- infostream << "WARNING: Server: Unknown MapEditEvent "
+ warningstream << "Server: Unknown MapEditEvent "
<< ((u32)event->type) << std::endl;
break;
}
@@ -997,8 +990,7 @@ void Server::AsyncRunStep(bool initial_step)
{
float &counter = m_emergethread_trigger_timer;
counter += dtime;
- if(counter >= 2.0)
- {
+ if (counter >= 2.0) {
counter = 0.0;
m_emerge->startThreads();
@@ -1009,10 +1001,11 @@ void Server::AsyncRunStep(bool initial_step)
{
float &counter = m_savemap_timer;
counter += dtime;
- if(counter >= g_settings->getFloat("server_map_save_interval"))
- {
+ static const float save_interval =
+ g_settings->getFloat("server_map_save_interval");
+ if (counter >= save_interval) {
counter = 0.0;
- JMutexAutoLock lock(m_env_mutex);
+ MutexAutoLock lock(m_env_mutex);
ScopeProfiler sp(g_profiler, "Server: saving stuff");
@@ -1035,7 +1028,7 @@ void Server::AsyncRunStep(bool initial_step)
void Server::Receive()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
SharedBuffer<u8> data;
u16 peer_id;
try {
@@ -1068,7 +1061,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
{
std::string playername = "";
PlayerSAO *playersao = NULL;
- m_clients.Lock();
+ m_clients.lock();
try {
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone);
if (client != NULL) {
@@ -1076,10 +1069,10 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
playersao = emergePlayer(playername.c_str(), peer_id, client->net_proto_version);
}
} catch (std::exception &e) {
- m_clients.Unlock();
+ m_clients.unlock();
throw;
}
- m_clients.Unlock();
+ m_clients.unlock();
RemotePlayer *player =
static_cast<RemotePlayer*>(m_env->getPlayer(playername.c_str()));
@@ -1131,16 +1124,19 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
// Send information about joining in chat
{
- std::wstring name = L"unknown";
+ std::string name = "unknown";
Player *player = m_env->getPlayer(peer_id);
if(player != NULL)
- name = narrow_to_wide(player->getName());
+ name = player->getName();
std::wstring message;
message += L"*** ";
- message += name;
+ message += narrow_to_wide(name);
message += L" joined the game.";
SendChatMessage(PEER_ID_INEXISTENT,message);
+ if (m_admin_chat)
+ m_admin_chat->outgoing_queue.push_back(
+ new ChatEventNick(CET_NICK_ADD, name));
}
}
Address addr = getPeerAddress(player->peer_id);
@@ -1155,7 +1151,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id)
actionstream<<player->getName() <<" joins game. List of players: ";
for (std::vector<std::string>::iterator i = names.begin();
- i != names.end(); i++) {
+ i != names.end(); ++i) {
actionstream << *i << " ";
}
@@ -1172,9 +1168,9 @@ inline void Server::handleCommand(NetworkPacket* pkt)
void Server::ProcessData(NetworkPacket *pkt)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Environment is locked first.
- JMutexAutoLock envlock(m_env_mutex);
+ MutexAutoLock envlock(m_env_mutex);
ScopeProfiler sp(g_profiler, "Server::ProcessData");
u32 peer_id = pkt->getPeerId();
@@ -1356,19 +1352,19 @@ void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend)
void Server::SetBlocksNotSent(std::map<v3s16, MapBlock *>& block)
{
std::vector<u16> clients = m_clients.getClientIDs();
- m_clients.Lock();
+ m_clients.lock();
// Set the modified blocks unsent for all the clients
for (std::vector<u16>::iterator i = clients.begin();
i != clients.end(); ++i) {
if (RemoteClient *client = m_clients.lockedGetClientNoEx(*i))
client->SetBlocksNotSent(block);
}
- m_clients.Unlock();
+ m_clients.unlock();
}
void Server::peerAdded(con::Peer *peer)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
verbosestream<<"Server::peerAdded(): peer->id="
<<peer->id<<std::endl;
@@ -1381,7 +1377,7 @@ void Server::peerAdded(con::Peer *peer)
void Server::deletingPeer(con::Peer *peer, bool timeout)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
verbosestream<<"Server::deletingPeer(): peer->id="
<<peer->id<<", timeout="<<timeout<<std::endl;
@@ -1413,11 +1409,11 @@ bool Server::getClientInfo(
)
{
*state = m_clients.getClientState(peer_id);
- m_clients.Lock();
+ m_clients.lock();
RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_Invalid);
if (client == NULL) {
- m_clients.Unlock();
+ m_clients.unlock();
return false;
}
@@ -1430,7 +1426,7 @@ bool Server::getClientInfo(
*patch = client->getPatch();
*vers_string = client->getPatch();
- m_clients.Unlock();
+ m_clients.unlock();
return true;
}
@@ -1463,6 +1459,16 @@ void Server::handlePeerChanges()
}
}
+void Server::printToConsoleOnly(const std::string &text)
+{
+ if (m_admin_chat) {
+ m_admin_chat->outgoing_queue.push_back(
+ new ChatEventChat("", utf8_to_wide(text)));
+ } else {
+ std::cout << text << std::endl;
+ }
+}
+
void Server::Send(NetworkPacket* pkt)
{
m_clients.send(pkt->getPeerId(),
@@ -1473,7 +1479,7 @@ void Server::Send(NetworkPacket* pkt)
void Server::SendMovement(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
std::ostringstream os(std::ios_base::binary);
NetworkPacket pkt(TOCLIENT_MOVEMENT, 12 * sizeof(float), peer_id);
@@ -1510,7 +1516,7 @@ void Server::SendPlayerHPOrDie(PlayerSAO *playersao)
void Server::SendHP(u16 peer_id, u8 hp)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_HP, 1, peer_id);
pkt << hp;
@@ -1519,7 +1525,7 @@ void Server::SendHP(u16 peer_id, u8 hp)
void Server::SendBreath(u16 peer_id, u16 breath)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_BREATH, 2, peer_id);
pkt << (u16) breath;
@@ -1543,7 +1549,7 @@ void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason,
void Server::SendAccessDenied_Legacy(u16 peer_id,const std::wstring &reason)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_ACCESS_DENIED_LEGACY, 0, peer_id);
pkt << reason;
@@ -1553,7 +1559,7 @@ void Server::SendAccessDenied_Legacy(u16 peer_id,const std::wstring &reason)
void Server::SendDeathscreen(u16 peer_id,bool set_camera_point_target,
v3f camera_point_target)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_DEATHSCREEN, 1 + sizeof(v3f), peer_id);
pkt << set_camera_point_target << camera_point_target;
@@ -1563,7 +1569,7 @@ void Server::SendDeathscreen(u16 peer_id,bool set_camera_point_target,
void Server::SendItemDef(u16 peer_id,
IItemDefManager *itemdef, u16 protocol_version)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_ITEMDEF, 0, peer_id);
@@ -1588,7 +1594,7 @@ void Server::SendItemDef(u16 peer_id,
void Server::SendNodeDef(u16 peer_id,
INodeDefManager *nodedef, u16 protocol_version)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_NODEDEF, 0, peer_id);
@@ -1617,7 +1623,7 @@ void Server::SendNodeDef(u16 peer_id,
void Server::SendInventory(PlayerSAO* playerSAO)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
UpdateCrafting(playerSAO->getPlayer());
@@ -1638,7 +1644,7 @@ void Server::SendInventory(PlayerSAO* playerSAO)
void Server::SendChatMessage(u16 peer_id, const std::wstring &message)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id);
pkt << message;
@@ -1654,7 +1660,7 @@ void Server::SendChatMessage(u16 peer_id, const std::wstring &message)
void Server::SendShowFormspecMessage(u16 peer_id, const std::string &formspec,
const std::string &formname)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_SHOW_FORMSPEC, 0 , peer_id);
@@ -1669,7 +1675,7 @@ void Server::SendSpawnParticle(u16 peer_id, v3f pos, v3f velocity, v3f accelerat
float expirationtime, float size, bool collisiondetection,
bool vertical, std::string texture)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_SPAWN_PARTICLE, 0, peer_id);
@@ -1691,7 +1697,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3
v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, float minexptime, float maxexptime,
float minsize, float maxsize, bool collisiondetection, bool vertical, std::string texture, u32 id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 0, peer_id);
@@ -1713,7 +1719,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3
void Server::SendDeleteParticleSpawner(u16 peer_id, u32 id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY, 2, peer_id);
@@ -1823,7 +1829,7 @@ void Server::SendOverrideDayNightRatio(u16 peer_id, bool do_override,
void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_TIME_OF_DAY, 0, peer_id);
pkt << time << time_speed;
@@ -1838,9 +1844,9 @@ void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed)
void Server::SendPlayerHP(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
PlayerSAO *playersao = getPlayerSAO(peer_id);
- // In some rare case, if the player is disconnected
+ // In some rare case if the player is disconnected
// while Lua call l_punch, for example, this can be NULL
if (!playersao)
return;
@@ -1856,7 +1862,7 @@ void Server::SendPlayerHP(u16 peer_id)
void Server::SendPlayerBreath(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
PlayerSAO *playersao = getPlayerSAO(peer_id);
assert(playersao);
@@ -1866,7 +1872,7 @@ void Server::SendPlayerBreath(u16 peer_id)
void Server::SendMovePlayer(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
Player *player = m_env->getPlayer(peer_id);
assert(player);
@@ -1918,7 +1924,7 @@ void Server::SendPlayerPrivileges(u16 peer_id)
pkt << (u16) privs.size();
for(std::set<std::string>::const_iterator i = privs.begin();
- i != privs.end(); i++) {
+ i != privs.end(); ++i) {
pkt << (*i);
}
@@ -2018,7 +2024,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
<< (u8) params.type << pos << params.object << params.loop;
for(std::vector<u16>::iterator i = dst_clients.begin();
- i != dst_clients.end(); i++) {
+ i != dst_clients.end(); ++i) {
psound.clients.insert(*i);
m_clients.send(*i, 0, &pkt, true);
}
@@ -2037,7 +2043,7 @@ void Server::stopSound(s32 handle)
pkt << handle;
for(std::set<u16>::iterator i = psound.clients.begin();
- i != psound.clients.end(); i++) {
+ i != psound.clients.end(); ++i) {
// Send as reliable
m_clients.send(*i, 0, &pkt, true);
}
@@ -2098,7 +2104,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
}
NetworkPacket pkt(TOCLIENT_ADDNODE, 6 + 2 + 1 + 1 + 1);
- m_clients.Lock();
+ m_clients.lock();
RemoteClient* client = m_clients.lockedGetClientNoEx(*i);
if (client != 0) {
pkt << p << n.param0 << n.param1 << n.param2
@@ -2108,11 +2114,11 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
if (client->net_proto_version <= 21) {
// Old clients always clear metadata; fix it
// by sending the full block again.
- client->SetBlockNotSent(p);
+ client->SetBlockNotSent(getNodeBlockPos(p));
}
}
}
- m_clients.Unlock();
+ m_clients.unlock();
// Send as reliable
if (pkt.getSize() > 0)
@@ -2123,18 +2129,18 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
void Server::setBlockNotSent(v3s16 p)
{
std::vector<u16> clients = m_clients.getClientIDs();
- m_clients.Lock();
+ m_clients.lock();
for(std::vector<u16>::iterator i = clients.begin();
i != clients.end(); ++i) {
RemoteClient *client = m_clients.lockedGetClientNoEx(*i);
client->SetBlockNotSent(p);
}
- m_clients.Unlock();
+ m_clients.unlock();
}
void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto_version)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
v3s16 p = block->getPos();
@@ -2156,9 +2162,9 @@ void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto
void Server::SendBlocks(float dtime)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
- JMutexAutoLock envlock(m_env_mutex);
+ MutexAutoLock envlock(m_env_mutex);
//TODO check if one big lock could be faster then multiple small ones
ScopeProfiler sp(g_profiler, "Server: sel and send blocks to clients");
@@ -2172,7 +2178,7 @@ void Server::SendBlocks(float dtime)
std::vector<u16> clients = m_clients.getClientIDs();
- m_clients.Lock();
+ m_clients.lock();
for(std::vector<u16>::iterator i = clients.begin();
i != clients.end(); ++i) {
RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active);
@@ -2183,7 +2189,7 @@ void Server::SendBlocks(float dtime)
total_sending += client->SendingCount();
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
}
- m_clients.Unlock();
+ m_clients.unlock();
}
// Sort.
@@ -2191,7 +2197,7 @@ void Server::SendBlocks(float dtime)
// Lowest is most important.
std::sort(queue.begin(), queue.end());
- m_clients.Lock();
+ m_clients.lock();
for(u32 i=0; i<queue.size(); i++)
{
//TODO: Calculate limit dynamically
@@ -2221,19 +2227,19 @@ void Server::SendBlocks(float dtime)
client->SentBlock(q.pos);
total_sending++;
}
- m_clients.Unlock();
+ m_clients.unlock();
}
void Server::fillMediaCache()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
infostream<<"Server: Calculating media file checksums"<<std::endl;
// Collect all media file paths
std::vector<std::string> paths;
for(std::vector<ModSpec>::iterator i = m_mods.begin();
- i != m_mods.end(); i++) {
+ i != m_mods.end(); ++i) {
const ModSpec &mod = *i;
paths.push_back(mod.path + DIR_DELIM + "textures");
paths.push_back(mod.path + DIR_DELIM + "sounds");
@@ -2244,7 +2250,7 @@ void Server::fillMediaCache()
// Collect media file information from paths into cache
for(std::vector<std::string>::iterator i = paths.begin();
- i != paths.end(); i++) {
+ i != paths.end(); ++i) {
std::string mediapath = *i;
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);
for (u32 j = 0; j < dirlist.size(); j++) {
@@ -2322,7 +2328,7 @@ void Server::fillMediaCache()
void Server::sendMediaAnnouncement(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
verbosestream << "Server: Announcing files to id(" << peer_id << ")"
<< std::endl;
@@ -2359,7 +2365,7 @@ struct SendableMedia
void Server::sendRequestedMedia(u16 peer_id,
const std::vector<std::string> &tosend)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
verbosestream<<"Server::sendRequestedMedia(): "
<<"Sending files to client"<<std::endl;
@@ -2466,7 +2472,7 @@ void Server::sendRequestedMedia(u16 peer_id,
void Server::sendDetachedInventory(const std::string &name, u16 peer_id)
{
if(m_detached_inventories.count(name) == 0) {
- errorstream<<__FUNCTION_NAME<<": \""<<name<<"\" not found"<<std::endl;
+ errorstream<<FUNCTION_NAME<<": \""<<name<<"\" not found"<<std::endl;
return;
}
Inventory *inv = m_detached_inventories[name];
@@ -2491,11 +2497,11 @@ void Server::sendDetachedInventory(const std::string &name, u16 peer_id)
void Server::sendDetachedInventories(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
for(std::map<std::string, Inventory*>::iterator
i = m_detached_inventories.begin();
- i != m_detached_inventories.end(); i++) {
+ i != m_detached_inventories.end(); ++i) {
const std::string &name = i->first;
//Inventory *inv = i->second;
sendDetachedInventory(name, peer_id);
@@ -2508,10 +2514,12 @@ void Server::sendDetachedInventories(u16 peer_id)
void Server::DiePlayer(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
-
+ DSTACK(FUNCTION_NAME);
PlayerSAO *playersao = getPlayerSAO(peer_id);
- assert(playersao);
+ // In some rare cases this can be NULL -- if the player is disconnected
+ // when a Lua function modifies l_punch, for example
+ if (!playersao)
+ return;
infostream << "Server::DiePlayer(): Player "
<< playersao->getPlayer()->getName()
@@ -2528,7 +2536,7 @@ void Server::DiePlayer(u16 peer_id)
void Server::RespawnPlayer(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
PlayerSAO *playersao = getPlayerSAO(peer_id);
assert(playersao);
@@ -2554,7 +2562,7 @@ void Server::RespawnPlayer(u16 peer_id)
void Server::DenySudoAccess(u16 peer_id)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
NetworkPacket pkt(TOCLIENT_DENY_SUDO_MODE, 0, peer_id);
Send(&pkt);
@@ -2565,7 +2573,7 @@ void Server::DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode
const std::string &str_reason, bool reconnect)
{
if (proto_ver >= 25) {
- SendAccessDenied(peer_id, reason, str_reason);
+ SendAccessDenied(peer_id, reason, str_reason, reconnect);
} else {
std::wstring wreason = utf8_to_wide(
reason == SERVER_ACCESSDENIED_CUSTOM_STRING ? str_reason :
@@ -2580,7 +2588,7 @@ void Server::DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode
void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
SendAccessDenied(peer_id, reason, custom_reason);
m_clients.event(peer_id, CSE_SetDenied);
@@ -2591,7 +2599,7 @@ void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string
// the minimum version for MT users, maybe in 1 year
void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
SendAccessDenied_Legacy(peer_id, reason);
m_clients.event(peer_id, CSE_SetDenied);
@@ -2600,7 +2608,7 @@ void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason)
void Server::acceptAuth(u16 peer_id, bool forSudoMode)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
if (!forSudoMode) {
RemoteClient* client = getClient(peer_id, CS_Invalid);
@@ -2631,7 +2639,7 @@ void Server::acceptAuth(u16 peer_id, bool forSudoMode)
void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
std::wstring message;
{
/*
@@ -2646,7 +2654,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
if(psound.clients.empty())
m_playing_sounds.erase(i++);
else
- i++;
+ ++i;
}
Player *player = m_env->getPlayer(peer_id);
@@ -2696,13 +2704,17 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
os << player->getName() << " ";
}
- actionstream << player->getName() << " "
+ std::string name = player->getName();
+ actionstream << name << " "
<< (reason == CDR_TIMEOUT ? "times out." : "leaves game.")
<< " List of players: " << os.str() << std::endl;
+ if (m_admin_chat)
+ m_admin_chat->outgoing_queue.push_back(
+ new ChatEventNick(CET_NICK_REMOVE, name));
}
}
{
- JMutexAutoLock env_lock(m_env_mutex);
+ MutexAutoLock env_lock(m_env_mutex);
m_clients.DeleteClient(peer_id);
}
}
@@ -2714,7 +2726,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
void Server::UpdateCrafting(Player* player)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Get a preview for crafting
ItemStack preview;
@@ -2731,6 +2743,102 @@ void Server::UpdateCrafting(Player* player)
plist->changeItem(0, preview);
}
+void Server::handleChatInterfaceEvent(ChatEvent *evt)
+{
+ if (evt->type == CET_NICK_ADD) {
+ // The terminal informed us of its nick choice
+ m_admin_nick = ((ChatEventNick *)evt)->nick;
+ if (!m_script->getAuth(m_admin_nick, NULL, NULL)) {
+ errorstream << "You haven't set up an account." << std::endl
+ << "Please log in using the client as '"
+ << m_admin_nick << "' with a secure password." << std::endl
+ << "Until then, you can't execute admin tasks via the console," << std::endl
+ << "and everybody can claim the user account instead of you," << std::endl
+ << "giving them full control over this server." << std::endl;
+ }
+ } else {
+ assert(evt->type == CET_CHAT);
+ handleAdminChat((ChatEventChat *)evt);
+ }
+}
+
+std::wstring Server::handleChat(const std::string &name, const std::wstring &wname,
+ const std::wstring &wmessage, bool check_shout_priv,
+ u16 peer_id_to_avoid_sending)
+{
+ // If something goes wrong, this player is to blame
+ RollbackScopeActor rollback_scope(m_rollback,
+ std::string("player:") + name);
+
+ // Line to send
+ std::wstring line;
+ // Whether to send line to the player that sent the message, or to all players
+ bool broadcast_line = true;
+
+ // Run script hook
+ bool ate = m_script->on_chat_message(name,
+ wide_to_utf8(wmessage));
+ // If script ate the message, don't proceed
+ if (ate)
+ return L"";
+
+ // Commands are implemented in Lua, so only catch invalid
+ // commands that were not "eaten" and send an error back
+ if (wmessage[0] == L'/') {
+ std::wstring wcmd = wmessage.substr(1);
+ broadcast_line = false;
+ if (wcmd.length() == 0)
+ line += L"-!- Empty command";
+ else
+ line += L"-!- Invalid command: " + str_split(wcmd, L' ')[0];
+ } else {
+ if (check_shout_priv && !checkPriv(name, "shout")) {
+ line += L"-!- You don't have permission to shout.";
+ broadcast_line = false;
+ } else {
+ line += L"<";
+ line += wname;
+ line += L"> ";
+ line += wmessage;
+ }
+ }
+
+ /*
+ Tell calling method to send the message to sender
+ */
+ if (!broadcast_line) {
+ return line;
+ } else {
+ /*
+ Send the message to others
+ */
+ actionstream << "CHAT: " << wide_to_narrow(line) << std::endl;
+
+ std::vector<u16> clients = m_clients.getClientIDs();
+
+ for (u16 i = 0; i < clients.size(); i++) {
+ u16 cid = clients[i];
+ if (cid != peer_id_to_avoid_sending)
+ SendChatMessage(cid, line);
+ }
+ }
+ return L"";
+}
+
+void Server::handleAdminChat(const ChatEventChat *evt)
+{
+ std::string name = evt->nick;
+ std::wstring wname = utf8_to_wide(name);
+ std::wstring wmessage = evt->evt_msg;
+
+ std::wstring answer = handleChat(name, wname, wmessage);
+
+ // If asked to send answer to sender
+ if (!answer.empty()) {
+ m_admin_chat->outgoing_queue.push_back(new ChatEventChat("", answer));
+ }
+}
+
RemoteClient* Server::getClient(u16 peer_id, ClientState state_min)
{
RemoteClient *client = getClientNoEx(peer_id,state_min);
@@ -2862,9 +2970,14 @@ void Server::notifyPlayer(const char *name, const std::wstring &msg)
if (!m_env)
return;
+ if (m_admin_nick == name && !m_admin_nick.empty()) {
+ m_admin_chat->outgoing_queue.push_back(new ChatEventChat("", msg));
+ }
+
Player *player = m_env->getPlayer(name);
- if (!player)
+ if (!player) {
return;
+ }
if (player->peer_id == PEER_ID_INEXISTENT)
return;
@@ -2929,7 +3042,8 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
return false;
SendHUDSetFlags(player->peer_id, flags, mask);
- player->hud_flags = flags;
+ player->hud_flags &= ~mask;
+ player->hud_flags |= flags;
PlayerSAO* playersao = player->getPlayerSAO();
@@ -3082,19 +3196,7 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime,
peer_id = player->peer_id;
}
- u32 id = 0;
- for(;;) // look for unused particlespawner id
- {
- id++;
- if (std::find(m_particlespawner_ids.begin(),
- m_particlespawner_ids.end(), id)
- == m_particlespawner_ids.end())
- {
- m_particlespawner_ids.push_back(id);
- break;
- }
- }
-
+ u32 id = m_env->addParticleSpawner(spawntime);
SendAddParticleSpawner(peer_id, amount, spawntime,
minpos, maxpos, minvel, maxvel, minacc, maxacc,
minexptime, maxexptime, minsize, maxsize,
@@ -3117,13 +3219,16 @@ void Server::deleteParticleSpawner(const std::string &playername, u32 id)
peer_id = player->peer_id;
}
- m_particlespawner_ids.erase(
- std::remove(m_particlespawner_ids.begin(),
- m_particlespawner_ids.end(), id),
- m_particlespawner_ids.end());
+ m_env->deleteParticleSpawner(id);
SendDeleteParticleSpawner(peer_id, id);
}
+void Server::deleteParticleSpawnerAll(u32 id)
+{
+ m_env->deleteParticleSpawner(id);
+ SendDeleteParticleSpawner(PEER_ID_INEXISTENT, id);
+}
+
Inventory* Server::createDetachedInventory(const std::string &name)
{
if(m_detached_inventories.count(name) > 0){
@@ -3159,7 +3264,7 @@ bool Server::rollbackRevertActions(const std::list<RollbackAction> &actions,
for(std::list<RollbackAction>::const_iterator
i = actions.begin();
- i != actions.end(); i++)
+ i != actions.end(); ++i)
{
const RollbackAction &action = *i;
num_tried++;
@@ -3277,30 +3382,24 @@ v3f Server::findSpawnPos()
return nodeposf * BS;
}
- // Default position is static_spawnpoint
- // We will return it if we don't found a good place
- v3s16 nodepos(nodeposf.X, nodeposf.Y, nodeposf.Z);
-
- s16 water_level = map.getWaterLevel();
-
bool is_good = false;
// Try to find a good place a few times
- for(s32 i = 0; i < 1000 && !is_good; i++) {
+ for(s32 i = 0; i < 4000 && !is_good; i++) {
s32 range = 1 + i;
// We're going to try to throw the player to this position
v2s16 nodepos2d = v2s16(
-range + (myrand() % (range * 2)),
-range + (myrand() % (range * 2)));
- // Get ground height at point
- s16 groundheight = map.findGroundLevel(nodepos2d);
- if (groundheight <= water_level) // Don't go underwater
- continue;
- if (groundheight > water_level + 6) // Don't go to high places
+ // Get spawn level at point
+ s16 spawn_level = m_emerge->getSpawnLevelAtPoint(nodepos2d);
+ // Continue if MAX_MAP_GENERATION_LIMIT was returned by
+ // the mapgen to signify an unsuitable spawn position
+ if (spawn_level == MAX_MAP_GENERATION_LIMIT)
continue;
- nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y);
+ v3s16 nodepos(nodepos2d.X, spawn_level, nodepos2d.Y);
s32 air_count = 0;
for (s32 i = 0; i < 10; i++) {
@@ -3309,7 +3408,11 @@ v3f Server::findSpawnPos()
content_t c = map.getNodeNoEx(nodepos).getContent();
if (c == CONTENT_AIR || c == CONTENT_IGNORE) {
air_count++;
- if (air_count >= 2){
+ if (air_count >= 2) {
+ nodeposf = intToFloat(nodepos, BS);
+ // Don't spawn the player outside map boundaries
+ if (objectpos_over_limit(nodeposf))
+ continue;
is_good = true;
break;
}
@@ -3318,7 +3421,7 @@ v3f Server::findSpawnPos()
}
}
- return intToFloat(nodepos, BS);
+ return nodeposf;
}
PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version)
@@ -3367,6 +3470,16 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version
// Add player to environment
m_env->addPlayer(player);
+ } else {
+ // If the player exists, ensure that they respawn inside legal bounds
+ // This fixes an assert crash when the player can't be added
+ // to the environment
+ if (objectpos_over_limit(player->getPosition())) {
+ actionstream << "Respawn position for player \""
+ << name << "\" outside limits, resetting" << std::endl;
+ v3f pos = findSpawnPos();
+ player->setPosition(pos);
+ }
}
// Create a new player active object
@@ -3392,15 +3505,17 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version
void dedicated_server_loop(Server &server, bool &kill)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
verbosestream<<"dedicated_server_loop()"<<std::endl;
IntervalLimiter m_profiler_interval;
- for(;;)
- {
- float steplen = g_settings->getFloat("dedicated_server_step");
+ static const float steplen = g_settings->getFloat("dedicated_server_step");
+ static const float profiler_print_interval =
+ g_settings->getFloat("profiler_print_interval");
+
+ for(;;) {
// This is kind of a hack but can be done like this
// because server.step() is very light
{
@@ -3422,10 +3537,7 @@ void dedicated_server_loop(Server &server, bool &kill)
/*
Profiler
*/
- float profiler_print_interval =
- g_settings->getFloat("profiler_print_interval");
- if(profiler_print_interval != 0)
- {
+ if (profiler_print_interval != 0) {
if(m_profiler_interval.step(steplen, profiler_print_interval))
{
infostream<<"Profiler:"<<std::endl;
diff --git a/src/server.h b/src/server.h
index d16230967..daf51dee1 100644
--- a/src/server.h
+++ b/src/server.h
@@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include "util/thread.h"
#include "environment.h"
+#include "chat_interface.h"
#include "clientiface.h"
#include "network/networkpacket.h"
#include <string>
@@ -171,7 +172,8 @@ public:
const std::string &path_world,
const SubgameSpec &gamespec,
bool simple_singleplayer_mode,
- bool ipv6
+ bool ipv6,
+ ChatInterface *iface = NULL
);
~Server();
void start(Address bind_addr);
@@ -220,7 +222,8 @@ public:
void Send(NetworkPacket* pkt);
- // Environment must be locked when called
+ // Both setter and getter need no envlock,
+ // can be called freely from threads
void setTimeOfDay(u32 time);
/*
@@ -284,6 +287,7 @@ public:
const std::string &playername);
void deleteParticleSpawner(const std::string &playername, u32 id);
+ void deleteParticleSpawnerAll(u32 id);
// Creates or resets inventory
Inventory* createDetachedInventory(const std::string &name);
@@ -368,6 +372,8 @@ public:
u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
std::string* vers_string);
+ void printToConsoleOnly(const std::string &text);
+
void SendPlayerHPOrDie(PlayerSAO *player);
void SendPlayerBreath(u16 peer_id);
void SendInventory(PlayerSAO* playerSAO);
@@ -376,6 +382,9 @@ public:
// Bind address
Address m_bind_addr;
+ // Environment mutex (envlock)
+ Mutex m_env_mutex;
+
private:
friend class EmergeThread;
@@ -468,6 +477,15 @@ private:
void DeleteClient(u16 peer_id, ClientDeletionReason reason);
void UpdateCrafting(Player *player);
+ void handleChatInterfaceEvent(ChatEvent *evt);
+
+ // This returns the answer to the sender of wmessage, or "" if there is none
+ std::wstring handleChat(const std::string &name, const std::wstring &wname,
+ const std::wstring &wmessage,
+ bool check_shout_priv = false,
+ u16 peer_id_to_avoid_sending = PEER_ID_INEXISTENT);
+ void handleAdminChat(const ChatEventChat *evt);
+
v3f findSpawnPos();
// When called, connection mutex should be locked
@@ -516,7 +534,6 @@ private:
// Environment
ServerEnvironment *m_env;
- JMutex m_env_mutex;
// server connection
con::Connection m_con;
@@ -557,7 +574,7 @@ private:
// A buffer for time steps
// step() increments and AsyncRunStep() run by m_thread reads it.
float m_step_dtime;
- JMutex m_step_dtime_mutex;
+ Mutex m_step_dtime_mutex;
// current server step lag counter
float m_lag;
@@ -594,6 +611,9 @@ private:
std::string m_shutdown_msg;
bool m_shutdown_ask_reconnect;
+ ChatInterface *m_admin_chat;
+ std::string m_admin_nick;
+
/*
Map edit event queue. Automatically receives all map edits.
The constructor of this class registers us to receive them through
@@ -643,10 +663,7 @@ private:
// key = name
std::map<std::string, Inventory*> m_detached_inventories;
- /*
- Particles
- */
- std::vector<u32> m_particlespawner_ids;
+ DISABLE_CLASS_COPY(Server);
};
/*
diff --git a/src/serverlist.cpp b/src/serverlist.cpp
index a33d1d6bf..de7962a68 100644
--- a/src/serverlist.cpp
+++ b/src/serverlist.cpp
@@ -69,8 +69,12 @@ std::vector<ServerListSpec> getLocal()
std::vector<ServerListSpec> getOnline()
{
std::ostringstream geturl;
+
+ u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
+ CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
+
geturl << g_settings->get("serverlist_url") <<
- "/list?proto_version_min=" << CLIENT_PROTOCOL_VERSION_MIN <<
+ "/list?proto_version_min=" << proto_version_min <<
"&proto_version_max=" << CLIENT_PROTOCOL_VERSION_MAX;
Json::Value root = fetchJsonValue(geturl.str(), NULL);
@@ -165,7 +169,7 @@ const std::string serialize(const std::vector<ServerListSpec> &serverlist)
std::string liststring;
for (std::vector<ServerListSpec>::const_iterator it = serverlist.begin();
it != serverlist.end();
- it++) {
+ ++it) {
liststring += "[server]\n";
liststring += (*it)["name"].asString() + '\n';
liststring += (*it)["address"].asString() + '\n';
@@ -182,7 +186,7 @@ const std::string serializeJson(const std::vector<ServerListSpec> &serverlist)
Json::Value list(Json::arrayValue);
for (std::vector<ServerListSpec>::const_iterator it = serverlist.begin();
it != serverlist.end();
- it++) {
+ ++it) {
list.append(*it);
}
root["list"] = list;
diff --git a/src/serverobject.cpp b/src/serverobject.cpp
index 699040bf2..236d7e8dc 100644
--- a/src/serverobject.cpp
+++ b/src/serverobject.cpp
@@ -52,7 +52,7 @@ ServerActiveObject* ServerActiveObject::create(ActiveObjectType type,
}
// If factory is not found, just return.
- dstream<<"WARNING: ServerActiveObject: No factory for type="
+ warningstream<<"ServerActiveObject: No factory for type="
<<type<<std::endl;
return NULL;
}
diff --git a/src/settings.cpp b/src/settings.cpp
index e95bd436d..56afa6133 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -20,8 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "irrlichttypes_bloated.h"
#include "exceptions.h"
-#include "jthread/jmutexautolock.h"
-#include "strfnd.h"
+#include "threading/mutex_auto_lock.h"
+#include "util/strfnd.h"
#include <iostream>
#include <fstream>
#include <sstream>
@@ -56,8 +56,8 @@ Settings & Settings::operator = (const Settings &other)
if (&other == this)
return *this;
- JMutexAutoLock lock(m_mutex);
- JMutexAutoLock lock2(other.m_mutex);
+ MutexAutoLock lock(m_mutex);
+ MutexAutoLock lock2(other.m_mutex);
clearNoLock();
updateNoLock(other);
@@ -155,7 +155,7 @@ bool Settings::readConfigFile(const char *filename)
bool Settings::parseConfigLines(std::istream &is, const std::string &end)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
std::string line, name, value;
@@ -194,7 +194,7 @@ bool Settings::parseConfigLines(std::istream &is, const std::string &end)
void Settings::writeLines(std::ostream &os, u32 tab_depth) const
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
for (std::map<std::string, SettingsEntry>::const_iterator
it = m_settings.begin();
@@ -298,7 +298,7 @@ bool Settings::updateConfigObject(std::istream &is, std::ostream &os,
bool Settings::updateConfigFile(const char *filename)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
std::ifstream is(filename);
std::ostringstream os(std::ios_base::binary);
@@ -379,7 +379,7 @@ bool Settings::parseCommandLine(int argc, char *argv[],
const SettingsEntry &Settings::getEntry(const std::string &name) const
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
std::map<std::string, SettingsEntry>::const_iterator n;
if ((n = m_settings.find(name)) == m_settings.end()) {
@@ -562,7 +562,7 @@ bool Settings::getNoiseParamsFromGroup(const std::string &name,
bool Settings::exists(const std::string &name) const
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
return (m_settings.find(name) != m_settings.end() ||
m_defaults.find(name) != m_defaults.end());
@@ -742,7 +742,7 @@ bool Settings::setEntry(const std::string &name, const void *data,
return false;
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
SettingsEntry &entry = set_default ? m_defaults[name] : m_settings[name];
old_group = entry.group;
@@ -878,22 +878,28 @@ bool Settings::setNoiseParams(const std::string &name,
bool Settings::remove(const std::string &name)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
- delete m_settings[name].group;
- return m_settings.erase(name);
+ std::map<std::string, SettingsEntry>::iterator it = m_settings.find(name);
+ if (it != m_settings.end()) {
+ delete it->second.group;
+ m_settings.erase(it);
+ return true;
+ } else {
+ return false;
+ }
}
void Settings::clear()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
clearNoLock();
}
void Settings::clearDefaults()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
clearDefaultsNoLock();
}
@@ -902,7 +908,7 @@ void Settings::updateValue(const Settings &other, const std::string &name)
if (&other == this)
return;
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
try {
std::string val = other.get(name);
@@ -918,8 +924,8 @@ void Settings::update(const Settings &other)
if (&other == this)
return;
- JMutexAutoLock lock(m_mutex);
- JMutexAutoLock lock2(other.m_mutex);
+ MutexAutoLock lock(m_mutex);
+ MutexAutoLock lock2(other.m_mutex);
updateNoLock(other);
}
@@ -982,13 +988,13 @@ void Settings::clearDefaultsNoLock()
void Settings::registerChangedCallback(std::string name,
setting_changed_callback cbf, void *userdata)
{
- JMutexAutoLock lock(m_callbackMutex);
+ MutexAutoLock lock(m_callbackMutex);
m_callbacks[name].push_back(std::make_pair(cbf, userdata));
}
void Settings::deregisterChangedCallback(std::string name, setting_changed_callback cbf, void *userdata)
{
- JMutexAutoLock lock(m_callbackMutex);
+ MutexAutoLock lock(m_callbackMutex);
std::map<std::string, std::vector<std::pair<setting_changed_callback, void*> > >::iterator iterToVector = m_callbacks.find(name);
if (iterToVector != m_callbacks.end())
{
@@ -1004,12 +1010,12 @@ void Settings::deregisterChangedCallback(std::string name, setting_changed_callb
void Settings::doCallbacks(const std::string name)
{
- JMutexAutoLock lock(m_callbackMutex);
+ MutexAutoLock lock(m_callbackMutex);
std::map<std::string, std::vector<std::pair<setting_changed_callback, void*> > >::iterator iterToVector = m_callbacks.find(name);
if (iterToVector != m_callbacks.end())
{
std::vector<std::pair<setting_changed_callback, void*> >::iterator iter;
- for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); iter++)
+ for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); ++iter)
{
(iter->first)(name, iter->second);
}
diff --git a/src/settings.h b/src/settings.h
index d41f134cd..80d41fd79 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include "util/string.h"
-#include "jthread/jmutex.h"
+#include "threading/mutex.h"
#include <string>
#include <map>
#include <list>
@@ -225,8 +225,8 @@ private:
std::map<std::string, std::vector<std::pair<setting_changed_callback,void*> > > m_callbacks;
- mutable JMutex m_callbackMutex;
- mutable JMutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this.
+ mutable Mutex m_callbackMutex;
+ mutable Mutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this.
};
diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp
new file mode 100644
index 000000000..f7e14dd65
--- /dev/null
+++ b/src/settings_translation_file.cpp
@@ -0,0 +1,620 @@
+// This file is automatically generated
+// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
+// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua
+
+fake_function() {
+ gettext("Client");
+ gettext("Controls");
+ gettext("Build inside player");
+ gettext("If enabled, you can place blocks at the position (feet + eye level) where you stand.\nThis is helpful when working with nodeboxes in small areas.");
+ gettext("Flying");
+ gettext("Player is able to fly without being affected by gravity.\nThis requires the \"fly\" privilege on the server.");
+ gettext("Fast movement");
+ gettext("Fast movement (via use key).\nThis requires the \"fast\" privilege on the server.");
+ gettext("Noclip");
+ gettext("If enabled together with fly mode, player is able to fly through solid nodes.\nThis requires the \"noclip\" privilege on the server.");
+ gettext("Cinematic mode");
+ gettext("Smooths camera when moving and looking around.\nUseful for recording videos.");
+ gettext("Camera smoothing");
+ gettext("Smooths rotation of camera. 0 to disable.");
+ gettext("Camera smoothing in cinematic mode");
+ gettext("Smooths rotation of camera in cinematic mode. 0 to disable.");
+ gettext("Invert mouse");
+ gettext("Invert vertical mouse movement.");
+ gettext("Mouse sensitivity");
+ gettext("Mouse sensitivity multiplier.");
+ gettext("Key use for climbing/descending");
+ gettext("If enabled, \"use\" key instead of \"sneak\" key is used for climbing down and descending.");
+ gettext("Double tap jump for fly");
+ gettext("Double-tapping the jump key toggles fly mode.");
+ gettext("Always fly and fast");
+ gettext("If disabled \"use\" key is used to fly fast if both fly and fast mode are enabled.");
+ gettext("Rightclick repetition interval");
+ gettext("The time in seconds it takes between repeated right clicks when holding the right mouse button.");
+ gettext("Random input");
+ gettext("Enable random user input (only used for testing).");
+ gettext("Continuous forward");
+ gettext("Continuous forward movement (only used for testing).");
+ gettext("Forward key");
+ gettext("Key for moving the player forward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Backward key");
+ gettext("Key for moving the player backward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Left key");
+ gettext("Key for moving the player left.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Right key");
+ gettext("Key for moving the player right.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Jump key");
+ gettext("Key for jumping.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Sneak key");
+ gettext("Key for sneaking.\nAlso used for climbing down and descending in water if aux1_descends is disabled.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Inventory key");
+ gettext("Key for opening the inventory.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Use key");
+ gettext("Key for moving fast in fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Chat key");
+ gettext("Key for opening the chat window.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Command key");
+ gettext("Key for opening the chat window to type commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Console key");
+ gettext("Key for opening the chat console.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Range select key");
+ gettext("Key for toggling unlimited view range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fly key");
+ gettext("Key for toggling flying.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fast key");
+ gettext("Key for toggling fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Noclip key");
+ gettext("Key for toggling noclip mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Cinematic mode key");
+ gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Minimap key");
+ gettext("Key for toggling display of minimap.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Screenshot");
+ gettext("Key for taking screenshots.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Drop item key");
+ gettext("Key for dropping the currently selected item.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("HUD toggle key");
+ gettext("Key for toggling the display of the HUD.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Chat toggle key");
+ gettext("Key for toggling the display of the chat.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Fog toggle key");
+ gettext("Key for toggling the display of the fog.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Camera update toggle key");
+ gettext("Key for toggling the camrea update. Only used for development\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Debug info toggle key");
+ gettext("Key for toggling the display of debug info.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Profiler toggle key");
+ gettext("Key for toggling the display of the profiler. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Toggle camera mode key");
+ gettext("Key for switching between first- and third-person camera.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("View range increase key");
+ gettext("Key for increasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("View range decrease key");
+ gettext("Key for decreasing the viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Print stacks");
+ gettext("Key for printing debug stacks. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+ gettext("Network");
+ gettext("Server address");
+ gettext("Address to connect to.\nLeave this blank to start a local server.\nNote that the address field in the main menu overrides this setting.");
+ gettext("Remote port");
+ gettext("Port to connect to (UDP).\nNote that the port field in the main menu overrides this setting.");
+ gettext("Support older servers");
+ gettext("Whether to support older servers before protocol version 25.\nEnable if you want to connect to 0.4.12 servers and before.\nServers starting with 0.4.13 will work, 0.4.12-dev servers may work.\nDisabling this option will protect your password better.");
+ gettext("Saving map received from server");
+ gettext("Save the map received by the client on disk.");
+ gettext("Show entity selection boxes");
+ gettext("Show entity selection boxes");
+ gettext("Connect to external media server");
+ gettext("Enable usage of remote media server (if provided by server).\nRemote servers offer a significantly faster way to download media (e.g. textures)\nwhen connecting to the server.");
+ gettext("Serverlist URL");
+ gettext("URL to the server list displayed in the Multiplayer Tab.");
+ gettext("Serverlist file");
+ gettext("File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.");
+ gettext("Graphics");
+ gettext("In-Game");
+ gettext("Basic");
+ gettext("VBO");
+ gettext("Enable VBO");
+ gettext("Fog");
+ gettext("Whether to fog out the end of the visible area.");
+ gettext("Leaves style");
+ gettext("Leaves style:\n- Fancy: all faces visible\n- Simple: only outer faces, if defined special_tiles are used\n- Opaque: disable transparency");
+ gettext("Connect glass");
+ gettext("Connects glass if supported by node.");
+ gettext("Smooth lighting");
+ gettext("Enable smooth lighting with simple ambient occlusion.\nDisable for speed or for different looks.");
+ gettext("Clouds");
+ gettext("Clouds are a client side effect.");
+ gettext("3D clouds");
+ gettext("Use 3D cloud look instead of flat.");
+ gettext("Node highlighting");
+ gettext("Method used to highlight selected object.");
+ gettext("Filtering");
+ gettext("Mipmapping");
+ gettext("Use mip mapping to scale textures. May slightly increase performance.");
+ gettext("Anisotropic filtering");
+ gettext("Use anisotropic filtering when viewing at textures from an angle.");
+ gettext("Bilinear filtering");
+ gettext("Use bilinear filtering when scaling textures.");
+ gettext("Trilinear filtering");
+ gettext("Use trilinear filtering when scaling textures.");
+ gettext("Clean transparent textures");
+ gettext("Filtered textures can blend RGB values with fully-transparent neighbors,\nwhich PNG optimizers usually discard, sometimes resulting in a dark or\nlight edge to transparent textures. Apply this filter to clean that up\nat texture load time.");
+ gettext("Minimum texture size for filters");
+ gettext("When using bilinear/trilinear/anisotropic filters, low-resolution textures\ncan be blurred, so automatically upscale them with nearest-neighbor\ninterpolation to preserve crisp pixels. This sets the minimum texture size\nfor the upscaled textures; higher values look sharper, but require more\nmemory. Powers of 2 are recommended. Setting this higher than 1 may not\nhave a visible effect unless bilinear/trilinear/anisotropic filtering is\nenabled.");
+ gettext("FSAA");
+ gettext("Experimental option, might cause visible spaces between blocks\nwhen set to higher number than 0.");
+ gettext("Shaders");
+ gettext("Shaders");
+ gettext("Shaders allow advanced visul effects and may increase performance on some video cards.\nThy only work with the OpenGL video backend.");
+ gettext("Tone Mapping");
+ gettext("Filmic tone mapping");
+ gettext("Enables filmic tone mapping");
+ gettext("Bumpmapping");
+ gettext("Bumpmapping");
+ gettext("Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack\nor need to be auto-generated.\nRequires shaders to be enabled.");
+ gettext("Generate normalmaps");
+ gettext("Enables on the fly normalmap generation (Emboss effect).\nRequires bumpmapping to be enabled.");
+ gettext("Normalmaps strength");
+ gettext("Strength of generated normalmaps.");
+ gettext("Normalmaps sampling");
+ gettext("Defines sampling step of texture.\nA higher value results in smoother normal maps.");
+ gettext("Parallax Occlusion");
+ gettext("Parallax occlusion");
+ gettext("Enables parallax occlusion mapping.\nRequires shaders to be enabled.");
+ gettext("Parallax occlusion mode");
+ gettext("0 = parallax occlusion with slope information (faster).\n1 = relief mapping (slower, more accurate).");
+ gettext("Parallax occlusion strength");
+ gettext("Strength of parallax.");
+ gettext("Parallax occlusion iterations");
+ gettext("Number of parallax occlusion iterations.");
+ gettext("Parallax occlusion Scale");
+ gettext("Overall scale of parallax occlusion effect.");
+ gettext("Parallax occlusion bias");
+ gettext("Overall bias of parallax occlusion effect, usually scale/2.");
+ gettext("Waving Nodes");
+ gettext("Waving water");
+ gettext("Set to true enables waving water.\nRequires shaders to be enabled.");
+ gettext("Waving water height");
+ gettext("Waving water length");
+ gettext("Waving water speed");
+ gettext("Waving leaves");
+ gettext("Set to true enables waving leaves.\nRequires shaders to be enabled.");
+ gettext("Waving plants");
+ gettext("Set to true enables waving plants.\nRequires shaders to be enabled.");
+ gettext("Advanced");
+ gettext("Maximum FPS");
+ gettext("If FPS would go higher than this, limit it by sleeping\nto not waste CPU power for no benefit.");
+ gettext("FPS in pause menu");
+ gettext("Maximum FPS when game is paused.");
+ gettext("Viewing range");
+ gettext("View distance in nodes.\nMin = 20");
+ gettext("Screen width");
+ gettext("Width component of the initial window size.");
+ gettext("Screen height");
+ gettext("Height component of the initial window size.");
+ gettext("Full screen");
+ gettext("Fullscreen mode.");
+ gettext("Full screen BPP");
+ gettext("Bits per pixel (aka color depth) in fullscreen mode.");
+ gettext("V-Sync");
+ gettext("Vertical screen synchronization.");
+ gettext("Field of view");
+ gettext("Field of view in degrees.");
+ gettext("Gamma");
+ gettext("Adjust the gamma encoding for the light tables. Lower numbers are brighter.\nThis setting is for the client only and is ignored by the server.");
+ gettext("Texture path");
+ gettext("Path to texture directory. All textures are first searched from here.");
+ gettext("Video driver");
+ gettext("The rendering back-end for Irrlicht.");
+ gettext("Cloud height");
+ gettext("Height on which clouds are appearing.");
+ gettext("Cloud radius");
+ gettext("Radius of cloud area stated in number of 64 node cloud squares.\nValues larger than 26 will start to produce sharp cutoffs at cloud area corners.");
+ gettext("View bobbing");
+ gettext("Multiplier for view bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
+ gettext("Fall bobbing");
+ gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
+ gettext("3D mode");
+ gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- pageflip: quadbuffer based 3d.");
+ gettext("Console color");
+ gettext("In-game chat console background color (R,G,B).");
+ gettext("Console alpha");
+ gettext("In-game chat console background alpha (opaqueness, between 0 and 255).");
+ gettext("Selection box color");
+ gettext("Selection box border color (R,G,B).");
+ gettext("Selection box width");
+ gettext("Width of the selectionbox's lines around nodes.");
+ gettext("Crosshair color");
+ gettext("Crosshair color (R,G,B).");
+ gettext("Crosshair alpha");
+ gettext("Crosshair alpha (opaqueness, between 0 and 255).");
+ gettext("Desynchronize block animation");
+ gettext("Whether node texture animations should be desynchronized per mapblock.");
+ gettext("Maximum hotbar width");
+ gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar.");
+ gettext("Mesh cache");
+ gettext("Enables caching of facedir rotated meshes.");
+ gettext("Minimap");
+ gettext("Enables minimap.");
+ gettext("Round minimap");
+ gettext("Shape of the minimap. Enabled = round, disabled = square.");
+ gettext("Minimap scan height");
+ gettext("True = 256\nFalse = 128\nUseable to make minimap smoother on slower machines.");
+ gettext("Colored fog");
+ gettext("Make fog and sky colors depend on daytime (dawn/sunset) and view direction.");
+ gettext("Ambient occlusion gamma");
+ gettext("The strength (darkness) of node ambient-occlusion shading.\nLower is darker, Higher is lighter. The valid range of values for this\nsetting is 0.25 to 4.0 inclusive. If the value is out of range it will be\nset to the nearest valid value.");
+ gettext("Inventory items animations");
+ gettext("Enables animation of inventory items.");
+ gettext("Menus");
+ gettext("Clouds in menu");
+ gettext("Use a cloud animation for the main menu background.");
+ gettext("GUI scaling");
+ gettext("Scale gui by a user specified value.\nUse a nearest-neighbor-anti-alias filter to scale the GUI.\nThis will smooth over some of the rough edges, and blend\npixels when scaling down, at the cost of blurring some\nedge pixels when images are scaled by non-integer sizes.");
+ gettext("GUI scaling filter");
+ gettext("When gui_scaling_filter is true, all GUI images need to be\nfiltered in software, but some images are generated directly\nto hardware (e.g. render-to-texture for nodes in inventory).");
+ gettext("GUI scaling filter txr2img");
+ gettext("When gui_scaling_filter_txr2img is true, copy those images\nfrom hardware to software for scaling. When false, fall back\nto the old scaling method, for video drivers that don't\npropery support downloading textures back from hardware.");
+ gettext("Tooltip delay");
+ gettext("Delay showing tooltips, stated in milliseconds.");
+ gettext("Freetype fonts");
+ gettext("Whether freetype fonts are used, requires freetype support to be compiled in.");
+ gettext("Font path");
+ gettext("Path to TrueTypeFont or bitmap.");
+ gettext("Font size");
+ gettext("Font shadow");
+ gettext("Font shadow offset, if 0 then shadow will not be drawn.");
+ gettext("Font shadow alpha");
+ gettext("Font shadow alpha (opaqueness, between 0 and 255).");
+ gettext("Monospace font path");
+ gettext("Monospace font size");
+ gettext("Fallback font");
+ gettext("This font will be used for certain languages.");
+ gettext("Fallback font size");
+ gettext("Fallback font shadow");
+ gettext("Fallback font shadow alpha");
+ gettext("Screenshot folder");
+ gettext("Path to save screenshots at.");
+ gettext("Screenshot format");
+ gettext("Format of screenshots.");
+ gettext("Screenshot quality");
+ gettext("Screenshot quality. Only used for JPEG format.\n1 means worst quality; 100 means best quality.\nUse 0 for default quality.");
+ gettext("Advanced");
+ gettext("DPI");
+ gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.");
+ gettext("Sound");
+ gettext("Sound");
+ gettext("Volume");
+ gettext("Advanced");
+ gettext("Mapblock unload timeout");
+ gettext("Timeout for client to remove unused map data from memory.");
+ gettext("Mapblock limit");
+ gettext("Maximum number of mapblocks for client to be kept in memory.\nSet to -1 for unlimited amount.");
+ gettext("Show debug info");
+ gettext("Whether to show the client debug info (has the same effect as hitting F5).");
+ gettext("Server / Singleplayer");
+ gettext("Server name");
+ gettext("Name of the server, to be displayed when players join and in the serverlist.");
+ gettext("Server description");
+ gettext("Description of server, to be displayed when players join and in the serverlist.");
+ gettext("Server address");
+ gettext("Domain name of server, to be displayed in the serverlist.");
+ gettext("Server URL");
+ gettext("Homepage of server, to be displayed in the serverlist.");
+ gettext("Announce server");
+ gettext("Automaticaly report to the serverlist.");
+ gettext("Serverlist URL");
+ gettext("Announce to this serverlist.\nIf you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net.");
+ gettext("Network");
+ gettext("Server port");
+ gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu.");
+ gettext("Bind address");
+ gettext("The network interface that the server listens on.");
+ gettext("Strict protocol checking");
+ gettext("Enable to disallow old clients from connecting.\nOlder clients are compatible in the sense that they will not crash when connecting\nto new servers, but they may not support all new features that you are expecting.");
+ gettext("Remote media");
+ gettext("Specifies URL from which client fetches media instead of using UDP.\n$filename should be accessible from $remote_media$filename via cURL\n(obviously, remote_media should end with a slash).\nFiles that are not present will be fetched the usual way.");
+ gettext("IPv6 server");
+ gettext("Enable/disable running an IPv6 server. An IPv6 server may be restricted\nto IPv6 clients, depending on system configuration.\nIgnored if bind_address is set.");
+ gettext("Advanced");
+ gettext("Maximum simultaneously blocks send per client");
+ gettext("How many blocks are flying in the wire simultaneously per client.");
+ gettext("Maximum simultaneously bocks send total");
+ gettext("How many blocks are flying in the wire simultaneously for the whole server.");
+ gettext("To reduce lag, block transfers are slowed down when a player is building something.\nThis determines how long they are slowed down after placing or removing a node.");
+ gettext("Max. packets per iteration");
+ gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number.");
+ gettext("Game");
+ gettext("Default game");
+ gettext("Default game when creating a new world.\nThis will be overridden when creating a world from the main menu.");
+ gettext("Message of the day");
+ gettext("Message of the day displayed to players connecting.");
+ gettext("Maximum users");
+ gettext("Maximum number of players that can connect simultaneously.");
+ gettext("Map directory");
+ gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu.");
+ gettext("Item entity TTL");
+ gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature.");
+ gettext("Damage");
+ gettext("Enable players getting damage and dying.");
+ gettext("Fixed map seed");
+ gettext("A chosen map seed for a new map, leave empty for random.\nWill be overridden when creating a new world in the main menu.");
+ gettext("Default password");
+ gettext("New users need to input this password.");
+ gettext("Default privileges");
+ gettext("The privileges that new users automatically get.\nSee /privs in game for a full list on your server and mod configuration.");
+ gettext("Basic Privileges");
+ gettext("Privileges that players with basic_privs can grant");
+ gettext("Unlimited player transfer distance");
+ gettext("Whether players are shown to clients without any range limit.\nDeprecated, use the setting player_transfer_distance instead.");
+ gettext("Player transfer distance");
+ gettext("Defines the maximal player transfer distance in blocks (0 = unlimited).");
+ gettext("Player versus Player");
+ gettext("Whether to allow players to damage and kill each other.");
+ gettext("Static spawnpoint");
+ gettext("If this is set, players will always (re)spawn at the given position.");
+ gettext("Disallow empty passwords");
+ gettext("If enabled, new players cannot join with an empty password.");
+ gettext("Disable anticheat");
+ gettext("If enabled, disable cheat prevention in multiplayer.");
+ gettext("Rollback recording");
+ gettext("If enabled, actions are recorded for rollback.\nThis option is only read when server starts.");
+ gettext("Shutdown message");
+ gettext("A message to be displayed to all clients when the server shuts down.");
+ gettext("Crash message");
+ gettext("A message to be displayed to all clients when the server crashes.");
+ gettext("Ask to reconnect after crash");
+ gettext("Whether to ask clients to reconnect after a (Lua) crash.\nSet this to true if your server is set up to restart automatically.");
+ gettext("Active object send range");
+ gettext("From how far clients know about objects, stated in mapblocks (16 nodes).");
+ gettext("Active block range");
+ gettext("How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.");
+ gettext("Max block send distance");
+ gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes).");
+ gettext("Maximum forceloaded blocks");
+ gettext("Maximum number of forceloaded mapblocks.");
+ gettext("Time send interval");
+ gettext("Interval of sending time of day to clients.");
+ gettext("Time speed");
+ gettext("Controls length of day/night cycle.\nExamples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.");
+ gettext("Map save interval");
+ gettext("Interval of saving important changes in the world, stated in seconds.");
+ gettext("Physics");
+ gettext("Default acceleration");
+ gettext("Acceleration in air");
+ gettext("Fast mode acceleration");
+ gettext("Walking speed");
+ gettext("Crouch speed");
+ gettext("Fast mode speed");
+ gettext("Climbing speed");
+ gettext("Jumping speed");
+ gettext("Descending speed");
+ gettext("Liquid fluidity");
+ gettext("Liquid fluidity smoothing");
+ gettext("Liquid sink");
+ gettext("Gravity");
+ gettext("Advanced");
+ gettext("Deprecated Lua API handling");
+ gettext("Handling for deprecated lua api calls:\n- legacy: (try to) mimic old behaviour (default for release).\n- log: mimic and log backtrace of deprecated call (default for debug).\n- error: abort on usage of deprecated call (suggested for mod developers).");
+ gettext("Mod profiling");
+ gettext("Useful for mod developers.");
+ gettext("Detailed mod profiling");
+ gettext("Detailed mod profile data. Useful for mod developers.");
+ gettext("Profiling print interval");
+ gettext("Profiler data print interval. 0 = disable. Useful for developers.");
+ gettext("Max. clearobjects extra blocks");
+ gettext("Number of extra blocks that can be loaded by /clearobjects at once.\nThis is a trade-off between sqlite transaction overhead and\nmemory consumption (4096=100MB, as a rule of thumb).");
+ gettext("Unload unused server data");
+ gettext("How much the server will wait before unloading unused mapblocks.\nHigher value is smoother, but will use more RAM.");
+ gettext("Maxmimum objects per block");
+ gettext("Maximum number of statically stored objects in a block.");
+ gettext("Synchronous SQLite");
+ gettext("See http://www.sqlite.org/pragma.html#pragma_synchronous");
+ gettext("Dedicated server step");
+ gettext("Length of a server tick and the interval at which objects are generally updated over network.");
+ gettext("Active Block Management interval");
+ gettext("Time in between active block management cycles");
+ gettext("Active Block Modifier interval");
+ gettext("Length of time between ABM execution cycles");
+ gettext("NodeTimer interval");
+ gettext("Length of time between NodeTimer execution cycles");
+ gettext("Ignore world errors");
+ gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing.");
+ gettext("Liquid loop max");
+ gettext("Max liquids processed per step.");
+ gettext("Liquid queue purge time");
+ gettext("The time (in seconds) that the liquids queue may grow beyond processing\ncapacity until an attempt is made to decrease its size by dumping old queue\nitems. A value of 0 disables the functionality.");
+ gettext("Liquid update tick");
+ gettext("Liquid update interval in seconds.");
+ gettext("Mapgen");
+ gettext("Mapgen name");
+ gettext("Name of map generator to be used when creating a new world.\nCreating a world in the main menu will override this.");
+ gettext("Water level");
+ gettext("Water surface level of the world.");
+ gettext("Max block generate distance");
+ gettext("From how far blocks are generated for clients, stated in mapblocks (16 nodes).");
+ gettext("Map generation limit");
+ gettext("Where the map generator stops.\nPlease note:\n- Limited to 31000 (setting above has no effect)\n- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n- Those groups have an offset of -32, -32 nodes from the origin.\n- Only groups which are within the map_generation_limit are generated");
+ gettext("Mapgen flags");
+ gettext("Global map generation attributes.\nIn Mapgen v6 the 'decorations' flag controls all decorations except trees\nand junglegrass, in all other mapgens this flag controls all decorations.\nThe default flags set in the engine are: caves, light, decorations\nThe flags string modifies the engine defaults.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with 'no' are used to explicitly disable them.");
+ gettext("Advanced");
+ gettext("Chunk size");
+ gettext("Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes).");
+ gettext("Mapgen debug");
+ gettext("Dump the mapgen debug infos.");
+ gettext("Absolute limit of emerge queues");
+ gettext("Maximum number of blocks that can be queued for loading.");
+ gettext("Limit of emerge queues on disk");
+ gettext("Maximum number of blocks to be queued that are to be loaded from file.\nSet to blank for an appropriate amount to be chosen automatically.");
+ gettext("Limit of emerge queues to generate");
+ gettext("Maximum number of blocks to be queued that are to be generated.\nSet to blank for an appropriate amount to be chosen automatically.");
+ gettext("Number of emerge threads");
+ gettext("Number of emerge threads to use. Make this field blank, or increase this number\nto use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly\nat the cost of slightly buggy caves.");
+ gettext("Mapgen biome heat noise parameters");
+ gettext("Noise parameters for biome API temperature, humidity and biome blend.");
+ gettext("Mapgen heat blend noise parameters");
+ gettext("Mapgen biome humidity noise parameters");
+ gettext("Mapgen biome humidity blend noise parameters");
+ gettext("Mapgen v5");
+ gettext("Mapgen v5 cave width");
+ gettext("Controls width of tunnels, a smaller value creates wider tunnels.");
+ gettext("Mapgen v5 filler depth noise parameters");
+ gettext("Mapgen v5 factor noise parameters");
+ gettext("Mapgen v5 height noise parameters");
+ gettext("Mapgen v5 cave1 noise parameters");
+ gettext("Mapgen v5 cave2 noise parameters");
+ gettext("Mapgen v6");
+ gettext("Mapgen v6 flags");
+ gettext("Map generation attributes specific to Mapgen v6.\nWhen snowbiomes are enabled jungles are automatically enabled, the 'jungles' flag is ignored.\nThe default flags set in the engine are: biomeblend, mudflow\nThe flags string modifies the engine defaults.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with 'no' are used to explicitly disable them.");
+ gettext("Mapgen v6 desert frequency");
+ gettext("Controls size of deserts and beaches in Mapgen v6.\nWhen snowbiomes are enabled 'mgv6_freq_desert' is ignored.");
+ gettext("Mapgen v6 beach frequency");
+ gettext("Mapgen v6 terrain base noise parameters");
+ gettext("Mapgen v6 terrain altitude noise parameters");
+ gettext("Mapgen v6 steepness noise parameters");
+ gettext("Mapgen v6 height select noise parameters");
+ gettext("Mapgen v6 mud noise parameters");
+ gettext("Mapgen v6 beach noise parameters");
+ gettext("Mapgen v6 biome noise parameters");
+ gettext("Mapgen v6 cave noise parameters");
+ gettext("Mapgen v6 humidity noise parameters");
+ gettext("Mapgen v6 trees noise parameters");
+ gettext("Mapgen v6 apple trees noise parameters");
+ gettext("Mapgen v7");
+ gettext("Mapgen v7 flags");
+ gettext("Map generation attributes specific to Mapgen v7.\nThe 'ridges' flag controls the rivers.\nThe default flags set in the engine are: mountains, ridges\nThe flags string modifies the engine defaults.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with 'no' are used to explicitly disable them.");
+ gettext("Mapgen v7 cave width");
+ gettext("Controls width of tunnels, a smaller value creates wider tunnels.");
+ gettext("Mapgen v7 terrain base noise parameters");
+ gettext("Mapgen v7 terrain altitude noise parameters");
+ gettext("Mapgen v7 terrain persistation noise parameters");
+ gettext("Mapgen v7 height select noise parameters");
+ gettext("Mapgen v7 filler depth noise parameters");
+ gettext("Mapgen v7 mount height noise parameters");
+ gettext("Mapgen v7 ridge water noise parameters");
+ gettext("Mapgen v7 mountain noise parameters");
+ gettext("Mapgen v7 ridge noise parameters");
+ gettext("Mapgen v7 cave1 noise parameters");
+ gettext("Mapgen v7 cave2 noise parameters");
+ gettext("Mapgen flat");
+ gettext("Mapgen flat flags");
+ gettext("Map generation attributes specific to Mapgen flat.\nOccasional lakes and hills can be added to the flat world.\nThe default flags set in the engine are: none\nThe flags string modifies the engine defaults.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with 'no' are used to explicitly disable them.");
+ gettext("Mapgen flat ground level");
+ gettext("Y of flat ground.");
+ gettext("Mapgen flat large cave depth");
+ gettext("Y of upper limit of large pseudorandom caves.");
+ gettext("Mapgen flat cave width");
+ gettext("Controls width of tunnels, a smaller value creates wider tunnels.");
+ gettext("Mapgen flat lake threshold");
+ gettext("Terrain noise threshold for lakes.\nControls proportion of world area covered by lakes.\nAdjust towards 0.0 for a larger proportion.");
+ gettext("Mapgen flat lake steepness");
+ gettext("Controls steepness/depth of lake depressions.");
+ gettext("Mapgen flat hill threshold");
+ gettext("Terrain noise threshold for hills.\nControls proportion of world area covered by hills.\nAdjust towards 0.0 for a larger proportion.");
+ gettext("Mapgen flat hill steepness");
+ gettext("Controls steepness/height of hills.");
+ gettext("Mapgen flat terrain noise parameters");
+ gettext("Determines terrain shape.\nThe 3 numbers in brackets control the scale of the\nterrain, the 3 numbers should be identical.");
+ gettext("Mapgen flat filler depth noise parameters");
+ gettext("Mapgen flat cave1 noise parameters");
+ gettext("Mapgen flat cave2 noise parameters");
+ gettext("Mapgen fractal");
+ gettext("Mapgen fractal cave width");
+ gettext("Controls width of tunnels, a smaller value creates wider tunnels.");
+ gettext("Mapgen fractal fractal");
+ gettext("Choice of 18 fractals from 9 formulas.\n1 = 4D \"Roundy\" mandelbrot set.\n2 = 4D \"Roundy\" julia set.\n3 = 4D \"Squarry\" mandelbrot set.\n4 = 4D \"Squarry\" julia set.\n5 = 4D \"Mandy Cousin\" mandelbrot set.\n6 = 4D \"Mandy Cousin\" julia set.\n7 = 4D \"Variation\" mandelbrot set.\n8 = 4D \"Variation\" julia set.\n9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n11 = 3D \"Christmas Tree\" mandelbrot set.\n12 = 3D \"Christmas Tree\" julia set.\n13 = 3D \"Mandelbulb\" mandelbrot set.\n14 = 3D \"Mandelbulb\" julia set.\n15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n16 = 3D \"Cosine Mandelbulb\" julia set.\n17 = 4D \"Mandelbulb\" mandelbrot set.\n18 = 4D \"Mandelbulb\" julia set.");
+ gettext("Mapgen fractal iterations");
+ gettext("Iterations of the recursive function.\nControls the amount of fine detail.");
+ gettext("Mapgen fractal scale");
+ gettext("Approximate (X,Y,Z) scale of fractal in nodes.");
+ gettext("Mapgen fractal offset");
+ gettext("(X,Y,Z) offset of fractal from world centre in units of 'scale'.\nUsed to move a suitable spawn area of low land close to (0, 0).\nThe default is suitable for mandelbrot sets, it needs to be edited for julia sets.\nRange roughly -2 to 2. Multiply by 'scale' for offset in nodes.");
+ gettext("Mapgen fractal slice w");
+ gettext("W co-ordinate of the generated 3D slice of a 4D fractal.\nDetermines which 3D slice of the 4D shape is generated.\nHas no effect on 3D fractals.\nRange roughly -2 to 2.");
+ gettext("Mapgen fractal julia x");
+ gettext("Julia set only: X component of hypercomplex constant determining julia shape.\nRange roughly -2 to 2.");
+ gettext("Mapgen fractal julia y");
+ gettext("Julia set only: Y component of hypercomplex constant determining julia shape.\nRange roughly -2 to 2.");
+ gettext("Mapgen fractal julia z");
+ gettext("Julia set only: Z component of hypercomplex constant determining julia shape.\nRange roughly -2 to 2.");
+ gettext("Mapgen fractal julia w");
+ gettext("Julia set only: W component of hypercomplex constant determining julia shape.\nHas no effect on 3D fractals.\nRange roughly -2 to 2.");
+ gettext("Mapgen fractal seabed noise parameters");
+ gettext("Mapgen fractal filler depth noise parameters");
+ gettext("Mapgen fractal cave1 noise parameters");
+ gettext("Mapgen fractal cave2 noise parameters");
+ gettext("Mapgen Valleys");
+ gettext("General");
+ gettext("Valleys C Flags");
+ gettext("Map generation attributes specific to Mapgen Valleys.\n'altitude_chill' makes higher elevations colder, which may cause biome issues.\n'humid_rivers' modifies the humidity around rivers and in areas where water would tend to pool,\nit may interfere with delicately adjusted biomes.\nThe default flags set in the engine are: altitude_chill, humid_rivers\nThe flags string modifies the engine defaults.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with 'no' are used to explicitly disable them.");
+ gettext("Altitude Chill");
+ gettext("The altitude at which temperature drops by 20C");
+ gettext("Large cave depth");
+ gettext("Depth below which you'll find large caves.");
+ gettext("Lava Features");
+ gettext("Creates unpredictable lava features in caves.\nThese can make mining difficult. Zero disables them. (0-10)");
+ gettext("Massive cave depth");
+ gettext("Depth below which you'll find massive caves.");
+ gettext("River Depth");
+ gettext("How deep to make rivers");
+ gettext("River Size");
+ gettext("How wide to make rivers");
+ gettext("Water Features");
+ gettext("Creates unpredictable water features in caves.\nThese can make mining difficult. Zero disables them. (0-10)");
+ gettext("Cave width");
+ gettext("Controls width of tunnels, a smaller value creates wider tunnels.");
+ gettext("Noises");
+ gettext("Cave noise #1");
+ gettext("Caves and tunnels form at the intersection of the two noises");
+ gettext("Cave noise #2");
+ gettext("Caves and tunnels form at the intersection of the two noises");
+ gettext("Filler Depth");
+ gettext("The depth of dirt or other filler");
+ gettext("Massive cave noise");
+ gettext("Massive caves form here.");
+ gettext("River Noise");
+ gettext("River noise -- rivers occur close to zero");
+ gettext("Terrain Height");
+ gettext("Base terrain height");
+ gettext("Valley Depth");
+ gettext("Raises terrain to make valleys around the rivers");
+ gettext("Valley Fill");
+ gettext("Slope and fill work together to modify the heights");
+ gettext("Valley Profile");
+ gettext("Amplifies the valleys");
+ gettext("Valley Slope");
+ gettext("Slope and fill work together to modify the heights");
+ gettext("Security");
+ gettext("Enable mod security");
+ gettext("Prevent mods from doing insecure things like running shell commands.");
+ gettext("Trusted mods");
+ gettext("Comma-separated list of trusted mods that are allowed to access insecure\nfunctions even when mod security is on (via request_insecure_environment()).");
+ gettext("HTTP Mods");
+ gettext("Comma-seperated list of mods that are allowed to access HTTP APIs, which\nallow them to upload and download data to/from the internet.");
+ gettext("Client and Server");
+ gettext("Player name");
+ gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.\nWhen starting from the main menu, this is overridden.");
+ gettext("Language");
+ gettext("Set the language. Leave empty to use the system language.\nA restart is required after changing this.");
+ gettext("Debug log level");
+ gettext("Level of logging to be written to debug.txt:\n- <nothing> (no logging)\n- none (messages with no level)\n- error\n- warning\n- action\n- info\n- verbose");
+ gettext("IPv6");
+ gettext("IPv6 support.");
+ gettext("Advanced");
+ gettext("cURL timeout");
+ gettext("Default timeout for cURL, stated in milliseconds.\nOnly has an effect if compiled with cURL.");
+ gettext("cURL parallel limit");
+ gettext("Limits number of parallel HTTP requests. Affects:\n- Media fetch if server uses remote_media setting.\n- Serverlist download and server announcement.\n- Downloads performed by main menu (e.g. mod manager).\nOnly has an effect if compiled with cURL.");
+ gettext("cURL file download timeout");
+ gettext("Maximum time in ms a file download (e.g. a mod download) may take.");
+ gettext("High-precision FPU");
+ gettext("Makes DirectX work with LuaJIT. Disable if it causes troubles.");
+ gettext("Main menu script");
+ gettext("Replaces the default main menu with a custom one.");
+ gettext("Main menu game manager");
+ gettext("Main menu mod manager");
+ gettext("Modstore download URL");
+ gettext("Modstore mods list URL");
+ gettext("Modstore details URL");
+}
diff --git a/src/shader.cpp b/src/shader.cpp
index 7e4f40810..e13ab8df3 100644
--- a/src/shader.cpp
+++ b/src/shader.cpp
@@ -35,7 +35,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "EShaderTypes.h"
#include "log.h"
#include "gamedef.h"
-#include "strfnd.h" // trim()
#include "client/tile.h"
/*
@@ -328,7 +327,7 @@ private:
// The first position contains a dummy shader.
std::vector<ShaderInfo> m_shaderinfo_cache;
// The former container is behind this mutex
- JMutex m_shaderinfo_cache_mutex;
+ Mutex m_shaderinfo_cache_mutex;
// Queued shader fetches (to be processed by the main thread)
RequestQueue<std::string, u32, u8, u8> m_get_shader_queue;
@@ -367,7 +366,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device):
m_shader_callback = new ShaderCallback(this, "default");
- m_main_thread = get_current_thread_id();
+ m_main_thread = thr_get_current_thread_id();
// Add a dummy ShaderInfo as the first index, named ""
m_shaderinfo_cache.push_back(ShaderInfo());
@@ -379,7 +378,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device):
ShaderSource::~ShaderSource()
{
for (std::vector<IShaderConstantSetter*>::iterator iter = m_global_setters.begin();
- iter != m_global_setters.end(); iter++) {
+ iter != m_global_setters.end(); ++iter) {
delete *iter;
}
m_global_setters.clear();
@@ -397,7 +396,7 @@ u32 ShaderSource::getShader(const std::string &name,
Get shader
*/
- if(get_current_thread_id() == m_main_thread){
+ if (thr_is_current_thread(m_main_thread)) {
return getShaderIdDirect(name, material_type, drawtype);
} else {
/*errorstream<<"getShader(): Queued: name=\""<<name<<"\""<<std::endl;*/
@@ -456,7 +455,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name,
/*
Calling only allowed from main thread
*/
- if(get_current_thread_id() != m_main_thread){
+ if (!thr_is_current_thread(m_main_thread)) {
errorstream<<"ShaderSource::getShaderIdDirect() "
"called not from main thread"<<std::endl;
return 0;
@@ -469,7 +468,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name,
Add shader to caches (add dummy shaders too)
*/
- JMutexAutoLock lock(m_shaderinfo_cache_mutex);
+ MutexAutoLock lock(m_shaderinfo_cache_mutex);
u32 id = m_shaderinfo_cache.size();
m_shaderinfo_cache.push_back(info);
@@ -483,7 +482,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name,
ShaderInfo ShaderSource::getShaderInfo(u32 id)
{
- JMutexAutoLock lock(m_shaderinfo_cache_mutex);
+ MutexAutoLock lock(m_shaderinfo_cache_mutex);
if(id >= m_shaderinfo_cache.size())
return ShaderInfo();
@@ -504,14 +503,14 @@ void ShaderSource::insertSourceShader(const std::string &name_of_shader,
"name_of_shader=\""<<name_of_shader<<"\", "
"filename=\""<<filename<<"\""<<std::endl;*/
- sanity_check(get_current_thread_id() == m_main_thread);
+ sanity_check(thr_is_current_thread(m_main_thread));
m_sourcecache.insert(name_of_shader, filename, program, true);
}
void ShaderSource::rebuildShaders()
{
- JMutexAutoLock lock(m_shaderinfo_cache_mutex);
+ MutexAutoLock lock(m_shaderinfo_cache_mutex);
/*// Oh well... just clear everything, they'll load sometime.
m_shaderinfo_cache.clear();
@@ -764,22 +763,25 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
else
shaders_header += "0\n";
- if(pixel_program != "")
- pixel_program = shaders_header + pixel_program;
- if(vertex_program != "")
- vertex_program = shaders_header + vertex_program;
- if(geometry_program != "")
- geometry_program = shaders_header + geometry_program;
+ if (g_settings->getBool("tone_mapping"))
+ shaders_header += "#define ENABLE_TONE_MAPPING\n";
+
// Call addHighLevelShaderMaterial() or addShaderMaterial()
const c8* vertex_program_ptr = 0;
const c8* pixel_program_ptr = 0;
const c8* geometry_program_ptr = 0;
- if(vertex_program != "")
+ if (!vertex_program.empty()) {
+ vertex_program = shaders_header + vertex_program;
vertex_program_ptr = vertex_program.c_str();
- if(pixel_program != "")
+ }
+ if (!pixel_program.empty()) {
+ pixel_program = shaders_header + pixel_program;
pixel_program_ptr = pixel_program.c_str();
- if(geometry_program != "")
+ }
+ if (!geometry_program.empty()) {
+ geometry_program = shaders_header + geometry_program;
geometry_program_ptr = geometry_program.c_str();
+ }
s32 shadermat = -1;
if(is_highlevel){
infostream<<"Compiling high level shaders for "<<name<<std::endl;
@@ -789,7 +791,7 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
video::EVST_VS_1_1, // Vertex shader version
pixel_program_ptr, // Pixel shader program
"pixelMain", // Pixel shader entry point
- video::EPST_PS_1_1, // Pixel shader version
+ video::EPST_PS_1_2, // Pixel shader version
geometry_program_ptr, // Geometry shader program
"geometryMain", // Geometry shader entry point
video::EGST_GS_4_0, // Geometry shader version
@@ -805,6 +807,9 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
"failed to generate \""<<name<<"\", "
"addHighLevelShaderMaterial failed."
<<std::endl;
+ dumpShaderProgram(warningstream, "Vertex", vertex_program);
+ dumpShaderProgram(warningstream, "Pixel", pixel_program);
+ dumpShaderProgram(warningstream, "Geometry", geometry_program);
return shaderinfo;
}
}
@@ -823,6 +828,8 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
"failed to generate \""<<name<<"\", "
"addShaderMaterial failed."
<<std::endl;
+ dumpShaderProgram(warningstream, "Vertex", vertex_program);
+ dumpShaderProgram(warningstream,"Pixel", pixel_program);
return shaderinfo;
}
}
@@ -868,3 +875,21 @@ void load_shaders(std::string name, SourceShaderCache *sourcecache,
}
}
+
+void dumpShaderProgram(std::ostream &output_stream,
+ const std::string &program_type, const std::string &program)
+{
+ output_stream << program_type << " shader program:" << std::endl <<
+ "----------------------------------" << std::endl;
+ size_t pos = 0;
+ size_t prev = 0;
+ s16 line = 1;
+ while ((pos = program.find("\n", prev)) != std::string::npos) {
+ output_stream << line++ << ": "<< program.substr(prev, pos - prev) <<
+ std::endl;
+ prev = pos + 1;
+ }
+ output_stream << line << ": " << program.substr(prev) << std::endl <<
+ "End of " << program_type << " shader program." << std::endl <<
+ " " << std::endl;
+}
diff --git a/src/shader.h b/src/shader.h
index 811f33080..b8aa88bce 100644
--- a/src/shader.h
+++ b/src/shader.h
@@ -110,4 +110,7 @@ public:
IWritableShaderSource* createShaderSource(IrrlichtDevice *device);
+void dumpShaderProgram(std::ostream &output_stream,
+ const std::string &program_type, const std::string &program);
+
#endif
diff --git a/src/sky.cpp b/src/sky.cpp
index 01fb8ef86..682ff05e3 100644
--- a/src/sky.cpp
+++ b/src/sky.cpp
@@ -25,8 +25,8 @@ Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id,
m_cloudcolor_bright_f(1,1,1,1)
{
setAutomaticCulling(scene::EAC_OFF);
- Box.MaxEdge.set(0,0,0);
- Box.MinEdge.set(0,0,0);
+ m_box.MaxEdge.set(0,0,0);
+ m_box.MinEdge.set(0,0,0);
// create material
@@ -94,11 +94,6 @@ void Sky::OnRegisterSceneNode()
scene::ISceneNode::OnRegisterSceneNode();
}
-const core::aabbox3d<f32>& Sky::getBoundingBox() const
-{
- return Box;
-}
-
//! renders the node.
void Sky::render()
{
diff --git a/src/sky.h b/src/sky.h
index 5023cc682..f19891773 100644
--- a/src/sky.h
+++ b/src/sky.h
@@ -42,7 +42,8 @@ public:
//! renders the node.
virtual void render();
- virtual const core::aabbox3d<f32>& getBoundingBox() const;
+ virtual const aabb3f &getBoundingBox() const
+ { return m_box; }
// Used by Irrlicht for optimizing rendering
virtual video::SMaterial& getMaterial(u32 i)
@@ -74,7 +75,7 @@ public:
}
private:
- core::aabbox3d<f32> Box;
+ aabb3f m_box;
video::SMaterial m_materials[SKY_MATERIAL_COUNT];
// How much sun & moon transition should affect horizon color
diff --git a/src/socket.cpp b/src/socket.cpp
index e82052f77..17fa1924d 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -44,8 +44,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
-typedef SOCKET socket_t;
-typedef int socklen_t;
+ #define LAST_SOCKET_ERR() WSAGetLastError()
+ typedef SOCKET socket_t;
+ typedef int socklen_t;
#else
#include <sys/types.h>
#include <sys/socket.h>
@@ -54,7 +55,8 @@ typedef int socklen_t;
#include <netdb.h>
#include <unistd.h>
#include <arpa/inet.h>
-typedef int socket_t;
+ #define LAST_SOCKET_ERR() (errno)
+ typedef int socket_t;
#endif
// Set to true to enable verbose debug output
@@ -339,7 +341,8 @@ bool UDPSocket::init(bool ipv6, bool noExceptions)
if (noExceptions) {
return false;
} else {
- throw SocketException("Failed to create socket");
+ throw SocketException(std::string("Failed to create socket: error ")
+ + itos(LAST_SOCKET_ERR()));
}
}
@@ -571,9 +574,8 @@ bool UDPSocket::WaitData(int timeout_ms)
int e = WSAGetLastError();
dstream << (int) m_handle << ": WSAGetLastError()="
<< e << std::endl;
- if(e == 10004 /* = WSAEINTR */ || e == 10009 /*WSAEBADF*/)
- {
- dstream << "WARNING: Ignoring WSAEINTR/WSAEBADF." << std::endl;
+ if (e == 10004 /* WSAEINTR */ || e == 10009 /* WSAEBADF */) {
+ infostream << "Ignoring WSAEINTR/WSAEBADF." << std::endl;
return false;
}
#endif
diff --git a/src/socket.h b/src/socket.h
index c7dd78f66..8d1ad70ff 100644
--- a/src/socket.h
+++ b/src/socket.h
@@ -45,7 +45,7 @@ extern bool socket_enable_debug_output;
class SocketException : public BaseException
{
public:
- SocketException(const char *s):
+ SocketException(const std::string &s):
BaseException(s)
{
}
@@ -54,7 +54,7 @@ public:
class ResolveError : public BaseException
{
public:
- ResolveError(const char *s):
+ ResolveError(const std::string &s):
BaseException(s)
{
}
@@ -63,7 +63,7 @@ public:
class SendFailedException : public BaseException
{
public:
- SendFailedException(const char *s):
+ SendFailedException(const std::string &s):
BaseException(s)
{
}
diff --git a/src/sound_openal.cpp b/src/sound_openal.cpp
index cb4c7b581..e2b6d937a 100644
--- a/src/sound_openal.cpp
+++ b/src/sound_openal.cpp
@@ -39,7 +39,6 @@ with this program; ifnot, write to the Free Software Foundation, Inc.,
#include <vorbis/vorbisfile.h>
#include <assert.h>
#include "log.h"
-#include "filesys.h"
#include "util/numeric.h" // myrand()
#include "porting.h"
#include <map>
@@ -92,7 +91,7 @@ static ALenum warn_if_error(ALenum err, const char *desc)
{
if(err == AL_NO_ERROR)
return err;
- errorstream<<"WARNING: "<<desc<<": "<<alErrorString(err)<<std::endl;
+ warningstream<<desc<<": "<<alErrorString(err)<<std::endl;
return err;
}
@@ -111,31 +110,19 @@ struct SoundBuffer
std::vector<char> buffer;
};
-SoundBuffer* loadOggFile(const std::string &filepath)
+SoundBuffer *load_opened_ogg_file(OggVorbis_File *oggFile,
+ const std::string &filename_for_logging)
{
int endian = 0; // 0 for Little-Endian, 1 for Big-Endian
int bitStream;
long bytes;
char array[BUFFER_SIZE]; // Local fixed size array
vorbis_info *pInfo;
- OggVorbis_File oggFile;
-
- // Do a dumb-ass static string copy for old versions of ov_fopen
- // because they expect a non-const char*
- char nonconst[10000];
- snprintf(nonconst, 10000, "%s", filepath.c_str());
- // Try opening the given file
- //if(ov_fopen(filepath.c_str(), &oggFile) != 0)
- if(ov_fopen(nonconst, &oggFile) != 0)
- {
- infostream<<"Audio: Error opening "<<filepath<<" for decoding"<<std::endl;
- return NULL;
- }
SoundBuffer *snd = new SoundBuffer;
// Get some information about the OGG file
- pInfo = ov_info(&oggFile, -1);
+ pInfo = ov_info(oggFile, -1);
// Check the number of channels... always use 16-bit samples
if(pInfo->channels == 1)
@@ -150,12 +137,13 @@ SoundBuffer* loadOggFile(const std::string &filepath)
do
{
// Read up to a buffer's worth of decoded sound data
- bytes = ov_read(&oggFile, array, BUFFER_SIZE, endian, 2, 1, &bitStream);
+ bytes = ov_read(oggFile, array, BUFFER_SIZE, endian, 2, 1, &bitStream);
if(bytes < 0)
{
- ov_clear(&oggFile);
- infostream<<"Audio: Error decoding "<<filepath<<std::endl;
+ ov_clear(oggFile);
+ infostream << "Audio: Error decoding "
+ << filename_for_logging << std::endl;
return NULL;
}
@@ -175,14 +163,100 @@ SoundBuffer* loadOggFile(const std::string &filepath)
<<"preparing sound buffer"<<std::endl;
}
- infostream<<"Audio file "<<filepath<<" loaded"<<std::endl;
+ infostream << "Audio file "
+ << filename_for_logging << " loaded" << std::endl;
// Clean up!
- ov_clear(&oggFile);
+ ov_clear(oggFile);
return snd;
}
+SoundBuffer *load_ogg_from_file(const std::string &path)
+{
+ OggVorbis_File oggFile;
+
+ // Try opening the given file.
+ // This requires libvorbis >= 1.3.2, as
+ // previous versions expect a non-const char *
+ if (ov_fopen(path.c_str(), &oggFile) != 0) {
+ infostream << "Audio: Error opening " << path
+ << " for decoding" << std::endl;
+ return NULL;
+ }
+
+ return load_opened_ogg_file(&oggFile, path);
+}
+
+struct BufferSource {
+ const char *buf;
+ size_t cur_offset;
+ size_t len;
+};
+
+size_t buffer_sound_read_func(void *ptr, size_t size, size_t nmemb, void *datasource)
+{
+ BufferSource *s = (BufferSource *)datasource;
+ size_t copied_size = MYMIN(s->len - s->cur_offset, size);
+ memcpy(ptr, s->buf + s->cur_offset, copied_size);
+ s->cur_offset += copied_size;
+ return copied_size;
+}
+
+int buffer_sound_seek_func(void *datasource, ogg_int64_t offset, int whence)
+{
+ BufferSource *s = (BufferSource *)datasource;
+ if (whence == SEEK_SET) {
+ if (offset < 0 || (size_t)MYMAX(offset, 0) >= s->len) {
+ // offset out of bounds
+ return -1;
+ }
+ s->cur_offset = offset;
+ return 0;
+ } else if (whence == SEEK_CUR) {
+ if ((size_t)MYMIN(-offset, 0) > s->cur_offset
+ || s->cur_offset + offset > s->len) {
+ // offset out of bounds
+ return -1;
+ }
+ s->cur_offset += offset;
+ return 0;
+ }
+ // invalid whence param (SEEK_END doesn't have to be supported)
+ return -1;
+}
+
+long BufferSourceell_func(void *datasource)
+{
+ BufferSource *s = (BufferSource *)datasource;
+ return s->cur_offset;
+}
+
+static ov_callbacks g_buffer_ov_callbacks = {
+ &buffer_sound_read_func,
+ &buffer_sound_seek_func,
+ NULL,
+ &BufferSourceell_func
+};
+
+SoundBuffer *load_ogg_from_buffer(const std::string &buf, const std::string &id_for_log)
+{
+ OggVorbis_File oggFile;
+
+ BufferSource s;
+ s.buf = buf.c_str();
+ s.cur_offset = 0;
+ s.len = buf.size();
+
+ if (ov_open_callbacks(&s, &oggFile, NULL, 0, g_buffer_ov_callbacks) != 0) {
+ infostream << "Audio: Error opening " << id_for_log
+ << " for decoding" << std::endl;
+ return NULL;
+ }
+
+ return load_opened_ogg_file(&oggFile, id_for_log);
+}
+
struct PlayingSound
{
ALuint source_id;
@@ -195,7 +269,6 @@ private:
OnDemandSoundFetcher *m_fetcher;
ALCdevice *m_device;
ALCcontext *m_context;
- bool m_can_vorbis;
int m_next_id;
std::map<std::string, std::vector<SoundBuffer*> > m_buffers;
std::map<int, PlayingSound*> m_sounds_playing;
@@ -206,12 +279,11 @@ public:
m_fetcher(fetcher),
m_device(NULL),
m_context(NULL),
- m_can_vorbis(false),
m_next_id(1),
m_is_initialized(false)
{
ALCenum error = ALC_NO_ERROR;
-
+
infostream<<"Audio: Initializing..."<<std::endl;
m_device = alcOpenDevice(NULL);
@@ -221,14 +293,6 @@ public:
return;
}
- if(alcIsExtensionPresent(m_device, "EXT_vorbis")){
- infostream<<"Audio: Vorbis extension present"<<std::endl;
- m_can_vorbis = true;
- } else{
- infostream<<"Audio: Vorbis extension NOT present"<<std::endl;
- m_can_vorbis = false;
- }
-
m_context = alcCreateContext(m_device, NULL);
if(!m_context){
error = alcGetError(m_device);
@@ -273,9 +337,9 @@ public:
m_device = NULL;
for (std::map<std::string, std::vector<SoundBuffer*> >::iterator i = m_buffers.begin();
- i != m_buffers.end(); i++) {
+ i != m_buffers.end(); ++i) {
for (std::vector<SoundBuffer*>::iterator iter = (*i).second.begin();
- iter != (*i).second.end(); iter++) {
+ iter != (*i).second.end(); ++iter) {
delete *iter;
}
(*i).second.clear();
@@ -283,7 +347,7 @@ public:
m_buffers.clear();
infostream<<"Audio: Deinitialized."<<std::endl;
}
-
+
void addBuffer(const std::string &name, SoundBuffer *buf)
{
std::map<std::string, std::vector<SoundBuffer*> >::iterator i =
@@ -375,7 +439,7 @@ public:
m_sounds_playing[id] = sound;
return id;
}
-
+
void deleteSound(int id)
{
std::map<int, PlayingSound*>::iterator i =
@@ -383,7 +447,7 @@ public:
if(i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
-
+
alDeleteSources(1, &sound->source_id);
delete sound;
@@ -402,16 +466,16 @@ public:
std::set<std::string> datas;
m_fetcher->fetchSounds(name, paths, datas);
for(std::set<std::string>::iterator i = paths.begin();
- i != paths.end(); i++){
+ i != paths.end(); ++i){
loadSoundFile(name, *i);
}
for(std::set<std::string>::iterator i = datas.begin();
- i != datas.end(); i++){
+ i != datas.end(); ++i){
loadSoundData(name, *i);
}
return getBuffer(name);
}
-
+
// Remove stopped sounds
void maintain()
{
@@ -421,7 +485,7 @@ public:
std::set<int> del_list;
for(std::map<int, PlayingSound*>::iterator
i = m_sounds_playing.begin();
- i != m_sounds_playing.end(); i++)
+ i != m_sounds_playing.end(); ++i)
{
int id = i->first;
PlayingSound *sound = i->second;
@@ -438,7 +502,7 @@ public:
verbosestream<<"OpenALSoundManager::maintain(): deleting "
<<del_list.size()<<" playing sounds"<<std::endl;
for(std::set<int>::iterator i = del_list.begin();
- i != del_list.end(); i++)
+ i != del_list.end(); ++i)
{
deleteSound(*i);
}
@@ -449,26 +513,18 @@ public:
bool loadSoundFile(const std::string &name,
const std::string &filepath)
{
- SoundBuffer *buf = loadOggFile(filepath);
- if(buf)
+ SoundBuffer *buf = load_ogg_from_file(filepath);
+ if (buf)
addBuffer(name, buf);
return false;
}
bool loadSoundData(const std::string &name,
const std::string &filedata)
{
- // The vorbis API sucks; just write it to a file and use vorbisfile
- // TODO: Actually load it directly from memory
- std::string basepath = porting::path_user + DIR_DELIM + "cache" +
- DIR_DELIM + "tmp";
- std::string path = basepath + DIR_DELIM + "tmp.ogg";
- verbosestream<<"OpenALSoundManager::loadSoundData(): Writing "
- <<"temporary file to ["<<path<<"]"<<std::endl;
- fs::CreateAllDirs(basepath);
- std::ofstream of(path.c_str(), std::ios::binary);
- of.write(filedata.c_str(), filedata.size());
- of.close();
- return loadSoundFile(name, path);
+ SoundBuffer *buf = load_ogg_from_buffer(filedata, name);
+ if (buf)
+ addBuffer(name, buf);
+ return false;
}
void updateListener(v3f pos, v3f vel, v3f at, v3f up)
@@ -482,7 +538,7 @@ public:
alListenerfv(AL_ORIENTATION, f);
warn_if_error(alGetError(), "updateListener");
}
-
+
void setListenerGain(float gain)
{
alListenerf(AL_GAIN, gain);
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index 2e7d45a47..d656b6221 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "staticobject.h"
#include "util/serialize.h"
+#include "log.h"
void StaticObject::serialize(std::ostream &os)
{
@@ -44,9 +45,20 @@ void StaticObjectList::serialize(std::ostream &os)
// version
u8 version = 0;
writeU8(os, version);
+
// count
- u16 count = m_stored.size() + m_active.size();
+ size_t count = m_stored.size() + m_active.size();
+ // Make sure it fits into u16, else it would get truncated and cause e.g.
+ // issue #2610 (Invalid block data in database: unsupported NameIdMapping version).
+ if (count > U16_MAX) {
+ errorstream << "StaticObjectList::serialize(): "
+ << "too many objects (" << count << ") in list, "
+ << "not writing them to disk." << std::endl;
+ writeU16(os, 0); // count = 0
+ return;
+ }
writeU16(os, count);
+
for(std::vector<StaticObject>::iterator
i = m_stored.begin();
i != m_stored.end(); ++i) {
diff --git a/src/staticobject.h b/src/staticobject.h
index 95a1b945e..208fb2cc8 100644
--- a/src/staticobject.h
+++ b/src/staticobject.h
@@ -79,7 +79,7 @@ public:
assert(id != 0); // Pre-condition
if(m_active.find(id) == m_active.end())
{
- dstream<<"WARNING: StaticObjectList::remove(): id="<<id
+ warningstream<<"StaticObjectList::remove(): id="<<id
<<" not found"<<std::endl;
return;
}
diff --git a/src/strfnd.h b/src/strfnd.h
deleted file mode 100644
index 3142cc10d..000000000
--- a/src/strfnd.h
+++ /dev/null
@@ -1,176 +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.
-*/
-
-#ifndef STRFND_HEADER
-#define STRFND_HEADER
-
-#include <string>
-
-class Strfnd{
- std::string tek;
- unsigned int p;
-public:
- void start(std::string niinq){
- tek = niinq;
- p=0;
- }
- unsigned int where(){
- return p;
- }
- void to(unsigned int i){
- p = i;
- }
- std::string what(){
- return tek;
- }
- std::string next(std::string plop){
- //std::cout<<"tek=\""<<tek<<"\" plop=\""<<plop<<"\""<<std::endl;
- size_t n;
- std::string palautus;
- if (p < tek.size())
- {
- //std::cout<<"\tp<tek.size()"<<std::endl;
- if ((n = tek.find(plop, p)) == std::string::npos || plop == "")
- {
- //std::cout<<"\t\tn == string::npos || plop == \"\""<<std::endl;
- n = tek.size();
- }
- else
- {
- //std::cout<<"\t\tn != string::npos"<<std::endl;
- }
- palautus = tek.substr(p, n-p);
- p = n + plop.length();
- }
- //else
- //std::cout<<"\tp>=tek.size()"<<std::endl;
- //std::cout<<"palautus=\""<<palautus<<"\""<<std::endl;
- return palautus;
- }
-
- // Returns substr of tek up to the next occurence of plop that isn't escaped with '\'
- std::string next_esc(std::string plop) {
- size_t n, realp;
-
- if (p >= tek.size())
- return "";
-
- realp = p;
- do {
- n = tek.find(plop, p);
- if (n == std::string::npos || plop == "")
- n = tek.length();
- p = n + plop.length();
- } while (n > 0 && tek[n - 1] == '\\');
-
- return tek.substr(realp, n - realp);
- }
-
- void skip_over(std::string chars){
- while(p < tek.size()){
- bool is = false;
- for(unsigned int i=0; i<chars.size(); i++){
- if(chars[i] == tek[p]){
- is = true;
- break;
- }
- }
- if(!is) break;
- p++;
- }
- }
- bool atend(){
- if(p>=tek.size()) return true;
- return false;
- }
- Strfnd(std::string s){
- start(s);
- }
-};
-
-class WStrfnd{
- std::wstring tek;
- unsigned int p;
-public:
- void start(std::wstring niinq){
- tek = niinq;
- p=0;
- }
- unsigned int where(){
- return p;
- }
- void to(unsigned int i){
- p = i;
- }
- std::wstring what(){
- return tek;
- }
- std::wstring next(std::wstring plop){
- //std::cout<<"tek=\""<<tek<<"\" plop=\""<<plop<<"\""<<std::endl;
- size_t n;
- std::wstring palautus;
- if (p < tek.size())
- {
- //std::cout<<"\tp<tek.size()"<<std::endl;
- if ((n = tek.find(plop, p)) == std::wstring::npos || plop == L"")
- {
- //std::cout<<"\t\tn == string::npos || plop == \"\""<<std::endl;
- n = tek.size();
- }
- else
- {
- //std::cout<<"\t\tn != string::npos"<<std::endl;
- }
- palautus = tek.substr(p, n-p);
- p = n + plop.length();
- }
- //else
- //std::cout<<"\tp>=tek.size()"<<std::endl;
- //std::cout<<"palautus=\""<<palautus<<"\""<<std::endl;
- return palautus;
- }
-
- std::wstring next_esc(std::wstring plop) {
- size_t n, realp;
-
- if (p >= tek.size())
- return L"";
-
- realp = p;
- do {
- n = tek.find(plop, p);
- if (n == std::wstring::npos || plop == L"")
- n = tek.length();
- p = n + plop.length();
- } while (n > 0 && tek[n - 1] == '\\');
-
- return tek.substr(realp, n - realp);
- }
-
- bool atend(){
- if(p>=tek.size()) return true;
- return false;
- }
- WStrfnd(std::wstring s){
- start(s);
- }
-};
-
-#endif
-
diff --git a/src/subgame.cpp b/src/subgame.cpp
index f736a78c6..7e9a0b368 100644
--- a/src/subgame.cpp
+++ b/src/subgame.cpp
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#include "settings.h"
#include "log.h"
-#include "strfnd.h"
+#include "util/strfnd.h"
#include "defaultsettings.h" // for override_default_settings
#include "mapgen.h" // for MapgenParams
#include "util/string.h"
@@ -63,15 +63,10 @@ struct GameFindPath
{}
};
-Strfnd getSubgamePathEnv() {
- std::string sp;
+std::string getSubgamePathEnv()
+{
char *subgame_path = getenv("MINETEST_SUBGAME_PATH");
-
- if(subgame_path) {
- sp = std::string(subgame_path);
- }
-
- return Strfnd(sp);
+ return subgame_path ? std::string(subgame_path) : "";
}
SubgameSpec findSubgame(const std::string &id)
@@ -82,10 +77,10 @@ SubgameSpec findSubgame(const std::string &id)
std::string user = porting::path_user;
std::vector<GameFindPath> find_paths;
- Strfnd search_paths = getSubgamePathEnv();
+ Strfnd search_paths(getSubgamePathEnv());
- while(!search_paths.atend()) {
- std::string path = search_paths.next(":");
+ while (!search_paths.at_end()) {
+ std::string path = search_paths.next(PATH_DELIM);
find_paths.push_back(GameFindPath(
path + DIR_DELIM + id, false));
find_paths.push_back(GameFindPath(
@@ -156,14 +151,13 @@ std::set<std::string> getAvailableGameIds()
gamespaths.insert(porting::path_share + DIR_DELIM + "games");
gamespaths.insert(porting::path_user + DIR_DELIM + "games");
- Strfnd search_paths = getSubgamePathEnv();
+ Strfnd search_paths(getSubgamePathEnv());
- while(!search_paths.atend()) {
- gamespaths.insert(search_paths.next(":"));
- }
+ while (!search_paths.at_end())
+ gamespaths.insert(search_paths.next(PATH_DELIM));
- for(std::set<std::string>::const_iterator i = gamespaths.begin();
- i != gamespaths.end(); i++){
+ for (std::set<std::string>::const_iterator i = gamespaths.begin();
+ i != gamespaths.end(); ++i){
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(*i);
for(u32 j=0; j<dirlist.size(); j++){
if(!dirlist[j].dir)
@@ -189,7 +183,7 @@ std::vector<SubgameSpec> getAvailableGames()
std::vector<SubgameSpec> specs;
std::set<std::string> gameids = getAvailableGameIds();
for(std::set<std::string>::const_iterator i = gameids.begin();
- i != gameids.end(); i++)
+ i != gameids.end(); ++i)
specs.push_back(findSubgame(*i));
return specs;
}
@@ -223,15 +217,27 @@ std::string getWorldGameId(const std::string &world_path, bool can_be_legacy)
return conf.get("gameid");
}
+std::string getWorldPathEnv()
+{
+ char *world_path = getenv("MINETEST_WORLD_PATH");
+ return world_path ? std::string(world_path) : "";
+}
+
std::vector<WorldSpec> getAvailableWorlds()
{
std::vector<WorldSpec> worlds;
std::set<std::string> worldspaths;
+
+ Strfnd search_paths(getWorldPathEnv());
+
+ while (!search_paths.at_end())
+ worldspaths.insert(search_paths.next(PATH_DELIM));
+
worldspaths.insert(porting::path_user + DIR_DELIM + "worlds");
- infostream<<"Searching worlds..."<<std::endl;
- for(std::set<std::string>::const_iterator i = worldspaths.begin();
- i != worldspaths.end(); i++){
- infostream<<" In "<<(*i)<<": "<<std::endl;
+ infostream << "Searching worlds..." << std::endl;
+ for (std::set<std::string>::const_iterator i = worldspaths.begin();
+ i != worldspaths.end(); ++i) {
+ infostream << " In " << (*i) << ": " <<std::endl;
std::vector<fs::DirListNode> dirvector = fs::GetDirListing(*i);
for(u32 j=0; j<dirvector.size(); j++){
if(!dirvector[j].dir)
diff --git a/src/terminal_chat_console.cpp b/src/terminal_chat_console.cpp
new file mode 100644
index 000000000..c86a960fa
--- /dev/null
+++ b/src/terminal_chat_console.cpp
@@ -0,0 +1,453 @@
+/*
+Minetest
+Copyright (C) 2015 est31 <MTest31@outlook.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 "config.h"
+#if USE_CURSES
+#include "version.h"
+#include "terminal_chat_console.h"
+#include "porting.h"
+#include "settings.h"
+#include "util/numeric.h"
+#include "util/string.h"
+
+TerminalChatConsole g_term_console;
+
+// include this last to avoid any conflicts
+// (likes to set macros to common names, conflicting various stuff)
+#if CURSES_HAVE_NCURSESW_NCURSES_H
+#include <ncursesw/ncurses.h>
+#elif CURSES_HAVE_NCURSESW_CURSES_H
+#include <ncursesw/curses.h>
+#elif CURSES_HAVE_CURSES_H
+#include <curses.h>
+#elif CURSES_HAVE_NCURSES_H
+#include <ncurses.h>
+#elif CURSES_HAVE_NCURSES_NCURSES_H
+#include <ncurses/ncurses.h>
+#elif CURSES_HAVE_NCURSES_CURSES_H
+#include <ncurses/curses.h>
+#endif
+
+// Some functions to make drawing etc position independent
+static bool reformat_backend(ChatBackend *backend, int rows, int cols)
+{
+ if (rows < 2)
+ return false;
+ backend->reformat(cols, rows - 2);
+ return true;
+}
+
+static void move_for_backend(int row, int col)
+{
+ move(row + 1, col);
+}
+
+void TerminalChatConsole::initOfCurses()
+{
+ initscr();
+ cbreak(); //raw();
+ noecho();
+ keypad(stdscr, TRUE);
+ nodelay(stdscr, TRUE);
+ timeout(100);
+
+ // To make esc not delay up to one second. According to the internet,
+ // this is the value vim uses, too.
+ set_escdelay(25);
+
+ getmaxyx(stdscr, m_rows, m_cols);
+ m_can_draw_text = reformat_backend(&m_chat_backend, m_rows, m_cols);
+}
+
+void TerminalChatConsole::deInitOfCurses()
+{
+ endwin();
+}
+
+void *TerminalChatConsole::run()
+{
+ BEGIN_DEBUG_EXCEPTION_HANDLER
+
+ std::cout << "========================" << std::endl;
+ std::cout << "Begin log output over terminal"
+ << " (no stdout/stderr backlog during that)" << std::endl;
+ // Make the loggers to stdout/stderr shut up.
+ // Go over our own loggers instead.
+ LogLevelMask err_mask = g_logger.removeOutput(&stderr_output);
+ LogLevelMask out_mask = g_logger.removeOutput(&stdout_output);
+
+ g_logger.addOutput(&m_log_output);
+
+ // Inform the server of our nick
+ m_chat_interface->command_queue.push_back(
+ new ChatEventNick(CET_NICK_ADD, m_nick));
+
+ {
+ // Ensures that curses is deinitialized even on an exception being thrown
+ CursesInitHelper helper(this);
+
+ while (!stopRequested()) {
+
+ int ch = getch();
+ if (stopRequested())
+ break;
+
+ step(ch);
+ }
+ }
+
+ if (m_kill_requested)
+ *m_kill_requested = true;
+
+ g_logger.removeOutput(&m_log_output);
+ g_logger.addOutputMasked(&stderr_output, err_mask);
+ g_logger.addOutputMasked(&stdout_output, out_mask);
+
+ std::cout << "End log output over terminal"
+ << " (no stdout/stderr backlog during that)" << std::endl;
+ std::cout << "========================" << std::endl;
+
+ END_DEBUG_EXCEPTION_HANDLER
+
+ return NULL;
+}
+
+void TerminalChatConsole::typeChatMessage(const std::wstring &msg)
+{
+ // Discard empty line
+ if (msg.empty())
+ return;
+
+ // Send to server
+ m_chat_interface->command_queue.push_back(
+ new ChatEventChat(m_nick, msg));
+
+ // Print if its a command (gets eaten by server otherwise)
+ if (msg[0] == L'/') {
+ m_chat_backend.addMessage(L"", (std::wstring)L"Issued command: " + msg);
+ }
+}
+
+void TerminalChatConsole::handleInput(int ch, bool &complete_redraw_needed)
+{
+ ChatPrompt &prompt = m_chat_backend.getPrompt();
+ // Helpful if you want to collect key codes that aren't documented
+ /*if (ch != ERR) {
+ m_chat_backend.addMessage(L"",
+ (std::wstring)L"Pressed key " + utf8_to_wide(
+ std::string(keyname(ch)) + " (code " + itos(ch) + ")"));
+ complete_redraw_needed = true;
+ }//*/
+
+ // All the key codes below are compatible to xterm
+ // Only add new ones if you have tried them there,
+ // to ensure compatibility with not just xterm but the wide
+ // range of terminals that are compatible to xterm.
+
+ switch (ch) {
+ case ERR: // no input
+ break;
+ case 27: // ESC
+ // Toggle ESC mode
+ m_esc_mode = !m_esc_mode;
+ break;
+ case KEY_PPAGE:
+ m_chat_backend.scrollPageUp();
+ complete_redraw_needed = true;
+ break;
+ case KEY_NPAGE:
+ m_chat_backend.scrollPageDown();
+ complete_redraw_needed = true;
+ break;
+ case KEY_ENTER:
+ case '\r':
+ case '\n': {
+ prompt.addToHistory(prompt.getLine());
+ typeChatMessage(prompt.replace(L""));
+ break;
+ }
+ case KEY_UP:
+ prompt.historyPrev();
+ break;
+ case KEY_DOWN:
+ prompt.historyNext();
+ break;
+ case KEY_LEFT:
+ // Left pressed
+ // move character to the left
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER);
+ break;
+ case 545:
+ // Ctrl-Left pressed
+ // move word to the left
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_WORD);
+ break;
+ case KEY_RIGHT:
+ // Right pressed
+ // move character to the right
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER);
+ break;
+ case 560:
+ // Ctrl-Right pressed
+ // move word to the right
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_WORD);
+ break;
+ case KEY_HOME:
+ // Home pressed
+ // move to beginning of line
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
+ break;
+ case KEY_END:
+ // End pressed
+ // move to end of line
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_MOVE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
+ break;
+ case KEY_BACKSPACE:
+ case '\b':
+ case 127:
+ // Backspace pressed
+ // delete character to the left
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER);
+ break;
+ case KEY_DC:
+ // Delete pressed
+ // delete character to the right
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_CHARACTER);
+ break;
+ case 519:
+ // Ctrl-Delete pressed
+ // delete word to the right
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_WORD);
+ break;
+ case 21:
+ // Ctrl-U pressed
+ // kill line to left end
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_LEFT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
+ break;
+ case 11:
+ // Ctrl-K pressed
+ // kill line to right end
+ prompt.cursorOperation(
+ ChatPrompt::CURSOROP_DELETE,
+ ChatPrompt::CURSOROP_DIR_RIGHT,
+ ChatPrompt::CURSOROP_SCOPE_LINE);
+ break;
+ case KEY_TAB:
+ // Tab pressed
+ // Nick completion
+ prompt.nickCompletion(m_nicks, false);
+ break;
+ default:
+ // Add character to the prompt,
+ // assuming UTF-8.
+ if (IS_UTF8_MULTB_START(ch)) {
+ m_pending_utf8_bytes.append(1, (char)ch);
+ m_utf8_bytes_to_wait += UTF8_MULTB_START_LEN(ch) - 1;
+ } else if (m_utf8_bytes_to_wait != 0) {
+ m_pending_utf8_bytes.append(1, (char)ch);
+ m_utf8_bytes_to_wait--;
+ if (m_utf8_bytes_to_wait == 0) {
+ std::wstring w = utf8_to_wide(m_pending_utf8_bytes);
+ m_pending_utf8_bytes = "";
+ // hopefully only one char in the wstring...
+ for (size_t i = 0; i < w.size(); i++) {
+ prompt.input(w.c_str()[i]);
+ }
+ }
+ } else if (IS_ASCII_PRINTABLE_CHAR(ch)) {
+ prompt.input(ch);
+ } else {
+ // Silently ignore characters we don't handle
+
+ //warningstream << "Pressed invalid character '"
+ // << keyname(ch) << "' (code " << itos(ch) << ")" << std::endl;
+ }
+ break;
+ }
+}
+
+void TerminalChatConsole::step(int ch)
+{
+ bool complete_redraw_needed = false;
+
+ // empty queues
+ while (!m_chat_interface->outgoing_queue.empty()) {
+ ChatEvent *evt = m_chat_interface->outgoing_queue.pop_frontNoEx();
+ switch (evt->type) {
+ case CET_NICK_REMOVE:
+ m_nicks.remove(((ChatEventNick *)evt)->nick);
+ break;
+ case CET_NICK_ADD:
+ m_nicks.push_back(((ChatEventNick *)evt)->nick);
+ break;
+ case CET_CHAT:
+ complete_redraw_needed = true;
+ // This is only used for direct replies from commands
+ // or for lua's print() functionality
+ m_chat_backend.addMessage(L"", ((ChatEventChat *)evt)->evt_msg);
+ break;
+ case CET_TIME_INFO:
+ ChatEventTimeInfo *tevt = (ChatEventTimeInfo *)evt;
+ m_game_time = tevt->game_time;
+ m_time_of_day = tevt->time;
+ };
+ delete evt;
+ }
+ while (!m_log_output.queue.empty()) {
+ complete_redraw_needed = true;
+ std::pair<LogLevel, std::string> p = m_log_output.queue.pop_frontNoEx();
+ if (p.first > m_log_level)
+ continue;
+
+ m_chat_backend.addMessage(
+ utf8_to_wide(Logger::getLevelLabel(p.first)),
+ utf8_to_wide(p.second));
+ }
+
+ // handle input
+ if (!m_esc_mode) {
+ handleInput(ch, complete_redraw_needed);
+ } else {
+ switch (ch) {
+ case ERR: // no input
+ break;
+ case 27: // ESC
+ // Toggle ESC mode
+ m_esc_mode = !m_esc_mode;
+ break;
+ case 'L':
+ m_log_level--;
+ m_log_level = MYMAX(m_log_level, LL_NONE + 1); // LL_NONE isn't accessible
+ break;
+ case 'l':
+ m_log_level++;
+ m_log_level = MYMIN(m_log_level, LL_MAX - 1);
+ break;
+ }
+ }
+
+ // was there a resize?
+ int xn, yn;
+ getmaxyx(stdscr, yn, xn);
+ if (xn != m_cols || yn != m_rows) {
+ m_cols = xn;
+ m_rows = yn;
+ m_can_draw_text = reformat_backend(&m_chat_backend, m_rows, m_cols);
+ complete_redraw_needed = true;
+ }
+
+ // draw title
+ move(0, 0);
+ clrtoeol();
+ addstr(PROJECT_NAME_C);
+ addstr(" ");
+ addstr(g_version_hash);
+
+ u32 minutes = m_time_of_day % 1000;
+ u32 hours = m_time_of_day / 1000;
+ minutes = (float)minutes / 1000 * 60;
+
+ if (m_game_time)
+ printw(" | Game %d Time of day %02d:%02d ",
+ m_game_time, hours, minutes);
+
+ // draw text
+ if (complete_redraw_needed && m_can_draw_text)
+ draw_text();
+
+ // draw prompt
+ if (!m_esc_mode) {
+ // normal prompt
+ ChatPrompt& prompt = m_chat_backend.getPrompt();
+ std::string prompt_text = wide_to_utf8(prompt.getVisiblePortion());
+ move(m_rows - 1, 0);
+ clrtoeol();
+ addstr(prompt_text.c_str());
+ // Draw cursor
+ s32 cursor_pos = prompt.getVisibleCursorPosition();
+ if (cursor_pos >= 0) {
+ move(m_rows - 1, cursor_pos);
+ }
+ } else {
+ // esc prompt
+ move(m_rows - 1, 0);
+ clrtoeol();
+ printw("[ESC] Toggle ESC mode |"
+ " [CTRL+C] Shut down |"
+ " (L) in-, (l) decrease loglevel %s",
+ Logger::getLevelLabel((LogLevel) m_log_level).c_str());
+ }
+
+ refresh();
+}
+
+void TerminalChatConsole::draw_text()
+{
+ ChatBuffer& buf = m_chat_backend.getConsoleBuffer();
+ for (u32 row = 0; row < buf.getRows(); row++) {
+ move_for_backend(row, 0);
+ clrtoeol();
+ const ChatFormattedLine& line = buf.getFormattedLine(row);
+ if (line.fragments.empty())
+ continue;
+ for (u32 i = 0; i < line.fragments.size(); ++i) {
+ const ChatFormattedFragment& fragment = line.fragments[i];
+ addstr(wide_to_utf8(fragment.text).c_str());
+ }
+ }
+}
+
+void TerminalChatConsole::stopAndWaitforThread()
+{
+ clearKillStatus();
+ stop();
+ wait();
+}
+
+#endif
diff --git a/src/terminal_chat_console.h b/src/terminal_chat_console.h
new file mode 100644
index 000000000..2111b7ecb
--- /dev/null
+++ b/src/terminal_chat_console.h
@@ -0,0 +1,131 @@
+/*
+Minetest
+Copyright (C) 2015 est31 <MTest31@outlook.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.
+*/
+
+#ifndef TERMINAL_CHAT_CONSOLE_H
+#define TERMINAL_CHAT_CONSOLE_H
+
+#include "chat.h"
+#include "threading/thread.h"
+#include "chat_interface.h"
+#include "log.h"
+
+#include <sstream>
+
+class TermLogOutput : public ILogOutput {
+public:
+
+ void logRaw(LogLevel lev, const std::string &line)
+ {
+ queue.push_back(std::make_pair(lev, line));
+ }
+
+ virtual void log(LogLevel lev, const std::string &combined,
+ const std::string &time, const std::string &thread_name,
+ const std::string &payload_text)
+ {
+ std::ostringstream os(std::ios_base::binary);
+ os << time << ": [" << thread_name << "] " << payload_text;
+
+ queue.push_back(std::make_pair(lev, os.str()));
+ }
+
+ MutexedQueue<std::pair<LogLevel, std::string> > queue;
+};
+
+class TerminalChatConsole : public Thread {
+public:
+
+ TerminalChatConsole() :
+ Thread("TerminalThread"),
+ m_log_level(LL_ACTION),
+ m_utf8_bytes_to_wait(0),
+ m_kill_requested(NULL),
+ m_esc_mode(false),
+ m_game_time(0),
+ m_time_of_day(0)
+ {}
+
+ void setup(
+ ChatInterface *iface,
+ bool *kill_requested,
+ const std::string &nick)
+ {
+ m_nick = nick;
+ m_kill_requested = kill_requested;
+ m_chat_interface = iface;
+ }
+
+ virtual void *run();
+
+ // Highly required!
+ void clearKillStatus() { m_kill_requested = NULL; }
+
+ void stopAndWaitforThread();
+
+private:
+ // these have stupid names so that nobody missclassifies them
+ // as curses functions. Oh, curses has stupid names too?
+ // Well, at least it was worth a try...
+ void initOfCurses();
+ void deInitOfCurses();
+
+ void draw_text();
+
+ void typeChatMessage(const std::wstring &m);
+
+ void handleInput(int ch, bool &complete_redraw_needed);
+
+ void step(int ch);
+
+ // Used to ensure the deinitialisation is always called.
+ struct CursesInitHelper {
+ TerminalChatConsole *cons;
+ CursesInitHelper(TerminalChatConsole * a_console)
+ : cons(a_console)
+ { cons->initOfCurses(); }
+ ~CursesInitHelper() { cons->deInitOfCurses(); }
+ };
+
+ int m_log_level;
+ std::string m_nick;
+
+ u8 m_utf8_bytes_to_wait;
+ std::string m_pending_utf8_bytes;
+
+ std::list<std::string> m_nicks;
+
+ int m_cols;
+ int m_rows;
+ bool m_can_draw_text;
+
+ bool *m_kill_requested;
+ ChatBackend m_chat_backend;
+ ChatInterface *m_chat_interface;
+
+ TermLogOutput m_log_output;
+
+ bool m_esc_mode;
+
+ u64 m_game_time;
+ u32 m_time_of_day;
+};
+
+extern TerminalChatConsole g_term_console;
+
+#endif
diff --git a/src/threading/CMakeLists.txt b/src/threading/CMakeLists.txt
new file mode 100644
index 000000000..5dd60ef1a
--- /dev/null
+++ b/src/threading/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(JTHREAD_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/mutex.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/semaphore.cpp
+ PARENT_SCOPE)
+
diff --git a/src/threading/atomic.h b/src/threading/atomic.h
new file mode 100644
index 000000000..c9a454f20
--- /dev/null
+++ b/src/threading/atomic.h
@@ -0,0 +1,139 @@
+/*
+Minetest
+Copyright (C) 2015 ShadowNinja <shadowninja@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
+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.
+*/
+
+#ifndef THREADING_ATOMIC_H
+#define THREADING_ATOMIC_H
+
+
+#if __cplusplus >= 201103L
+ #include <atomic>
+ template<typename T> using Atomic = std::atomic<T>;
+ template<typename T> using GenericAtomic = std::atomic<T>;
+#else
+
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
+#if GCC_VERSION >= 407 || CLANG_VERSION >= 302
+ #define ATOMIC_LOAD_GENERIC(T, v) do { \
+ T _val; \
+ __atomic_load(&(v), &(_val), __ATOMIC_SEQ_CST); \
+ return _val; \
+ } while(0)
+ #define ATOMIC_LOAD(T, v) return __atomic_load_n (&(v), __ATOMIC_SEQ_CST)
+ #define ATOMIC_STORE(T, v, x) __atomic_store (&(v), &(x), __ATOMIC_SEQ_CST); return x
+ #define ATOMIC_EXCHANGE(T, v, x) return __atomic_exchange (&(v), &(x), __ATOMIC_SEQ_CST)
+ #define ATOMIC_ADD_EQ(T, v, x) return __atomic_add_fetch (&(v), (x), __ATOMIC_SEQ_CST)
+ #define ATOMIC_SUB_EQ(T, v, x) return __atomic_sub_fetch (&(v), (x), __ATOMIC_SEQ_CST)
+ #define ATOMIC_POST_INC(T, v) return __atomic_fetch_add (&(v), 1, __ATOMIC_SEQ_CST)
+ #define ATOMIC_POST_DEC(T, v) return __atomic_fetch_sub (&(v), 1, __ATOMIC_SEQ_CST)
+ #define ATOMIC_CAS(T, v, e, d) return __atomic_compare_exchange(&(v), &(e), &(d), \
+ false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
+#else
+ #define ATOMIC_USE_LOCK
+ #include "threading/mutex.h"
+
+ #define ATOMIC_LOCK_OP(T, op) do { \
+ m_mutex.lock(); \
+ T _val = (op); \
+ m_mutex.unlock(); \
+ return _val; \
+ } while (0)
+ #define ATOMIC_LOCK_CAS(T, v, e, d) do { \
+ m_mutex.lock(); \
+ bool _eq = (v == e); \
+ if (_eq) \
+ v = d; \
+ m_mutex.unlock(); \
+ return _eq; \
+ } while (0)
+ #define ATOMIC_LOAD(T, v) ATOMIC_LOCK_OP(T, v)
+ #define ATOMIC_LOAD_GENERIC(T, v) ATOMIC_LOAD(T, v)
+ #define ATOMIC_STORE(T, v, x) ATOMIC_LOCK_OP(T, v = x)
+ #define ATOMIC_EXCHANGE(T, v, x) do { \
+ m_mutex.lock(); \
+ T _val = v; \
+ v = x; \
+ m_mutex.unlock(); \
+ return _val; \
+ } while (0)
+ #if GCC_VERSION >= 401
+ #define ATOMIC_ADD_EQ(T, v, x) return __sync_add_and_fetch(&(v), (x))
+ #define ATOMIC_SUB_EQ(T, v, x) return __sync_sub_and_fetch(&(v), (x))
+ #define ATOMIC_POST_INC(T, v) return __sync_fetch_and_add(&(v), 1)
+ #define ATOMIC_POST_DEC(T, v) return __sync_fetch_and_sub(&(v), 1)
+ #define ATOMIC_CAS(T, v, e, d) return __sync_bool_compare_and_swap(&(v), &(e), (d))
+ #else
+ #define ATOMIC_ADD_EQ(T, v, x) ATOMIC_LOCK_OP(T, v += x)
+ #define ATOMIC_SUB_EQ(T, v, x) ATOMIC_LOCK_OP(T, v -= x)
+ #define ATOMIC_POST_INC(T, v) ATOMIC_LOCK_OP(T, v++)
+ #define ATOMIC_POST_DEC(T, v) ATOMIC_LOCK_OP(T, v--)
+ #define ATOMIC_CAS(T, v, e, d) ATOMIC_LOCK_CAS(T, v, e, d)
+ #endif
+#endif
+
+// For usage with integral types.
+template<typename T>
+class Atomic {
+public:
+ Atomic(const T &v = 0) : m_val(v) {}
+
+ operator T () { ATOMIC_LOAD(T, m_val); }
+
+ T exchange(T x) { ATOMIC_EXCHANGE(T, m_val, x); }
+ bool compare_exchange_strong(T &expected, T desired) { ATOMIC_CAS(T, m_val, expected, desired); }
+
+ T operator = (T x) { ATOMIC_STORE(T, m_val, x); }
+ T operator += (T x) { ATOMIC_ADD_EQ(T, m_val, x); }
+ T operator -= (T x) { ATOMIC_SUB_EQ(T, m_val, x); }
+ T operator ++ () { return *this += 1; }
+ T operator -- () { return *this -= 1; }
+ T operator ++ (int) { ATOMIC_POST_INC(T, m_val); }
+ T operator -- (int) { ATOMIC_POST_DEC(T, m_val); }
+private:
+ T m_val;
+#ifdef ATOMIC_USE_LOCK
+ Mutex m_mutex;
+#endif
+};
+
+// For usage with non-integral types like float for example.
+// Needed because the other operations aren't provided by gcc
+// for non-integral types:
+// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/_005f_005fatomic-Builtins.html
+template<typename T>
+class GenericAtomic {
+public:
+ GenericAtomic(const T &v = 0) : m_val(v) {}
+
+ operator T () { ATOMIC_LOAD_GENERIC(T, m_val); }
+
+ T exchange(T x) { ATOMIC_EXCHANGE(T, m_val, x); }
+ bool compare_exchange_strong(T &expected, T desired) { ATOMIC_CAS(T, m_val, expected, desired); }
+
+ T operator = (T x) { ATOMIC_STORE(T, m_val, x); }
+private:
+ T m_val;
+#ifdef ATOMIC_USE_LOCK
+ Mutex m_mutex;
+#endif
+};
+
+#endif // C++11
+
+#endif
diff --git a/src/threading/event.cpp b/src/threading/event.cpp
new file mode 100644
index 000000000..165f9d83f
--- /dev/null
+++ b/src/threading/event.cpp
@@ -0,0 +1,89 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#include "threading/event.h"
+
+Event::Event()
+{
+#if __cplusplus < 201103L
+# ifdef _WIN32
+ event = CreateEvent(NULL, false, false, NULL);
+# else
+ pthread_cond_init(&cv, NULL);
+ pthread_mutex_init(&mutex, NULL);
+ notified = false;
+# endif
+#endif
+}
+
+#if __cplusplus < 201103L
+Event::~Event()
+{
+#ifdef _WIN32
+ CloseHandle(event);
+#else
+ pthread_cond_destroy(&cv);
+ pthread_mutex_destroy(&mutex);
+#endif
+}
+#endif
+
+
+void Event::wait()
+{
+#if __cplusplus >= 201103L
+ MutexAutoLock lock(mutex);
+ while (!notified) {
+ cv.wait(lock);
+ }
+ notified = false;
+#elif defined(_WIN32)
+ WaitForSingleObject(event, INFINITE);
+#else
+ pthread_mutex_lock(&mutex);
+ while (!notified) {
+ pthread_cond_wait(&cv, &mutex);
+ }
+ notified = false;
+ pthread_mutex_unlock(&mutex);
+#endif
+}
+
+
+void Event::signal()
+{
+#if __cplusplus >= 201103L
+ MutexAutoLock lock(mutex);
+ notified = true;
+ cv.notify_one();
+#elif defined(_WIN32)
+ SetEvent(event);
+#else
+ pthread_mutex_lock(&mutex);
+ notified = true;
+ pthread_cond_signal(&cv);
+ pthread_mutex_unlock(&mutex);
+#endif
+}
diff --git a/src/threading/event.h b/src/threading/event.h
new file mode 100644
index 000000000..dd5164576
--- /dev/null
+++ b/src/threading/event.h
@@ -0,0 +1,72 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef THREADING_EVENT_H
+#define THREADING_EVENT_H
+
+#if __cplusplus >= 201103L
+ #include <condition_variable>
+ #include "threading/mutex.h"
+ #include "threading/mutex_auto_lock.h"
+#elif defined(_WIN32)
+ #ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+ #endif
+ #include <windows.h>
+#else
+ #include <pthread.h>
+#endif
+
+
+/** A syncronization primitive that will wake up one waiting thread when signaled.
+ * Calling @c signal() multiple times before a waiting thread has had a chance
+ * to notice the signal will wake only one thread. Additionally, if no threads
+ * are waiting on the event when it is signaled, the next call to @c wait()
+ * will return (almost) immediately.
+ */
+class Event {
+public:
+ Event();
+#if __cplusplus < 201103L
+ ~Event();
+#endif
+ void wait();
+ void signal();
+
+private:
+#if __cplusplus >= 201103L
+ std::condition_variable cv;
+ Mutex mutex;
+ bool notified;
+#elif defined(_WIN32)
+ HANDLE event;
+#else
+ pthread_cond_t cv;
+ pthread_mutex_t mutex;
+ bool notified;
+#endif
+};
+
+#endif
diff --git a/src/threading/mutex.cpp b/src/threading/mutex.cpp
new file mode 100644
index 000000000..f2b07bec3
--- /dev/null
+++ b/src/threading/mutex.cpp
@@ -0,0 +1,108 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+// Windows std::mutex is much slower than the critical section API
+#if __cplusplus < 201103L || defined(_WIN32)
+
+#include "threading/mutex.h"
+
+#ifndef _WIN32
+ #include <cassert>
+#endif
+
+#define UNUSED(expr) do { (void)(expr); } while (0)
+
+Mutex::Mutex()
+{
+ init_mutex(false);
+}
+
+
+Mutex::Mutex(bool recursive)
+{
+ init_mutex(recursive);
+}
+
+void Mutex::init_mutex(bool recursive)
+{
+#ifdef _WIN32
+ // Windows critical sections are recursive by default
+ UNUSED(recursive);
+
+ InitializeCriticalSection(&mutex);
+#else
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+
+ if (recursive)
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+
+ int ret = pthread_mutex_init(&mutex, &attr);
+ assert(!ret);
+ UNUSED(ret);
+
+ pthread_mutexattr_destroy(&attr);
+#endif
+}
+
+Mutex::~Mutex()
+{
+#ifdef _WIN32
+ DeleteCriticalSection(&mutex);
+#else
+ int ret = pthread_mutex_destroy(&mutex);
+ assert(!ret);
+ UNUSED(ret);
+#endif
+}
+
+void Mutex::lock()
+{
+#ifdef _WIN32
+ EnterCriticalSection(&mutex);
+#else
+ int ret = pthread_mutex_lock(&mutex);
+ assert(!ret);
+ UNUSED(ret);
+#endif
+}
+
+void Mutex::unlock()
+{
+#ifdef _WIN32
+ LeaveCriticalSection(&mutex);
+#else
+ int ret = pthread_mutex_unlock(&mutex);
+ assert(!ret);
+ UNUSED(ret);
+#endif
+}
+
+RecursiveMutex::RecursiveMutex()
+ : Mutex(true)
+{}
+
+#endif
+
diff --git a/src/threading/mutex.h b/src/threading/mutex.h
new file mode 100644
index 000000000..dadbd050c
--- /dev/null
+++ b/src/threading/mutex.h
@@ -0,0 +1,81 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef THREADING_MUTEX_H
+#define THREADING_MUTEX_H
+
+// Windows std::mutex is much slower than the critical section API
+#if __cplusplus >= 201103L && !defined(_WIN32)
+ #include <mutex>
+ using Mutex = std::mutex;
+ using RecursiveMutex = std::recursive_mutex;
+#else
+
+#ifdef _WIN32
+ #ifndef _WIN32_WINNT
+ #define _WIN32_WINNT 0x0501
+ #endif
+ #ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+ #endif
+ #include <windows.h>
+#else // pthread
+ #include <pthread.h>
+#endif
+
+#include "util/basic_macros.h"
+
+class Mutex
+{
+public:
+ Mutex();
+ ~Mutex();
+ void lock();
+ void unlock();
+
+protected:
+ Mutex(bool recursive);
+ void init_mutex(bool recursive);
+private:
+#ifdef _WIN32
+ CRITICAL_SECTION mutex;
+#else // pthread
+ pthread_mutex_t mutex;
+#endif
+
+ DISABLE_CLASS_COPY(Mutex);
+};
+
+class RecursiveMutex : public Mutex
+{
+public:
+ RecursiveMutex();
+
+ DISABLE_CLASS_COPY(RecursiveMutex);
+};
+
+#endif // C++11
+
+#endif
diff --git a/src/threading/mutex_auto_lock.h b/src/threading/mutex_auto_lock.h
new file mode 100644
index 000000000..25caf7e14
--- /dev/null
+++ b/src/threading/mutex_auto_lock.h
@@ -0,0 +1,60 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef THREADING_MUTEX_AUTO_LOCK_H
+#define THREADING_MUTEX_AUTO_LOCK_H
+
+#if __cplusplus >= 201103L
+ #include <mutex>
+ using MutexAutoLock = std::unique_lock<std::mutex>;
+ using RecursiveMutexAutoLock = std::unique_lock<std::recursive_mutex>;
+#else
+
+#include "threading/mutex.h"
+
+
+class MutexAutoLock
+{
+public:
+ MutexAutoLock(Mutex &m) : mutex(m) { mutex.lock(); }
+ ~MutexAutoLock() { mutex.unlock(); }
+
+private:
+ Mutex &mutex;
+};
+
+class RecursiveMutexAutoLock
+{
+public:
+ RecursiveMutexAutoLock(RecursiveMutex &m) : mutex(m) { mutex.lock(); }
+ ~RecursiveMutexAutoLock() { mutex.unlock(); }
+
+private:
+ RecursiveMutex &mutex;
+};
+#endif
+
+#endif
+
diff --git a/src/threading/semaphore.cpp b/src/threading/semaphore.cpp
new file mode 100644
index 000000000..77ceff509
--- /dev/null
+++ b/src/threading/semaphore.cpp
@@ -0,0 +1,162 @@
+/*
+Minetest
+Copyright (C) 2013 sapier <sapier AT gmx DOT 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
+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 "threading/semaphore.h"
+
+#include <iostream>
+#include <cstdlib>
+#include <cassert>
+
+#define UNUSED(expr) do { (void)(expr); } while (0)
+
+#ifdef _WIN32
+ #include <climits>
+ #define MAX_SEMAPHORE_COUNT LONG_MAX - 1
+#else
+ #include <cerrno>
+ #include <sys/time.h>
+ #include <pthread.h>
+ #if defined(__MACH__) && defined(__APPLE__)
+ #include <mach/mach.h>
+ #include <mach/task.h>
+ #include <mach/semaphore.h>
+ #include <sys/semaphore.h>
+ #include <unistd.h>
+
+ #undef sem_t
+ #undef sem_init
+ #undef sem_wait
+ #undef sem_post
+ #undef sem_destroy
+ #define sem_t semaphore_t
+ #define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c))
+ #define sem_wait(s) semaphore_wait(*(s))
+ #define sem_post(s) semaphore_signal(*(s))
+ #define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s))
+ #endif
+#endif
+
+
+Semaphore::Semaphore(int val)
+{
+#ifdef _WIN32
+ semaphore = CreateSemaphore(NULL, val, MAX_SEMAPHORE_COUNT, NULL);
+#else
+ int ret = sem_init(&semaphore, 0, val);
+ assert(!ret);
+ UNUSED(ret);
+#endif
+}
+
+
+Semaphore::~Semaphore()
+{
+#ifdef _WIN32
+ CloseHandle(semaphore);
+#else
+ int ret = sem_destroy(&semaphore);
+#ifdef __ANDROID__
+ // Workaround for broken bionic semaphore implementation!
+ assert(!ret || errno == EBUSY);
+#else
+ assert(!ret);
+#endif
+ UNUSED(ret);
+#endif
+}
+
+
+void Semaphore::post(unsigned int num)
+{
+ assert(num > 0);
+#ifdef _WIN32
+ ReleaseSemaphore(semaphore, num, NULL);
+#else
+ for (unsigned i = 0; i < num; i++) {
+ int ret = sem_post(&semaphore);
+ assert(!ret);
+ UNUSED(ret);
+ }
+#endif
+}
+
+
+void Semaphore::wait()
+{
+#ifdef _WIN32
+ WaitForSingleObject(semaphore, INFINITE);
+#else
+ int ret = sem_wait(&semaphore);
+ assert(!ret);
+ UNUSED(ret);
+#endif
+}
+
+
+bool Semaphore::wait(unsigned int time_ms)
+{
+#ifdef _WIN32
+ unsigned int ret = WaitForSingleObject(semaphore, time_ms);
+
+ if (ret == WAIT_OBJECT_0) {
+ return true;
+ } else {
+ assert(ret == WAIT_TIMEOUT);
+ return false;
+ }
+#else
+# if defined(__MACH__) && defined(__APPLE__)
+ mach_timespec_t wait_time;
+ wait_time.tv_sec = time_ms / 1000;
+ wait_time.tv_nsec = 1000000 * (time_ms % 1000);
+
+ errno = 0;
+ int ret = semaphore_timedwait(semaphore, wait_time);
+ switch (ret) {
+ case KERN_OPERATION_TIMED_OUT:
+ errno = ETIMEDOUT;
+ break;
+ case KERN_ABORTED:
+ errno = EINTR;
+ break;
+ default:
+ if (ret)
+ errno = EINVAL;
+ }
+# else
+ struct timespec wait_time;
+ struct timeval now;
+
+ if (gettimeofday(&now, NULL) == -1) {
+ std::cerr << "Semaphore::wait(ms): Unable to get time with gettimeofday!" << std::endl;
+ abort();
+ }
+
+ wait_time.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000);
+ wait_time.tv_sec = (time_ms / 1000) + (wait_time.tv_nsec / (1000 * 1000 * 1000)) + now.tv_sec;
+ wait_time.tv_nsec %= 1000 * 1000 * 1000;
+
+ int ret = sem_timedwait(&semaphore, &wait_time);
+# endif
+
+ assert(!ret || (errno == ETIMEDOUT || errno == EINTR));
+ return !ret;
+#endif
+}
+
diff --git a/src/jthread/jsemaphore.h b/src/threading/semaphore.h
index 32e9bc2f2..822856396 100644
--- a/src/jthread/jsemaphore.h
+++ b/src/threading/semaphore.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2013 sapier, < sapier AT gmx DOT net >
+Copyright (C) 2013 sapier <sapier AT gmx DOT 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
@@ -17,48 +17,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef JSEMAPHORE_H_
-#define JSEMAPHORE_H_
+#ifndef THREADING_SEMAPHORE_H
+#define THREADING_SEMAPHORE_H
-#if defined(WIN32)
-#include <windows.h>
-#include <assert.h>
-#define MAX_SEMAPHORE_COUNT 1024
+#if defined(_WIN32)
+ #include <windows.h>
#elif defined(__MACH__) && defined(__APPLE__)
-#include <pthread.h>
-#include <mach/mach.h>
-#include <mach/task.h>
-#include <mach/semaphore.h>
-#include <sys/semaphore.h>
-#include <errno.h>
-#include <time.h>
+ #include <mach/semaphore.h>
#else
-#include <pthread.h>
-#include <semaphore.h>
+ #include <semaphore.h>
#endif
-class JSemaphore {
-public:
- JSemaphore();
- ~JSemaphore();
- JSemaphore(int initval);
+#include "util/basic_macros.h"
- void Post();
- void Wait();
- bool Wait(unsigned int time_ms);
+class Semaphore {
+public:
+ Semaphore(int val=0);
+ ~Semaphore();
- int GetValue();
+ void post(unsigned int num=1);
+ void wait();
+ bool wait(unsigned int time_ms);
private:
#if defined(WIN32)
- HANDLE m_hSemaphore;
+ HANDLE semaphore;
#elif defined(__MACH__) && defined(__APPLE__)
- semaphore_t m_semaphore;
- int semcount;
+ semaphore_t semaphore;
#else
- sem_t m_semaphore;
+ sem_t semaphore;
#endif
+
+ DISABLE_CLASS_COPY(Semaphore);
};
+#endif
-#endif /* JSEMAPHORE_H_ */
diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp
new file mode 100644
index 000000000..5161a6c01
--- /dev/null
+++ b/src/threading/thread.cpp
@@ -0,0 +1,430 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#include "threading/thread.h"
+#include "threading/mutex_auto_lock.h"
+#include "log.h"
+#include "porting.h"
+
+#define UNUSED(expr) do { (void)(expr); } while (0)
+
+#if USE_CPP11_THREADS
+ #include <chrono>
+ #include <system_error>
+#elif USE_WIN_THREADS
+ #ifndef _WIN32_WCE
+ #include <process.h>
+ #endif
+#elif USE_POSIX_THREADS
+ #include <time.h>
+ #include <assert.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/time.h>
+
+ #if defined(__FreeBSD__) || defined(__APPLE__)
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #elif defined(_GNU_SOURCE)
+ #include <sys/sysinfo.h>
+ #endif
+#endif
+
+
+// for setName
+#if defined(linux) || defined(__linux)
+ #include <sys/prctl.h>
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
+ #include <pthread_np.h>
+#elif defined(_MSC_VER)
+ struct THREADNAME_INFO {
+ DWORD dwType; // Must be 0x1000
+ LPCSTR szName; // Pointer to name (in user addr space)
+ DWORD dwThreadID; // Thread ID (-1=caller thread)
+ DWORD dwFlags; // Reserved for future use, must be zero
+ };
+#endif
+
+// for bindToProcessor
+#if __FreeBSD_version >= 702106
+ typedef cpuset_t cpu_set_t;
+#elif defined(__linux) || defined(linux)
+ #include <sched.h>
+#elif defined(__sun) || defined(sun)
+ #include <sys/types.h>
+ #include <sys/processor.h>
+ #include <sys/procset.h>
+#elif defined(_AIX)
+ #include <sys/processor.h>
+ #include <sys/thread.h>
+#elif defined(__APPLE__)
+ #include <mach/mach_init.h>
+ #include <mach/thread_act.h>
+#endif
+
+
+Thread::Thread(const std::string &name) :
+ m_name(name),
+ m_retval(NULL),
+ m_joinable(false),
+ m_request_stop(false),
+ m_running(false)
+{
+#ifdef _AIX
+ m_kernel_thread_id = -1;
+#endif
+}
+
+
+Thread::~Thread()
+{
+ kill();
+}
+
+
+bool Thread::start()
+{
+ MutexAutoLock lock(m_mutex);
+
+ if (m_running)
+ return false;
+
+ m_request_stop = false;
+
+#if USE_CPP11_THREADS
+
+ try {
+ m_thread_obj = new std::thread(threadProc, this);
+ } catch (const std::system_error &e) {
+ return false;
+ }
+
+#elif USE_WIN_THREADS
+
+ m_thread_handle = CreateThread(NULL, 0, threadProc, this, 0, &m_thread_id);
+ if (!m_thread_handle)
+ return false;
+
+#elif USE_POSIX_THREADS
+
+ int status = pthread_create(&m_thread_handle, NULL, threadProc, this);
+ if (status)
+ return false;
+
+#endif
+
+ while (!m_running)
+ sleep_ms(1);
+
+ m_joinable = true;
+
+ return true;
+}
+
+
+bool Thread::stop()
+{
+ m_request_stop = true;
+ return true;
+}
+
+
+bool Thread::wait()
+{
+ MutexAutoLock lock(m_mutex);
+
+ if (!m_joinable)
+ return false;
+
+#if USE_CPP11_THREADS
+
+ m_thread_obj->join();
+
+ delete m_thread_obj;
+ m_thread_obj = NULL;
+
+#elif USE_WIN_THREADS
+
+ int ret = WaitForSingleObject(m_thread_handle, INFINITE);
+ assert(ret == WAIT_OBJECT_0);
+ UNUSED(ret);
+
+ CloseHandle(m_thread_handle);
+ m_thread_handle = NULL;
+ m_thread_id = -1;
+
+#elif USE_POSIX_THREADS
+
+ int ret = pthread_join(m_thread_handle, NULL);
+ assert(ret == 0);
+ UNUSED(ret);
+
+#endif
+
+ assert(m_running == false);
+ m_joinable = false;
+ return true;
+}
+
+
+bool Thread::kill()
+{
+ if (!m_running) {
+ wait();
+ return false;
+ }
+
+ m_running = false;
+
+#ifdef _WIN32
+ TerminateThread(m_thread_handle, 0);
+ CloseHandle(m_thread_handle);
+#else
+ // We need to pthread_kill instead on Android since NDKv5's pthread
+ // implementation is incomplete.
+# ifdef __ANDROID__
+ pthread_kill(getThreadHandle(), SIGKILL);
+# else
+ pthread_cancel(getThreadHandle());
+# endif
+ wait();
+#endif
+
+ m_retval = NULL;
+ m_joinable = false;
+ m_request_stop = false;
+
+ return true;
+}
+
+
+bool Thread::getReturnValue(void **ret)
+{
+ if (m_running)
+ return false;
+
+ *ret = m_retval;
+ return true;
+}
+
+
+#if USE_CPP11_THREADS || USE_POSIX_THREADS
+void *Thread::threadProc(void *param)
+#elif defined(_WIN32_WCE)
+DWORD Thread::threadProc(LPVOID param)
+#elif defined(_WIN32)
+DWORD WINAPI Thread::threadProc(LPVOID param)
+#endif
+{
+ Thread *thr = (Thread *)param;
+
+#ifdef _AIX
+ m_kernel_thread_id = thread_self();
+#endif
+
+ thr->setName(thr->m_name);
+
+ g_logger.registerThread(thr->m_name);
+ thr->m_running = true;
+
+ thr->m_retval = thr->run();
+
+ thr->m_running = false;
+ g_logger.deregisterThread();
+
+ // 0 is returned here to avoid an unnecessary ifdef clause
+ return 0;
+}
+
+
+void Thread::setName(const std::string &name)
+{
+#if defined(linux) || defined(__linux)
+
+ // It would be cleaner to do this with pthread_setname_np,
+ // which was added to glibc in version 2.12, but some major
+ // distributions are still runing 2.11 and previous versions.
+ prctl(PR_SET_NAME, name.c_str());
+
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ pthread_set_name_np(pthread_self(), name.c_str());
+
+#elif defined(__NetBSD__)
+
+ pthread_setname_np(pthread_self(), name.c_str());
+
+#elif defined(__APPLE__)
+
+ pthread_setname_np(name.c_str());
+
+#elif defined(_MSC_VER)
+
+ // Windows itself doesn't support thread names,
+ // but the MSVC debugger does...
+ THREADNAME_INFO info;
+
+ info.dwType = 0x1000;
+ info.szName = name.c_str();
+ info.dwThreadID = -1;
+ info.dwFlags = 0;
+
+ __try {
+ RaiseException(0x406D1388, 0,
+ sizeof(info) / sizeof(DWORD), (ULONG_PTR *)&info);
+ } __except (EXCEPTION_CONTINUE_EXECUTION) {
+ }
+
+#elif defined(_WIN32) || defined(__GNU__)
+
+ // These platforms are known to not support thread names.
+ // Silently ignore the request.
+
+#else
+ #warning "Unrecognized platform, thread names will not be available."
+#endif
+}
+
+
+unsigned int Thread::getNumberOfProcessors()
+{
+#if __cplusplus >= 201103L
+
+ return std::thread::hardware_concurrency();
+
+#elif defined(_SC_NPROCESSORS_ONLN)
+
+ return sysconf(_SC_NPROCESSORS_ONLN);
+
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || \
+ defined(__DragonFly__) || defined(__APPLE__)
+
+ unsigned int num_cpus = 1;
+ size_t len = sizeof(num_cpus);
+
+ int mib[2];
+ mib[0] = CTL_HW;
+ mib[1] = HW_NCPU;
+
+ sysctl(mib, 2, &num_cpus, &len, NULL, 0);
+ return num_cpus;
+
+#elif defined(_GNU_SOURCE)
+
+ return get_nprocs();
+
+#elif defined(_WIN32)
+
+ SYSTEM_INFO sysinfo;
+ GetSystemInfo(&sysinfo);
+ return sysinfo.dwNumberOfProcessors;
+
+#elif defined(PTW32_VERSION) || defined(__hpux)
+
+ return pthread_num_processors_np();
+
+#else
+
+ return 1;
+
+#endif
+}
+
+
+bool Thread::bindToProcessor(unsigned int proc_number)
+{
+#if defined(__ANDROID__)
+
+ return false;
+
+#elif defined(_WIN32)
+
+ return SetThreadAffinityMask(getThreadHandle(), 1 << proc_number);
+
+#elif __FreeBSD_version >= 702106 || defined(__linux) || defined(linux)
+
+ cpu_set_t cpuset;
+
+ CPU_ZERO(&cpuset);
+ CPU_SET(proc_number, &cpuset);
+
+ return pthread_setaffinity_np(getThreadHandle(), sizeof(cpuset), &cpuset) == 0;
+
+#elif defined(__sun) || defined(sun)
+
+ return processor_bind(P_LWPID, P_MYID, proc_number, NULL) == 0
+
+#elif defined(_AIX)
+
+ return bindprocessor(BINDTHREAD, m_kernel_thread_id, proc_number) == 0;
+
+#elif defined(__hpux) || defined(hpux)
+
+ pthread_spu_t answer;
+
+ return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP,
+ &answer, proc_number, getThreadHandle()) == 0;
+
+#elif defined(__APPLE__)
+
+ struct thread_affinity_policy tapol;
+
+ thread_port_t threadport = pthread_mach_thread_np(getThreadHandle());
+ tapol.affinity_tag = proc_number + 1;
+ return thread_policy_set(threadport, THREAD_AFFINITY_POLICY,
+ (thread_policy_t)&tapol,
+ THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS;
+
+#else
+
+ return false;
+
+#endif
+}
+
+
+bool Thread::setPriority(int prio)
+{
+#if defined(_WIN32)
+
+ return SetThreadPriority(getThreadHandle(), prio);
+
+#else
+
+ struct sched_param sparam;
+ int policy;
+
+ if (pthread_getschedparam(getThreadHandle(), &policy, &sparam) != 0)
+ return false;
+
+ int min = sched_get_priority_min(policy);
+ int max = sched_get_priority_max(policy);
+
+ sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST;
+ return pthread_setschedparam(getThreadHandle(), policy, &sparam) == 0;
+
+#endif
+}
+
diff --git a/src/threading/thread.h b/src/threading/thread.h
new file mode 100644
index 000000000..de800ecb7
--- /dev/null
+++ b/src/threading/thread.h
@@ -0,0 +1,183 @@
+/*
+This file is a part of the JThread package, which contains some object-
+oriented thread wrappers for different thread implementations.
+
+Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef THREADING_THREAD_H
+#define THREADING_THREAD_H
+
+#include "util/basic_macros.h"
+#include "threading/atomic.h"
+#include "threading/mutex.h"
+#include "threads.h"
+
+#include <string>
+#if USE_CPP11_THREADS
+ #include <thread> // for std::thread
+#endif
+#ifdef _AIX
+ #include <sys/thread.h> // for tid_t
+#endif
+
+/*
+ * On platforms using pthreads, these five priority classes correlate to
+ * even divisions between the minimum and maximum reported thread priority.
+ */
+#if !defined(_WIN32)
+ #define THREAD_PRIORITY_LOWEST 0
+ #define THREAD_PRIORITY_BELOW_NORMAL 1
+ #define THREAD_PRIORITY_NORMAL 2
+ #define THREAD_PRIORITY_ABOVE_NORMAL 3
+ #define THREAD_PRIORITY_HIGHEST 4
+#endif
+
+
+class Thread {
+public:
+ Thread(const std::string &name="");
+ virtual ~Thread();
+
+ /*
+ * Begins execution of a new thread at the pure virtual method Thread::run().
+ * Execution of the thread is guaranteed to have started after this function
+ * returns.
+ */
+ bool start();
+
+ /*
+ * Requests that the thread exit gracefully.
+ * Returns immediately; thread execution is guaranteed to be complete after
+ * a subsequent call to Thread::wait.
+ */
+ bool stop();
+
+ /*
+ * Immediately terminates the thread.
+ * This should be used with extreme caution, as the thread will not have
+ * any opportunity to release resources it may be holding (such as memory
+ * or locks).
+ */
+ bool kill();
+
+ /*
+ * Waits for thread to finish.
+ * Note: This does not stop a thread, you have to do this on your own.
+ * Returns false immediately if the thread is not started or has been waited
+ * on before.
+ */
+ bool wait();
+
+ /*
+ * Returns true if the calling thread is this Thread object.
+ */
+ bool isCurrentThread() { return thr_is_current_thread(getThreadId()); }
+
+ inline bool isRunning() { return m_running; }
+ inline bool stopRequested() { return m_request_stop; }
+
+#if USE_CPP11_THREADS
+ inline threadid_t getThreadId() { return m_thread_obj->get_id(); }
+ inline threadhandle_t getThreadHandle() { return m_thread_obj->native_handle(); }
+#else
+# if USE_WIN_THREADS
+ inline threadid_t getThreadId() { return m_thread_id; }
+# else
+ inline threadid_t getThreadId() { return m_thread_handle; }
+# endif
+ inline threadhandle_t getThreadHandle() { return m_thread_handle; }
+#endif
+
+ /*
+ * Gets the thread return value.
+ * Returns true if the thread has exited and the return value was available,
+ * or false if the thread has yet to finish.
+ */
+ bool getReturnValue(void **ret);
+
+ /*
+ * Binds (if possible, otherwise sets the affinity of) the thread to the
+ * specific processor specified by proc_number.
+ */
+ bool bindToProcessor(unsigned int proc_number);
+
+ /*
+ * Sets the thread priority to the specified priority.
+ *
+ * prio can be one of: THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL,
+ * THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST.
+ * On Windows, any of the other priorites as defined by SetThreadPriority
+ * are supported as well.
+ *
+ * Note that it may be necessary to first set the threading policy or
+ * scheduling algorithm to one that supports thread priorities if not
+ * supported by default, otherwise this call will have no effect.
+ */
+ bool setPriority(int prio);
+
+ /*
+ * Sets the currently executing thread's name to where supported; useful
+ * for debugging.
+ */
+ static void setName(const std::string &name);
+
+ /*
+ * Returns the number of processors/cores configured and active on this machine.
+ */
+ static unsigned int getNumberOfProcessors();
+
+protected:
+ std::string m_name;
+
+ virtual void *run() = 0;
+
+private:
+ void *m_retval;
+ bool m_joinable;
+ Atomic<bool> m_request_stop;
+ Atomic<bool> m_running;
+ Mutex m_mutex;
+
+#ifndef USE_CPP11_THREADS
+ threadhandle_t m_thread_handle;
+# if _WIN32
+ threadid_t m_thread_id;
+# endif
+#endif
+
+ static ThreadStartFunc threadProc;
+
+#ifdef _AIX
+ // For AIX, there does not exist any mapping from pthread_t to tid_t
+ // available to us, so we maintain one ourselves. This is set on thread start.
+ tid_t m_kernel_thread_id;
+#endif
+
+#if USE_CPP11_THREADS
+ std::thread *m_thread_obj;
+#endif
+
+ DISABLE_CLASS_COPY(Thread);
+};
+
+#endif
+
diff --git a/src/threads.h b/src/threads.h
index 503fa6abf..d4306f631 100644
--- a/src/threads.h
+++ b/src/threads.h
@@ -20,22 +20,75 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef THREADS_HEADER
#define THREADS_HEADER
-#include "jthread/jmutex.h"
-
-#if (defined(WIN32) || defined(_WIN32_WCE))
-typedef DWORD threadid_t;
+//
+// Determine which threading API we will use
+//
+#if __cplusplus >= 201103L
+ #define USE_CPP11_THREADS 1
+#elif defined(_WIN32)
+ #define USE_WIN_THREADS 1
#else
-typedef pthread_t threadid_t;
+ #define USE_POSIX_THREADS 1
+#endif
+
+///////////////
+
+
+#if USE_CPP11_THREADS
+ #include <thread>
+#endif
+
+#include "threading/mutex.h"
+
+//
+// threadid_t, threadhandle_t
+//
+#if USE_CPP11_THREADS
+ typedef std::thread::id threadid_t;
+ typedef std::thread::native_handle_type threadhandle_t;
+#elif USE_WIN_THREADS
+ typedef DWORD threadid_t;
+ typedef HANDLE threadhandle_t;
+#elif USE_POSIX_THREADS
+ typedef pthread_t threadid_t;
+ typedef pthread_t threadhandle_t;
+#endif
+
+//
+// ThreadStartFunc
+//
+#if USE_CPP11_THREADS || USE_POSIX_THREADS
+ typedef void *ThreadStartFunc(void *param);
+#elif defined(_WIN32_WCE)
+ typedef DWORD ThreadStartFunc(LPVOID param);
+#elif defined(_WIN32)
+ typedef DWORD WINAPI ThreadStartFunc(LPVOID param);
#endif
-inline threadid_t get_current_thread_id()
+
+inline threadid_t thr_get_current_thread_id()
{
-#if (defined(WIN32) || defined(_WIN32_WCE))
+#if USE_CPP11_THREADS
+ return std::this_thread::get_id();
+#elif USE_WIN_THREADS
return GetCurrentThreadId();
-#else
+#elif USE_POSIX_THREADS
return pthread_self();
#endif
}
+inline bool thr_compare_thread_id(threadid_t thr1, threadid_t thr2)
+{
+#if USE_POSIX_THREADS
+ return pthread_equal(thr1, thr2);
+#else
+ return thr1 == thr2;
#endif
+}
+inline bool thr_is_current_thread(threadid_t thr)
+{
+ return thr_compare_thread_id(thr_get_current_thread_id(), thr);
+}
+
+#endif
diff --git a/src/tool.cpp b/src/tool.cpp
index e013d5ea8..54b9f15f4 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -35,7 +35,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const
writeS16(os, max_drop_level);
writeU32(os, groupcaps.size());
for(std::map<std::string, ToolGroupCap>::const_iterator
- i = groupcaps.begin(); i != groupcaps.end(); i++){
+ i = groupcaps.begin(); i != groupcaps.end(); ++i){
const std::string *name = &i->first;
const ToolGroupCap *cap = &i->second;
os<<serializeString(*name);
@@ -43,7 +43,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const
writeS16(os, cap->maxlevel);
writeU32(os, cap->times.size());
for(std::map<int, float>::const_iterator
- i = cap->times.begin(); i != cap->times.end(); i++){
+ i = cap->times.begin(); i != cap->times.end(); ++i){
writeS16(os, i->first);
writeF1000(os, i->second);
}
@@ -51,7 +51,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const
if(protocol_version > 17){
writeU32(os, damageGroups.size());
for(std::map<std::string, s16>::const_iterator
- i = damageGroups.begin(); i != damageGroups.end(); i++){
+ i = damageGroups.begin(); i != damageGroups.end(); ++i){
os<<serializeString(i->first);
writeS16(os, i->second);
}
@@ -116,7 +116,7 @@ DigParams getDigParams(const ItemGroupList &groups,
int level = itemgroup_get(groups, "level");
//infostream<<"level="<<level<<std::endl;
for(std::map<std::string, ToolGroupCap>::const_iterator
- i = tp->groupcaps.begin(); i != tp->groupcaps.end(); i++){
+ i = tp->groupcaps.begin(); i != tp->groupcaps.end(); ++i){
const std::string &name = i->first;
//infostream<<"group="<<name<<std::endl;
const ToolGroupCap &cap = i->second;
@@ -164,7 +164,7 @@ HitParams getHitParams(const ItemGroupList &armor_groups,
float full_punch_interval = tp->full_punch_interval;
for(std::map<std::string, s16>::const_iterator
- i = tp->damageGroups.begin(); i != tp->damageGroups.end(); i++){
+ i = tp->damageGroups.begin(); i != tp->damageGroups.end(); ++i){
s16 armor = itemgroup_get(armor_groups, i->first);
damage += i->second * rangelim(time_from_last_punch / full_punch_interval, 0.0, 1.0)
* armor / 100.0;
diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp
index f5868133f..f51b2d5fa 100644
--- a/src/touchscreengui.cpp
+++ b/src/touchscreengui.cpp
@@ -44,17 +44,8 @@ const char** touchgui_button_imagenames = (const char*[]) {
"down_arrow.png",
"left_arrow.png",
"right_arrow.png",
- "inventory_btn.png",
- "drop_btn.png",
"jump_btn.png",
- "down.png",
- "fly_btn.png",
- "noclip_btn.png",
- "fast_btn.png",
- "debug_btn.png",
- "chat_btn.png",
- "camera_btn.png",
- "rangeview_btn.png"
+ "down.png"
};
static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
@@ -113,29 +104,13 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
TouchScreenGUI *g_touchscreengui;
-TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver):
- m_device(device),
- m_guienv(device->getGUIEnvironment()),
- m_camera_yaw(0.0),
- m_camera_pitch(0.0),
- m_visible(false),
- m_move_id(-1),
- m_receiver(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;
- }
-
- m_screensize = m_device->getVideoDriver()->getScreenSize();
-}
-
-void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path, rect<s32> button_rect)
+static void load_button_texture(button_info* btn, const char* path,
+ rect<s32> button_rect, ISimpleTextureSource* tsrc, video::IVideoDriver *driver)
{
unsigned int tid;
- video::ITexture *texture = guiScalingImageButton(m_device->getVideoDriver(),
- m_texturesource->getTexture(path, &tid), button_rect.getWidth(), button_rect.getHeight());
+ video::ITexture *texture = guiScalingImageButton(driver,
+ tsrc->getTexture(path, &tid), button_rect.getWidth(),
+ button_rect.getHeight());
if (texture) {
btn->guibutton->setUseAlphaChannel(true);
if (g_settings->getBool("gui_scaling_filter")) {
@@ -153,6 +128,314 @@ void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path, rect<
}
}
+AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device,
+ IEventReceiver* receiver) :
+ m_texturesource(NULL),
+ m_driver(device->getVideoDriver()),
+ m_guienv(device->getGUIEnvironment()),
+ m_receiver(receiver),
+ m_active(false),
+ m_visible(true),
+ m_timeout(0),
+ m_timeout_value(3),
+ m_initialized(false),
+ m_dir(AHBB_Dir_Right_Left)
+{
+ m_screensize = device->getVideoDriver()->getScreenSize();
+
+}
+
+void AutoHideButtonBar::init(ISimpleTextureSource* tsrc,
+ const char* starter_img, int button_id, v2s32 UpperLeft,
+ v2s32 LowerRight, autohide_button_bar_dir dir, float timeout)
+{
+ m_texturesource = tsrc;
+
+ m_upper_left = UpperLeft;
+ m_lower_right = LowerRight;
+
+ /* init settings bar */
+
+ 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->grab();
+ m_starter.repeatcounter = -1;
+ m_starter.keycode = KEY_OEM_8; // use invalid keycode as it's not relevant
+ m_starter.immediate_release = true;
+ m_starter.ids.clear();
+
+ load_button_texture(&m_starter, starter_img, current_button,
+ m_texturesource, m_driver);
+
+ m_dir = dir;
+ m_timeout_value = timeout;
+
+ m_initialized = true;
+}
+
+AutoHideButtonBar::~AutoHideButtonBar()
+{
+ m_starter.guibutton->setVisible(false);
+ m_starter.guibutton->drop();
+}
+
+void AutoHideButtonBar::addButton(touch_gui_button_id button_id,
+ const wchar_t* caption, const char* btn_image)
+{
+
+ if (!m_initialized) {
+ errorstream << "AutoHideButtonBar::addButton not yet initialized!"
+ << std::endl;
+ return;
+ }
+ int button_size = 0;
+
+ if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top)) {
+ button_size = m_lower_right.X - m_upper_left.X;
+ } 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;
+
+ if (m_dir == AHBB_Dir_Left_Right) {
+ x_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size())
+ + (button_size * 0.25);
+ x_end = x_start + button_size;
+ } else {
+ x_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size())
+ - (button_size * 0.25);
+ x_start = x_end - button_size;
+ }
+
+ 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;
+
+ if (m_dir == AHBB_Dir_Top_Bottom) {
+ y_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size())
+ + (button_size * 0.25);
+ y_end = y_start + button_size;
+ } else {
+ y_end = m_upper_left.X - (button_size * 1.25 * m_buttons.size())
+ - (button_size * 0.25);
+ y_start = y_end - button_size;
+ }
+
+ 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);
+ btn->guibutton->grab();
+ btn->guibutton->setVisible(false);
+ btn->guibutton->setEnabled(false);
+ btn->repeatcounter = -1;
+ btn->keycode = id2keycode(button_id);
+ btn->immediate_release = true;
+ btn->ids.clear();
+
+ load_button_texture(btn, btn_image, current_button, m_texturesource,
+ m_driver);
+
+ m_buttons.push_back(btn);
+}
+
+bool AutoHideButtonBar::isButton(const SEvent &event)
+{
+ IGUIElement* rootguielement = m_guienv->getRootGUIElement();
+
+ if (rootguielement == NULL) {
+ return false;
+ }
+
+ gui::IGUIElement *element = rootguielement->getElementFromPoint(
+ core::position2d<s32>(event.TouchInput.X, event.TouchInput.Y));
+
+ if (element == NULL) {
+ return false;
+ }
+
+ if (m_active) {
+ /* check for all buttons in vector */
+
+ std::vector<button_info*>::iterator iter = m_buttons.begin();
+
+ while (iter != m_buttons.end()) {
+ if ((*iter)->guibutton == element) {
+
+ SEvent* translated = new SEvent();
+ memset(translated, 0, sizeof(SEvent));
+ translated->EventType = irr::EET_KEY_INPUT_EVENT;
+ translated->KeyInput.Key = (*iter)->keycode;
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
+ translated->KeyInput.Char = 0;
+
+ /* add this event */
+ translated->KeyInput.PressedDown = true;
+ m_receiver->OnEvent(*translated);
+
+ /* remove this event */
+ translated->KeyInput.PressedDown = false;
+ m_receiver->OnEvent(*translated);
+
+ delete translated;
+
+ (*iter)->ids.push_back(event.TouchInput.ID);
+
+ m_timeout = 0;
+
+ return true;
+ }
+ ++iter;
+ }
+ } else {
+ /* check for starter button only */
+ if (element == m_starter.guibutton) {
+ m_starter.ids.push_back(event.TouchInput.ID);
+ m_starter.guibutton->setVisible(false);
+ m_starter.guibutton->setEnabled(false);
+ m_active = true;
+ m_timeout = 0;
+
+ std::vector<button_info*>::iterator iter = m_buttons.begin();
+
+ while (iter != m_buttons.end()) {
+ (*iter)->guibutton->setVisible(true);
+ (*iter)->guibutton->setEnabled(true);
+ ++iter;
+ }
+
+ return true;
+ }
+ }
+ 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) {
+ deactivate();
+ }
+ }
+}
+
+void AutoHideButtonBar::deactivate()
+{
+ if (m_visible == true) {
+ m_starter.guibutton->setVisible(true);
+ m_starter.guibutton->setEnabled(true);
+ }
+ m_active = false;
+
+ std::vector<button_info*>::iterator iter = m_buttons.begin();
+
+ while (iter != m_buttons.end()) {
+ (*iter)->guibutton->setVisible(false);
+ (*iter)->guibutton->setEnabled(false);
+ ++iter;
+ }
+}
+
+void AutoHideButtonBar::hide()
+{
+ m_visible = false;
+ m_starter.guibutton->setVisible(false);
+ m_starter.guibutton->setEnabled(false);
+
+ std::vector<button_info*>::iterator iter = m_buttons.begin();
+
+ while (iter != m_buttons.end()) {
+ (*iter)->guibutton->setVisible(false);
+ (*iter)->guibutton->setEnabled(false);
+ ++iter;
+ }
+}
+
+void AutoHideButtonBar::show()
+{
+ m_visible = true;
+
+ if (m_active) {
+ std::vector<button_info*>::iterator iter = m_buttons.begin();
+
+ while (iter != m_buttons.end()) {
+ (*iter)->guibutton->setVisible(true);
+ (*iter)->guibutton->setEnabled(true);
+ ++iter;
+ }
+ } else {
+ m_starter.guibutton->setVisible(true);
+ m_starter.guibutton->setEnabled(true);
+ }
+}
+
+TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver):
+ m_device(device),
+ m_guienv(device->getGUIEnvironment()),
+ m_camera_yaw(0.0),
+ m_camera_pitch(0.0),
+ m_visible(false),
+ m_move_id(-1),
+ m_receiver(receiver),
+ m_move_has_really_moved(false),
+ m_move_downtime(0),
+ m_move_sent_as_mouse_event(false),
+ // use some downlocation way off screen as init value to avoid invalid behaviour
+ m_move_downlocation(v2s32(-10000, -10000)),
+ 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;
+ }
+
+ m_screensize = m_device->getVideoDriver()->getScreenSize();
+}
+
void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
std::wstring caption, bool immediate_release, float repeat_delay)
{
@@ -166,21 +449,27 @@ void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
btn->immediate_release = immediate_release;
btn->ids.clear();
- loadButtonTexture(btn,touchgui_button_imagenames[id], button_rect);
+ load_button_texture(btn,touchgui_button_imagenames[id],button_rect,
+ m_texturesource, m_device->getVideoDriver());
}
static int getMaxControlPadSize(float density) {
return 200 * density * g_settings->getFloat("hud_scaling");
}
-void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
+int TouchScreenGUI::getGuiButtonSize()
{
- assert(tsrc != 0);
+ u32 control_pad_size = MYMIN((2 * m_screensize.Y) / 3,
+ getMaxControlPadSize(porting::getDisplayDensity()));
- u32 control_pad_size =
- MYMIN((2 * m_screensize.Y) / 3,getMaxControlPadSize(density));
+ return control_pad_size / 3;
+}
- u32 button_size = control_pad_size / 3;
+void TouchScreenGUI::init(ISimpleTextureSource* tsrc)
+{
+ assert(tsrc != 0);
+
+ u32 button_size = getGuiButtonSize();
m_visible = true;
m_texturesource = tsrc;
m_control_pad_rect = rect<s32>(0, m_screensize.Y - 3 * button_size,
@@ -223,16 +512,6 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
}
}
- /* init inventory button */
- initButton(inventory_id,
- rect<s32>(0, m_screensize.Y - (button_size/2),
- (button_size/2), m_screensize.Y), L"inv", true);
-
- /* init drop button */
- initButton(drop_id,
- rect<s32>(2.5*button_size, m_screensize.Y - (button_size/2),
- 3*button_size, m_screensize.Y), L"drop", true);
-
/* init jump button */
initButton(jump_id,
rect<s32>(m_screensize.X-(1.75*button_size),
@@ -249,48 +528,37 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
m_screensize.Y),
L"H",false);
- /* init fly button */
- initButton(fly_id,
- rect<s32>(m_screensize.X - (0.75*button_size),
- m_screensize.Y - (2.25*button_size),
- m_screensize.X, m_screensize.Y - (button_size*1.5)),
- L"fly", false, SLOW_BUTTON_REPEAT);
-
- /* init noclip button */
- initButton(noclip_id,
- rect<s32>(m_screensize.X - (0.75*button_size), 2.25*button_size,
- m_screensize.X, 3*button_size),
- L"clip", false, SLOW_BUTTON_REPEAT);
-
- /* init fast button */
- initButton(fast_id,
- rect<s32>(m_screensize.X - (0.75*button_size), 1.5*button_size,
- m_screensize.X, 2.25*button_size),
- L"fast", false, SLOW_BUTTON_REPEAT);
-
- /* init debug button */
- initButton(debug_id,
- rect<s32>(m_screensize.X - (0.75*button_size), 0.75*button_size,
- m_screensize.X, 1.5*button_size),
- L"dbg", false, SLOW_BUTTON_REPEAT);
-
- /* init chat button */
- initButton(chat_id,
- rect<s32>(m_screensize.X - (0.75*button_size), 0,
- m_screensize.X, 0.75*button_size),
- L"Chat", true);
-
- /* init camera button */
- initButton(camera_id,
- rect<s32>(m_screensize.X - (1.5*button_size), 0,
- m_screensize.X - (0.75*button_size), 0.75*button_size),
- L"cam", false, SLOW_BUTTON_REPEAT);
-
- /* init rangeselect button */
- initButton(range_id,
- rect<s32>(m_screensize.X - (2.25*button_size), 0,
- m_screensize.X - (1.5*button_size), 0.75*button_size),
- L"far", false, SLOW_BUTTON_REPEAT);
+ m_settingsbar.init(m_texturesource, "gear_icon.png", settings_starter_id,
+ v2s32(m_screensize.X - (button_size / 2),
+ m_screensize.Y - ((SETTINGS_BAR_Y_OFFSET + 1) * button_size)
+ + (button_size * 0.5)),
+ v2s32(m_screensize.X,
+ m_screensize.Y - (SETTINGS_BAR_Y_OFFSET * button_size)
+ + (button_size * 0.5)), AHBB_Dir_Right_Left,
+ 3.0);
+
+ m_settingsbar.addButton(fly_id, L"fly", "fly_btn.png");
+ m_settingsbar.addButton(noclip_id, L"noclip", "noclip_btn.png");
+ m_settingsbar.addButton(fast_id, L"fast", "fast_btn.png");
+ m_settingsbar.addButton(debug_id, L"debug", "debug_btn.png");
+ m_settingsbar.addButton(camera_id, L"camera", "camera_btn.png");
+ m_settingsbar.addButton(range_id, L"rangeview", "rangeview_btn.png");
+
+ m_rarecontrolsbar.init(m_texturesource, "rare_controls.png",
+ rare_controls_starter_id,
+ v2s32(0,
+ m_screensize.Y
+ - ((RARE_CONTROLS_BAR_Y_OFFSET + 1) * button_size)
+ + (button_size * 0.5)),
+ v2s32(button_size / 2,
+ m_screensize.Y - (RARE_CONTROLS_BAR_Y_OFFSET * button_size)
+ + (button_size * 0.5)), AHBB_Dir_Left_Right,
+ 2);
+
+ 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)
@@ -331,7 +599,7 @@ 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++) {
+ iter != m_hud_rects.end(); ++iter) {
if (iter->second.isPointInside(
v2s32(event.TouchInput.X,
event.TouchInput.Y)
@@ -374,7 +642,7 @@ bool TouchScreenGUI::isReleaseHUDButton(int eventID)
return false;
}
-void TouchScreenGUI::ButtonEvent(touch_gui_button_id button,
+void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
int eventID, bool action)
{
button_info* btn = &m_buttons[button];
@@ -417,6 +685,61 @@ void TouchScreenGUI::ButtonEvent(touch_gui_button_id button,
delete translated;
}
+
+void TouchScreenGUI::handleReleaseEvent(int evt_id)
+{
+ touch_gui_button_id button = getButtonID(evt_id);
+
+ /* handle button events */
+ if (button != after_last_element_id) {
+ 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) {
+ 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;
+ memset(translated,0,sizeof(SEvent));
+ translated->EventType = EET_MOUSE_INPUT_EVENT;
+ translated->MouseInput.X = m_move_downlocation.X;
+ translated->MouseInput.Y = m_move_downlocation.Y;
+ translated->MouseInput.Shift = false;
+ translated->MouseInput.Control = false;
+ translated->MouseInput.ButtonStates = 0;
+ translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
+ m_receiver->OnEvent(*translated);
+ delete translated;
+ }
+ else {
+ /* do double tap detection */
+ doubleTapDetection();
+ }
+ }
+ else {
+ infostream
+ << "TouchScreenGUI::translateEvent released unknown button: "
+ << evt_id << std::endl;
+ }
+
+ for (std::vector<id_status>::iterator iter = m_known_ids.begin();
+ iter != m_known_ids.end(); ++iter) {
+ if (iter->id == evt_id) {
+ m_known_ids.erase(iter);
+ break;
+ }
+ }
+}
+
void TouchScreenGUI::translateEvent(const SEvent &event)
{
if (!m_visible) {
@@ -447,14 +770,24 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
/* handle button events */
if (button != after_last_element_id) {
- ButtonEvent(button,eventID,true);
- }
- else if (isHUDButton(event))
- {
+ handleButtonEvent(button, eventID, true);
+ m_settingsbar.deactivate();
+ m_rarecontrolsbar.deactivate();
+ } else if (isHUDButton(event)) {
+ m_settingsbar.deactivate();
+ m_rarecontrolsbar.deactivate();
/* already handled in isHUDButton() */
+ } else if (m_settingsbar.isButton(event)) {
+ m_rarecontrolsbar.deactivate();
+ /* already handled in isSettingsBarButton() */
+ } else if (m_rarecontrolsbar.isButton(event)) {
+ m_settingsbar.deactivate();
+ /* already handled in isSettingsBarButton() */
}
/* handle non button events */
else {
+ m_settingsbar.deactivate();
+ m_rarecontrolsbar.deactivate();
/* if we don't already have a moving point make this the moving one */
if (m_move_id == -1) {
m_move_id = event.TouchInput.ID;
@@ -469,53 +802,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
else if (event.TouchInput.Event == ETIE_LEFT_UP) {
verbosestream << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
-
- touch_gui_button_id button = getButtonID(event.TouchInput.ID);
-
- /* handle button events */
- if (button != after_last_element_id) {
- ButtonEvent(button,event.TouchInput.ID,false);
- }
- /* handle hud button events */
- else if (isReleaseHUDButton(event.TouchInput.ID)) {
- /* nothing to do here */
- }
- /* handle the point used for moving view */
- else if (event.TouchInput.ID == m_move_id) {
- 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;
- memset(translated,0,sizeof(SEvent));
- translated->EventType = EET_MOUSE_INPUT_EVENT;
- translated->MouseInput.X = m_move_downlocation.X;
- translated->MouseInput.Y = m_move_downlocation.Y;
- translated->MouseInput.Shift = false;
- translated->MouseInput.Control = false;
- translated->MouseInput.ButtonStates = 0;
- translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
- m_receiver->OnEvent(*translated);
- delete translated;
- }
- else {
- /* do double tap detection */
- doubleTapDetection();
- }
- }
- else {
- infostream
- << "TouchScreenGUI::translateEvent released unknown button: "
- << event.TouchInput.ID << std::endl;
- }
-
- for (std::vector<id_status>::iterator iter = m_known_ids.begin();
- iter != m_known_ids.end(); iter++) {
- if (iter->id == event.TouchInput.ID) {
- m_known_ids.erase(iter);
- break;
- }
- }
+ handleReleaseEvent(event.TouchInput.ID);
}
else {
assert(event.TouchInput.Event == ETIE_MOVED);
@@ -576,8 +863,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
->getRayFromScreenCoordinates(
v2s32(event.TouchInput.X,event.TouchInput.Y));
}
- }
- else {
+ } else {
handleChangedButton(event);
}
}
@@ -590,8 +876,8 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event)
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 (std::vector<int>::iterator iter = m_buttons[i].ids.begin();
+ iter != m_buttons[i].ids.end(); ++iter) {
if (event.TouchInput.ID == *iter) {
@@ -603,12 +889,12 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event)
}
/* remove old button */
- ButtonEvent((touch_gui_button_id) i,*iter,false);
+ handleButtonEvent((touch_gui_button_id) i,*iter,false);
if (current_button_id == after_last_element_id) {
return;
}
- ButtonEvent((touch_gui_button_id) current_button_id,*iter,true);
+ handleButtonEvent((touch_gui_button_id) current_button_id,*iter,true);
return;
}
@@ -622,8 +908,11 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event)
}
button_info* btn = &m_buttons[current_button_id];
- if (std::find(btn->ids.begin(),btn->ids.end(), event.TouchInput.ID) == btn->ids.end()) {
- ButtonEvent((touch_gui_button_id) current_button_id,event.TouchInput.ID,true);
+ 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);
}
}
@@ -637,7 +926,7 @@ bool TouchScreenGUI::doubleTapDetection()
m_key_events[1].x = m_move_downlocation.X;
m_key_events[1].y = m_move_downlocation.Y;
- u32 delta = porting::getDeltaMs(m_key_events[0].down_time,getTimeMs());
+ u32 delta = porting::getDeltaMs(m_key_events[0].down_time, getTimeMs());
if (delta > 400)
return false;
@@ -646,11 +935,11 @@ bool TouchScreenGUI::doubleTapDetection()
(m_key_events[0].y - m_key_events[1].y) * (m_key_events[0].y - m_key_events[1].y));
- if (distance >(20 + g_settings->getU16("touchscreen_threshold")))
+ if (distance > (20 + g_settings->getU16("touchscreen_threshold")))
return false;
SEvent* translated = new SEvent();
- memset(translated,0,sizeof(SEvent));
+ memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_key_events[0].x;
translated->MouseInput.Y = m_key_events[0].y;
@@ -679,7 +968,7 @@ bool TouchScreenGUI::doubleTapDetection()
TouchScreenGUI::~TouchScreenGUI()
{
- 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];
if (btn->guibutton != 0) {
btn->guibutton->drop();
@@ -691,7 +980,7 @@ TouchScreenGUI::~TouchScreenGUI()
void TouchScreenGUI::step(float dtime)
{
/* simulate keyboard repeats */
- 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];
if (btn->ids.size() > 0) {
@@ -705,7 +994,7 @@ void TouchScreenGUI::step(float dtime)
btn->repeatcounter = 0;
SEvent translated;
- memset(&translated,0,sizeof(SEvent));
+ memset(&translated, 0, sizeof(SEvent));
translated.EventType = irr::EET_KEY_INPUT_EVENT;
translated.KeyInput.Key = btn->keycode;
translated.KeyInput.PressedDown = false;
@@ -731,7 +1020,7 @@ void TouchScreenGUI::step(float dtime)
v2s32(m_move_downlocation.X,m_move_downlocation.Y));
SEvent translated;
- memset(&translated,0,sizeof(SEvent));
+ memset(&translated, 0, sizeof(SEvent));
translated.EventType = EET_MOUSE_INPUT_EVENT;
translated.MouseInput.X = m_move_downlocation.X;
translated.MouseInput.Y = m_move_downlocation.Y;
@@ -744,6 +1033,9 @@ void TouchScreenGUI::step(float dtime)
m_move_sent_as_mouse_event = true;
}
}
+
+ m_settingsbar.step(dtime);
+ m_rarecontrolsbar.step(dtime);
}
void TouchScreenGUI::resetHud()
@@ -759,20 +1051,39 @@ 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++) {
+ for (unsigned int i = 0; i < after_last_element_id; i++) {
button_info* btn = &m_buttons[i];
if (btn->guibutton != 0) {
btn->guibutton->setVisible(visible);
}
}
+
+ /* clear all active buttons */
+ if (!visible) {
+ while (m_known_ids.size() > 0) {
+ handleReleaseEvent(m_known_ids.begin()->id);
+ }
+
+ m_settingsbar.hide();
+ m_rarecontrolsbar.hide();
+ } else {
+ m_settingsbar.show();
+ m_rarecontrolsbar.show();
+ }
}
-void TouchScreenGUI::Hide()
+void TouchScreenGUI::hide()
{
+ if (!m_visible)
+ return;
+
Toggle(false);
}
-void TouchScreenGUI::Show()
+void TouchScreenGUI::show()
{
+ if (m_visible)
+ return;
+
Toggle(true);
}
diff --git a/src/touchscreengui.h b/src/touchscreengui.h
index bb3231793..d8106a260 100644
--- a/src/touchscreengui.h
+++ b/src/touchscreengui.h
@@ -38,26 +38,105 @@ typedef enum {
backward_id,
left_id,
right_id,
- inventory_id,
- drop_id,
jump_id,
crunch_id,
+ after_last_element_id,
+ settings_starter_id,
+ rare_controls_starter_id,
fly_id,
noclip_id,
fast_id,
debug_id,
- chat_id,
camera_id,
range_id,
- after_last_element_id
+ chat_id,
+ inventory_id,
+ drop_id
} touch_gui_button_id;
+typedef enum {
+ AHBB_Dir_Top_Bottom,
+ AHBB_Dir_Bottom_Top,
+ AHBB_Dir_Left_Right,
+ AHBB_Dir_Right_Left
+} 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 6.5
+#define RARE_CONTROLS_BAR_Y_OFFSET 4
+
extern const char** touchgui_button_imagenames;
+struct button_info {
+ float repeatcounter;
+ float repeatdelay;
+ irr::EKEY_CODE keycode;
+ std::vector<int> ids;
+ IGUIButton* guibutton;
+ bool immediate_release;
+};
+
+class AutoHideButtonBar
+{
+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);
+
+ ~AutoHideButtonBar();
+
+ /* add button to be shown */
+ void addButton(touch_gui_button_id id, const wchar_t* caption,
+ const char* btn_image);
+
+ /* detect settings bar button events */
+ bool isButton(const SEvent &event);
+
+ /* handle released hud buttons */
+ bool isReleaseButton(int eventID);
+
+ /* step handler */
+ void step(float dtime);
+
+ /* deactivate button bar */
+ void deactivate();
+
+ /* hide the whole buttonbar */
+ void hide();
+
+ /* unhide the buttonbar */
+ void show();
+
+private:
+ ISimpleTextureSource* m_texturesource;
+ irr::video::IVideoDriver* m_driver;
+ IGUIEnvironment* m_guienv;
+ IEventReceiver* m_receiver;
+ v2u32 m_screensize;
+ button_info m_starter;
+ std::vector<button_info*> m_buttons;
+
+ v2s32 m_upper_left;
+ v2s32 m_lower_right;
+
+ /* show settings bar */
+ bool m_active;
+
+ bool m_visible;
+
+ /* settings bar timeout */
+ float m_timeout;
+ float m_timeout_value;
+ bool m_initialized;
+ autohide_button_bar_dir m_dir;
+};
+
class TouchScreenGUI
{
public:
@@ -66,7 +145,7 @@ public:
void translateEvent(const SEvent &event);
- void init(ISimpleTextureSource* tsrc,float density);
+ void init(ISimpleTextureSource* tsrc);
double getYaw() { return m_camera_yaw; }
double getPitch() { return m_camera_pitch; }
@@ -77,8 +156,8 @@ public:
void registerHudItem(int index, const rect<s32> &rect);
void Toggle(bool visible);
- void Hide();
- void Show();
+ void hide();
+ void show();
private:
IrrlichtDevice* m_device;
@@ -104,15 +183,6 @@ private:
bool m_move_sent_as_mouse_event;
v2s32 m_move_downlocation;
- struct button_info {
- float repeatcounter;
- float repeatdelay;
- irr::EKEY_CODE keycode;
- std::vector<int> ids;
- IGUIButton* guibutton;
- bool immediate_release;
- };
-
button_info m_buttons[after_last_element_id];
/* gui button detection */
@@ -142,7 +212,7 @@ private:
std::vector<id_status> m_known_ids;
/* handle a button event */
- void ButtonEvent(touch_gui_button_id bID, int eventID, bool action);
+ void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action);
/* handle pressed hud buttons */
bool isHUDButton(const SEvent &event);
@@ -153,6 +223,12 @@ private:
/* handle double taps */
bool doubleTapDetection();
+ /* handle release event */
+ void handleReleaseEvent(int evt_id);
+
+ /* get size of regular gui control button */
+ int getGuiButtonSize();
+
/* doubleclick detection variables */
struct key_event {
unsigned int down_time;
@@ -165,6 +241,12 @@ private:
/* array for doubletap detection */
key_event m_key_events[2];
+
+ /* settings bar */
+ AutoHideButtonBar m_settingsbar;
+
+ /* rare controls bar */
+ AutoHideButtonBar m_rarecontrolsbar;
};
extern TouchScreenGUI *g_touchscreengui;
#endif
diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt
index bdff14f05..a07ed8ba5 100644
--- a/src/unittest/CMakeLists.txt
+++ b/src/unittest/CMakeLists.txt
@@ -17,6 +17,7 @@ set (UNITTEST_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_settings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_socket.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_threading.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_utilities.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_voxelmanipulator.cpp
diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp
index d0ffb423f..41ccf0d2d 100644
--- a/src/unittest/test.cpp
+++ b/src/unittest/test.cpp
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "test.h"
-#include "debug.h"
#include "log.h"
#include "nodedef.h"
#include "itemdef.h"
@@ -216,14 +215,14 @@ void TestGameDef::defineSomeNodes()
//// run_tests
////
-void run_tests()
+bool run_tests()
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
u32 t1 = porting::getTime(PRECISION_MILLI);
TestGameDef gamedef;
- log_set_lev_silence(LMT_ERROR, true);
+ g_logger.setLevelSilenced(LL_ERROR, true);
u32 num_modules_failed = 0;
u32 num_total_tests_failed = 0;
@@ -239,11 +238,11 @@ void run_tests()
u32 tdiff = porting::getTime(PRECISION_MILLI) - t1;
- log_set_lev_silence(LMT_ERROR, false);
+ g_logger.setLevelSilenced(LL_ERROR, false);
const char *overall_status = (num_modules_failed == 0) ? "PASSED" : "FAILED";
- dstream
+ rawstream
<< "++++++++++++++++++++++++++++++++++++++++"
<< "++++++++++++++++++++++++++++++++++++++++" << std::endl
<< "Unit Test Results: " << overall_status << std::endl
@@ -254,8 +253,7 @@ void run_tests()
<< "++++++++++++++++++++++++++++++++++++++++"
<< "++++++++++++++++++++++++++++++++++++++++" << std::endl;
- if (num_modules_failed)
- abort();
+ return num_modules_failed;
}
////
@@ -264,14 +262,14 @@ void run_tests()
bool TestBase::testModule(IGameDef *gamedef)
{
- dstream << "======== Testing module " << getName() << std::endl;
+ rawstream << "======== Testing module " << getName() << std::endl;
u32 t1 = porting::getTime(PRECISION_MILLI);
runTests(gamedef);
u32 tdiff = porting::getTime(PRECISION_MILLI) - t1;
- dstream << "======== Module " << getName() << " "
+ rawstream << "======== Module " << getName() << " "
<< (num_tests_failed ? "failed" : "passed") << " (" << num_tests_failed
<< " failures / " << num_tests_run << " tests) - " << tdiff
<< "ms" << std::endl;
diff --git a/src/unittest/test.h b/src/unittest/test.h
index 47a441e02..e60e657cc 100644
--- a/src/unittest/test.h
+++ b/src/unittest/test.h
@@ -32,60 +32,61 @@ class TestFailedException : public std::exception {
};
// Runs a unit test and reports results
-#define TEST(fxn, ...) do { \
- u32 t1 = porting::getTime(PRECISION_MILLI); \
- try { \
- fxn(__VA_ARGS__); \
- dstream << "[PASS] "; \
- } catch (TestFailedException &e) { \
- dstream << "[FAIL] "; \
- num_tests_failed++; \
- } catch (std::exception &e) { \
- dstream << "Caught unhandled exception: " << e.what() << std::endl; \
- dstream << "[FAIL] "; \
- num_tests_failed++; \
- } \
- num_tests_run++; \
- u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \
- dstream << #fxn << " - " << tdiff << "ms" << std::endl; \
+#define TEST(fxn, ...) do { \
+ u32 t1 = porting::getTime(PRECISION_MILLI); \
+ try { \
+ fxn(__VA_ARGS__); \
+ rawstream << "[PASS] "; \
+ } catch (TestFailedException &e) { \
+ rawstream << "[FAIL] "; \
+ num_tests_failed++; \
+ } catch (std::exception &e) { \
+ rawstream << "Caught unhandled exception: " << e.what() << std::endl; \
+ rawstream << "[FAIL] "; \
+ num_tests_failed++; \
+ } \
+ num_tests_run++; \
+ u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \
+ rawstream << #fxn << " - " << tdiff << "ms" << std::endl; \
} while (0)
// Asserts the specified condition is true, or fails the current unit test
-#define UASSERT(x) do { \
- if (!(x)) { \
- dstream << "Test assertion failed: " #x << std::endl \
- << " at " << fs::GetFilenameFromPath(__FILE__) \
- << ":" << __LINE__ << std::endl; \
- throw TestFailedException(); \
- } \
+#define UASSERT(x) do { \
+ if (!(x)) { \
+ rawstream << "Test assertion failed: " #x << std::endl \
+ << " at " << fs::GetFilenameFromPath(__FILE__) \
+ << ":" << __LINE__ << std::endl; \
+ throw TestFailedException(); \
+ } \
} while (0)
// Asserts the specified condition is true, or fails the current unit test
// and prints the format specifier fmt
-#define UTEST(x, fmt, ...) do { \
- if (!(x)) { \
- char utest_buf[1024]; \
- snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \
- dstream << "Test assertion failed: " << utest_buf << std::endl \
- << " at " << fs::GetFilenameFromPath(__FILE__) \
- << ":" << __LINE__ << std::endl; \
- throw TestFailedException(); \
- } \
+#define UTEST(x, fmt, ...) do { \
+ if (!(x)) { \
+ char utest_buf[1024]; \
+ snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \
+ rawstream << "Test assertion failed: " << utest_buf << std::endl \
+ << " at " << fs::GetFilenameFromPath(__FILE__) \
+ << ":" << __LINE__ << std::endl; \
+ throw TestFailedException(); \
+ } \
} while (0)
// Asserts the comparison specified by CMP is true, or fails the current unit test
-#define UASSERTCMP(T, CMP, actual, expected) do { \
- T a = (actual); \
- T e = (expected); \
- if (!(a CMP e)) { \
- dstream << "Test assertion failed: " << #actual << " " << #CMP << " " \
- << #expected << std::endl \
- << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \
- << __LINE__ << std::endl \
- << " actual: " << a << std::endl << " expected: " \
- << e << std::endl; \
- throw TestFailedException(); \
- } \
+#define UASSERTCMP(T, CMP, actual, expected) do { \
+ T a = (actual); \
+ T e = (expected); \
+ if (!(a CMP e)) { \
+ rawstream \
+ << "Test assertion failed: " << #actual << " " << #CMP << " " \
+ << #expected << std::endl \
+ << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \
+ << __LINE__ << std::endl \
+ << " actual: " << a << std::endl << " expected: " \
+ << e << std::endl; \
+ throw TestFailedException(); \
+ } \
} while (0)
#define UASSERTEQ(T, actual, expected) UASSERTCMP(T, ==, actual, expected)
@@ -141,6 +142,6 @@ extern content_t t_CONTENT_WATER;
extern content_t t_CONTENT_LAVA;
extern content_t t_CONTENT_BRICK;
-void run_tests();
+bool run_tests();
#endif
diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp
index a0dcada94..62d446f5c 100644
--- a/src/unittest/test_areastore.cpp
+++ b/src/unittest/test_areastore.cpp
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "test.h"
-#include "areastore.h"
+#include "util/areastore.h"
class TestAreaStore : public TestBase {
public:
@@ -31,6 +31,7 @@ public:
void genericStoreTest(AreaStore *store);
void testVectorStore();
void testSpatialStore();
+ void testSerialization();
};
static TestAreaStore g_test_instance;
@@ -41,6 +42,7 @@ void TestAreaStore::runTests(IGameDef *gamedef)
#if USE_SPATIAL
TEST(testSpatialStore);
#endif
+ TEST(testSerialization);
}
////////////////////////////////////////////////////////////////////////////////
@@ -62,18 +64,15 @@ void TestAreaStore::testSpatialStore()
void TestAreaStore::genericStoreTest(AreaStore *store)
{
Area a(v3s16(-10, -3, 5), v3s16(0, 29, 7));
- a.id = 1;
Area b(v3s16(-5, -2, 5), v3s16(0, 28, 6));
- b.id = 2;
Area c(v3s16(-7, -3, 6), v3s16(-1, 27, 7));
- c.id = 3;
std::vector<Area *> res;
UASSERTEQ(size_t, store->size(), 0);
store->reserve(2); // sic
- store->insertArea(a);
- store->insertArea(b);
- store->insertArea(c);
+ store->insertArea(&a);
+ store->insertArea(&b);
+ store->insertArea(&c);
UASSERTEQ(size_t, store->size(), 3);
store->getAreasForPos(&res, v3s16(-1, 0, 6));
@@ -81,20 +80,18 @@ void TestAreaStore::genericStoreTest(AreaStore *store)
res.clear();
store->getAreasForPos(&res, v3s16(0, 0, 7));
UASSERTEQ(size_t, res.size(), 1);
- UASSERTEQ(u32, res[0]->id, 1);
res.clear();
- store->removeArea(1);
+ store->removeArea(a.id);
store->getAreasForPos(&res, v3s16(0, 0, 7));
UASSERTEQ(size_t, res.size(), 0);
res.clear();
- store->insertArea(a);
+ store->insertArea(&a);
store->getAreasForPos(&res, v3s16(0, 0, 7));
UASSERTEQ(size_t, res.size(), 1);
- UASSERTEQ(u32, res[0]->id, 1);
res.clear();
store->getAreasInArea(&res, v3s16(-10, -3, 5), v3s16(0, 29, 7), false);
@@ -109,21 +106,57 @@ void TestAreaStore::genericStoreTest(AreaStore *store)
UASSERTEQ(size_t, res.size(), 3);
res.clear();
- store->removeArea(1);
- store->removeArea(2);
- store->removeArea(3);
+ store->removeArea(a.id);
+ store->removeArea(b.id);
+ store->removeArea(c.id);
Area d(v3s16(-100, -300, -200), v3s16(-50, -200, -100));
- d.id = 4;
d.data = "Hi!";
- store->insertArea(d);
+ store->insertArea(&d);
store->getAreasForPos(&res, v3s16(-75, -250, -150));
UASSERTEQ(size_t, res.size(), 1);
- UASSERTEQ(u32, res[0]->id, 4);
UASSERTEQ(u16, res[0]->data.size(), 3);
UASSERT(strncmp(res[0]->data.c_str(), "Hi!", 3) == 0);
res.clear();
- store->removeArea(4);
+ store->removeArea(d.id);
}
+
+void TestAreaStore::testSerialization()
+{
+ VectorAreaStore store;
+
+ Area a(v3s16(-1, 0, 1), v3s16(0, 1, 2));
+ a.data = "Area A";
+ store.insertArea(&a);
+
+ Area b(v3s16(123, 456, 789), v3s16(32000, 100, 10));
+ b.data = "Area B";
+ store.insertArea(&b);
+
+ std::ostringstream os;
+ store.serialize(os);
+ std::string str = os.str();
+
+ std::string str_wanted("\x00" // Version
+ "\x00\x02" // Count
+ "\xFF\xFF\x00\x00\x00\x01" // Area A min edge
+ "\x00\x00\x00\x01\x00\x02" // Area A max edge
+ "\x00\x06" // Area A data length
+ "Area A" // Area A data
+ "\x00\x7B\x00\x64\x00\x0A" // Area B min edge (last two swapped with max edge for sorting)
+ "\x7D\x00\x01\xC8\x03\x15" // Area B max edge (^)
+ "\x00\x06" // Area B data length
+ "Area B", // Area B data
+ 1 + 2 +
+ 6 + 6 + 2 + 6 +
+ 6 + 6 + 2 + 6);
+ UASSERTEQ(std::string, str, str_wanted);
+
+ std::istringstream is(str);
+ store.deserialize(is);
+
+ UASSERTEQ(size_t, store.size(), 4); // deserialize() doesn't clear the store
+}
+
diff --git a/src/unittest/test_collision.cpp b/src/unittest/test_collision.cpp
index e505de450..332d3fa13 100644
--- a/src/unittest/test_collision.cpp
+++ b/src/unittest/test_collision.cpp
@@ -51,7 +51,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 1.000) < 0.001);
}
{
@@ -59,21 +59,21 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 3.000) < 0.001);
}
{
@@ -81,7 +81,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 3.000) < 0.001);
}
@@ -91,7 +91,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 1.000) < 0.001);
}
{
@@ -99,21 +99,21 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &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!
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1); // Y, not X!
UASSERT(fabs(dtime - 2.500) < 0.001);
}
{
@@ -121,7 +121,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 2.000) < 0.001);
}
@@ -133,7 +133,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
@@ -141,7 +141,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
@@ -149,7 +149,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
@@ -157,7 +157,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
{
@@ -165,7 +165,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
{
@@ -173,7 +173,7 @@ void TestCollision::testAxisAlignedCollision()
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);
+ UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
}
diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp
index 49f348e9c..4cbc999ea 100644
--- a/src/unittest/test_serialization.cpp
+++ b/src/unittest/test_serialization.cpp
@@ -40,6 +40,9 @@ public:
void testDeSerializeLongString();
void testStreamRead();
void testStreamWrite();
+ void testVecPut();
+ void testStringLengthLimits();
+ void testBufReader();
std::string teststring2;
std::wstring teststring2_w;
@@ -64,6 +67,9 @@ void TestSerialization::runTests(IGameDef *gamedef)
TEST(testSerializeHex);
TEST(testStreamRead);
TEST(testStreamWrite);
+ TEST(testVecPut);
+ TEST(testStringLengthLimits);
+ TEST(testBufReader);
}
////////////////////////////////////////////////////////////////////////////////
@@ -369,6 +375,263 @@ void TestSerialization::testStreamWrite()
}
+void TestSerialization::testVecPut()
+{
+ std::vector<u8> buf;
+
+ putU8(&buf, 0x11);
+ putU16(&buf, 0x2233);
+ putU32(&buf, 0x44556677);
+ putU64(&buf, 0x8899AABBCCDDEEFF);
+
+ putS8(&buf, -128);
+ putS16(&buf, 30000);
+ putS32(&buf, -6);
+ putS64(&buf, -43);
+
+ putF1000(&buf, 53.53467f);
+ putF1000(&buf, -300000.32f);
+ putF1000(&buf, F1000_MIN);
+ putF1000(&buf, F1000_MAX);
+
+ putString(&buf, "foobar!");
+
+ putV2S16(&buf, v2s16(500, 500));
+ putV3S16(&buf, v3s16(4207, 604, -30));
+ putV2S32(&buf, v2s32(1920, 1080));
+ putV3S32(&buf, v3s32(-400, 6400054, 290549855));
+ putV2F1000(&buf, v2f(500.65661f, 350.34567f));
+
+ putWideString(&buf, L"\x02~woof~\x5455");
+
+ putV3F1000(&buf, v3f(500, 10024.2f, -192.54f));
+ putARGB8(&buf, video::SColor(255, 128, 50, 128));
+
+ putLongString(&buf, "some longer string here");
+
+ putU16(&buf, 0xF00D);
+
+ UASSERT(buf.size() == sizeof(test_serialized_data));
+ UASSERT(!memcmp(&buf[0], test_serialized_data, sizeof(test_serialized_data)));
+}
+
+
+void TestSerialization::testStringLengthLimits()
+{
+ std::vector<u8> buf;
+ std::string too_long(STRING_MAX_LEN + 1, 'A');
+ std::string way_too_large(LONG_STRING_MAX_LEN + 1, 'B');
+ std::wstring too_long_wide(WIDE_STRING_MAX_LEN + 1, L'C');
+
+ EXCEPTION_CHECK(SerializationError, putString(&buf, too_long));
+
+ putLongString(&buf, too_long);
+ too_long.resize(too_long.size() - 1);
+ putString(&buf, too_long);
+
+ EXCEPTION_CHECK(SerializationError, putWideString(&buf, too_long_wide));
+ too_long_wide.resize(too_long_wide.size() - 1);
+ putWideString(&buf, too_long_wide);
+}
+
+
+void TestSerialization::testBufReader()
+{
+ u8 u8_data;
+ u16 u16_data;
+ u32 u32_data;
+ u64 u64_data;
+ s8 s8_data;
+ s16 s16_data;
+ s32 s32_data;
+ s64 s64_data;
+ f32 f32_data, f32_data2, f32_data3, f32_data4;
+ video::SColor scolor_data;
+ v2s16 v2s16_data;
+ v3s16 v3s16_data;
+ v2s32 v2s32_data;
+ v3s32 v3s32_data;
+ v2f v2f_data;
+ v3f v3f_data;
+ std::string string_data;
+ std::wstring widestring_data;
+ std::string longstring_data;
+ u8 raw_data[10] = {0};
+
+ BufReader buf(test_serialized_data, sizeof(test_serialized_data));
+
+ // Try reading data like normal
+ UASSERT(buf.getU8() == 0x11);
+ UASSERT(buf.getU16() == 0x2233);
+ UASSERT(buf.getU32() == 0x44556677);
+ UASSERT(buf.getU64() == 0x8899AABBCCDDEEFF);
+ UASSERT(buf.getS8() == -128);
+ UASSERT(buf.getS16() == 30000);
+ UASSERT(buf.getS32() == -6);
+ UASSERT(buf.getS64() == -43);
+ UASSERT(buf.getF1000() == 53.534f);
+ UASSERT(buf.getF1000() == -300000.32f);
+ UASSERT(buf.getF1000() == F1000_MIN);
+ UASSERT(buf.getF1000() == F1000_MAX);
+ UASSERT(buf.getString() == "foobar!");
+ UASSERT(buf.getV2S16() == v2s16(500, 500));
+ UASSERT(buf.getV3S16() == v3s16(4207, 604, -30));
+ UASSERT(buf.getV2S32() == v2s32(1920, 1080));
+ UASSERT(buf.getV3S32() == v3s32(-400, 6400054, 290549855));
+ UASSERT(buf.getV2F1000() == v2f(500.656f, 350.345f));
+ UASSERT(buf.getWideString() == L"\x02~woof~\x5455");
+ UASSERT(buf.getV3F1000() == v3f(500, 10024.2f, -192.54f));
+ UASSERT(buf.getARGB8() == video::SColor(255, 128, 50, 128));
+ UASSERT(buf.getLongString() == "some longer string here");
+
+ // Verify the offset and data is unchanged after a failed read
+ size_t orig_pos = buf.pos;
+ u32_data = 0;
+ UASSERT(buf.getU32NoEx(&u32_data) == false);
+ UASSERT(buf.pos == orig_pos);
+ UASSERT(u32_data == 0);
+
+ // Now try the same for a failed string read
+ UASSERT(buf.getStringNoEx(&string_data) == false);
+ UASSERT(buf.pos == orig_pos);
+ UASSERT(string_data == "");
+
+ // Now try the same for a failed string read
+ UASSERT(buf.getWideStringNoEx(&widestring_data) == false);
+ UASSERT(buf.pos == orig_pos);
+ UASSERT(widestring_data == L"");
+
+ UASSERT(buf.getU16() == 0xF00D);
+
+ UASSERT(buf.remaining() == 0);
+
+ // Check to make sure these each blow exceptions as they're supposed to
+ EXCEPTION_CHECK(SerializationError, buf.getU8());
+ EXCEPTION_CHECK(SerializationError, buf.getU16());
+ EXCEPTION_CHECK(SerializationError, buf.getU32());
+ EXCEPTION_CHECK(SerializationError, buf.getU64());
+
+ EXCEPTION_CHECK(SerializationError, buf.getS8());
+ EXCEPTION_CHECK(SerializationError, buf.getS16());
+ EXCEPTION_CHECK(SerializationError, buf.getS32());
+ EXCEPTION_CHECK(SerializationError, buf.getS64());
+
+ EXCEPTION_CHECK(SerializationError, buf.getF1000());
+ EXCEPTION_CHECK(SerializationError, buf.getARGB8());
+
+ EXCEPTION_CHECK(SerializationError, buf.getV2S16());
+ EXCEPTION_CHECK(SerializationError, buf.getV3S16());
+ EXCEPTION_CHECK(SerializationError, buf.getV2S32());
+ EXCEPTION_CHECK(SerializationError, buf.getV3S32());
+ EXCEPTION_CHECK(SerializationError, buf.getV2F1000());
+ EXCEPTION_CHECK(SerializationError, buf.getV3F1000());
+
+ EXCEPTION_CHECK(SerializationError, buf.getString());
+ EXCEPTION_CHECK(SerializationError, buf.getWideString());
+ EXCEPTION_CHECK(SerializationError, buf.getLongString());
+ EXCEPTION_CHECK(SerializationError,
+ buf.getRawData(raw_data, sizeof(raw_data)));
+
+ // See if we can skip backwards
+ buf.pos = 5;
+ UASSERT(buf.getRawDataNoEx(raw_data, 3) == true);
+ UASSERT(raw_data[0] == 0x66);
+ UASSERT(raw_data[1] == 0x77);
+ UASSERT(raw_data[2] == 0x88);
+
+ UASSERT(buf.getU32() == 0x99AABBCC);
+ UASSERT(buf.pos == 12);
+
+ // Now let's try it all over again using the NoEx variants
+ buf.pos = 0;
+
+ UASSERT(buf.getU8NoEx(&u8_data));
+ UASSERT(buf.getU16NoEx(&u16_data));
+ UASSERT(buf.getU32NoEx(&u32_data));
+ UASSERT(buf.getU64NoEx(&u64_data));
+
+ UASSERT(buf.getS8NoEx(&s8_data));
+ UASSERT(buf.getS16NoEx(&s16_data));
+ UASSERT(buf.getS32NoEx(&s32_data));
+ UASSERT(buf.getS64NoEx(&s64_data));
+
+ UASSERT(buf.getF1000NoEx(&f32_data));
+ UASSERT(buf.getF1000NoEx(&f32_data2));
+ UASSERT(buf.getF1000NoEx(&f32_data3));
+ UASSERT(buf.getF1000NoEx(&f32_data4));
+
+ UASSERT(buf.getStringNoEx(&string_data));
+ UASSERT(buf.getV2S16NoEx(&v2s16_data));
+ UASSERT(buf.getV3S16NoEx(&v3s16_data));
+ UASSERT(buf.getV2S32NoEx(&v2s32_data));
+ UASSERT(buf.getV3S32NoEx(&v3s32_data));
+ UASSERT(buf.getV2F1000NoEx(&v2f_data));
+ UASSERT(buf.getWideStringNoEx(&widestring_data));
+ UASSERT(buf.getV3F1000NoEx(&v3f_data));
+ UASSERT(buf.getARGB8NoEx(&scolor_data));
+
+ UASSERT(buf.getLongStringNoEx(&longstring_data));
+
+ // and make sure we got the correct data
+ UASSERT(u8_data == 0x11);
+ UASSERT(u16_data == 0x2233);
+ UASSERT(u32_data == 0x44556677);
+ UASSERT(u64_data == 0x8899AABBCCDDEEFF);
+ UASSERT(s8_data == -128);
+ UASSERT(s16_data == 30000);
+ UASSERT(s32_data == -6);
+ UASSERT(s64_data == -43);
+ UASSERT(f32_data == 53.534f);
+ UASSERT(f32_data2 == -300000.32f);
+ UASSERT(f32_data3 == F1000_MIN);
+ UASSERT(f32_data4 == F1000_MAX);
+ UASSERT(string_data == "foobar!");
+ UASSERT(v2s16_data == v2s16(500, 500));
+ UASSERT(v3s16_data == v3s16(4207, 604, -30));
+ UASSERT(v2s32_data == v2s32(1920, 1080));
+ UASSERT(v3s32_data == v3s32(-400, 6400054, 290549855));
+ UASSERT(v2f_data == v2f(500.656f, 350.345f));
+ UASSERT(widestring_data == L"\x02~woof~\x5455");
+ UASSERT(v3f_data == v3f(500, 10024.2f, -192.54f));
+ UASSERT(scolor_data == video::SColor(255, 128, 50, 128));
+ UASSERT(longstring_data == "some longer string here");
+
+ UASSERT(buf.remaining() == 2);
+ UASSERT(buf.getRawDataNoEx(raw_data, 3) == false);
+ UASSERT(buf.remaining() == 2);
+ UASSERT(buf.getRawDataNoEx(raw_data, 2) == true);
+ UASSERT(raw_data[0] == 0xF0);
+ UASSERT(raw_data[1] == 0x0D);
+ UASSERT(buf.remaining() == 0);
+
+ // Make sure no more available data causes a failure
+ UASSERT(!buf.getU8NoEx(&u8_data));
+ UASSERT(!buf.getU16NoEx(&u16_data));
+ UASSERT(!buf.getU32NoEx(&u32_data));
+ UASSERT(!buf.getU64NoEx(&u64_data));
+
+ UASSERT(!buf.getS8NoEx(&s8_data));
+ UASSERT(!buf.getS16NoEx(&s16_data));
+ UASSERT(!buf.getS32NoEx(&s32_data));
+ UASSERT(!buf.getS64NoEx(&s64_data));
+
+ UASSERT(!buf.getF1000NoEx(&f32_data));
+ UASSERT(!buf.getARGB8NoEx(&scolor_data));
+
+ UASSERT(!buf.getV2S16NoEx(&v2s16_data));
+ UASSERT(!buf.getV3S16NoEx(&v3s16_data));
+ UASSERT(!buf.getV2S32NoEx(&v2s32_data));
+ UASSERT(!buf.getV3S32NoEx(&v3s32_data));
+ UASSERT(!buf.getV2F1000NoEx(&v2f_data));
+ UASSERT(!buf.getV3F1000NoEx(&v3f_data));
+
+ UASSERT(!buf.getStringNoEx(&string_data));
+ UASSERT(!buf.getWideStringNoEx(&widestring_data));
+ UASSERT(!buf.getLongStringNoEx(&longstring_data));
+ UASSERT(!buf.getRawDataNoEx(raw_data, sizeof(raw_data)));
+}
+
+
const u8 TestSerialization::test_serialized_data[12 * 13] = {
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc,
0xdd, 0xee, 0xff, 0x80, 0x75, 0x30, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
diff --git a/src/unittest/test_threading.cpp b/src/unittest/test_threading.cpp
new file mode 100644
index 000000000..f0df85b2d
--- /dev/null
+++ b/src/unittest/test_threading.cpp
@@ -0,0 +1,182 @@
+/*
+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 "test.h"
+
+#include "threading/atomic.h"
+#include "threading/semaphore.h"
+#include "threading/thread.h"
+
+
+class TestThreading : public TestBase {
+public:
+ TestThreading() { TestManager::registerTestModule(this); }
+ const char *getName() { return "TestThreading"; }
+ void runTests(IGameDef *gamedef);
+
+ void testStartStopWait();
+ void testThreadKill();
+ void testAtomicSemaphoreThread();
+};
+
+static TestThreading g_test_instance;
+
+void TestThreading::runTests(IGameDef *gamedef)
+{
+ TEST(testStartStopWait);
+ TEST(testThreadKill);
+ TEST(testAtomicSemaphoreThread);
+}
+
+class SimpleTestThread : public Thread {
+public:
+ SimpleTestThread(unsigned int interval) :
+ Thread("SimpleTest"),
+ m_interval(interval)
+ {
+ }
+
+private:
+ void *run()
+ {
+ void *retval = this;
+
+ if (isCurrentThread() == false)
+ retval = (void *)0xBAD;
+
+ while (!stopRequested())
+ sleep_ms(m_interval);
+
+ return retval;
+ }
+
+ unsigned int m_interval;
+};
+
+void TestThreading::testStartStopWait()
+{
+ void *thread_retval;
+ SimpleTestThread *thread = new SimpleTestThread(25);
+
+ // Try this a couple times, since a Thread should be reusable after waiting
+ for (size_t i = 0; i != 5; i++) {
+ // Can't wait() on a joined, stopped thread
+ UASSERT(thread->wait() == false);
+
+ // start() should work the first time, but not the second.
+ UASSERT(thread->start() == true);
+ UASSERT(thread->start() == false);
+
+ UASSERT(thread->isRunning() == true);
+ UASSERT(thread->isCurrentThread() == false);
+
+ // Let it loop a few times...
+ sleep_ms(70);
+
+ // It's still running, so the return value shouldn't be available to us.
+ UASSERT(thread->getReturnValue(&thread_retval) == false);
+
+ // stop() should always succeed
+ UASSERT(thread->stop() == true);
+
+ // wait() only needs to wait the first time - the other two are no-ops.
+ UASSERT(thread->wait() == true);
+ UASSERT(thread->wait() == false);
+ UASSERT(thread->wait() == false);
+
+ // Now that the thread is stopped, we should be able to get the
+ // return value, and it should be the object itself.
+ thread_retval = NULL;
+ UASSERT(thread->getReturnValue(&thread_retval) == true);
+ UASSERT(thread_retval == thread);
+ }
+
+ delete thread;
+}
+
+
+void TestThreading::testThreadKill()
+{
+ SimpleTestThread *thread = new SimpleTestThread(300);
+
+ UASSERT(thread->start() == true);
+
+ // kill()ing is quite violent, so let's make sure our victim is sleeping
+ // before we do this... so we don't corrupt the rest of the program's state
+ sleep_ms(100);
+ UASSERT(thread->kill() == true);
+
+ // The state of the thread object should be reset if all went well
+ UASSERT(thread->isRunning() == false);
+ UASSERT(thread->start() == true);
+ UASSERT(thread->stop() == true);
+ UASSERT(thread->wait() == true);
+
+ // kill() after already waiting should fail.
+ UASSERT(thread->kill() == false);
+
+ delete thread;
+}
+
+
+class AtomicTestThread : public Thread {
+public:
+ AtomicTestThread(Atomic<u32> &v, Semaphore &trigger) :
+ Thread("AtomicTest"),
+ val(v),
+ trigger(trigger)
+ {
+ }
+
+private:
+ void *run()
+ {
+ trigger.wait();
+ for (u32 i = 0; i < 0x10000; ++i)
+ ++val;
+ return NULL;
+ }
+
+ Atomic<u32> &val;
+ Semaphore &trigger;
+};
+
+
+void TestThreading::testAtomicSemaphoreThread()
+{
+ Atomic<u32> val;
+ Semaphore trigger;
+ static const u8 num_threads = 4;
+
+ AtomicTestThread *threads[num_threads];
+ for (u8 i = 0; i < num_threads; ++i) {
+ threads[i] = new AtomicTestThread(val, trigger);
+ UASSERT(threads[i]->start());
+ }
+
+ trigger.post(num_threads);
+
+ for (u8 i = 0; i < num_threads; ++i) {
+ threads[i]->wait();
+ delete threads[i];
+ }
+
+ UASSERT(val == num_threads * 0x10000);
+}
+
diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp
index df90d37bd..d73975b9f 100644
--- a/src/unittest/test_utilities.cpp
+++ b/src/unittest/test_utilities.cpp
@@ -43,7 +43,9 @@ public:
void testStrToIntConversion();
void testStringReplace();
void testStringAllowed();
+ void testAsciiPrintableHelper();
void testUTF8();
+ void testRemoveEscapes();
void testWrapRows();
void testIsNumber();
void testIsPowerOfTwo();
@@ -68,7 +70,9 @@ void TestUtilities::runTests(IGameDef *gamedef)
TEST(testStrToIntConversion);
TEST(testStringReplace);
TEST(testStringAllowed);
+ TEST(testAsciiPrintableHelper);
TEST(testUTF8);
+ TEST(testRemoveEscapes);
TEST(testWrapRows);
TEST(testIsNumber);
TEST(testIsPowerOfTwo);
@@ -232,6 +236,18 @@ void TestUtilities::testStringAllowed()
UASSERT(string_allowed_blacklist("hello123", "123") == false);
}
+void TestUtilities::testAsciiPrintableHelper()
+{
+ UASSERT(IS_ASCII_PRINTABLE_CHAR('e') == true);
+ UASSERT(IS_ASCII_PRINTABLE_CHAR('\0') == false);
+
+ // Ensures that there is no cutting off going on...
+ // If there were, 331 would be cut to 75 in this example
+ // and 73 is a valid ASCII char.
+ int ch = 331;
+ UASSERT(IS_ASCII_PRINTABLE_CHAR(ch) == false);
+}
+
void TestUtilities::testUTF8()
{
UASSERT(wide_to_utf8(utf8_to_wide("")) == "");
@@ -239,6 +255,23 @@ void TestUtilities::testUTF8()
== "the shovel dug a crumbly node!");
}
+void TestUtilities::testRemoveEscapes()
+{
+ UASSERT(unescape_enriched<wchar_t>(
+ L"abc\x1bXdef") == L"abcdef");
+ UASSERT(unescape_enriched<wchar_t>(
+ L"abc\x1b(escaped)def") == L"abcdef");
+ UASSERT(unescape_enriched<wchar_t>(
+ L"abc\x1b((escaped with parenthesis\\))def") == L"abcdef");
+ UASSERT(unescape_enriched<wchar_t>(
+ L"abc\x1b(incomplete") == L"abc");
+ UASSERT(unescape_enriched<wchar_t>(
+ L"escape at the end\x1b") == L"escape at the end");
+ // Nested escapes not supported
+ UASSERT(unescape_enriched<wchar_t>(
+ L"abc\x1b(outer \x1b(inner escape)escape)def") == L"abcescape)def");
+}
+
void TestUtilities::testWrapRows()
{
UASSERT(wrap_rows("12345678",4) == "1234\n5678");
@@ -282,7 +315,7 @@ void TestUtilities::testIsPowerOfTwo()
UASSERT(is_power_of_two((1 << exponent)) == true);
UASSERT(is_power_of_two((1 << exponent) + 1) == false);
}
- UASSERT(is_power_of_two((u32)-1) == false);
+ UASSERT(is_power_of_two(U32_MAX) == false);
}
void TestUtilities::testMyround()
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index 33900a43a..0e7cbad07 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -1,4 +1,5 @@
set(UTIL_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/areastore.cpp
${CMAKE_CURRENT_SOURCE_DIR}/auth.cpp
${CMAKE_CURRENT_SOURCE_DIR}/base64.cpp
${CMAKE_CURRENT_SOURCE_DIR}/directiontables.cpp
diff --git a/src/areastore.cpp b/src/util/areastore.cpp
index f9362c4a6..58f08a8c2 100644
--- a/src/areastore.cpp
+++ b/src/util/areastore.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 "areastore.h"
+#include "util/areastore.h"
#include "util/serialize.h"
#include "util/container.h"
@@ -44,97 +44,70 @@ with this program; if not, write to the Free Software Foundation, Inc.,
AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Y) && \
AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Z))
-u16 AreaStore::size() const
+
+AreaStore *AreaStore::getOptimalImplementation()
{
- return areas_map.size();
+#if USE_SPATIAL
+ return new SpatialAreaStore();
+#else
+ return new VectorAreaStore();
+#endif
}
-u32 AreaStore::getFreeId(v3s16 minedge, v3s16 maxedge)
+const Area *AreaStore::getArea(u32 id) const
{
- int keep_on = 100;
- while (keep_on--) {
- m_highest_id++;
- // Handle overflows, we dont want to return 0
- if (m_highest_id == AREA_ID_INVALID)
- m_highest_id++;
- if (areas_map.find(m_highest_id) == areas_map.end())
- return m_highest_id;
- }
- // search failed
- return AREA_ID_INVALID;
+ AreaMap::const_iterator it = areas_map.find(id);
+ if (it == areas_map.end())
+ return NULL;
+ return &it->second;
}
-const Area *AreaStore::getArea(u32 id) const
+void AreaStore::serialize(std::ostream &os) const
{
- const Area *res = NULL;
- std::map<u32, Area>::const_iterator itr = areas_map.find(id);
- if (itr != areas_map.end()) {
- res = &itr->second;
+ writeU8(os, 0); // Serialisation version
+
+ // TODO: Compression?
+ writeU16(os, areas_map.size());
+ for (AreaMap::const_iterator it = areas_map.begin();
+ it != areas_map.end(); ++it) {
+ const Area &a = it->second;
+ writeV3S16(os, a.minedge);
+ writeV3S16(os, a.maxedge);
+ writeU16(os, a.data.size());
+ os.write(a.data.data(), a.data.size());
}
- return res;
}
-#if 0
-Currently, serialisation is commented out. This is because of multiple reasons:
-1. Why do we store the areastore into a file, why not into the database?
-2. We don't use libspatial's serialisation, but we should, or perhaps not, because
- it would remove the ability to switch. Perhaps write migration routines?
-3. Various things need fixing, e.g. the size is serialized as
- c++ implementation defined size_t
-bool AreaStore::deserialize(std::istream &is)
+void AreaStore::deserialize(std::istream &is)
{
u8 ver = readU8(is);
- if (ver != 1)
- return false;
- u16 count_areas = readU16(is);
- for (u16 i = 0; i < count_areas; i++) {
- // deserialize an area
+ if (ver != 0)
+ throw SerializationError("Unknown AreaStore "
+ "serialization version!");
+
+ u16 num_areas = readU16(is);
+ for (u32 i = 0; i < num_areas; ++i) {
Area a;
- a.id = readU32(is);
a.minedge = readV3S16(is);
a.maxedge = readV3S16(is);
- a.datalen = readU16(is);
- a.data = new char[a.datalen];
- is.read((char *) a.data, a.datalen);
- insertArea(a);
+ u16 data_len = readU16(is);
+ char *data = new char[data_len];
+ is.read(data, data_len);
+ a.data = std::string(data, data_len);
+ insertArea(&a);
}
- return true;
}
-
-static bool serialize_area(void *ostr, Area *a)
-{
- std::ostream &os = *((std::ostream *) ostr);
- writeU32(os, a->id);
- writeV3S16(os, a->minedge);
- writeV3S16(os, a->maxedge);
- writeU16(os, a->datalen);
- os.write(a->data, a->datalen);
-
- return false;
-}
-
-
-void AreaStore::serialize(std::ostream &os) const
-{
- // write initial data
- writeU8(os, 1); // serialisation version
- writeU16(os, areas_map.size()); //DANGER: not platform independent
- forEach(&serialize_area, &os);
-}
-
-#endif
-
void AreaStore::invalidateCache()
{
- if (cache_enabled) {
+ if (m_cache_enabled) {
m_res_cache.invalidate();
}
}
void AreaStore::setCacheParams(bool enabled, u8 block_radius, size_t limit)
{
- cache_enabled = enabled;
+ m_cache_enabled = enabled;
m_cacheblock_radius = MYMAX(block_radius, 16);
m_res_cache.setLimit(MYMAX(limit, 20));
invalidateCache();
@@ -163,7 +136,7 @@ void AreaStore::cacheMiss(void *data, const v3s16 &mpos, std::vector<Area *> *de
void AreaStore::getAreasForPos(std::vector<Area *> *result, v3s16 pos)
{
- if (cache_enabled) {
+ if (m_cache_enabled) {
v3s16 mblock = getContainerPos(pos, m_cacheblock_radius);
const std::vector<Area *> *pre_list = m_res_cache.lookupCache(mblock);
@@ -185,42 +158,41 @@ void AreaStore::getAreasForPos(std::vector<Area *> *result, v3s16 pos)
////
-void VectorAreaStore::insertArea(const Area &a)
+bool VectorAreaStore::insertArea(Area *a)
{
- areas_map[a.id] = a;
- m_areas.push_back(&(areas_map[a.id]));
+ if (a->id == U32_MAX)
+ a->id = getNextId();
+ std::pair<AreaMap::iterator, bool> res =
+ areas_map.insert(std::make_pair(a->id, *a));
+ if (!res.second)
+ // ID is not unique
+ return false;
+ m_areas.push_back(&res.first->second);
invalidateCache();
-}
-
-void VectorAreaStore::reserve(size_t count)
-{
- m_areas.reserve(count);
+ return true;
}
bool VectorAreaStore::removeArea(u32 id)
{
- std::map<u32, Area>::iterator itr = areas_map.find(id);
- if (itr != areas_map.end()) {
- size_t msiz = m_areas.size();
- for (size_t i = 0; i < msiz; i++) {
- Area * b = m_areas[i];
- if (b->id == id) {
- areas_map.erase(itr);
- m_areas.erase(m_areas.begin() + i);
- invalidateCache();
- return true;
- }
+ AreaMap::iterator it = areas_map.find(id);
+ if (it == areas_map.end())
+ return false;
+ Area *a = &it->second;
+ for (std::vector<Area *>::iterator v_it = m_areas.begin();
+ v_it != m_areas.end(); ++v_it) {
+ if (*v_it == a) {
+ m_areas.erase(v_it);
+ break;
}
- // we should never get here, it means we did find it in map,
- // but not in the vector
}
- return false;
+ areas_map.erase(it);
+ invalidateCache();
+ return true;
}
void VectorAreaStore::getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos)
{
- size_t msiz = m_areas.size();
- for (size_t i = 0; i < msiz; i++) {
+ for (size_t i = 0; i < m_areas.size(); ++i) {
Area *b = m_areas[i];
if (AST_CONTAINS_PT(b, pos)) {
result->push_back(b);
@@ -231,9 +203,8 @@ void VectorAreaStore::getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos)
void VectorAreaStore::getAreasInArea(std::vector<Area *> *result,
v3s16 minedge, v3s16 maxedge, bool accept_overlap)
{
- size_t msiz = m_areas.size();
- for (size_t i = 0; i < msiz; i++) {
- Area * b = m_areas[i];
+ for (size_t i = 0; i < m_areas.size(); ++i) {
+ Area *b = m_areas[i];
if (accept_overlap ? AST_AREAS_OVERLAP(minedge, maxedge, b) :
AST_CONTAINS_AREA(minedge, maxedge, b)) {
result->push_back(b);
@@ -241,19 +212,6 @@ void VectorAreaStore::getAreasInArea(std::vector<Area *> *result,
}
}
-#if 0
-bool VectorAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const
-{
- size_t msiz = m_areas.size();
- for (size_t i = 0; i < msiz; i++) {
- if (callback(args, m_areas[i])) {
- return true;
- }
- }
- return false;
-}
-#endif
-
#if USE_SPATIAL
static inline SpatialIndex::Region get_spatial_region(const v3s16 minedge,
@@ -273,11 +231,16 @@ static inline SpatialIndex::Point get_spatial_point(const v3s16 pos)
}
-void SpatialAreaStore::insertArea(const Area &a)
+bool SpatialAreaStore::insertArea(Area *a)
{
- areas_map[a.id] = a;
- m_tree->insertData(0, NULL, get_spatial_region(a.minedge, a.maxedge), a.id);
+ if (a->id == U32_MAX)
+ a->id = getNextId();
+ if (!areas_map.insert(std::make_pair(a->id, *a)).second)
+ // ID is not unique
+ return false;
+ m_tree->insertData(0, NULL, get_spatial_region(a->minedge, a->maxedge), a->id);
invalidateCache();
+ return true;
}
bool SpatialAreaStore::removeArea(u32 id)
@@ -287,6 +250,7 @@ bool SpatialAreaStore::removeArea(u32 id)
Area *a = &itr->second;
bool result = m_tree->deleteData(get_spatial_region(a->minedge,
a->maxedge), id);
+ areas_map.erase(itr);
invalidateCache();
return result;
} else {
@@ -312,14 +276,6 @@ void SpatialAreaStore::getAreasInArea(std::vector<Area *> *result,
}
}
-#if 0
-bool SpatialAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const
-{
- // TODO ?? (this is only needed for serialisation, but libspatial has its own serialisation)
- return false;
-}
-#endif
-
SpatialAreaStore::~SpatialAreaStore()
{
delete m_tree;
diff --git a/src/areastore.h b/src/util/areastore.h
index 57d96450b..bebecfd78 100644
--- a/src/areastore.h
+++ b/src/util/areastore.h
@@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef AREASTORE_H_
-#define AREASTORE_H_
+#ifndef AREA_STORE_H_
+#define AREA_STORE_H_
#include "irr_v3d.h"
#include "noise.h" // for PcgRandom
@@ -36,141 +36,147 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#endif
-#define AST_EXTREMIFY(min, max, pa, pb) \
- (min).X = MYMIN((pa).X, (pb).X); \
- (min).Y = MYMIN((pa).Y, (pb).Y); \
- (min).Z = MYMIN((pa).Z, (pb).Z); \
- (max).X = MYMAX((pa).X, (pb).X); \
- (max).Y = MYMAX((pa).Y, (pb).Y); \
- (max).Z = MYMAX((pa).Z, (pb).Z);
-
-#define AREA_ID_INVALID 0
struct Area {
- Area(const v3s16 &minedge, const v3s16 &maxedge)
+ Area() : id(U32_MAX) {}
+ Area(const v3s16 &mine, const v3s16 &maxe) :
+ id(U32_MAX), minedge(mine), maxedge(maxe)
{
- this->minedge = minedge;
- this->maxedge = maxedge;
- }
-
- Area() {}
-
- void extremifyEdges()
- {
- v3s16 nminedge;
- v3s16 nmaxedge;
-
- AST_EXTREMIFY(nminedge, nmaxedge, minedge, maxedge)
-
- maxedge = nmaxedge;
- minedge = nminedge;
+ sortBoxVerticies(minedge, maxedge);
}
u32 id;
- v3s16 minedge;
- v3s16 maxedge;
+ v3s16 minedge, maxedge;
std::string data;
};
-std::vector<std::string> get_areastore_typenames();
class AreaStore {
-protected:
- // TODO change to unordered_map when we can
- std::map<u32, Area> areas_map;
- void invalidateCache();
- virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos) = 0;
- bool cache_enabled; // don't write to this from subclasses, only read.
public:
- virtual void insertArea(const Area &a) = 0;
+ AreaStore() :
+ m_cache_enabled(true),
+ m_cacheblock_radius(64),
+ m_res_cache(1000, &cacheMiss, this),
+ m_next_id(0)
+ {}
+
+ virtual ~AreaStore() {}
+
+ static AreaStore *getOptimalImplementation();
+
virtual void reserve(size_t count) {};
+ size_t size() const { return areas_map.size(); }
+
+ /// Add an area to the store.
+ /// Updates the area's ID if it hasn't already been set.
+ /// @return Whether the area insertion was successful.
+ virtual bool insertArea(Area *a) = 0;
+
+ /// Removes an area from the store by ID.
+ /// @return Whether the area was in the store and removed.
virtual bool removeArea(u32 id) = 0;
+
+ /// Finds areas that the passed position is contained in.
+ /// Stores output in passed vector.
void getAreasForPos(std::vector<Area *> *result, v3s16 pos);
+
+ /// Finds areas that are completely contained inside the area defined
+ /// by the passed edges. If @p accept_overlap is true this finds any
+ /// areas that intersect with the passed area at any point.
virtual void getAreasInArea(std::vector<Area *> *result,
v3s16 minedge, v3s16 maxedge, bool accept_overlap) = 0;
-#if 0
- // calls a passed function for every stored area, until the
- // callback returns true. If that happens, it returns true,
- // if the search is exhausted, it returns false
- virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const = 0;
-#endif
-
- virtual ~AreaStore()
- {}
-
- AreaStore() :
- cache_enabled(true),
- m_cacheblock_radius(64),
- m_res_cache(1000, &cacheMiss, this),
- m_highest_id(0)
- {
- }
-
+ /// Sets cache parameters.
void setCacheParams(bool enabled, u8 block_radius, size_t limit);
- u32 getFreeId(v3s16 minedge, v3s16 maxedge);
+ /// Returns a pointer to the area coresponding to the passed ID,
+ /// or NULL if it doesn't exist.
const Area *getArea(u32 id) const;
- u16 size() const;
-#if 0
- bool deserialize(std::istream &is);
+
+ /// Serializes the store's areas to a binary ostream.
void serialize(std::ostream &is) const;
-#endif
+
+ /// Deserializes the Areas from a binary istream.
+ /// This does not currently clear the AreaStore before adding the
+ /// areas, making it possible to deserialize multiple serialized
+ /// AreaStores.
+ void deserialize(std::istream &is);
+
+protected:
+ /// Invalidates the getAreasForPos cache.
+ /// Call after adding or removing an area.
+ void invalidateCache();
+
+ /// Implementation of getAreasForPos.
+ /// getAreasForPos calls this if the cache is disabled.
+ virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos) = 0;
+
+ /// Returns the next area ID and increments it.
+ u32 getNextId() { return m_next_id++; }
+
+ // Note: This can't be an unordered_map, since all
+ // references would be invalidated on rehash.
+ typedef std::map<u32, Area> AreaMap;
+ AreaMap areas_map;
+
private:
+ /// Called by the cache when a value isn't found in the cache.
static void cacheMiss(void *data, const v3s16 &mpos, std::vector<Area *> *dest);
- u8 m_cacheblock_radius; // if you modify this, call invalidateCache()
+
+ bool m_cache_enabled;
+ /// Range, in nodes, of the getAreasForPos cache.
+ /// If you modify this, call invalidateCache()
+ u8 m_cacheblock_radius;
LRUCache<v3s16, std::vector<Area *> > m_res_cache;
- u32 m_highest_id;
+ u32 m_next_id;
};
class VectorAreaStore : public AreaStore {
-protected:
- virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
public:
- virtual void insertArea(const Area &a);
- virtual void reserve(size_t count);
+ virtual void reserve(size_t count) { m_areas.reserve(count); }
+ virtual bool insertArea(Area *a);
virtual bool removeArea(u32 id);
virtual void getAreasInArea(std::vector<Area *> *result,
v3s16 minedge, v3s16 maxedge, bool accept_overlap);
- // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const;
+
+protected:
+ virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
+
private:
std::vector<Area *> m_areas;
};
+
#if USE_SPATIAL
class SpatialAreaStore : public AreaStore {
-protected:
- virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
public:
SpatialAreaStore();
- virtual void insertArea(const Area &a);
+ virtual ~SpatialAreaStore();
+
+ virtual bool insertArea(Area *a);
virtual bool removeArea(u32 id);
virtual void getAreasInArea(std::vector<Area *> *result,
v3s16 minedge, v3s16 maxedge, bool accept_overlap);
- // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const;
- virtual ~SpatialAreaStore();
+protected:
+ virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
+
private:
SpatialIndex::ISpatialIndex *m_tree;
SpatialIndex::IStorageManager *m_storagemanager;
class VectorResultVisitor : public SpatialIndex::IVisitor {
- private:
- SpatialAreaStore *m_store;
- std::vector<Area *> *m_result;
public:
- VectorResultVisitor(std::vector<Area *> *result, SpatialAreaStore *store)
- {
- m_store = store;
- m_result = result;
- }
+ VectorResultVisitor(std::vector<Area *> *result, SpatialAreaStore *store) :
+ m_store(store),
+ m_result(result)
+ {}
+ ~VectorResultVisitor() {}
- virtual void visitNode(const SpatialIndex::INode &in)
- {
- }
+ virtual void visitNode(const SpatialIndex::INode &in) {}
virtual void visitData(const SpatialIndex::IData &in)
{
@@ -187,10 +193,12 @@ private:
visitData(*(v[i]));
}
- ~VectorResultVisitor() {}
+ private:
+ SpatialAreaStore *m_store;
+ std::vector<Area *> *m_result;
};
};
-#endif
+#endif // USE_SPATIAL
-#endif /* AREASTORE_H_ */
+#endif // AREA_STORE_H_
diff --git a/src/util/auth.cpp b/src/util/auth.cpp
index df8940e87..912987259 100644
--- a/src/util/auth.cpp
+++ b/src/util/auth.cpp
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2015 est31 <MTest31@outlook.com>
+Copyright (C) 2015, 2016 est31 <MTest31@outlook.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
@@ -24,13 +24,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "sha1.h"
#include "srp.h"
#include "string.h"
+#include "debug.h"
// Get an sha-1 hash of the player's name combined with
// the password entered. That's what the server uses as
// their password. (Exception : if the password field is
// blank, we send a blank password - this is for backwards
// compatibility with password-less players).
-std::string translatePassword(const std::string &name,
+std::string translate_password(const std::string &name,
const std::string &password)
{
if (password.length() == 0)
@@ -45,82 +46,92 @@ std::string translatePassword(const std::string &name,
return pwd;
}
-void getSRPVerifier(const std::string &name,
+// Call lower level SRP code to generate a verifier with the
+// given pointers. Contains the preparations, call parameters
+// and error checking common to all srp verifier generation code.
+// See docs of srp_create_salted_verification_key for more info.
+static inline void gen_srp_v(const std::string &name,
const std::string &password, char **salt, size_t *salt_len,
char **bytes_v, size_t *len_v)
{
std::string n_name = lowercase(name);
- srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048,
+ SRP_Result res = srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048,
n_name.c_str(), (const unsigned char *)password.c_str(),
password.size(), (unsigned char **)salt, salt_len,
(unsigned char **)bytes_v, len_v, NULL, NULL);
+ FATAL_ERROR_IF(res != SRP_OK, "Couldn't create salted SRP verifier");
}
-// Get a db-ready SRP verifier
-// If the salt param is NULL, one is automatically generated.
-// Please free() it afterwards. You shouldn't use it for other purposes,
-// as you will need the contents of salt_len too.
-inline static std::string getSRPVerifier(const std::string &name,
- const std::string &password, char ** salt, size_t salt_len)
+/// Creates a verification key with given salt and password.
+std::string generate_srp_verifier(const std::string &name,
+ const std::string &password, const std::string &salt)
{
- char * bytes_v = NULL;
- size_t len_v;
- getSRPVerifier(name, password, salt, &salt_len,
- &bytes_v, &len_v);
- std::string ret_val = encodeSRPVerifier(std::string(bytes_v, len_v),
- std::string(*salt, salt_len));
+ size_t salt_len = salt.size();
+ // The API promises us that the salt doesn't
+ // get modified if &salt_ptr isn't NULL.
+ char *salt_ptr = (char *)salt.c_str();
+
+ char *bytes_v = NULL;
+ size_t verifier_len = 0;
+ gen_srp_v(name, password, &salt_ptr, &salt_len, &bytes_v, &verifier_len);
+ std::string verifier = std::string(bytes_v, verifier_len);
free(bytes_v);
- return ret_val;
+ return verifier;
}
-// Get a db-ready SRP verifier
-std::string getSRPVerifier(const std::string &name,
- const std::string &password)
+/// Creates a verification key and salt with given password.
+void generate_srp_verifier_and_salt(const std::string &name,
+ const std::string &password, std::string *verifier,
+ std::string *salt)
{
- char * salt = NULL;
- std::string ret_val = getSRPVerifier(name,
- password, &salt, 0);
- free(salt);
- return ret_val;
+ char *bytes_v = NULL;
+ size_t verifier_len;
+ char *salt_ptr = NULL;
+ size_t salt_len;
+ gen_srp_v(name, password, &salt_ptr, &salt_len, &bytes_v, &verifier_len);
+ *verifier = std::string(bytes_v, verifier_len);
+ *salt = std::string(salt_ptr, salt_len);
+ free(bytes_v);
+ free(salt_ptr);
}
-// Get a db-ready SRP verifier
-std::string getSRPVerifier(const std::string &name,
- const std::string &password, const std::string &salt)
+/// Gets an SRP verifier, generating a salt,
+/// and encodes it as DB-ready string.
+std::string get_encoded_srp_verifier(const std::string &name,
+ const std::string &password)
{
- // The implementation won't change the salt if its set,
- // therefore we can cast.
- char *salt_cstr = (char *)salt.c_str();
- return getSRPVerifier(name, password,
- &salt_cstr, salt.size());
+ std::string verifier;
+ std::string salt;
+ generate_srp_verifier_and_salt(name, password, &verifier, &salt);
+ return encode_srp_verifier(verifier, salt);
}
-// Make a SRP verifier db-ready
-std::string encodeSRPVerifier(const std::string &verifier,
+/// Converts the passed SRP verifier into a DB-ready format.
+std::string encode_srp_verifier(const std::string &verifier,
const std::string &salt)
{
std::ostringstream ret_str;
ret_str << "#1#"
- << base64_encode((unsigned char*) salt.c_str(), salt.size()) << "#"
- << base64_encode((unsigned char*) verifier.c_str(), verifier.size());
+ << base64_encode((unsigned char *)salt.c_str(), salt.size()) << "#"
+ << base64_encode((unsigned char *)verifier.c_str(), verifier.size());
return ret_str.str();
}
-bool decodeSRPVerifier(const std::string &enc_pwd,
- std::string *salt, std::string *bytes_v)
+/// Reads the DB-formatted SRP verifier and gets the verifier
+/// and salt components.
+bool decode_srp_verifier_and_salt(const std::string &encoded,
+ std::string *verifier, std::string *salt)
{
- std::vector<std::string> pwd_components = str_split(enc_pwd, '#');
+ std::vector<std::string> components = str_split(encoded, '#');
- if ((pwd_components.size() != 4)
- || (pwd_components[1] != "1") // 1 means srp
- || !base64_is_valid(pwd_components[2])
- || !base64_is_valid(pwd_components[3]))
+ if ((components.size() != 4)
+ || (components[1] != "1") // 1 means srp
+ || !base64_is_valid(components[2])
+ || !base64_is_valid(components[3]))
return false;
- std::string salt_str = base64_decode(pwd_components[2]);
- std::string bytes_v_str = base64_decode(pwd_components[3]);
- *salt = salt_str;
- *bytes_v = bytes_v_str;
+ *salt = base64_decode(components[2]);
+ *verifier = base64_decode(components[3]);
return true;
}
diff --git a/src/util/auth.h b/src/util/auth.h
index 36d8c20a4..1fd6ab453 100644
--- a/src/util/auth.h
+++ b/src/util/auth.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2015 est31 <MTest31@outlook.com>
+Copyright (C) 2015, 2016 est31 <MTest31@outlook.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
@@ -20,18 +20,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef AUTH_H
#define AUTH_H
-std::string translatePassword(const std::string &name,
+/// Gets the base64 encoded legacy password db entry.
+std::string translate_password(const std::string &name,
const std::string &password);
-void getSRPVerifier(const std::string &name,
- const std::string &password, char **salt, size_t *salt_len,
- char **bytes_v, size_t *len_v);
-std::string getSRPVerifier(const std::string &name,
- const std::string &password);
-std::string getSRPVerifier(const std::string &name,
+
+/// Creates a verification key with given salt and password.
+std::string generate_srp_verifier(const std::string &name,
const std::string &password, const std::string &salt);
-std::string encodeSRPVerifier(const std::string &verifier,
+
+/// Creates a verification key and salt with given password.
+void generate_srp_verifier_and_salt(const std::string &name,
+ const std::string &password, std::string *verifier,
+ std::string *salt);
+
+/// Gets an SRP verifier, generating a salt,
+/// and encodes it as DB-ready string.
+std::string get_encoded_srp_verifier(const std::string &name,
+ const std::string &password);
+
+/// Converts the passed SRP verifier into a DB-ready format.
+std::string encode_srp_verifier(const std::string &verifier,
const std::string &salt);
-bool decodeSRPVerifier(const std::string &enc_pwd,
+
+/// Reads the DB-formatted SRP verifier and gets the verifier
+/// and salt components.
+bool decode_srp_verifier_and_salt(const std::string &encoded,
std::string *salt, std::string *bytes_v);
-#endif \ No newline at end of file
+#endif
diff --git a/src/util/basic_macros.h b/src/util/basic_macros.h
new file mode 100644
index 000000000..c100b4f25
--- /dev/null
+++ b/src/util/basic_macros.h
@@ -0,0 +1,53 @@
+/*
+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.
+*/
+
+#ifndef BASICMACROS_HEADER
+#define BASICMACROS_HEADER
+
+#include <algorithm>
+
+#define ARRLEN(x) (sizeof(x) / sizeof((x)[0]))
+
+#define MYMIN(a, b) ((a) < (b) ? (a) : (b))
+
+#define MYMAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end())
+
+// To disable copy constructors and assignment operations for some class
+// 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member.
+// Note this also disables copying for any classes derived from 'Foobar' as well
+// as classes having a 'Foobar' member.
+#define DISABLE_CLASS_COPY(C) \
+ C(const C &); \
+ C &operator=(const C &)
+
+#ifndef _MSC_VER
+ #define UNUSED_ATTRIBUTE __attribute__ ((unused))
+#else
+ #define UNUSED_ATTRIBUTE
+#endif
+
+// Fail compilation if condition expr is not met.
+// Note that 'msg' must follow the format of a valid identifier, e.g.
+// STATIC_ASSERT(sizeof(foobar_t) == 40), foobar_t_is_wrong_size);
+#define STATIC_ASSERT(expr, msg) \
+ UNUSED_ATTRIBUTE typedef char msg[!!(expr) * 2 - 1]
+
+#endif
diff --git a/src/util/container.h b/src/util/container.h
index 267d54c16..7f66b89ac 100644
--- a/src/util/container.h
+++ b/src/util/container.h
@@ -22,9 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "../irrlichttypes.h"
#include "../exceptions.h"
-#include "../jthread/jmutex.h"
-#include "../jthread/jmutexautolock.h"
-#include "../jthread/jsemaphore.h"
+#include "../threading/mutex.h"
+#include "../threading/mutex_auto_lock.h"
+#include "../threading/semaphore.h"
#include <list>
#include <vector>
#include <map>
@@ -81,111 +81,47 @@ template<typename Key, typename Value>
class MutexedMap
{
public:
- MutexedMap()
- {
- }
+ MutexedMap() {}
void set(const Key &name, const Value &value)
{
- JMutexAutoLock lock(m_mutex);
-
+ MutexAutoLock lock(m_mutex);
m_values[name] = value;
}
- bool get(const Key &name, Value *result)
+ bool get(const Key &name, Value *result) const
{
- JMutexAutoLock lock(m_mutex);
-
- typename std::map<Key, Value>::iterator n;
- n = m_values.find(name);
-
- if(n == m_values.end())
+ MutexAutoLock lock(m_mutex);
+ typename std::map<Key, Value>::const_iterator n =
+ m_values.find(name);
+ if (n == m_values.end())
return false;
-
- if(result != NULL)
+ if (result)
*result = n->second;
-
return true;
}
- std::vector<Value> getValues()
+ std::vector<Value> getValues() const
{
+ MutexAutoLock lock(m_mutex);
std::vector<Value> result;
- for(typename std::map<Key, Value>::iterator
- i = m_values.begin();
- i != m_values.end(); ++i){
- result.push_back(i->second);
+ for (typename std::map<Key, Value>::const_iterator
+ it = m_values.begin();
+ it != m_values.end(); ++it){
+ result.push_back(it->second);
}
return result;
}
- void clear ()
- {
- m_values.clear();
- }
+ void clear() { m_values.clear(); }
private:
std::map<Key, Value> m_values;
- JMutex m_mutex;
+ mutable Mutex m_mutex;
};
-/*
-Generates ids for comparable values.
-Id=0 is reserved for "no value".
-Is fast at:
-- Returning value by id (very fast)
-- Returning id by value
-- Generating a new id for a value
-
-Is not able to:
-- Remove an id/value pair (is possible to implement but slow)
-*/
-template<typename T>
-class MutexedIdGenerator
-{
-public:
- MutexedIdGenerator()
- {
- }
-
- // Returns true if found
- bool getValue(u32 id, T &value)
- {
- if(id == 0)
- return false;
- JMutexAutoLock lock(m_mutex);
- if(m_id_to_value.size() < id)
- return false;
- value = m_id_to_value[id-1];
- return true;
- }
-
- // If id exists for value, returns the id.
- // Otherwise generates an id for the value.
- u32 getId(const T &value)
- {
- JMutexAutoLock lock(m_mutex);
- typename std::map<T, u32>::iterator n;
- n = m_value_to_id.find(value);
- if(n != m_value_to_id.end())
- return n->second;
- m_id_to_value.push_back(value);
- u32 new_id = m_id_to_value.size();
- m_value_to_id.insert(value, new_id);
- return new_id;
- }
-
-private:
- JMutex m_mutex;
- // Values are stored here at id-1 position (id 1 = [0])
- std::vector<T> m_id_to_value;
- std::map<T, u32> m_value_to_id;
-};
-
-/*
-Thread-safe FIFO queue (well, actually a FILO also)
-*/
+// Thread-safe Double-ended queue
template<typename T>
class MutexedQueue
@@ -194,19 +130,18 @@ public:
template<typename Key, typename U, typename Caller, typename CallerData>
friend class RequestQueue;
- MutexedQueue()
- {
- }
- bool empty()
+ MutexedQueue() {}
+ bool empty() const
{
- JMutexAutoLock lock(m_mutex);
- return (m_queue.size() == 0);
+ MutexAutoLock lock(m_mutex);
+ return m_queue.empty();
}
+
void push_back(T t)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
m_queue.push_back(t);
- m_size.Post();
+ m_signal.post();
}
/* this version of pop_front returns a empty element of T on timeout.
@@ -214,37 +149,35 @@ public:
*/
T pop_frontNoEx(u32 wait_time_max_ms)
{
- if (m_size.Wait(wait_time_max_ms)) {
- JMutexAutoLock lock(m_mutex);
+ if (m_signal.wait(wait_time_max_ms)) {
+ MutexAutoLock lock(m_mutex);
T t = m_queue.front();
m_queue.pop_front();
return t;
- }
- else {
+ } else {
return T();
}
}
T pop_front(u32 wait_time_max_ms)
{
- if (m_size.Wait(wait_time_max_ms)) {
- JMutexAutoLock lock(m_mutex);
+ if (m_signal.wait(wait_time_max_ms)) {
+ MutexAutoLock lock(m_mutex);
T t = m_queue.front();
m_queue.pop_front();
return t;
- }
- else {
+ } else {
throw ItemNotFoundException("MutexedQueue: queue is empty");
}
}
T pop_frontNoEx()
{
- m_size.Wait();
+ m_signal.wait();
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
T t = m_queue.front();
m_queue.pop_front();
@@ -253,14 +186,13 @@ public:
T pop_back(u32 wait_time_max_ms=0)
{
- if (m_size.Wait(wait_time_max_ms)) {
- JMutexAutoLock lock(m_mutex);
+ if (m_signal.wait(wait_time_max_ms)) {
+ MutexAutoLock lock(m_mutex);
T t = m_queue.back();
m_queue.pop_back();
return t;
- }
- else {
+ } else {
throw ItemNotFoundException("MutexedQueue: queue is empty");
}
}
@@ -268,25 +200,24 @@ public:
/* this version of pop_back returns a empty element of T on timeout.
* Make sure default constructor of T creates a recognizable "empty" element
*/
- T pop_backNoEx(u32 wait_time_max_ms=0)
+ T pop_backNoEx(u32 wait_time_max_ms)
{
- if (m_size.Wait(wait_time_max_ms)) {
- JMutexAutoLock lock(m_mutex);
+ if (m_signal.wait(wait_time_max_ms)) {
+ MutexAutoLock lock(m_mutex);
T t = m_queue.back();
m_queue.pop_back();
return t;
- }
- else {
+ } else {
return T();
}
}
T pop_backNoEx()
{
- m_size.Wait();
+ m_signal.wait();
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
T t = m_queue.back();
m_queue.pop_back();
@@ -294,19 +225,13 @@ public:
}
protected:
- JMutex & getMutex()
- {
- return m_mutex;
- }
+ Mutex &getMutex() { return m_mutex; }
- std::deque<T> & getQueue()
- {
- return m_queue;
- }
+ std::deque<T> &getQueue() { return m_queue; }
std::deque<T> m_queue;
- JMutex m_mutex;
- JSemaphore m_size;
+ mutable Mutex m_mutex;
+ Semaphore m_signal;
};
template<typename K, typename V>
diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp
index 3fd1c9cf9..42ebd9022 100644
--- a/src/util/numeric.cpp
+++ b/src/util/numeric.cpp
@@ -23,17 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "../constants.h" // BS, MAP_BLOCKSIZE
#include "../noise.h" // PseudoRandom, PcgRandom
-#include "../jthread/jmutexautolock.h"
+#include "../threading/mutex_auto_lock.h"
#include <string.h>
#include <iostream>
std::map<u16, std::vector<v3s16> > FacePositionCache::m_cache;
-JMutex FacePositionCache::m_cache_mutex;
+Mutex FacePositionCache::m_cache_mutex;
// Calculate the borders of a "d-radius" cube
// TODO: Make it work without mutex and data races, probably thread-local
std::vector<v3s16> FacePositionCache::getFacePositions(u16 d)
{
- JMutexAutoLock cachelock(m_cache_mutex);
+ MutexAutoLock cachelock(m_cache_mutex);
if (m_cache.find(d) != m_cache.end())
return m_cache[d];
@@ -244,7 +244,10 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
f32 cosangle = dforward / blockpos_adj.getLength();
// If block is not in the field of view, skip it
- if(cosangle < cos(camera_fov / 2))
+ // HOTFIX: use sligthly increased angle (+10%) to fix too agressive
+ // culling. Somebody have to find out whats wrong with the math here.
+ // Previous value: camera_fov / 2
+ if(cosangle < cos(camera_fov * 0.55))
return false;
return true;
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 9fe08434f..615327864 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -20,15 +20,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef UTIL_NUMERIC_HEADER
#define UTIL_NUMERIC_HEADER
+#include "basic_macros.h"
#include "../irrlichttypes.h"
#include "../irr_v2d.h"
#include "../irr_v3d.h"
#include "../irr_aabb3d.h"
-#include "../jthread/jmutex.h"
+#include "../threading/mutex.h"
#include <list>
#include <map>
#include <vector>
-#include <algorithm>
/*
@@ -42,7 +42,7 @@ public:
private:
static void generateFacePosition(u16 d);
static std::map<u16, std::vector<v3s16> > m_cache;
- static JMutex m_cache_mutex;
+ static Mutex m_cache_mutex;
};
class IndentationRaiser
@@ -166,9 +166,6 @@ inline v3s16 arealim(v3s16 p, s16 d)
return p;
}
-#define ARRLEN(x) (sizeof(x) / sizeof((x)[0]))
-#define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end())
-
// The naive swap performs better than the xor version
#define SWAP(t, x, y) do { \
t temp = x; \
@@ -279,12 +276,6 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
f32 camera_fov, f32 range, f32 *distance_ptr=NULL);
/*
- Some helper stuff
-*/
-#define MYMIN(a,b) ((a)<(b)?(a):(b))
-#define MYMAX(a,b) ((a)>(b)?(a):(b))
-
-/*
Returns nearest 32-bit integer for given floating point number.
<cmath> and <math.h> in VC++ don't provide round().
*/
@@ -319,9 +310,9 @@ inline v3f intToFloat(v3s16 p, f32 d)
}
// Random helper. Usually d=BS
-inline core::aabbox3d<f32> getNodeBox(v3s16 p, float d)
+inline aabb3f getNodeBox(v3s16 p, float d)
{
- return core::aabbox3d<f32>(
+ return aabb3f(
(float)p.X * d - 0.5*d,
(float)p.Y * d - 0.5*d,
(float)p.Z * d - 0.5*d,
diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp
index c0168776e..99cb990f1 100644
--- a/src/util/serialize.cpp
+++ b/src/util/serialize.cpp
@@ -28,6 +28,77 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iomanip>
#include <vector>
+SerializationError eof_ser_err("Attempted read past end of data");
+
+////
+//// BufReader
+////
+
+bool BufReader::getStringNoEx(std::string *val)
+{
+ u16 num_chars;
+ if (!getU16NoEx(&num_chars))
+ return false;
+
+ if (pos + num_chars > size) {
+ pos -= sizeof(num_chars);
+ return false;
+ }
+
+ val->assign((const char *)data + pos, num_chars);
+ pos += num_chars;
+
+ return true;
+}
+
+bool BufReader::getWideStringNoEx(std::wstring *val)
+{
+ u16 num_chars;
+ if (!getU16NoEx(&num_chars))
+ return false;
+
+ if (pos + num_chars * 2 > size) {
+ pos -= sizeof(num_chars);
+ return false;
+ }
+
+ for (size_t i = 0; i != num_chars; i++) {
+ val->push_back(readU16(data + pos));
+ pos += 2;
+ }
+
+ return true;
+}
+
+bool BufReader::getLongStringNoEx(std::string *val)
+{
+ u32 num_chars;
+ if (!getU32NoEx(&num_chars))
+ return false;
+
+ if (pos + num_chars > size) {
+ pos -= sizeof(num_chars);
+ return false;
+ }
+
+ val->assign((const char *)data + pos, num_chars);
+ pos += num_chars;
+
+ return true;
+}
+
+bool BufReader::getRawDataNoEx(void *val, size_t len)
+{
+ if (pos + len > size)
+ return false;
+
+ memcpy(val, data + pos, len);
+ pos += len;
+
+ return true;
+}
+
+
////
//// String
////
@@ -158,7 +229,7 @@ std::string deSerializeLongString(std::istream &is)
Buffer<char> buf2(s_size);
is.read(&buf2[0], s_size);
- if (is.gcount() != s_size)
+ if ((u32)is.gcount() != s_size)
throw SerializationError("deSerializeLongString: couldn't read all chars");
s.reserve(s_size);
diff --git a/src/util/serialize.h b/src/util/serialize.h
index bf0d9c863..36324a675 100644
--- a/src/util/serialize.h
+++ b/src/util/serialize.h
@@ -21,14 +21,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define UTIL_SERIALIZE_HEADER
#include "../irrlichttypes_bloated.h"
+#include "../exceptions.h" // for SerializationError
#include "../debug.h" // for assert
+
#include "config.h"
#if HAVE_ENDIAN_H
-#include <endian.h>
-#include <string.h> // for memcpy
+ #ifdef _WIN32
+ #define __BYTE_ORDER 0
+ #define __LITTLE_ENDIAN 0
+ #define __BIG_ENDIAN 1
+ #elif defined(__MACH__) && defined(__APPLE__)
+ #include <machine/endian.h>
+ #elif defined(__FreeBSD__)
+ #include <sys/endian.h>
+ #else
+ #include <endian.h>
+ #endif
#endif
+#include <string.h> // for memcpy
#include <iostream>
#include <string>
+#include <vector>
#define FIXEDPOINT_FACTOR 1000.0f
@@ -405,4 +418,238 @@ bool serializeStructToString(std::string *out,
bool deSerializeStringToStruct(std::string valstr,
std::string format, void *out, size_t olen);
+////
+//// BufReader
+////
+
+extern SerializationError eof_ser_err;
+
+#define MAKE_BUFREADER_GETNOEX_FXN(T, N, S) \
+ inline bool get ## N ## NoEx(T *val) \
+ { \
+ if (pos + S > size) \
+ return false; \
+ *val = read ## N(data + pos); \
+ pos += S; \
+ return true; \
+ }
+
+#define MAKE_BUFREADER_GET_FXN(T, N) \
+ inline T get ## N() \
+ { \
+ T val; \
+ if (!get ## N ## NoEx(&val)) \
+ throw eof_ser_err; \
+ return val; \
+ }
+
+class BufReader {
+public:
+ BufReader(const u8 *data_, size_t size_) :
+ data(data_),
+ size(size_),
+ pos(0)
+ {
+ }
+
+ MAKE_BUFREADER_GETNOEX_FXN(u8, U8, 1);
+ MAKE_BUFREADER_GETNOEX_FXN(u16, U16, 2);
+ MAKE_BUFREADER_GETNOEX_FXN(u32, U32, 4);
+ MAKE_BUFREADER_GETNOEX_FXN(u64, U64, 8);
+ MAKE_BUFREADER_GETNOEX_FXN(s8, S8, 1);
+ MAKE_BUFREADER_GETNOEX_FXN(s16, S16, 2);
+ MAKE_BUFREADER_GETNOEX_FXN(s32, S32, 4);
+ MAKE_BUFREADER_GETNOEX_FXN(s64, S64, 8);
+ MAKE_BUFREADER_GETNOEX_FXN(f32, F1000, 4);
+ MAKE_BUFREADER_GETNOEX_FXN(v2s16, V2S16, 4);
+ MAKE_BUFREADER_GETNOEX_FXN(v3s16, V3S16, 6);
+ MAKE_BUFREADER_GETNOEX_FXN(v2s32, V2S32, 8);
+ MAKE_BUFREADER_GETNOEX_FXN(v3s32, V3S32, 12);
+ MAKE_BUFREADER_GETNOEX_FXN(v2f, V2F1000, 8);
+ MAKE_BUFREADER_GETNOEX_FXN(v3f, V3F1000, 12);
+ MAKE_BUFREADER_GETNOEX_FXN(video::SColor, ARGB8, 4);
+
+ bool getStringNoEx(std::string *val);
+ bool getWideStringNoEx(std::wstring *val);
+ bool getLongStringNoEx(std::string *val);
+ bool getRawDataNoEx(void *data, size_t len);
+
+ MAKE_BUFREADER_GET_FXN(u8, U8);
+ MAKE_BUFREADER_GET_FXN(u16, U16);
+ MAKE_BUFREADER_GET_FXN(u32, U32);
+ MAKE_BUFREADER_GET_FXN(u64, U64);
+ MAKE_BUFREADER_GET_FXN(s8, S8);
+ MAKE_BUFREADER_GET_FXN(s16, S16);
+ MAKE_BUFREADER_GET_FXN(s32, S32);
+ MAKE_BUFREADER_GET_FXN(s64, S64);
+ MAKE_BUFREADER_GET_FXN(f32, F1000);
+ MAKE_BUFREADER_GET_FXN(v2s16, V2S16);
+ MAKE_BUFREADER_GET_FXN(v3s16, V3S16);
+ MAKE_BUFREADER_GET_FXN(v2s32, V2S32);
+ MAKE_BUFREADER_GET_FXN(v3s32, V3S32);
+ MAKE_BUFREADER_GET_FXN(v2f, V2F1000);
+ MAKE_BUFREADER_GET_FXN(v3f, V3F1000);
+ MAKE_BUFREADER_GET_FXN(video::SColor, ARGB8);
+ MAKE_BUFREADER_GET_FXN(std::string, String);
+ MAKE_BUFREADER_GET_FXN(std::wstring, WideString);
+ MAKE_BUFREADER_GET_FXN(std::string, LongString);
+
+ inline void getRawData(void *val, size_t len)
+ {
+ if (!getRawDataNoEx(val, len))
+ throw eof_ser_err;
+ }
+
+ inline size_t remaining()
+ {
+ assert(pos <= size);
+ return size - pos;
+ }
+
+ const u8 *data;
+ size_t size;
+ size_t pos;
+};
+
+#undef MAKE_BUFREADER_GET_FXN
+#undef MAKE_BUFREADER_GETNOEX_FXN
+
+
+////
+//// Vector-based write routines
+////
+
+inline void putU8(std::vector<u8> *dest, u8 val)
+{
+ dest->push_back((val >> 0) & 0xFF);
+}
+
+inline void putU16(std::vector<u8> *dest, u16 val)
+{
+ dest->push_back((val >> 8) & 0xFF);
+ dest->push_back((val >> 0) & 0xFF);
+}
+
+inline void putU32(std::vector<u8> *dest, u32 val)
+{
+ dest->push_back((val >> 24) & 0xFF);
+ dest->push_back((val >> 16) & 0xFF);
+ dest->push_back((val >> 8) & 0xFF);
+ dest->push_back((val >> 0) & 0xFF);
+}
+
+inline void putU64(std::vector<u8> *dest, u64 val)
+{
+ dest->push_back((val >> 56) & 0xFF);
+ dest->push_back((val >> 48) & 0xFF);
+ dest->push_back((val >> 40) & 0xFF);
+ dest->push_back((val >> 32) & 0xFF);
+ dest->push_back((val >> 24) & 0xFF);
+ dest->push_back((val >> 16) & 0xFF);
+ dest->push_back((val >> 8) & 0xFF);
+ dest->push_back((val >> 0) & 0xFF);
+}
+
+inline void putS8(std::vector<u8> *dest, s8 val)
+{
+ putU8(dest, val);
+}
+
+inline void putS16(std::vector<u8> *dest, s16 val)
+{
+ putU16(dest, val);
+}
+
+inline void putS32(std::vector<u8> *dest, s32 val)
+{
+ putU32(dest, val);
+}
+
+inline void putS64(std::vector<u8> *dest, s64 val)
+{
+ putU64(dest, val);
+}
+
+inline void putF1000(std::vector<u8> *dest, f32 val)
+{
+ putS32(dest, val * FIXEDPOINT_FACTOR);
+}
+
+inline void putV2S16(std::vector<u8> *dest, v2s16 val)
+{
+ putS16(dest, val.X);
+ putS16(dest, val.Y);
+}
+
+inline void putV3S16(std::vector<u8> *dest, v3s16 val)
+{
+ putS16(dest, val.X);
+ putS16(dest, val.Y);
+ putS16(dest, val.Z);
+}
+
+inline void putV2S32(std::vector<u8> *dest, v2s32 val)
+{
+ putS32(dest, val.X);
+ putS32(dest, val.Y);
+}
+
+inline void putV3S32(std::vector<u8> *dest, v3s32 val)
+{
+ putS32(dest, val.X);
+ putS32(dest, val.Y);
+ putS32(dest, val.Z);
+}
+
+inline void putV2F1000(std::vector<u8> *dest, v2f val)
+{
+ putF1000(dest, val.X);
+ putF1000(dest, val.Y);
+}
+
+inline void putV3F1000(std::vector<u8> *dest, v3f val)
+{
+ putF1000(dest, val.X);
+ putF1000(dest, val.Y);
+ putF1000(dest, val.Z);
+}
+
+inline void putARGB8(std::vector<u8> *dest, video::SColor val)
+{
+ putU32(dest, val.color);
+}
+
+inline void putString(std::vector<u8> *dest, const std::string &val)
+{
+ if (val.size() > STRING_MAX_LEN)
+ throw SerializationError("String too long");
+
+ putU16(dest, val.size());
+ dest->insert(dest->end(), val.begin(), val.end());
+}
+
+inline void putWideString(std::vector<u8> *dest, const std::wstring &val)
+{
+ if (val.size() > WIDE_STRING_MAX_LEN)
+ throw SerializationError("String too long");
+
+ putU16(dest, val.size());
+ for (size_t i = 0; i != val.size(); i++)
+ putU16(dest, val[i]);
+}
+
+inline void putLongString(std::vector<u8> *dest, const std::string &val)
+{
+ if (val.size() > LONG_STRING_MAX_LEN)
+ throw SerializationError("String too long");
+
+ putU32(dest, val.size());
+ dest->insert(dest->end(), val.begin(), val.end());
+}
+
+inline void putRawData(std::vector<u8> *dest, const void *src, size_t len)
+{
+ dest->insert(dest->end(), (u8 *)src, (u8 *)src + len);
+}
+
#endif
diff --git a/src/util/srp.cpp b/src/util/srp.cpp
index 94426db92..0d3c938a3 100644
--- a/src/util/srp.cpp
+++ b/src/util/srp.cpp
@@ -26,12 +26,14 @@
*
*/
+// clang-format off
#ifdef WIN32
#include <windows.h>
#include <wincrypt.h>
#else
#include <time.h>
#endif
+// clang-format on
#include <stdlib.h>
#include <string.h>
@@ -69,124 +71,137 @@ static int g_initialized = 0;
static unsigned int g_rand_idx;
static unsigned char g_rand_buff[RAND_BUFF_MAX];
-typedef struct
+void *(*srp_alloc)(size_t) = &malloc;
+void *(*srp_realloc)(void *, size_t) = &realloc;
+void (*srp_free)(void *) = &free;
+
+// clang-format off
+void srp_set_memory_functions(
+ void *(*new_srp_alloc)(size_t),
+ void *(*new_srp_realloc)(void *, size_t),
+ void (*new_srp_free)(void *))
{
+ srp_alloc = new_srp_alloc;
+ srp_realloc = new_srp_realloc;
+ srp_free = new_srp_free;
+}
+// clang-format on
+
+typedef struct {
mpz_t N;
mpz_t g;
} NGConstant;
-struct NGHex
-{
- const char* n_hex;
- const char* g_hex;
+struct NGHex {
+ const char *n_hex;
+ const char *g_hex;
};
/* All constants here were pulled from Appendix A of RFC 5054 */
static struct NGHex global_Ng_constants[] = {
- { /* 1024 */
- "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C9C256576D674DF7496"
- "EA81D3383B4813D692C6E0E0D5D8E250B98BE48E495C1D6089DAD15DC7D7B46154D6B6CE8E"
- "F4AD69B15D4982559B297BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA"
- "9AFD5138FE8376435B9FC61D2FC0EB06E3",
- "2"
- },
- { /* 2048 */
- "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4"
- "A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF60"
- "95179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF"
- "747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B907"
- "8717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB37861"
- "60279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DB"
- "FBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73",
- "2"
- },
- { /* 4096 */
- "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
- "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
- "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
- "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
- "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
- "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
- "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
- "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
- "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
- "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
- "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
- "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
- "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
- "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
- "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
- "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
- "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
- "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
- "FFFFFFFFFFFFFFFF",
- "5"
- },
- { /* 8192 */
- "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
- "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
- "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
- "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
- "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
- "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
- "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
- "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
- "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
- "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
- "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
- "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
- "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
- "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
- "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
- "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
- "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
- "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
- "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406"
- "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918"
- "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151"
- "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03"
- "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F"
- "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
- "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B"
- "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632"
- "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E"
- "6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA"
- "3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C"
- "5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
- "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886"
- "2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6"
- "6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5"
- "0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268"
- "359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6"
- "FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
- "60C980DD98EDD3DFFFFFFFFFFFFFFFFF",
- "13"
- },
- {0,0} /* null sentinel */
+ {/* 1024 */
+ "EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C"
+ "9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE4"
+ "8E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B29"
+ "7BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9A"
+ "FD5138FE8376435B9FC61D2FC0EB06E3",
+ "2"},
+ {/* 2048 */
+ "AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC319294"
+ "3DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310D"
+ "CD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FB"
+ "D5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF74"
+ "7359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A"
+ "436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D"
+ "5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E73"
+ "03CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB6"
+ "94B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F"
+ "9E4AFF73",
+ "2"},
+ {/* 4096 */
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
+ "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
+ "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
+ "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
+ "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
+ "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
+ "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
+ "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
+ "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
+ "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
+ "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
+ "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
+ "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
+ "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
+ "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
+ "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
+ "FFFFFFFFFFFFFFFF",
+ "5"},
+ {/* 8192 */
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
+ "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
+ "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
+ "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
+ "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
+ "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
+ "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
+ "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
+ "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
+ "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
+ "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
+ "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
+ "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
+ "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
+ "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
+ "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
+ "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406"
+ "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918"
+ "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151"
+ "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03"
+ "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F"
+ "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
+ "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B"
+ "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632"
+ "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E"
+ "6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA"
+ "3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C"
+ "5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
+ "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886"
+ "2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6"
+ "6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5"
+ "0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268"
+ "359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6"
+ "FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
+ "60C980DD98EDD3DFFFFFFFFFFFFFFFFF",
+ "13"},
+ {0, 0} /* null sentinel */
};
-
static void delete_ng(NGConstant *ng)
{
if (ng) {
mpz_clear(ng->N);
mpz_clear(ng->g);
- free(ng);
+ srp_free(ng);
}
}
-static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_hex )
+static NGConstant *new_ng(SRP_NGType ng_type, const char *n_hex, const char *g_hex)
{
- NGConstant *ng = (NGConstant *) malloc(sizeof(NGConstant));
+ NGConstant *ng = (NGConstant *)srp_alloc(sizeof(NGConstant));
+
+ if (!ng) return 0;
+
mpz_init(ng->N);
mpz_init(ng->g);
- if (!ng)
- return 0;
-
if (ng_type != SRP_NG_CUSTOM) {
- n_hex = global_Ng_constants[ ng_type ].n_hex;
- g_hex = global_Ng_constants[ ng_type ].g_hex;
+ n_hex = global_Ng_constants[ng_type].n_hex;
+ g_hex = global_Ng_constants[ng_type].g_hex;
}
int rv = 0;
@@ -201,17 +216,13 @@ static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_
return ng;
}
-
-typedef union
-{
- SHA_CTX sha;
+typedef union {
+ SHA_CTX sha;
SHA256_CTX sha256;
- //SHA512_CTX sha512;
+ // SHA512_CTX sha512;
} HashCTX;
-
-struct SRPVerifier
-{
+struct SRPVerifier {
SRP_HashAlgorithm hash_alg;
NGConstant *ng;
@@ -224,9 +235,7 @@ struct SRPVerifier
unsigned char session_key[SHA512_DIGEST_LENGTH];
};
-
-struct SRPUser
-{
+struct SRPUser {
SRP_HashAlgorithm hash_alg;
NGConstant *ng;
@@ -247,19 +256,23 @@ struct SRPUser
unsigned char session_key[SHA512_DIGEST_LENGTH];
};
-
+// clang-format off
static int hash_init(SRP_HashAlgorithm alg, HashCTX *c)
{
switch (alg) {
#ifdef CSRP_USE_SHA1
case SRP_SHA1: return SHA1_Init(&c->sha);
#endif
- /*case SRP_SHA224: return SHA224_Init(&c->sha256);*/
+ /*
+ case SRP_SHA224: return SHA224_Init(&c->sha256);
+ */
#ifdef CSRP_USE_SHA256
case SRP_SHA256: return SHA256_Init(&c->sha256);
#endif
- /*case SRP_SHA384: return SHA384_Init(&c->sha512);
- case SRP_SHA512: return SHA512_Init(&c->sha512);*/
+ /*
+ case SRP_SHA384: return SHA384_Init(&c->sha512);
+ case SRP_SHA512: return SHA512_Init(&c->sha512);
+ */
default: return -1;
};
}
@@ -269,12 +282,16 @@ static int hash_update( SRP_HashAlgorithm alg, HashCTX *c, const void *data, siz
#ifdef CSRP_USE_SHA1
case SRP_SHA1: return SHA1_Update(&c->sha, data, len);
#endif
- /*case SRP_SHA224: return SHA224_Update(&c->sha256, data, len);*/
+ /*
+ case SRP_SHA224: return SHA224_Update(&c->sha256, data, len);
+ */
#ifdef CSRP_USE_SHA256
case SRP_SHA256: return SHA256_Update(&c->sha256, data, len);
#endif
- /*case SRP_SHA384: return SHA384_Update( &c->sha512, data, len );
- case SRP_SHA512: return SHA512_Update( &c->sha512, data, len );*/
+ /*
+ case SRP_SHA384: return SHA384_Update(&c->sha512, data, len);
+ case SRP_SHA512: return SHA512_Update(&c->sha512, data, len);
+ */
default: return -1;
};
}
@@ -284,12 +301,16 @@ static int hash_final( SRP_HashAlgorithm alg, HashCTX *c, unsigned char *md )
#ifdef CSRP_USE_SHA1
case SRP_SHA1: return SHA1_Final(md, &c->sha);
#endif
- /*case SRP_SHA224: return SHA224_Final(md, &c->sha256);*/
+ /*
+ case SRP_SHA224: return SHA224_Final(md, &c->sha256);
+ */
#ifdef CSRP_USE_SHA256
case SRP_SHA256: return SHA256_Final(md, &c->sha256);
#endif
- /*case SRP_SHA384: return SHA384_Final(md, &c->sha512);
- case SRP_SHA512: return SHA512_Final(md, &c->sha512);*/
+ /*
+ case SRP_SHA384: return SHA384_Final(md, &c->sha512);
+ case SRP_SHA512: return SHA512_Final(md, &c->sha512);
+ */
default: return -1;
};
}
@@ -299,12 +320,16 @@ static unsigned char *hash(SRP_HashAlgorithm alg, const unsigned char *d, size_t
#ifdef CSRP_USE_SHA1
case SRP_SHA1: return SHA1(d, n, md);
#endif
- /*case SRP_SHA224: return SHA224( d, n, md );*/
+ /*
+ case SRP_SHA224: return SHA224( d, n, md );
+ */
#ifdef CSRP_USE_SHA256
case SRP_SHA256: return SHA256(d, n, md);
#endif
- /*case SRP_SHA384: return SHA384( d, n, md );
- case SRP_SHA512: return SHA512( d, n, md );*/
+ /*
+ case SRP_SHA384: return SHA384( d, n, md );
+ case SRP_SHA512: return SHA512( d, n, md );
+ */
default: return 0;
};
}
@@ -314,19 +339,24 @@ static size_t hash_length(SRP_HashAlgorithm alg)
#ifdef CSRP_USE_SHA1
case SRP_SHA1: return SHA_DIGEST_LENGTH;
#endif
- /*case SRP_SHA224: return SHA224_DIGEST_LENGTH;*/
+ /*
+ case SRP_SHA224: return SHA224_DIGEST_LENGTH;
+ */
#ifdef CSRP_USE_SHA256
case SRP_SHA256: return SHA256_DIGEST_LENGTH;
#endif
- /*case SRP_SHA384: return SHA384_DIGEST_LENGTH;
- case SRP_SHA512: return SHA512_DIGEST_LENGTH;*/
+ /*
+ case SRP_SHA384: return SHA384_DIGEST_LENGTH;
+ case SRP_SHA512: return SHA512_DIGEST_LENGTH;
+ */
default: return -1;
};
}
+// clang-format on
inline static int mpz_num_bytes(const mpz_t op)
{
- return (mpz_sizeinbase (op, 2) + 7) / 8;
+ return (mpz_sizeinbase(op, 2) + 7) / 8;
}
inline static void mpz_to_bin(const mpz_t op, unsigned char *to)
@@ -340,72 +370,77 @@ inline static void mpz_from_bin(const unsigned char *s, size_t len, mpz_t ret)
}
// set op to (op1 * op2) mod d, using tmp for the calculation
-inline static void mpz_mulm(mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
+inline static void mpz_mulm(
+ mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
mpz_mul(tmp, op1, op2);
mpz_mod(op, tmp, d);
}
// set op to (op1 + op2) mod d, using tmp for the calculation
-inline static void mpz_addm( mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp )
+inline static void mpz_addm(
+ mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
mpz_add(tmp, op1, op2);
mpz_mod(op, tmp, d);
}
// set op to (op1 - op2) mod d, using tmp for the calculation
-inline static void mpz_subm(mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
+inline static void mpz_subm(
+ mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
mpz_sub(tmp, op1, op2);
mpz_mod(op, tmp, d);
}
-static int H_nn(mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t n1, const mpz_t n2)
+static SRP_Result H_nn(
+ mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t n1, const mpz_t n2)
{
unsigned char buff[SHA512_DIGEST_LENGTH];
size_t len_N = mpz_num_bytes(N);
size_t len_n1 = mpz_num_bytes(n1);
size_t len_n2 = mpz_num_bytes(n2);
size_t nbytes = len_N + len_N;
- unsigned char *bin = (unsigned char *) malloc(nbytes);
- if (!bin)
- return 0;
+ unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
+ if (!bin) return SRP_ERR;
if (len_n1 > len_N || len_n2 > len_N) {
- free(bin);
- return 0;
+ srp_free(bin);
+ return SRP_ERR;
}
memset(bin, 0, nbytes);
mpz_to_bin(n1, bin + (len_N - len_n1));
mpz_to_bin(n2, bin + (len_N + len_N - len_n2));
- hash( alg, bin, nbytes, buff );
- free(bin);
+ hash(alg, bin, nbytes, buff);
+ srp_free(bin);
mpz_from_bin(buff, hash_length(alg), result);
- return 1;
+ return SRP_OK;
}
-static int H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n, size_t len_n, const unsigned char *bytes, size_t len_bytes)
+static SRP_Result H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n,
+ size_t len_n, const unsigned char *bytes, size_t len_bytes)
{
unsigned char buff[SHA512_DIGEST_LENGTH];
size_t nbytes = len_n + len_bytes;
- unsigned char *bin = (unsigned char *) malloc(nbytes);
- if (!bin)
- return 0;
+ unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
+ if (!bin) return SRP_ERR;
memcpy(bin, n, len_n);
memcpy(bin + len_n, bytes, len_bytes);
hash(alg, bin, nbytes, buff);
- free(bin);
+ srp_free(bin);
mpz_from_bin(buff, hash_length(alg), result);
- return 1;
+ return SRP_OK;
}
-static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *salt, size_t salt_len, const char *username, const unsigned char *password, size_t password_len)
+static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *salt,
+ size_t salt_len, const char *username, const unsigned char *password,
+ size_t password_len)
{
unsigned char ucp_hash[SHA512_DIGEST_LENGTH];
HashCTX ctx;
hash_init(alg, &ctx);
- srp_dbg_data((char*) username, strlen(username), "Username for x: ");
- srp_dbg_data((char*) password, password_len, "Password for x: ");
+ srp_dbg_data((char *)username, strlen(username), "Username for x: ");
+ srp_dbg_data((char *)password, password_len, "Password for x: ");
hash_update(alg, &ctx, username, strlen(username));
hash_update(alg, &ctx, ":", 1);
hash_update(alg, &ctx, password, password_len);
@@ -415,31 +450,31 @@ static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char
return H_ns(result, alg, salt, salt_len, ucp_hash, hash_length(alg));
}
-static void update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n)
+static SRP_Result update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n)
{
size_t len = mpz_num_bytes(n);
- unsigned char* n_bytes = (unsigned char *) malloc(len);
- if (!n_bytes)
- return;
+ unsigned char *n_bytes = (unsigned char *)srp_alloc(len);
+ if (!n_bytes) return SRP_ERR;
mpz_to_bin(n, n_bytes);
hash_update(alg, ctx, n_bytes, len);
- free(n_bytes);
+ srp_free(n_bytes);
+ return SRP_OK;
}
-static void hash_num( SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest )
+static SRP_Result hash_num(SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest)
{
int nbytes = mpz_num_bytes(n);
- unsigned char *bin = (unsigned char *) malloc(nbytes);
- if(!bin)
- return;
+ unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
+ if (!bin) return SRP_ERR;
mpz_to_bin(n, bin);
hash(alg, bin, nbytes, dest);
- free(bin);
+ srp_free(bin);
+ return SRP_OK;
}
-static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest,
- const char *I, const unsigned char *s_bytes, size_t s_len,
- const mpz_t A, const mpz_t B, const unsigned char *K)
+static SRP_Result calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest,
+ const char *I, const unsigned char *s_bytes, size_t s_len, const mpz_t A,
+ const mpz_t B, const unsigned char *K)
{
unsigned char H_N[SHA512_DIGEST_LENGTH];
unsigned char H_g[SHA512_DIGEST_LENGTH];
@@ -449,13 +484,12 @@ static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *de
size_t i = 0;
size_t hash_len = hash_length(alg);
- hash_num(alg, ng->N, H_N);
- hash_num(alg, ng->g, H_g);
+ if (!hash_num(alg, ng->N, H_N)) return SRP_ERR;
+ if (!hash_num(alg, ng->g, H_g)) return SRP_ERR;
hash(alg, (const unsigned char *)I, strlen(I), H_I);
-
- for (i = 0; i < hash_len; i++ )
+ for (i = 0; i < hash_len; i++)
H_xor[i] = H_N[i] ^ H_g[i];
hash_init(alg, &ctx);
@@ -463,54 +497,30 @@ static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *de
hash_update(alg, &ctx, H_xor, hash_len);
hash_update(alg, &ctx, H_I, hash_len);
hash_update(alg, &ctx, s_bytes, s_len);
- update_hash_n(alg, &ctx, A);
- update_hash_n(alg, &ctx, B);
+ if (!update_hash_n(alg, &ctx, A)) return SRP_ERR;
+ if (!update_hash_n(alg, &ctx, B)) return SRP_ERR;
hash_update(alg, &ctx, K, hash_len);
hash_final(alg, &ctx, dest);
+ return SRP_OK;
}
-static void calculate_H_AMK(SRP_HashAlgorithm alg, unsigned char *dest, const mpz_t A, const unsigned char *M, const unsigned char *K)
+static SRP_Result calculate_H_AMK(SRP_HashAlgorithm alg, unsigned char *dest,
+ const mpz_t A, const unsigned char *M, const unsigned char *K)
{
HashCTX ctx;
hash_init(alg, &ctx);
- update_hash_n(alg, &ctx, A);
+ if (!update_hash_n(alg, &ctx, A)) return SRP_ERR;
hash_update(alg, &ctx, M, hash_length(alg));
hash_update(alg, &ctx, K, hash_length(alg));
hash_final(alg, &ctx, dest);
+ return SRP_OK;
}
-
-struct srp_pcgrandom {
- unsigned long long int m_state;
- unsigned long long int m_inc;
-}; typedef struct srp_pcgrandom srp_pcgrandom;
-
-static unsigned long int srp_pcgrandom_next(srp_pcgrandom *r)
-{
- unsigned long long int oldstate = r->m_state;
- r->m_state = oldstate * 6364136223846793005ULL + r->m_inc;
-
- unsigned long int xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u;
- unsigned long int rot = oldstate >> 59u;
- return (xorshifted >> rot) | (xorshifted << ((-rot) & 31));
-}
-
-static void srp_pcgrandom_seed(srp_pcgrandom *r, unsigned long long int state,
- unsigned long long int seq)
-{
- r->m_state = 0U;
- r->m_inc = (seq << 1u) | 1u;
- srp_pcgrandom_next(r);
- r->m_state += state;
- srp_pcgrandom_next(r);
-}
-
-
-static int fill_buff()
+static SRP_Result fill_buff()
{
g_rand_idx = 0;
@@ -522,54 +532,48 @@ static int fill_buff()
#ifdef WIN32
- CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
- CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE*) g_rand_buff);
- CryptReleaseContext(wctx, 0);
-
- return 1;
+ if (!CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
+ return SRP_ERR;
+ if (!CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE *)g_rand_buff)) return SRP_ERR;
+ if (!CryptReleaseContext(wctx, 0)) return SRP_ERR;
#else
fp = fopen("/dev/urandom", "r");
- if (fp) {
- fread(g_rand_buff, sizeof(g_rand_buff), 1, fp);
- fclose(fp);
- } else {
- srp_pcgrandom *r = (srp_pcgrandom *) malloc(sizeof(srp_pcgrandom));
- srp_pcgrandom_seed(r, time(NULL) ^ clock(), 0xda3e39cb94b95bdbULL);
- size_t i = 0;
- for (i = 0; i < RAND_BUFF_MAX; i++) {
- g_rand_buff[i] = srp_pcgrandom_next(r);
- }
- }
+ if (!fp) return SRP_ERR;
+
+ if (fread(g_rand_buff, sizeof(g_rand_buff), 1, fp) != 1) return SRP_ERR;
+ if (fclose(fp)) return SRP_ERR;
#endif
- return 1;
+ return SRP_OK;
}
-static void mpz_fill_random(mpz_t num)
+static SRP_Result mpz_fill_random(mpz_t num)
{
// was call: BN_rand(num, 256, -1, 0);
if (RAND_BUFF_MAX - g_rand_idx < 32)
- fill_buff();
- mpz_from_bin((const unsigned char *) (&g_rand_buff[g_rand_idx]), 32, num);
+ if (fill_buff() != SRP_OK) return SRP_ERR;
+ mpz_from_bin((const unsigned char *)(&g_rand_buff[g_rand_idx]), 32, num);
g_rand_idx += 32;
+ return SRP_OK;
}
-static void init_random()
+static SRP_Result init_random()
{
- if (g_initialized)
- return;
- g_initialized = fill_buff();
+ if (g_initialized) return SRP_OK;
+ SRP_Result ret = fill_buff();
+ g_initialized = (ret == SRP_OK);
+ return ret;
}
#define srp_dbg_num(num, text) ;
/*void srp_dbg_num(mpz_t num, char * prevtext)
{
int len_num = mpz_num_bytes(num);
- char *bytes_num = (char*) malloc(len_num);
+ char *bytes_num = (char*) srp_alloc(len_num);
mpz_to_bin(num, (unsigned char *) bytes_num);
srp_dbg_data(bytes_num, len_num, prevtext);
- free(bytes_num);
+ srp_free(bytes_num);
}*/
@@ -579,35 +583,41 @@ static void init_random()
*
***********************************************************************************************************/
-void srp_create_salted_verification_key( SRP_HashAlgorithm alg,
+// clang-format off
+SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg,
SRP_NGType ng_type, const char *username_for_verifier,
const unsigned char *password, size_t len_password,
unsigned char **bytes_s, size_t *len_s,
unsigned char **bytes_v, size_t *len_v,
const char *n_hex, const char *g_hex )
{
+ SRP_Result ret = SRP_OK;
+
mpz_t v; mpz_init(v);
mpz_t x; mpz_init(x);
+ // clang-format on
+
NGConstant *ng = new_ng(ng_type, n_hex, g_hex);
- if(!ng)
- goto cleanup_and_exit;
+ if (!ng) goto error_and_exit;
- init_random(); /* Only happens once */
+ if (init_random() != SRP_OK) /* Only happens once */
+ goto error_and_exit;
if (*bytes_s == NULL) {
- *len_s = 16;
- if (RAND_BUFF_MAX - g_rand_idx < 16)
- fill_buff();
- *bytes_s = (unsigned char*)malloc(sizeof(char) * 16);
- memcpy(*bytes_s, &g_rand_buff + g_rand_idx, sizeof(char) * 16);
- g_rand_idx += 16;
+ size_t size_to_fill = 16;
+ *len_s = size_to_fill;
+ if (RAND_BUFF_MAX - g_rand_idx < size_to_fill)
+ if (fill_buff() != SRP_OK) goto error_and_exit;
+ *bytes_s = (unsigned char *)srp_alloc(size_to_fill);
+ if (!*bytes_s) goto error_and_exit;
+ memcpy(*bytes_s, &g_rand_buff + g_rand_idx, size_to_fill);
+ g_rand_idx += size_to_fill;
}
-
- if (!calculate_x(x, alg, *bytes_s, *len_s, username_for_verifier,
- password, len_password))
- goto cleanup_and_exit;
+ if (!calculate_x(
+ x, alg, *bytes_s, *len_s, username_for_verifier, password, len_password))
+ goto error_and_exit;
srp_dbg_num(x, "Server calculated x: ");
@@ -615,20 +625,23 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg,
*len_v = mpz_num_bytes(v);
- *bytes_v = (unsigned char*)malloc(*len_v);
+ *bytes_v = (unsigned char *)srp_alloc(*len_v);
- if (!bytes_v)
- goto cleanup_and_exit;
+ if (!*bytes_v) goto error_and_exit;
mpz_to_bin(v, *bytes_v);
cleanup_and_exit:
- delete_ng( ng );
+ delete_ng(ng);
mpz_clear(v);
mpz_clear(x);
+ return ret;
+error_and_exit:
+ ret = SRP_ERR;
+ goto cleanup_and_exit;
}
-
+// clang-format off
/* Out: bytes_B, len_B.
*
@@ -653,6 +666,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg,
mpz_t tmp1; mpz_init(tmp1);
mpz_t tmp2; mpz_init(tmp2);
mpz_t tmp3; mpz_init(tmp3);
+ // clang-format on
size_t ulen = strlen(username) + 1;
NGConstant *ng = new_ng(ng_type, n_hex, g_hex);
struct SRPVerifier *ver = 0;
@@ -660,27 +674,29 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg,
*len_B = 0;
*bytes_B = 0;
- if (!ng)
- goto cleanup_and_exit;
+ if (!ng) goto cleanup_and_exit;
- ver = (struct SRPVerifier *) malloc( sizeof(struct SRPVerifier) );
+ ver = (struct SRPVerifier *)srp_alloc(sizeof(struct SRPVerifier));
- if (!ver)
- goto cleanup_and_exit;
+ if (!ver) goto cleanup_and_exit;
- init_random(); /* Only happens once */
+ if (init_random() != SRP_OK) { /* Only happens once */
+ srp_free(ver);
+ ver = 0;
+ goto cleanup_and_exit;
+ }
- ver->username = (char *) malloc(ulen);
+ ver->username = (char *)srp_alloc(ulen);
ver->hash_alg = alg;
ver->ng = ng;
if (!ver->username) {
- free(ver);
+ srp_free(ver);
ver = 0;
goto cleanup_and_exit;
}
- memcpy((char*)ver->username, username, ulen);
+ memcpy((char *)ver->username, username, ulen);
ver->authenticated = 0;
@@ -690,25 +706,17 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg,
if (bytes_b) {
mpz_from_bin(bytes_b, len_b, b);
} else {
- mpz_fill_random(b);
+ if (!mpz_fill_random(b)) goto ver_cleanup_and_exit;
}
- if (!H_nn(k, alg, ng->N, ng->N, ng->g)) {
- free(ver);
- ver = 0;
- goto cleanup_and_exit;
- }
+ if (!H_nn(k, alg, ng->N, ng->N, ng->g)) goto ver_cleanup_and_exit;
/* B = kv + g^b */
mpz_mulm(tmp1, k, v, ng->N, tmp3);
mpz_powm(tmp2, ng->g, b, ng->N);
mpz_addm(B, tmp1, tmp2, ng->N, tmp3);
- if (!H_nn(u, alg, ng->N, A, B)) {
- free(ver);
- ver = 0;
- goto cleanup_and_exit;
- }
+ if (!H_nn(u, alg, ng->N, A, B)) goto ver_cleanup_and_exit;
srp_dbg_num(u, "Server calculated u: ");
@@ -717,27 +725,29 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg,
mpz_mulm(tmp2, A, tmp1, ng->N, tmp3);
mpz_powm(S, tmp2, b, ng->N);
- hash_num(alg, S, ver->session_key);
+ if (!hash_num(alg, S, ver->session_key)) goto ver_cleanup_and_exit;
- calculate_M(alg, ng, ver->M, username, bytes_s, len_s, A, B, ver->session_key);
- calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key);
+ if (!calculate_M(
+ alg, ng, ver->M, username, bytes_s, len_s, A, B, ver->session_key)) {
+ goto ver_cleanup_and_exit;
+ }
+ if (!calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key)) {
+ goto ver_cleanup_and_exit;
+ }
*len_B = mpz_num_bytes(B);
- *bytes_B = (unsigned char*)malloc(*len_B);
+ *bytes_B = (unsigned char *)srp_alloc(*len_B);
if (!*bytes_B) {
- free(ver->username);
- free(ver);
- ver = 0;
*len_B = 0;
- goto cleanup_and_exit;
+ goto ver_cleanup_and_exit;
}
mpz_to_bin(B, *bytes_B);
ver->bytes_B = *bytes_B;
} else {
- free(ver);
+ srp_free(ver);
ver = 0;
}
@@ -753,52 +763,49 @@ cleanup_and_exit:
mpz_clear(tmp2);
mpz_clear(tmp3);
return ver;
+ver_cleanup_and_exit:
+ srp_free(ver->username);
+ srp_free(ver);
+ ver = 0;
+ goto cleanup_and_exit;
}
-
-
-
void srp_verifier_delete(struct SRPVerifier *ver)
{
if (ver) {
delete_ng(ver->ng);
- free(ver->username);
- free(ver->bytes_B);
+ srp_free(ver->username);
+ srp_free(ver->bytes_B);
memset(ver, 0, sizeof(*ver));
- free(ver);
+ srp_free(ver);
}
}
-
-
int srp_verifier_is_authenticated(struct SRPVerifier *ver)
{
return ver->authenticated;
}
-
const char *srp_verifier_get_username(struct SRPVerifier *ver)
{
return ver->username;
}
-
-const unsigned char *srp_verifier_get_session_key(struct SRPVerifier *ver, size_t *key_length)
+const unsigned char *srp_verifier_get_session_key(
+ struct SRPVerifier *ver, size_t *key_length)
{
- if (key_length)
- *key_length = hash_length(ver->hash_alg);
+ if (key_length) *key_length = hash_length(ver->hash_alg);
return ver->session_key;
}
-
size_t srp_verifier_get_session_key_length(struct SRPVerifier *ver)
{
return hash_length(ver->hash_alg);
}
-
/* user_M must be exactly SHA512_DIGEST_LENGTH bytes in size */
-void srp_verifier_verify_session(struct SRPVerifier *ver, const unsigned char *user_M, unsigned char **bytes_HAMK)
+void srp_verifier_verify_session(
+ struct SRPVerifier *ver, const unsigned char *user_M, unsigned char **bytes_HAMK)
{
if (memcmp(ver->M, user_M, hash_length(ver->hash_alg)) == 0) {
ver->authenticated = 1;
@@ -811,17 +818,17 @@ void srp_verifier_verify_session(struct SRPVerifier *ver, const unsigned char *u
struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
const char *username, const char *username_for_verifier,
- const unsigned char *bytes_password, size_t len_password,
- const char *n_hex, const char *g_hex)
+ const unsigned char *bytes_password, size_t len_password, const char *n_hex,
+ const char *g_hex)
{
- struct SRPUser *usr = (struct SRPUser *) malloc(sizeof(struct SRPUser));
- size_t ulen = strlen(username) + 1;
+ struct SRPUser *usr = (struct SRPUser *)srp_alloc(sizeof(struct SRPUser));
+ size_t ulen = strlen(username) + 1;
size_t uvlen = strlen(username_for_verifier) + 1;
- if (!usr)
- goto err_exit;
+ if (!usr) goto err_exit;
- init_random(); /* Only happens once */
+ if (init_random() != SRP_OK) /* Only happens once */
+ goto err_exit;
usr->hash_alg = alg;
usr->ng = new_ng(ng_type, n_hex, g_hex);
@@ -830,16 +837,14 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
mpz_init(usr->A);
mpz_init(usr->S);
- if (!usr->ng)
- goto err_exit;
+ if (!usr->ng) goto err_exit;
- usr->username = (char*)malloc(ulen);
- usr->username_verifier = (char*)malloc(uvlen);
- usr->password = (unsigned char*)malloc(len_password);
+ usr->username = (char *)srp_alloc(ulen);
+ usr->username_verifier = (char *)srp_alloc(uvlen);
+ usr->password = (unsigned char *)srp_alloc(len_password);
usr->password_len = len_password;
- if (!usr->username || !usr->password)
- goto err_exit;
+ if (!usr->username || !usr->password || !usr->username_verifier) goto err_exit;
memcpy(usr->username, username, ulen);
memcpy(usr->username_verifier, username_for_verifier, uvlen);
@@ -856,27 +861,22 @@ err_exit:
mpz_clear(usr->a);
mpz_clear(usr->A);
mpz_clear(usr->S);
- if (usr->ng)
- delete_ng(usr->ng);
- if (usr->username)
- free(usr->username);
- if (usr->username_verifier)
- free(usr->username_verifier);
+ if (usr->ng) delete_ng(usr->ng);
+ srp_free(usr->username);
+ srp_free(usr->username_verifier);
if (usr->password) {
memset(usr->password, 0, usr->password_len);
- free(usr->password);
+ srp_free(usr->password);
}
- free(usr);
+ srp_free(usr);
}
return 0;
}
-
-
void srp_user_delete(struct SRPUser *usr)
{
- if(usr) {
+ if (usr) {
mpz_clear(usr->a);
mpz_clear(usr->A);
mpz_clear(usr->S);
@@ -885,77 +885,73 @@ void srp_user_delete(struct SRPUser *usr)
memset(usr->password, 0, usr->password_len);
- free(usr->username);
- free(usr->username_verifier);
- free(usr->password);
+ srp_free(usr->username);
+ srp_free(usr->username_verifier);
+ srp_free(usr->password);
- if (usr->bytes_A)
- free(usr->bytes_A);
+ if (usr->bytes_A) srp_free(usr->bytes_A);
memset(usr, 0, sizeof(*usr));
- free(usr);
+ srp_free(usr);
}
}
-
-
int srp_user_is_authenticated(struct SRPUser *usr)
{
return usr->authenticated;
}
-
const char *srp_user_get_username(struct SRPUser *usr)
{
return usr->username;
}
-
-const unsigned char* srp_user_get_session_key(struct SRPUser* usr, size_t* key_length)
+const unsigned char *srp_user_get_session_key(struct SRPUser *usr, size_t *key_length)
{
- if (key_length)
- *key_length = hash_length(usr->hash_alg);
+ if (key_length) *key_length = hash_length(usr->hash_alg);
return usr->session_key;
}
-
size_t srp_user_get_session_key_length(struct SRPUser *usr)
{
return hash_length(usr->hash_alg);
}
-
+// clang-format off
/* Output: username, bytes_A, len_A */
-void srp_user_start_authentication(struct SRPUser *usr, char **username,
+SRP_Result srp_user_start_authentication(struct SRPUser *usr, char **username,
const unsigned char *bytes_a, size_t len_a,
unsigned char **bytes_A, size_t *len_A)
{
+ // clang-format on
if (bytes_a) {
mpz_from_bin(bytes_a, len_a, usr->a);
} else {
- mpz_fill_random(usr->a);
+ if (!mpz_fill_random(usr->a)) goto error_and_exit;
}
mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N);
*len_A = mpz_num_bytes(usr->A);
- *bytes_A = (unsigned char*)malloc(*len_A);
+ *bytes_A = (unsigned char *)srp_alloc(*len_A);
- if (!*bytes_A) {
- *len_A = 0;
- *bytes_A = 0;
- *username = 0;
- return;
- }
+ if (!*bytes_A) goto error_and_exit;
mpz_to_bin(usr->A, *bytes_A);
usr->bytes_A = *bytes_A;
- if (username)
- *username = usr->username;
-}
+ if (username) *username = usr->username;
+ return SRP_OK;
+
+error_and_exit:
+ *len_A = 0;
+ *bytes_A = 0;
+ *username = 0;
+ return SRP_ERR;
+}
+// clang-format off
/* Output: bytes_M. Buffer length is SHA512_DIGEST_LENGTH */
void srp_user_process_challenge(struct SRPUser *usr,
const unsigned char *bytes_s, size_t len_s,
@@ -971,17 +967,17 @@ void srp_user_process_challenge(struct SRPUser *usr,
mpz_t tmp2; mpz_init(tmp2);
mpz_t tmp3; mpz_init(tmp3);
mpz_t tmp4; mpz_init(tmp4);
+ // clang-format on
*len_M = 0;
*bytes_M = 0;
- if (!H_nn(u, usr->hash_alg, usr->ng->N, usr->A, B))
- goto cleanup_and_exit;
+ if (!H_nn(u, usr->hash_alg, usr->ng->N, usr->A, B)) goto cleanup_and_exit;
srp_dbg_num(u, "Client calculated u: ");
- if (!calculate_x(x, usr->hash_alg, bytes_s, len_s,
- usr->username_verifier, usr->password, usr->password_len))
+ if (!calculate_x(x, usr->hash_alg, bytes_s, len_s, usr->username_verifier,
+ usr->password, usr->password_len))
goto cleanup_and_exit;
srp_dbg_num(x, "Client calculated x: ");
@@ -990,11 +986,12 @@ void srp_user_process_challenge(struct SRPUser *usr,
goto cleanup_and_exit;
/* SRP-6a safety check */
- if ( mpz_sgn(B) != 0 && mpz_sgn(u) != 0 ) {
+ if (mpz_sgn(B) != 0 && mpz_sgn(u) != 0) {
mpz_powm(v, usr->ng->g, x, usr->ng->N);
srp_dbg_num(v, "Client calculated v: ");
+ // clang-format off
/* S = (B - k*(g^x)) ^ (a + ux) */
mpz_mul(tmp1, u, x);
mpz_add(tmp2, usr->a, tmp1); /* tmp2 = (a + ux) */
@@ -1002,23 +999,24 @@ void srp_user_process_challenge(struct SRPUser *usr,
mpz_mulm(tmp3, k, tmp1, usr->ng->N, tmp4); /* tmp3 = k*(g^x) */
mpz_subm(tmp1, B, tmp3, usr->ng->N, tmp4); /* tmp1 = (B - K*(g^x)) */
mpz_powm(usr->S, tmp1, tmp2, usr->ng->N);
+ // clang-format on
- hash_num(usr->hash_alg, usr->S, usr->session_key);
+ if (!hash_num(usr->hash_alg, usr->S, usr->session_key)) goto cleanup_and_exit;
- calculate_M( usr->hash_alg, usr->ng, usr->M, usr->username, bytes_s, len_s, usr->A,B, usr->session_key );
- calculate_H_AMK( usr->hash_alg, usr->H_AMK, usr->A, usr->M, usr->session_key );
+ if (!calculate_M(usr->hash_alg, usr->ng, usr->M, usr->username, bytes_s, len_s,
+ usr->A, B, usr->session_key))
+ goto cleanup_and_exit;
+ if (!calculate_H_AMK(usr->hash_alg, usr->H_AMK, usr->A, usr->M, usr->session_key))
+ goto cleanup_and_exit;
*bytes_M = usr->M;
- if (len_M)
- *len_M = hash_length( usr->hash_alg );
+ if (len_M) *len_M = hash_length(usr->hash_alg);
} else {
*bytes_M = NULL;
- if (len_M)
- *len_M = 0;
+ if (len_M) *len_M = 0;
}
cleanup_and_exit:
-
mpz_clear(B);
mpz_clear(u);
mpz_clear(x);
@@ -1030,7 +1028,6 @@ cleanup_and_exit:
mpz_clear(tmp4);
}
-
void srp_user_verify_session(struct SRPUser *usr, const unsigned char *bytes_HAMK)
{
if (memcmp(usr->H_AMK, bytes_HAMK, hash_length(usr->hash_alg)) == 0)
diff --git a/src/util/srp.h b/src/util/srp.h
index 15a2b8a68..2d49b076e 100644
--- a/src/util/srp.h
+++ b/src/util/srp.h
@@ -56,12 +56,10 @@
#ifndef SRP_H
#define SRP_H
-
struct SRPVerifier;
struct SRPUser;
-typedef enum
-{
+typedef enum {
SRP_NG_1024,
SRP_NG_2048,
SRP_NG_4096,
@@ -69,8 +67,7 @@ typedef enum
SRP_NG_CUSTOM
} SRP_NGType;
-typedef enum
-{
+typedef enum {
/*SRP_SHA1,*/
/*SRP_SHA224,*/
SRP_SHA256,
@@ -78,6 +75,23 @@ typedef enum
SRP_SHA512*/
} SRP_HashAlgorithm;
+typedef enum {
+ SRP_ERR,
+ SRP_OK,
+} SRP_Result;
+
+// clang-format off
+
+/* Sets the memory functions used by srp.
+ * Note: this doesn't set the memory functions used by gmp,
+ * but it is supported to have different functions for srp and gmp.
+ * Don't call this after you have already allocated srp structures.
+ */
+void srp_set_memory_functions(
+ void *(*new_srp_alloc) (size_t),
+ void *(*new_srp_realloc) (void *, size_t),
+ void (*new_srp_free) (void *));
+
/* Out: bytes_v, len_v
*
* The caller is responsible for freeing the memory allocated for bytes_v
@@ -85,14 +99,18 @@ typedef enum
* The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type.
* If provided, they must contain ASCII text of the hexidecimal notation.
*
- * If bytes_s == NULL, it is filled with random data. The caller is responsible for freeing.
+ * If bytes_s == NULL, it is filled with random data.
+ * The caller is responsible for freeing.
+ *
+ * Returns SRP_OK on success, and SRP_ERR on error.
+ * bytes_s might be in this case invalid, don't free it.
*/
-void srp_create_salted_verification_key( SRP_HashAlgorithm alg,
+SRP_Result srp_create_salted_verification_key(SRP_HashAlgorithm alg,
SRP_NGType ng_type, const char *username_for_verifier,
const unsigned char *password, size_t len_password,
unsigned char **bytes_s, size_t *len_s,
unsigned char **bytes_v, size_t *len_v,
- const char * n_hex, const char *g_hex );
+ const char *n_hex, const char *g_hex);
/* Out: bytes_B, len_B.
*
@@ -101,6 +119,8 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg,
* The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type
*
* If bytes_b == NULL, random data is used for b.
+ *
+ * Returns pointer to SRPVerifier on success, and NULL on error.
*/
struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
const char *username,
@@ -111,52 +131,54 @@ struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
unsigned char** bytes_B, size_t *len_B,
const char* n_hex, const char* g_hex);
+// clang-format on
-void srp_verifier_delete( struct SRPVerifier* ver );
+void srp_verifier_delete(struct SRPVerifier *ver);
+// srp_verifier_verify_session must have been called before
+int srp_verifier_is_authenticated(struct SRPVerifier *ver);
-int srp_verifier_is_authenticated( struct SRPVerifier* ver );
-
-
-const char * srp_verifier_get_username( struct SRPVerifier* ver );
+const char *srp_verifier_get_username(struct SRPVerifier *ver);
/* key_length may be null */
-const unsigned char* srp_verifier_get_session_key( struct SRPVerifier* ver,
- size_t *key_length );
-
-
-size_t srp_verifier_get_session_key_length(struct SRPVerifier* ver);
+const unsigned char *srp_verifier_get_session_key(
+ struct SRPVerifier *ver, size_t *key_length);
+size_t srp_verifier_get_session_key_length(struct SRPVerifier *ver);
-/* user_M must be exactly srp_verifier_get_session_key_length() bytes in size */
-void srp_verifier_verify_session( struct SRPVerifier* ver,
- const unsigned char* user_M, unsigned char** bytes_HAMK );
+/* Verifies session, on success, it writes bytes_HAMK.
+ * user_M must be exactly srp_verifier_get_session_key_length() bytes in size
+ */
+void srp_verifier_verify_session(
+ struct SRPVerifier *ver, const unsigned char *user_M, unsigned char **bytes_HAMK);
/*******************************************************************************/
/* The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type */
struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
const char *username, const char *username_for_verifier,
- const unsigned char *bytes_password, size_t len_password,
- const char *n_hex, const char *g_hex);
+ const unsigned char *bytes_password, size_t len_password, const char *n_hex,
+ const char *g_hex);
-void srp_user_delete(struct SRPUser * usr);
+void srp_user_delete(struct SRPUser *usr);
-int srp_user_is_authenticated(struct SRPUser * usr);
+int srp_user_is_authenticated(struct SRPUser *usr);
-
-const char* srp_user_get_username(struct SRPUser * usr);
+const char *srp_user_get_username(struct SRPUser *usr);
/* key_length may be null */
-const unsigned char* srp_user_get_session_key(struct SRPUser* usr, size_t* key_length);
+const unsigned char *srp_user_get_session_key(struct SRPUser *usr, size_t *key_length);
+
+size_t srp_user_get_session_key_length(struct SRPUser *usr);
-size_t srp_user_get_session_key_length(struct SRPUser* usr);
+// clang-format off
-/* Output: username, bytes_A, len_A. If you don't want it get written, set username to NULL.
+/* Output: username, bytes_A, len_A.
+ * If you don't want it get written, set username to NULL.
* If bytes_a == NULL, random data is used for a. */
-void srp_user_start_authentication(struct SRPUser* usr, char** username,
- const unsigned char* bytes_a, size_t len_a,
- unsigned char** bytes_A, size_t* len_A);
+SRP_Result srp_user_start_authentication(struct SRPUser* usr, char **username,
+ const unsigned char *bytes_a, size_t len_a,
+ unsigned char **bytes_A, size_t* len_A);
/* Output: bytes_M, len_M (len_M may be null and will always be
* srp_user_get_session_key_length() bytes in size) */
@@ -164,8 +186,9 @@ void srp_user_process_challenge(struct SRPUser *usr,
const unsigned char *bytes_s, size_t len_s,
const unsigned char *bytes_B, size_t len_B,
unsigned char **bytes_M, size_t *len_M);
+// clang-format on
/* bytes_HAMK must be exactly srp_user_get_session_key_length() bytes in size */
-void srp_user_verify_session(struct SRPUser* usr, const unsigned char* bytes_HAMK);
+void srp_user_verify_session(struct SRPUser *usr, const unsigned char *bytes_HAMK);
#endif /* Include Guard */
diff --git a/src/util/strfnd.h b/src/util/strfnd.h
new file mode 100644
index 000000000..a7cd2badb
--- /dev/null
+++ b/src/util/strfnd.h
@@ -0,0 +1,82 @@
+/*
+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.
+*/
+
+#ifndef STRFND_HEADER
+#define STRFND_HEADER
+
+#include <string>
+
+template <typename T>
+class BasicStrfnd {
+ typedef std::basic_string<T> String;
+ String str;
+ size_t pos;
+public:
+ BasicStrfnd(const String &s) : str(s), pos(0) {}
+ void start(const String &s) { str = s; pos = 0; }
+ size_t where() { return pos; }
+ void to(size_t i) { pos = i; }
+ bool at_end() { return pos >= str.size(); }
+ String what() { return str; }
+
+ String next(const String &sep)
+ {
+ if (pos >= str.size())
+ return String();
+
+ size_t n;
+ if (sep.empty() || (n = str.find(sep, pos)) == String::npos) {
+ n = str.size();
+ }
+ String ret = str.substr(pos, n - pos);
+ pos = n + sep.size();
+ return ret;
+ }
+
+ // Returns substr up to the next occurence of sep that isn't escaped with esc ('\\')
+ String next_esc(const String &sep, T esc=static_cast<T>('\\'))
+ {
+ if (pos >= str.size())
+ return String();
+
+ size_t n, old_p = pos;
+ do {
+ if (sep.empty() || (n = str.find(sep, pos)) == String::npos) {
+ pos = n = str.size();
+ break;
+ }
+ pos = n + sep.length();
+ } while (n > 0 && str[n - 1] == esc);
+
+ return str.substr(old_p, n - old_p);
+ }
+
+ void skip_over(const String &chars)
+ {
+ size_t p = str.find_first_not_of(chars, pos);
+ if (p != String::npos)
+ pos = p;
+ }
+};
+
+typedef BasicStrfnd<char> Strfnd;
+typedef BasicStrfnd<wchar_t> WStrfnd;
+
+#endif
+
diff --git a/src/util/string.h b/src/util/string.h
index 793baad0e..40ef3e4d3 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -32,8 +32,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
+// Checks whether a value is an ASCII printable character
+#define IS_ASCII_PRINTABLE_CHAR(x) \
+ (((unsigned int)(x) >= 0x20) && \
+ ( (unsigned int)(x) <= 0x7e))
+
// Checks whether a byte is an inner byte for an utf-8 multibyte sequence
-#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x < 0xc0))
+#define IS_UTF8_MULTB_INNER(x) \
+ (((unsigned char)(x) >= 0x80) && \
+ ( (unsigned char)(x) <= 0xbf))
+
+// Checks whether a byte is a start byte for an utf-8 multibyte sequence
+#define IS_UTF8_MULTB_START(x) \
+ (((unsigned char)(x) >= 0xc2) && \
+ ( (unsigned char)(x) <= 0xf4))
+
+// Given a start byte x for an utf-8 multibyte sequence
+// it gives the length of the whole sequence in bytes.
+#define UTF8_MULTB_START_LEN(x) \
+ (((unsigned char)(x) < 0xe0) ? 2 : \
+ (((unsigned char)(x) < 0xf0) ? 3 : 4))
typedef std::map<std::string, std::string> StringMap;
@@ -281,15 +299,6 @@ inline s32 mystoi(const std::string &str, s32 min, s32 max)
}
-/// Returns a 64-bit value represented by the string \p str (decimal).
-inline s64 stoi64(const std::string &str)
-{
- std::stringstream tmp(str);
- s64 t;
- tmp >> t;
- return t;
-}
-
// MSVC2010 includes it's own versions of these
//#if !defined(_MSC_VER) || _MSC_VER < 1600
@@ -328,9 +337,22 @@ inline float mystof(const std::string &str)
#define stoi mystoi
#define stof mystof
+/// Returns a value represented by the string \p val.
+template <typename T>
+inline T from_string(const std::string &str)
+{
+ std::stringstream tmp(str);
+ T t;
+ tmp >> t;
+ return t;
+}
+
+/// Returns a 64-bit signed value represented by the string \p str (decimal).
+inline s64 stoi64(const std::string &str) { return from_string<s64>(str); }
+
// TODO: Replace with C++11 std::to_string.
-/// Returns A string representing the value \p val.
+/// Returns a string representing the value \p val.
template <typename T>
inline std::string to_string(T val)
{
@@ -364,7 +386,6 @@ inline void str_replace(std::string &str, const std::string &pattern,
}
}
-
/**
* Replace all occurrences of the character \p from in \p str with \p to.
*
@@ -447,7 +468,7 @@ inline std::string wrap_rows(const std::string &from,
* Removes backslashes from an escaped string (FormSpec strings)
*/
template <typename T>
-inline std::basic_string<T> unescape_string(std::basic_string<T> &s)
+inline std::basic_string<T> unescape_string(const std::basic_string<T> &s)
{
std::basic_string<T> res;
@@ -463,6 +484,40 @@ inline std::basic_string<T> unescape_string(std::basic_string<T> &s)
return res;
}
+/**
+ * Remove all escape sequences in \p s.
+ *
+ * @param s The string in which to remove escape sequences.
+ * @return \p s, with escape sequences removed.
+ */
+template <typename T>
+std::basic_string<T> unescape_enriched(const std::basic_string<T> &s)
+{
+ std::basic_string<T> output;
+ size_t i = 0;
+ while (i < s.length()) {
+ if (s[i] == '\x1b') {
+ ++i;
+ if (i == s.length()) continue;
+ if (s[i] == '(') {
+ ++i;
+ while (i < s.length() && s[i] != ')') {
+ if (s[i] == '\\') {
+ ++i;
+ }
+ ++i;
+ }
+ ++i;
+ } else {
+ ++i;
+ }
+ continue;
+ }
+ output += s[i];
+ ++i;
+ }
+ return output;
+}
/**
* Checks that all characters in \p to_check are a decimal digits.
diff --git a/src/util/thread.h b/src/util/thread.h
index b3a5e68a2..5ed63544c 100644
--- a/src/util/thread.h
+++ b/src/util/thread.h
@@ -21,9 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define UTIL_THREAD_HEADER
#include "../irrlichttypes.h"
-#include "../jthread/jthread.h"
-#include "../jthread/jmutex.h"
-#include "../jthread/jmutexautolock.h"
+#include "../threading/thread.h"
+#include "../threading/mutex.h"
+#include "../threading/mutex_auto_lock.h"
#include "porting.h"
#include "log.h"
@@ -36,27 +36,27 @@ public:
T get()
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
return m_value;
}
void set(T value)
{
- JMutexAutoLock lock(m_mutex);
+ MutexAutoLock lock(m_mutex);
m_value = value;
}
// You'll want to grab this in a SharedPtr
- JMutexAutoLock *getLock()
+ MutexAutoLock *getLock()
{
- return new JMutexAutoLock(m_mutex);
+ return new MutexAutoLock(m_mutex);
}
// You pretty surely want to grab the lock when accessing this
T m_value;
private:
- JMutex m_mutex;
+ Mutex m_mutex;
};
/*
@@ -118,7 +118,7 @@ public:
typename std::list<CallerInfo<Caller, CallerData, Key, T> >::iterator j;
{
- JMutexAutoLock lock(m_queue.getMutex());
+ MutexAutoLock lock(m_queue.getMutex());
/*
If the caller is already on the list, only update CallerData
@@ -192,59 +192,47 @@ private:
MutexedQueue<GetRequest<Key, T, Caller, CallerData> > m_queue;
};
-class UpdateThread : public JThread {
+class UpdateThread : public Thread
+{
public:
- UpdateThread() {}
- virtual ~UpdateThread() {}
+ UpdateThread(const std::string &name) : Thread(name + "Update") {}
+ ~UpdateThread() {}
- void deferUpdate()
- {
- m_update_sem.Post();
- }
+ void deferUpdate() { m_update_sem.post(); }
- void Stop()
+ void stop()
{
- JThread::Stop();
+ Thread::stop();
// give us a nudge
- m_update_sem.Post();
+ m_update_sem.post();
}
- void *Thread()
+ void *run()
{
- ThreadStarted();
-
- const char *thread_name = getName();
- log_register_thread(thread_name);
- porting::setThreadName(thread_name);
-
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
BEGIN_DEBUG_EXCEPTION_HANDLER
- while (!StopRequested()) {
- m_update_sem.Wait();
-
- // Empty the queue, just in case doUpdate() is expensive
- while (m_update_sem.GetValue())
- m_update_sem.Wait();
+ while (!stopRequested()) {
+ m_update_sem.wait();
+ // Set semaphore to 0
+ while (m_update_sem.wait(0));
- if (StopRequested())
- break;
+ if (stopRequested()) break;
doUpdate();
}
- END_DEBUG_EXCEPTION_HANDLER(errorstream)
+ END_DEBUG_EXCEPTION_HANDLER
return NULL;
}
protected:
virtual void doUpdate() = 0;
- virtual const char *getName() = 0;
private:
- JSemaphore m_update_sem;
+ Semaphore m_update_sem;
};
#endif
diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp
index bc2977a0e..9c4d5b642 100644
--- a/src/wieldmesh.cpp
+++ b/src/wieldmesh.cpp
@@ -114,9 +114,7 @@ static scene::IMesh *createExtrusionMesh(int resolution_x, int resolution_y)
mesh->addMeshBuffer(buf);
buf->drop();
scaleMesh(mesh, scale); // also recalculates bounding box
- scene::IMesh *newmesh = createForsythOptimizedMesh(mesh);
- mesh->drop();
- return newmesh;
+ return mesh;
}
/*
@@ -283,7 +281,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
// Customize material
video::SMaterial &material = m_meshnode->getMaterial(0);
- material.setTexture(0, tsrc->getTexture(imagename));
+ material.setTexture(0, tsrc->getTextureForMesh(imagename));
material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
material.MaterialType = m_material_type;
@@ -436,3 +434,113 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh)
m_meshnode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, m_lighting);
m_meshnode->setVisible(true);
}
+
+scene::IMesh *getItemMesh(IGameDef *gamedef, const ItemStack &item)
+{
+ ITextureSource *tsrc = gamedef->getTextureSource();
+ IItemDefManager *idef = gamedef->getItemDefManager();
+ INodeDefManager *ndef = gamedef->getNodeDefManager();
+ const ItemDefinition &def = item.getDefinition(idef);
+ const ContentFeatures &f = ndef->get(def.name);
+ content_t id = ndef->getId(def.name);
+
+ if (!g_extrusion_mesh_cache) {
+ g_extrusion_mesh_cache = new ExtrusionMeshCache();
+ } else {
+ g_extrusion_mesh_cache->grab();
+ }
+
+ scene::IMesh *mesh;
+
+ // If inventory_image is defined, it overrides everything else
+ if (def.inventory_image != "") {
+ mesh = getExtrudedMesh(tsrc, def.inventory_image);
+ return mesh;
+ } else if (def.type == ITEM_NODE) {
+ if (f.mesh_ptr[0]) {
+ mesh = cloneMesh(f.mesh_ptr[0]);
+ scaleMesh(mesh, v3f(0.12, 0.12, 0.12));
+ setMeshColor(mesh, video::SColor (255, 255, 255, 255));
+ } else if (f.drawtype == NDT_PLANTLIKE) {
+ mesh = getExtrudedMesh(tsrc,
+ tsrc->getTextureName(f.tiles[0].texture_id));
+ return mesh;
+ } else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES
+ || f.drawtype == NDT_LIQUID || f.drawtype == NDT_FLOWINGLIQUID) {
+ mesh = cloneMesh(g_extrusion_mesh_cache->createCube());
+ scaleMesh(mesh, v3f(1.2, 1.2, 1.2));
+ } else {
+ MeshMakeData mesh_make_data(gamedef, false);
+ MapNode mesh_make_node(id, 255, 0);
+ mesh_make_data.fillSingleNode(&mesh_make_node);
+ MapBlockMesh mapblock_mesh(&mesh_make_data, v3s16(0, 0, 0));
+ mesh = cloneMesh(mapblock_mesh.getMesh());
+ translateMesh(mesh, v3f(-BS, -BS, -BS));
+ scaleMesh(mesh, v3f(0.12, 0.12, 0.12));
+ rotateMeshXZby(mesh, -45);
+ rotateMeshYZby(mesh, -30);
+
+ u32 mc = mesh->getMeshBufferCount();
+ for (u32 i = 0; i < mc; ++i) {
+ video::SMaterial &material1 =
+ mesh->getMeshBuffer(i)->getMaterial();
+ video::SMaterial &material2 =
+ mapblock_mesh.getMesh()->getMeshBuffer(i)->getMaterial();
+ material1.setTexture(0, material2.getTexture(0));
+ material1.setTexture(1, material2.getTexture(1));
+ material1.setTexture(2, material2.getTexture(2));
+ material1.setTexture(3, material2.getTexture(3));
+ material1.MaterialType = material2.MaterialType;
+ }
+ return mesh;
+ }
+
+ shadeMeshFaces(mesh);
+ rotateMeshXZby(mesh, -45);
+ rotateMeshYZby(mesh, -30);
+
+ u32 mc = mesh->getMeshBufferCount();
+ for (u32 i = 0; i < mc; ++i) {
+ video::SMaterial &material = mesh->getMeshBuffer(i)->getMaterial();
+ material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ material.setFlag(video::EMF_BILINEAR_FILTER, false);
+ material.setFlag(video::EMF_TRILINEAR_FILTER, false);
+ material.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material.setFlag(video::EMF_LIGHTING, false);
+ if (f.tiles[i].animation_frame_count > 1) {
+ FrameSpec animation_frame = f.tiles[i].frames[0];
+ material.setTexture(0, animation_frame.texture);
+ } else {
+ material.setTexture(0, f.tiles[i].texture);
+ }
+ }
+ return mesh;
+ }
+ return NULL;
+}
+
+scene::IMesh * getExtrudedMesh(ITextureSource *tsrc,
+ const std::string &imagename)
+{
+ video::ITexture *texture = tsrc->getTextureForMesh(imagename);
+ if (!texture) {
+ return NULL;
+ }
+
+ core::dimension2d<u32> dim = texture->getSize();
+ scene::IMesh *mesh = cloneMesh(g_extrusion_mesh_cache->create(dim));
+
+ // Customize material
+ video::SMaterial &material = mesh->getMeshBuffer(0)->getMaterial();
+ material.setTexture(0, tsrc->getTexture(imagename));
+ material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
+ material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
+ material.setFlag(video::EMF_BILINEAR_FILTER, false);
+ material.setFlag(video::EMF_TRILINEAR_FILTER, false);
+ material.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material.setFlag(video::EMF_LIGHTING, false);
+ material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ scaleMesh(mesh, v3f(2.0, 2.0, 2.0));
+
+ return mesh;
+}
diff --git a/src/wieldmesh.h b/src/wieldmesh.h
index 3f4f4fc04..0b3136bc1 100644
--- a/src/wieldmesh.h
+++ b/src/wieldmesh.h
@@ -53,7 +53,7 @@ public:
virtual void render();
- virtual const core::aabbox3d<f32>& getBoundingBox() const
+ virtual const aabb3f &getBoundingBox() const
{ return m_bounding_box; }
private:
@@ -74,7 +74,11 @@ private:
// Bounding box culling is disabled for this type of scene node,
// so this variable is just required so we can implement
// getBoundingBox() and is set to an empty box.
- core::aabbox3d<f32> m_bounding_box;
+ aabb3f m_bounding_box;
};
+scene::IMesh *getItemMesh(IGameDef *gamedef, const ItemStack &item);
+
+scene::IMesh *getExtrudedMesh(ITextureSource *tsrc,
+ const std::string &imagename);
#endif
diff --git a/textures/base/pack/camera_btn.png b/textures/base/pack/camera_btn.png
index f61b0cc4a..5e305546e 100644
--- a/textures/base/pack/camera_btn.png
+++ b/textures/base/pack/camera_btn.png
Binary files differ
diff --git a/textures/base/pack/chat_btn.png b/textures/base/pack/chat_btn.png
index a452bd0b9..7f6a5cb4f 100644
--- a/textures/base/pack/chat_btn.png
+++ b/textures/base/pack/chat_btn.png
Binary files differ
diff --git a/textures/base/pack/debug_btn.png b/textures/base/pack/debug_btn.png
index 66bd41f7a..9b82125c5 100644
--- a/textures/base/pack/debug_btn.png
+++ b/textures/base/pack/debug_btn.png
Binary files differ
diff --git a/textures/base/pack/dirt_bg.png b/textures/base/pack/dirt_bg.png
deleted file mode 100644
index 7cb9c89a6..000000000
--- a/textures/base/pack/dirt_bg.png
+++ /dev/null
Binary files differ
diff --git a/textures/base/pack/down.png b/textures/base/pack/down.png
index 7d13857ca..b85717a7f 100644
--- a/textures/base/pack/down.png
+++ b/textures/base/pack/down.png
Binary files differ
diff --git a/textures/base/pack/down_arrow.png b/textures/base/pack/down_arrow.png
index 7b34b1b3a..60ac49762 100644
--- a/textures/base/pack/down_arrow.png
+++ b/textures/base/pack/down_arrow.png
Binary files differ
diff --git a/textures/base/pack/drop_btn.png b/textures/base/pack/drop_btn.png
index 58789e458..5d777108a 100644
--- a/textures/base/pack/drop_btn.png
+++ b/textures/base/pack/drop_btn.png
Binary files differ
diff --git a/textures/base/pack/fast_btn.png b/textures/base/pack/fast_btn.png
index 4572a7b54..08cb189ea 100644
--- a/textures/base/pack/fast_btn.png
+++ b/textures/base/pack/fast_btn.png
Binary files differ
diff --git a/textures/base/pack/fly_btn.png b/textures/base/pack/fly_btn.png
index a095b92a7..15cea6e2f 100644
--- a/textures/base/pack/fly_btn.png
+++ b/textures/base/pack/fly_btn.png
Binary files differ
diff --git a/textures/base/pack/gear_icon.png b/textures/base/pack/gear_icon.png
new file mode 100644
index 000000000..71825eb8d
--- /dev/null
+++ b/textures/base/pack/gear_icon.png
Binary files differ
diff --git a/textures/base/pack/halo.png b/textures/base/pack/halo.png
index 852ef76b8..eaea782da 100644
--- a/textures/base/pack/halo.png
+++ b/textures/base/pack/halo.png
Binary files differ
diff --git a/textures/base/pack/inventory_btn.png b/textures/base/pack/inventory_btn.png
index 58f892b55..41a7249df 100644
--- a/textures/base/pack/inventory_btn.png
+++ b/textures/base/pack/inventory_btn.png
Binary files differ
diff --git a/textures/base/pack/jump_btn.png b/textures/base/pack/jump_btn.png
index 573fd1a10..e9ce9d0c6 100644
--- a/textures/base/pack/jump_btn.png
+++ b/textures/base/pack/jump_btn.png
Binary files differ
diff --git a/textures/base/pack/left_arrow.png b/textures/base/pack/left_arrow.png
index 30ec327a2..6076241c5 100644
--- a/textures/base/pack/left_arrow.png
+++ b/textures/base/pack/left_arrow.png
Binary files differ
diff --git a/textures/base/pack/logo.png b/textures/base/pack/logo.png
index 89be884a2..48793678f 100644
--- a/textures/base/pack/logo.png
+++ b/textures/base/pack/logo.png
Binary files differ
diff --git a/textures/base/pack/menu_bg.png b/textures/base/pack/menu_bg.png
new file mode 100644
index 000000000..ed7e34f61
--- /dev/null
+++ b/textures/base/pack/menu_bg.png
Binary files differ
diff --git a/textures/base/pack/menu_header.png b/textures/base/pack/menu_header.png
index abf24038e..0769a0186 100644
--- a/textures/base/pack/menu_header.png
+++ b/textures/base/pack/menu_header.png
Binary files differ
diff --git a/textures/base/pack/minimap_mask_round.png b/textures/base/pack/minimap_mask_round.png
index 797c780c7..a0c6b2ddf 100644
--- a/textures/base/pack/minimap_mask_round.png
+++ b/textures/base/pack/minimap_mask_round.png
Binary files differ
diff --git a/textures/base/pack/minimap_mask_square.png b/textures/base/pack/minimap_mask_square.png
index 5dd23f7d8..160b6faff 100644
--- a/textures/base/pack/minimap_mask_square.png
+++ b/textures/base/pack/minimap_mask_square.png
Binary files differ
diff --git a/textures/base/pack/minimap_overlay_round.png b/textures/base/pack/minimap_overlay_round.png
index 1a6b3cc41..16e3c41c7 100644
--- a/textures/base/pack/minimap_overlay_round.png
+++ b/textures/base/pack/minimap_overlay_round.png
Binary files differ
diff --git a/textures/base/pack/minimap_overlay_square.png b/textures/base/pack/minimap_overlay_square.png
index 6d14dc78c..c971c4b8e 100644
--- a/textures/base/pack/minimap_overlay_square.png
+++ b/textures/base/pack/minimap_overlay_square.png
Binary files differ
diff --git a/textures/base/pack/no_screenshot.png b/textures/base/pack/no_screenshot.png
index 60e00f730..fbaacc9b0 100644
--- a/textures/base/pack/no_screenshot.png
+++ b/textures/base/pack/no_screenshot.png
Binary files differ
diff --git a/textures/base/pack/noclip_btn.png b/textures/base/pack/noclip_btn.png
index 1aadad414..45404c171 100644
--- a/textures/base/pack/noclip_btn.png
+++ b/textures/base/pack/noclip_btn.png
Binary files differ
diff --git a/textures/base/pack/object_marker_red.png b/textures/base/pack/object_marker_red.png
new file mode 100644
index 000000000..f345d0376
--- /dev/null
+++ b/textures/base/pack/object_marker_red.png
Binary files differ
diff --git a/textures/base/pack/player_marker.png b/textures/base/pack/player_marker.png
index a5aedfece..fc0ee739e 100644
--- a/textures/base/pack/player_marker.png
+++ b/textures/base/pack/player_marker.png
Binary files differ
diff --git a/textures/base/pack/rangeview_btn.png b/textures/base/pack/rangeview_btn.png
index fbcd80a1d..405f85b5f 100644
--- a/textures/base/pack/rangeview_btn.png
+++ b/textures/base/pack/rangeview_btn.png
Binary files differ
diff --git a/textures/base/pack/rare_controls.png b/textures/base/pack/rare_controls.png
new file mode 100644
index 000000000..482964934
--- /dev/null
+++ b/textures/base/pack/rare_controls.png
Binary files differ
diff --git a/textures/base/pack/right_arrow.png b/textures/base/pack/right_arrow.png
index 04594b6e3..dc9067440 100644
--- a/textures/base/pack/right_arrow.png
+++ b/textures/base/pack/right_arrow.png
Binary files differ
diff --git a/textures/base/pack/server_flags_damage.png b/textures/base/pack/server_flags_damage.png
index f35eb7292..3f0bf0daf 100644
--- a/textures/base/pack/server_flags_damage.png
+++ b/textures/base/pack/server_flags_damage.png
Binary files differ
diff --git a/textures/base/pack/server_flags_favorite.png b/textures/base/pack/server_flags_favorite.png
new file mode 100644
index 000000000..6a3fc5efe
--- /dev/null
+++ b/textures/base/pack/server_flags_favorite.png
Binary files differ
diff --git a/textures/base/pack/server_flags_pvp.png b/textures/base/pack/server_flags_pvp.png
index 5c3d86bc0..977dfdc0c 100644
--- a/textures/base/pack/server_flags_pvp.png
+++ b/textures/base/pack/server_flags_pvp.png
Binary files differ
diff --git a/textures/base/pack/smoke_puff.png b/textures/base/pack/smoke_puff.png
index e0f038f0a..8824a731c 100644
--- a/textures/base/pack/smoke_puff.png
+++ b/textures/base/pack/smoke_puff.png
Binary files differ
diff --git a/textures/base/pack/sunrisebg.png b/textures/base/pack/sunrisebg.png
index 1d03dd3c3..948c3c07e 100644
--- a/textures/base/pack/sunrisebg.png
+++ b/textures/base/pack/sunrisebg.png
Binary files differ
diff --git a/textures/base/pack/unknown_item.png b/textures/base/pack/unknown_item.png
index 27a3450eb..c8cf616a7 100644
--- a/textures/base/pack/unknown_item.png
+++ b/textures/base/pack/unknown_item.png
Binary files differ
diff --git a/textures/base/pack/up_arrow.png b/textures/base/pack/up_arrow.png
index 070529a41..840040fcb 100644
--- a/textures/base/pack/up_arrow.png
+++ b/textures/base/pack/up_arrow.png
Binary files differ
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index a9126b9fa..78d189b87 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -30,31 +30,31 @@ mkdir -p $libdir
cd $builddir
# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://sfan5.pf-control.de/irrlicht-$irrlicht_version-win32.zip \
+[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win32.zip \
-c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://sfan5.pf-control.de/zlib-$zlib_version-win32.zip \
+[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip \
-c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version-dev.7z ] || wget http://sfan5.pf-control.de/libogg-$ogg_version-dev.7z \
+[ -e $packagedir/libogg-$ogg_version-dev.7z ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-dev.7z \
-c -O $packagedir/libogg-$ogg_version-dev.7z
-[ -e $packagedir/libogg-$ogg_version-dll.7z ] || wget http://sfan5.pf-control.de/libogg-$ogg_version-dll.7z \
+[ -e $packagedir/libogg-$ogg_version-dll.7z ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-dll.7z \
-c -O $packagedir/libogg-$ogg_version-dll.7z
-[ -e $packagedir/libvorbis-$vorbis_version-dev.7z ] || wget http://sfan5.pf-control.de/libvorbis-$vorbis_version-dev.7z \
+[ -e $packagedir/libvorbis-$vorbis_version-dev.7z ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-dev.7z \
-c -O $packagedir/libvorbis-$vorbis_version-dev.7z
-[ -e $packagedir/libvorbis-$vorbis_version-dll.7z ] || wget http://sfan5.pf-control.de/libvorbis-$vorbis_version-dll.7z \
+[ -e $packagedir/libvorbis-$vorbis_version-dll.7z ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-dll.7z \
-c -O $packagedir/libvorbis-$vorbis_version-dll.7z
-[ -e $packagedir/libcurl-$curl_version.zip ] || wget http://sfan5.pf-control.de/libcurl-$curl_version-win32.zip \
+[ -e $packagedir/libcurl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/libcurl-$curl_version-win32.zip \
-c -O $packagedir/libcurl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://sfan5.pf-control.de/gettext-$gettext_version.zip \
+[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version.zip \
-c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/libfreetype-$freetype_version.zip ] || wget http://sfan5.pf-control.de/libfreetype-$freetype_version-win32.zip \
+[ -e $packagedir/libfreetype-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/libfreetype-$freetype_version-win32.zip \
-c -O $packagedir/libfreetype-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://sfan5.pf-control.de/sqlite3-$sqlite3_version-win32.zip \
+[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win32.zip \
-c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version-static-win32.zip ] || wget http://sfan5.pf-control.de/luajit-$luajit_version-static-win32.zip \
+[ -e $packagedir/luajit-$luajit_version-static-win32.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-static-win32.zip \
-c -O $packagedir/luajit-$luajit_version-static-win32.zip
-[ -e $packagedir/libleveldb-$leveldb_version-win32.zip ] || wget http://sfan5.pf-control.de/libleveldb-$leveldb_version-win32.zip \
+[ -e $packagedir/libleveldb-$leveldb_version-win32.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win32.zip \
-c -O $packagedir/libleveldb-$leveldb_version-win32.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://sfan5.pf-control.de/openal_stripped.zip \
+[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped.zip \
-c -O $packagedir/openal_stripped.zip
# Extract stuff
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index 6ab56e721..e13cbd024 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -30,27 +30,27 @@ mkdir -p $libdir
cd $builddir
# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://sfan5.pf-control.de/irrlicht-$irrlicht_version-win64.zip \
+[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win64.zip \
-c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://sfan5.pf-control.de/zlib-$zlib_version-win64.zip \
+[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip \
-c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://sfan5.pf-control.de/libogg-$ogg_version-win64.zip \
+[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-win64.zip \
-c -O $packagedir/libogg-$ogg_version.zip
-[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://sfan5.pf-control.de/libvorbis-$vorbis_version-win64.zip \
+[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win64.zip \
-c -O $packagedir/libvorbis-$vorbis_version.zip
-[ -e $packagedir/libcurl-$curl_version.zip ] || wget http://sfan5.pf-control.de/libcurl-$curl_version-win64.zip \
+[ -e $packagedir/libcurl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/libcurl-$curl_version-win64.zip \
-c -O $packagedir/libcurl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://sfan5.pf-control.de/gettext-$gettext_version-win64.zip \
+[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version-win64.zip \
-c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/freetype-$freetype_version.zip ] || wget http://sfan5.pf-control.de/libfreetype-$freetype_version-win64.zip \
+[ -e $packagedir/freetype-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/libfreetype-$freetype_version-win64.zip \
-c -O $packagedir/freetype-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://sfan5.pf-control.de/sqlite3-$sqlite3_version-win64.zip \
+[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip \
-c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://sfan5.pf-control.de/luajit-$luajit_version-static-win64.zip \
+[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-static-win64.zip \
-c -O $packagedir/luajit-$luajit_version.zip
-[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://sfan5.pf-control.de/libleveldb-$leveldb_version-win64.zip \
+[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip \
-c -O $packagedir/libleveldb-$leveldb_version.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://sfan5.pf-control.de/openal_stripped64.zip \
+[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped64.zip \
-c -O $packagedir/openal_stripped.zip
diff --git a/util/bump_version.sh b/util/bump_version.sh
index 5ff69c8af..948561ac3 100755
--- a/util/bump_version.sh
+++ b/util/bump_version.sh
@@ -32,12 +32,12 @@ cd ${0%/*}/..
grep -q -E '^set\(VERSION_MAJOR [0-9]+\)$' CMakeLists.txt || die "error: Could not find CMakeLists.txt"
grep -q -E '^set\(VERSION_MINOR [0-9]+\)$' CMakeLists.txt || die "error: Could not find CMakeLists.txt"
grep -q -E '^set\(VERSION_PATCH [0-9]+\)$' CMakeLists.txt || die "error: Could not find CMakeLists.txt"
-grep -q -E '^ANDROID_VERSION_CODE = [0-9]+$' build/android/Makefile || die "error: Could not find build/android/Makefile"
+grep -q -E 'versionCode [0-9]+$' build/android/build.gradle || die "error: Could not find Android version code"
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 '^ANDROID_VERSION_CODE = [0-9]+$' build/android/Makefile | tr -dC 0-9)
+ANDROID_VERSION_CODE=$(grep -E 'versionCode [0-9]+$' build/android/build.gradle | tr -dC 0-9)
echo "Current Minetest version: $VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
echo "Current Android version code: $ANDROID_VERSION_CODE"
@@ -89,13 +89,13 @@ sed -i -re "s/^set\(VERSION_PATCH [0-9]+\)$/set(VERSION_PATCH $NEW_VERSION_PATCH
sed -i -re "s/^set\(DEVELOPMENT_BUILD TRUE\)$/set(DEVELOPMENT_BUILD FALSE)/" CMakeLists.txt || die "Failed to unset DEVELOPMENT_BUILD"
-sed -i -re "s/^ANDROID_VERSION_CODE = [0-9]+$/ANDROID_VERSION_CODE = $NEW_ANDROID_VERSION_CODE/" build/android/Makefile || die "Failed to update ANDROID_VERSION_CODE"
+sed -i -re "s/versionCode [0-9]+$/versionCode $NEW_ANDROID_VERSION_CODE/" build/android/build.gradle || die "Failed to update Android version code"
sed -i -re "1s/[0-9]+\.[0-9]+\.[0-9]+/$NEW_VERSION/g" doc/lua_api.txt || die "Failed to update doc/lua_api.txt"
sed -i -re "1s/[0-9]+\.[0-9]+\.[0-9]+/$NEW_VERSION/g" doc/menu_lua_api.txt || die "Failed to update doc/menu_lua_api.txt"
-git add -f CMakeLists.txt build/android/Makefile doc/lua_api.txt doc/menu_lua_api.txt || die "git add failed"
+git add -f CMakeLists.txt build/android/build.gradle doc/lua_api.txt doc/menu_lua_api.txt || die "git add failed"
git commit -m "Bump version to $NEW_VERSION" || die "git commit failed"
diff --git a/util/travis/before_install.sh b/util/travis/before_install.sh
index b61118044..58dc42b17 100755
--- a/util/travis/before_install.sh
+++ b/util/travis/before_install.sh
@@ -1,32 +1,40 @@
#!/bin/bash -e
-if [[ $CC == "clang" ]]; then
- export PATH="/usr/bin/:$PATH"
- sudo sh -c 'echo "deb http://ppa.launchpad.net/eudoxos/llvm-3.1/ubuntu precise main" >> /etc/apt/sources.list'
- sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys 92DE8183
+if [[ $TRAVIS_OS_NAME == "linux" ]]; then
+ if [[ $CC == "clang" ]]; then
+ export PATH="/usr/bin/:$PATH"
+ sudo sh -c 'echo "deb http://ppa.launchpad.net/eudoxos/llvm-3.1/ubuntu precise main" >> /etc/apt/sources.list'
+ sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys 92DE8183
+ sudo apt-get update
+ sudo apt-get install llvm-3.1
+ sudo apt-get install clang
+ fi
sudo apt-get update
- sudo apt-get install llvm-3.1
- sudo apt-get install clang
+ sudo apt-get install p7zip-full
fi
-sudo apt-get install p7zip-full
-if [[ $PLATFORM == "Linux" ]]; then
- sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \
- libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
- libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev gettext
- # Linking to LevelDB is broken, use a custom build
- wget http://sfan5.pf-control.de/libleveldb-1.18-ubuntu12.04.7z
- sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z
+
+if [[ $PLATFORM == "Unix" ]]; then
+ if [[ $TRAVIS_OS_NAME == "linux" ]]; then
+ sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev \
+ libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
+ libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev gettext
+ # Linking to LevelDB is broken, use a custom build
+ wget http://minetest.kitsunemimi.pw/libleveldb-1.18-ubuntu12.04.7z
+ sudo 7z x -o/usr libleveldb-1.18-ubuntu12.04.7z
+ else
+ brew update
+ brew install freetype gettext hiredis irrlicht jpeg leveldb libogg libvorbis luajit
+ fi
elif [[ $PLATFORM == "Win32" ]]; then
- wget http://sfan5.pf-control.de/mingw_w64_i686_ubuntu12.04_4.9.1.7z -O mingw.7z
+ wget http://minetest.kitsunemimi.pw/mingw_w64_i686_ubuntu12.04_4.9.1.7z -O mingw.7z
sed -e "s|%PREFIX%|i686-w64-mingw32|" \
-e "s|%ROOTPATH%|/usr/i686-w64-mingw32|" \
< util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw.cmake
sudo 7z x -y -o/usr mingw.7z
elif [[ $PLATFORM == "Win64" ]]; then
- wget http://sfan5.pf-control.de/mingw_w64_x86_64_ubuntu12.04_4.9.1.7z -O mingw.7z
+ wget http://minetest.kitsunemimi.pw/mingw_w64_x86_64_ubuntu12.04_4.9.1.7z -O mingw.7z
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 7z x -y -o/usr mingw.7z
fi
-
diff --git a/util/travis/script.sh b/util/travis/script.sh
index 756cc1de8..870954ebb 100755
--- a/util/travis/script.sh
+++ b/util/travis/script.sh
@@ -1,16 +1,20 @@
#!/bin/bash -e
-if [[ $PLATFORM == "Linux" ]]; then
+if [[ $PLATFORM == "Unix" ]]; then
mkdir -p travisbuild
- cd travisbuild
- CMAKE_FLAGS='-DCMAKE_BUILD_TYPE=Debug \
- -DRUN_IN_PLACE=TRUE \
- -DENABLE_GETTEXT=TRUE'
+ cd travisbuild || exit 1
+ CMAKE_FLAGS=''
# Clang builds with FreeType fail on Travis
if [[ $CC == "clang" ]]; then
CMAKE_FLAGS+=' -DENABLE_FREETYPE=FALSE'
fi
- cmake $CMAKE_FLAGS ..
+ if [[ $TRAVIS_OS_NAME == "osx" ]]; then
+ CMAKE_FLAGS+=' -DCUSTOM_GETTEXT_PATH=/usr/local/opt/gettext'
+ fi
+ cmake -DCMAKE_BUILD_TYPE=Debug \
+ -DRUN_IN_PLACE=TRUE \
+ -DENABLE_GETTEXT=TRUE \
+ $CMAKE_FLAGS ..
make -j2
echo "Running unit tests."
../bin/minetest --run-unittests && exit 0
@@ -31,9 +35,9 @@ elif [[ $PLATFORM == Win* ]]; then
export EXISTING_MINETEST_DIR=$OLDDIR
export NO_MINETEST_GAME=1
if [[ $PLATFORM == "Win32" ]]; then
- $OLDDIR/util/buildbot/buildwin32.sh travisbuild && exit 0
+ "$OLDDIR/util/buildbot/buildwin32.sh" travisbuild && exit 0
elif [[ $PLATFORM == "Win64" ]]; then
- $OLDDIR/util/buildbot/buildwin64.sh travisbuild && exit 0
+ "$OLDDIR/util/buildbot/buildwin64.sh" travisbuild && exit 0
fi
else
echo "Unknown platform \"${PLATFORM}\"."
diff --git a/util/updatepo.sh b/util/updatepo.sh
index 28755b1fe..f4a401f2c 100755
--- a/util/updatepo.sh
+++ b/util/updatepo.sh
@@ -50,10 +50,11 @@ cd ..
potfile=po/minetest.pot
xgettext --package-name=minetest \
--sort-by-file \
- --add-location \
+ --add-location=file \
--keyword=N_ \
--keyword=wgettext \
--keyword=fgettext \
+ --keyword=fgettext_ne \
--keyword=strgettext \
--keyword=wstrgettext \
--output $potfile \