Improve Lua settings menu 3271/head
authorPilzAdam <pilzadam@minetest.net>
Sun, 18 Oct 2015 08:41:52 +0000 (10:41 +0200)
committerPilzAdam <pilzadam@minetest.net>
Sat, 24 Oct 2015 17:39:15 +0000 (19:39 +0200)
* Add key settings to setting table and ignore them later
  This way they are added to the auto-generated minetest.conf.example
* Add flags type
* Add input validation for int, float and flags
* Break in-game graphic settings into multiple sections
* Parse settingtpes.txt in mods and games
* Improve description for a lot of settings
* Fix typos and wording in settingtypes.txt
* Convert language setting to an enum

builtin/mainmenu/tab_settings.lua
builtin/settingtypes.txt
doc/lua_api.txt
minetest.conf.example
src/settings_translation_file.c [deleted file]
src/settings_translation_file.cpp [new file with mode: 0644]

index f3605fd48922c6f31003803d8ecdba8ac7e4d1a2..e96fa1c4dec385edc222dc423b2fc7b3330bc278 100644 (file)
 
 local FILENAME = "settingtypes.txt"
 
-local function parse_setting_line(settings, line)
+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)
        -- empty lines
-       if line:match("^[%s]*$") then
+       if line:match("^" .. CHAR_CLASSES.SPACE .. "*$") then
                -- clear current_comment so only comments directly above a setting are bound to it
                settings.current_comment = ""
                return
        end
 
        -- category
-       local category = line:match("^%[([^%]]+)%]$")
+       local stars, category = line:match("^%[([%*]*)([^%]]+)%]$")
        if category then
-               local level = 0
-               local index = 1
-               while category:sub(index, index) == "*" do
-                       level = level + 1
-                       index = index + 1
-               end
-               category = category:sub(index, -1)
                table.insert(settings, {
                        name = category,
-                       level = level,
+                       level = stars:len() + base_level,
                        type = "category",
                })
                return
        end
 
        -- comment
-       local comment = line:match("^#[%s]*(.*)$")
+       local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$")
        if comment then
                if settings.current_comment == "" then
                        settings.current_comment = comment
@@ -54,9 +56,20 @@ local function parse_setting_line(settings, line)
                return
        end
 
+       local error_msg
+
        -- settings
-       local first_part, name, readable_name, setting_type =
-                       line:match("^(([%w%._-]+)[%s]+%(([^%)]*)%)[%s]+([%w_]+)[%s]*)")
+       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 first_part then
                if readable_name == "" then
@@ -65,14 +78,15 @@ local function parse_setting_line(settings, line)
                local remaining_line = line:sub(first_part:len() + 1)
 
                if setting_type == "int" then
-                       local default, min, max = remaining_line:match("^([%d]+)[%s]*([%d]*)[%s]*([%d]*)$")
+                       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 default and tonumber(default) then
-                               if min == "" then
-                                       min = nil
-                               end
-                               if max == "" then
-                                       max = nil
-                               end
+                               min = tonumber(min)
+                               max = tonumber(max)
                                table.insert(settings, {
                                        name = name,
                                        readable_name = readable_name,
@@ -83,21 +97,24 @@ local function parse_setting_line(settings, line)
                                        comment = settings.current_comment,
                                })
                        else
-                               core.log("error", "Found invalid int in " .. FILENAME .. ": " .. line)
+                               error_msg = "Invalid integer setting"
                        end
 
-               elseif setting_type == "string" or setting_type == "flags" or setting_type == "noise_params" then
-                       local default = remaining_line:match("^[%s]*(.*)$")
+               elseif setting_type == "string" or setting_type == "noise_params"
+                               or setting_type == "key" then
+                       local default = remaining_line:match("^(.*)$")
                        if default then
-                               table.insert(settings, {
-                                       name = name,
-                                       readable_name = readable_name,
-                                       type = setting_type,
-                                       default = default,
-                                       comment = settings.current_comment,
-                               })
+                               if setting_type ~= "key" or read_all then -- ignore key type if read_all is false
+                                       table.insert(settings, {
+                                               name = name,
+                                               readable_name = readable_name,
+                                               type = setting_type,
+                                               default = default,
+                                               comment = settings.current_comment,
+                                       })
+                               end
                        else
-                               core.log("error", "Found invalid string in " .. FILENAME .. ": " .. line)
+                               error_msg =  "Invalid string setting"
                        end
 
                elseif setting_type == "bool" then
@@ -110,19 +127,19 @@ local function parse_setting_line(settings, line)
                                        comment = settings.current_comment,
                                })
                        else
-                               core.log("error", "Found invalid bool in " .. FILENAME .. ": " .. line)
+                               error_msg =  "Invalid boolean setting"
                        end
 
                elseif setting_type == "float" then
-                       local default, min, max
-                                       = remaining_line:match("^([%d%.]+)[%s]*([%d%.]*)[%s]*([%d%.]*)$")
+                       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 default and tonumber(default) then
-                               if min == "" then
-                                       min = nil
-                               end
-                               if max == "" then
-                                       max = nil
-                               end
+                               min = tonumber(min)
+                               max = tonumber(max)
                                table.insert(settings, {
                                        name = name,
                                        readable_name = readable_name,
@@ -133,26 +150,26 @@ local function parse_setting_line(settings, line)
                                        comment = settings.current_comment,
                                })
                        else
-                               core.log("error", "Found invalid float in " .. FILENAME .. ": " .. line)
+                               error_msg =  "Invalid float setting"
                        end
 
                elseif setting_type == "enum" then
-                       local default, values = remaining_line:match("^([^%s]+)[%s]+(.+)$")
+                       local default, values = remaining_line:match("^(.+)" .. CHAR_CLASSES.SPACE .. "(.+)$")
                        if default and values ~= "" then
                                table.insert(settings, {
                                        name = name,
                                        readable_name = readable_name,
                                        type = "enum",
                                        default = default,
-                                       values = values:split(","),
+                                       values = values:split(",", true),
                                        comment = settings.current_comment,
                                })
                        else
-                               core.log("error", "Found invalid enum in " .. FILENAME .. ": " .. line)
+                               error_msg =  "Invalid enum setting"
                        end
 
                elseif setting_type == "path" then
-                       local default = remaining_line:match("^[%s]*(.*)$")
+                       local default = remaining_line:match("^(.*)$")
                        if default then
                                table.insert(settings, {
                                        name = name,
@@ -162,50 +179,143 @@ local function parse_setting_line(settings, line)
                                        comment = settings.current_comment,
                                })
                        else
-                               core.log("error", "Found invalid path in " .. FILENAME .. ": " .. line)
+                               error_msg =  "Invalid path setting"
                        end
 
-               elseif setting_type == "key" then
-                       --ignore keys, since we have a special dialog for them
+               elseif setting_type == "flags" then
+                       local default, possible = remaining_line:match("^"
+                                       .. "(" .. CHAR_CLASSES.FLAGS .. "+)" .. CHAR_CLASSES.SPACE .. ""
+                                       .. "(" .. CHAR_CLASSES.FLAGS .. "+)"
+                                       .. "$")
+                       if default and possible then
+                               table.insert(settings, {
+                                       name = name,
+                                       readable_name = readable_name,
+                                       type = "flags",
+                                       default = default,
+                                       possible = possible,
+                                       comment = settings.current_comment,
+                               })
+                       else
+                               error_msg =  "Invalid flags setting"
+                       end
 
                -- TODO: flags, noise_params (, struct)
 
                else
-                       core.log("error", "Found setting with invalid setting type in " .. FILENAME .. ": " .. line)
+                       error_msg =  "Invalid setting type \"" .. type .. "\""
                end
        else
-               core.log("error", "Found invalid line in " .. FILENAME .. ": " .. line)
+               error_msg =  "Invalid line"
        end
        -- clear current_comment since we just used it
        -- if we not just used it, then clear it since we only want comments
        --  directly above the setting to be bound to it
        settings.current_comment = ""
-end
 
-local function parse_config_file()
-       local file = io.open(core.get_builtin_path() .. DIR_DELIM .. FILENAME, "r")
-       local settings = {}
-       if not file then
-               core.log("error", "Can't load " .. FILENAME)
-               return settings
-       end
+       return error_msg
+end
 
+local function parse_single_file(file, filepath, read_all, result, base_level)
        -- store this helper variable in the table so it's easier to pass to parse_setting_line()
-       settings.current_comment = ""
+       result.current_comment = ""
 
        local line = file:read("*line")
        while line do
-               parse_setting_line(settings, line)
+               local error_msg = parse_setting_line(result, line, read_all, base_level)
+               if error_msg then
+                       core.log("error", error_msg .. " in " .. filepath .. " \"" .. line .. "\"")
+               end
                line = file:read("*line")
        end
 
-       settings.current_comment = nil
+       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)
 
        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)
+
+                               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)
+
+                               file:close()
+                       end
+               end
+       end
+
        return settings
 end
 
-local settings = parse_config_file()
+local settings = parse_config_file(false, true)
 local selected_setting = 1
 
 local function get_current_value(setting)
@@ -236,16 +346,28 @@ local function create_change_setting_formspec(dialogdata)
 
        local comment_text = ""
 
-       -- fgettext_ne("") doesn't have to return "", according to specification of gettext(3)
        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")) do
+       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.") .. ","
+       end
+
+       formspec = formspec:sub(1, -2) -- remove trailing comma
+
        formspec = formspec .. ";1]"
 
        if setting.type == "bool" then
@@ -256,7 +378,8 @@ local function create_change_setting_formspec(dialogdata)
                        selected_index = 1
                end
                formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;"
-                               .. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";" .. selected_index .. "]"
+                               .. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";"
+                               .. selected_index .. "]"
 
        elseif setting.type == "enum" then
                local selected_index = 0
@@ -285,8 +408,20 @@ local function create_change_setting_formspec(dialogdata)
 
        else
                -- TODO: fancy input for float, int, flags, noise_params
-               formspec = formspec .. "field[0.5,4;9.5,1;te_setting_value;;"
-                               .. core.formspec_escape(get_current_value(setting)) .. "]"
+               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,4;5,1;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
@@ -303,6 +438,52 @@ local function handle_change_setting_buttons(this, fields)
                        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()
+                               if not value:match(CHAR_CLASSES.FLAGS .. "+")
+                                               or not setting.possible:match("[,]?" .. value .. "[,]?") then
+                                       this.data.error_message = fgettext_ne("\"" .. value .. "\" is not a valid flag.")
+                                       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)
@@ -345,7 +526,8 @@ local function create_settings_formspec(tabview, name, tabdata)
 
                if entry.type == "category" then
                        current_level = entry.level
-                       formspec = formspec .. "#FFFF00," .. current_level .. "," .. core.formspec_escape(name) .. ",,"
+                       formspec = formspec .. "#FFFF00," .. current_level .. "," .. fgettext(name) .. ",,"
+
                elseif entry.type == "bool" then
                        local value = get_current_value(entry)
                        if core.is_yes(value) then
@@ -355,6 +537,10 @@ local function create_settings_formspec(tabview, name, tabdata)
                        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)) .. ","
@@ -431,6 +617,13 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
        return false
 end
 
+tab_settings = {
+       name = "settings",
+       caption = fgettext("Settings"),
+       cbf_formspec = create_settings_formspec,
+       cbf_button_handler = handle_settings_buttons,
+}
+
 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" ..
@@ -447,6 +640,7 @@ local function create_minetest_conf_example()
                        "#    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
@@ -458,8 +652,8 @@ local function create_minetest_conf_example()
                                result = result .. "# " .. entry.name .. "\n\n"
                        end
                else
-                       if entry.comment_line ~= "" then
-                               for _, comment_line in ipairs(entry.comment:split("\n")) do
+                       if entry.comment ~= "" then
+                               for _, comment_line in ipairs(entry.comment:split("\n", true)) do
                                        result = result .."#    " .. comment_line .. "\n"
                                end
                        end
@@ -473,6 +667,9 @@ local function create_minetest_conf_example()
                        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"
                        result = result .. "# " .. entry.name .. " = ".. entry.default .. "\n\n"
                end
@@ -485,6 +682,8 @@ local function create_translation_file()
                        "// 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
                        result = result .. "\tgettext(\"" .. entry.name .. "\");\n"
@@ -511,16 +710,9 @@ if false then
 end
 
 if false then
-       local file = io.open("src/settings_translation_file.c", "w")
+       local file = io.open("src/settings_translation_file.cpp", "w")
        if file then
                file:write(create_translation_file())
                file:close()
        end
 end
-
-tab_settings = {
-       name = "settings",
-       caption = fgettext("Settings"),
-       cbf_formspec = create_settings_formspec,
-       cbf_button_handler = handle_settings_buttons,
-}
index e916c03af2317995bf5b842fd0eefda9be3c1ea7..2eee055c815cc1ec3b4797c41aca40c9f674eef9 100644 (file)
@@ -3,6 +3,8 @@
 # General format:
 #    name (Readable name) type type_args
 #
+# Note that the parts are seperated by exactly one space
+#
 # `type` can be:
 #    - int
 #    - string
@@ -11,6 +13,8 @@
 #    - enum
 #    - path
 #    - key (will be ignored in GUI, since a special key change dialog exists)
+#    - flags
+#    - noise_params
 #
 # `type_args` can be:
 #   * int:
 #            - 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.
 #    This is helpful when working with nodeboxes in small areas.
 enable_build_where_you_stand (Build inside player) bool false
 
-#    Unobstructed movement without physics, downwards key is keymap_special1.
-free_move (Free movement) 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 (keymap_special1).
+#    Fast movement (via use key).
+#    This requires the "fast" privilege on the server.
 fast_move (Fast movement) bool false
 
-#    Smooths camera when moving and looking arround.
+#    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
 
@@ -71,199 +86,211 @@ invert_mouse (Invert mouse) bool false
 #    Mouse sensitivity multiplier.
 mouse_sensitivity (Mouse sensitivity) float 0.2
 
-#    If enabled, keymap_special1 instead of keymap_sneak is used for climbing down and descending.
+#    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 false aux1 is used to fly fast.
+#    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, for testing.
+#    Enable random user input (only used for testing).
 random_input (Random input) bool false
 
-#    Continuous forward movement (for testing).
+#    Continuous forward movement (only used for testing).
 continuous_forward (Continuous forward) bool false
 
-#    Key mappings.
+#    Key for moving the player forward.
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_forward (Forward) key KEY_KEY_W
-keymap_backward (Backward) key KEY_KEY_S
-keymap_left (Left) key KEY_KEY_A
-keymap_right (Right) key KEY_KEY_D
-keymap_jump (Jump) key KEY_SPACE
-keymap_sneak (Sneak) key KEY_LSHIFT
-keymap_inventory (Inventory) key KEY_KEY_I
-keymap_special1 (Use) key KEY_KEY_E
-keymap_chat (Chat) key KEY_KEY_T
-keymap_cmd (Command) key /
-keyman_console (Console) key KEY_F10
-keymap_rangeselect (Range select) key KEY_KEY_R
-keymap_freemove (Fly) key KEY_KEY_K
-keymap_fastmove (Fast) key KEY_KEY_J
-keymap_cinematic (Cinematic mode) key KEY_F8
-keymap_minimap (Minimap) key KEY_F9
-keymap_screenshot (Screenshot) key KEY_F12
-keymap_print_debug_stacks (Print stacks) key KEY_KEY_P
+keymap_forward (Forward key) key KEY_KEY_W
 
-[*Network]
+#    Key for moving the player backward.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_backward (Backward key) key KEY_KEY_S
 
-#    Address to connect to (blank = start local server).
-address (Server address) string
+#    Key for moving the player left.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_left (Left key) key KEY_KEY_A
 
-#    Port to connect to (UDP).
-remote_port (Remote port) int 30000
+#    Key for moving the player right.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_right (Right key) key KEY_KEY_D
 
-#    Save the map received by the client on disk.
-enable_local_map_saving (Saving map received by server) bool false
+#    Key for jumping.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_jump (Jump key) key KEY_SPACE
 
-#    Enable usage of remote media server (if provided by server).
-enable_remote_media_server (Connect to external media server) bool true
+#    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
 
-#    URL to the server list displayed in the Multiplayer Tab.
-serverlist_url (Serverlist URL) string servers.minetest.net
+#    Key for opening the inventory.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_inventory (Inventory key) key KEY_KEY_I
 
-#    File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.
-serverlist_file (Serverlist file) string favoriteservers.txt
+#    Key for moving fast in fast mode.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_special1 (Use key) key KEY_KEY_E
 
-[*Graphics]
+#    Key for opening the chat window.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_chat (Chat key) key KEY_KEY_T
 
-[**In-Game]
+#    Key for opening the chat window to type commands.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cmd (Command key) key /
 
-#    Minimum wanted FPS.
-#    The amount of rendered stuff is dynamically set according to this.
-wanted_fps (Wanted FPS) int 30
+#    Key for opening the chat console.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keyman_console (Console key) key KEY_F10
 
-#    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
+#    Key for toggling unlimited view range.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_rangeselect (Range select key) key KEY_KEY_R
 
-#    Maximum FPS when game is paused.
-pause_fps_max (FPS in pause menu) int 20
+#    Key for toggling flying.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_freemove (Fly key) key KEY_KEY_K
 
-#    The allowed adjustment range for the automatic rendering range adjustment.
-viewing_range_nodes_max (Viewing range maximum) int 160
+#    Key for toggling fast mode.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_fastmove (Fast key) key KEY_KEY_J
 
-#    The allowed adjustment range for the automatic rendering range adjustment.
-viewing_range_nodes_min (View range minimum) int 35
+#    Key for toggling noclip mode.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_noclip (Noclip key) key KEY_KEY_H
 
-#    Vertical initial window size.
-screenW (Screen width) int 800
+#    Key for toggling cinematic mode.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_cinematic (Cinematic mode key) key KEY_F8
 
-#    Horizontal initial window size.
-screenH (Screen height) int 600
+#    Key for toggling display of minimap.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_minimap (Minimap key) key KEY_F9
 
-#    Fullscreen mode.
-fullscreen (Full screen) bool false
+#    Key for taking screenshots.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_screenshot (Screenshot) key KEY_F12
 
-fullscreen_bpp (Full screen BPP) int 24
+#    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
 
-#    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
+#    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
 
-#    Vertical screen synchronization.
-vsync (V-Sync) bool false
+#    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
 
-#    Field of view in degrees.
-fov (Field of view) int 72 30 160
+#    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
 
-#    Whether to fog out the end of the visible area.
-enable_fog (Fog) bool true
+#    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
 
-#    Enable a bit lower water surface; disable for speed (not quite optimized).
-new_style_water (New style water) bool false
+#    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
 
-#    Leaves style:
-#         - Fancy  -> all faces visible
-#         - Simple -> only outer faces, if defined special_tiles are used
-#         - Opaque -> disable transparency
-leaves_style (Leaves style) enum fancy fancy,simple,opaque
+#    Key for 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
 
-#    Connects glass if supported by node.
-connected_glass (Connect glass) bool false
+#    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
 
-#    Enable smooth lighting with simple ambient occlusion.
-#    Disable for speed or for different looks.
-smooth_lighting (Smooth lighting) bool true
+#    Key for increasing the viewing range. Modifies the minimum viewing range.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_increase_viewing_range_min (View range increase key) key +
 
-#    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
+#    Key for decreasing the viewing range. Modifies the minimum viewing range.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_decrease_viewing_range_min (View range decrease key) key -
 
-#    Path to texture directory. All textures are first searched from here.
-texture_path (Texture path) path
+#    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
 
-#    Video back-end.
-#    Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl.
-video_driver (Video driver) enum opengl null,software,burningsvideo,direct3d8,direct3d9,opengl
+[*Network]
 
-#    Enable/disable clouds.
-enable_clouds (Clouds) bool true
+#    Address to connect to.
+#    Leave this blank to start a local server.
+#    Note that the address field in the main menu overrides this setting.
+address (Server address) string
 
-#    Height on which clouds are appearing.
-cloud_height (Cloud height) int 120
+#    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
 
-#    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
+#    Save the map received by the client on disk.
+enable_local_map_saving (Saving map received from server) bool false
 
-#    Use 3D cloud look instead of flat.
-enable_3d_clouds (3D clouds) 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
 
-#    Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double).
-view_bobbing_amount (View bobbing) float 1.0
+#    URL to the server list displayed in the Multiplayer Tab.
+serverlist_url (Serverlist URL) string servers.minetest.net
 
-#    Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double).
-fall_bobbing_amount (Fall bobbing) float 0.0
+#    File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab.
+serverlist_file (Serverlist file) string favoriteservers.txt
 
-#    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 (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside
+[*Graphics]
 
-#    In-game chat console background color (R,G,B).
-console_color (Console color) string (0,0,0)
+[**In-Game]
 
-#    In-game chat console background alpha (opaqueness, between 0 and 255).
-console_alpha (Console alpha) int 200 0 255
+[***Basic]
 
-#    Selection box border color (R,G,B).
-selectionbox_color (Selection box color) string (0,0,0)
+#    Whether to fog out the end of the visible area.
+enable_fog (Fog) bool true
 
-#    Width of the selectionbox's lines.
-selectionbox_width (Selection box width) int 2 1 5
+#    Enable a bit lower water surface, so it doesn't "fill" the node completely.
+#    Note that this is not quite optimized and that smooth lighting on the
+#    water surface doesn't work with this.
+new_style_water (New style water) bool false
 
-#    Crosshair color (R,G,B).
-crosshair_color (Crosshair color) string (255,255,255)
+#    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
 
-#    Cross alpha (opaqueness, between 0 and 255).
-crosshair_alpha (Crosshair alpha) int 255 0 255
+#    Connects glass if supported by node.
+connected_glass (Connect glass) bool false
 
-#    Path for screenshots.
-screenshot_path (Screenshot folder) path
+#    Enable smooth lighting with simple ambient occlusion.
+#    Disable for speed or for different looks.
+smooth_lighting (Smooth lighting) bool true
 
-#    Whether node texture animations should be desynchronized per mapblock.
-desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true
+#    Clouds are a client side effect.
+enable_clouds (Clouds) 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
+#    Use 3D cloud look instead of flat.
+enable_3d_clouds (3D clouds) bool true
 
-#    Enable selection highlighting for nodes (disables selectionbox).
-enable_node_highlighting (Node highlighting) bool false
+[***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,
@@ -281,63 +308,181 @@ texture_clean_transparent (Clean transparent textures) bool false
 #    enabled.
 texture_min_size (Minimum texture size for filters) int 64
 
-#    Set to true to pre-generate all item visuals.
+#    Pre-generate all item visuals used in the inventory.
+#    This increases startup time, but runs smoother in-game.
+#    The generated textures can easily exceed your VRAM, causing artifacts in the inventory.
 preload_item_visuals (Preload inventory textures) bool false
 
-#    Set to true to enable shaders. Disable them if video_driver = direct3d9/8.
+#    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
 
-#    Set to true to enable textures bumpmapping. Requires shaders enabled.
+[****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
 
-#    Set to true enables on the fly normalmap generation (Emboss effect).
-#    Requires bumpmapping enabled.
+#    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 (0 - 2).
+#    Defines sampling step of texture.
 #    A higher value results in smoother normal maps.
 normalmaps_smooth (Normalmaps sampling) int 0 0 2
 
-#    Set to true enables parallax occlusion mapping. Requires shaders enabled.
-enable_parallax_occlusion (Parralax occlusion) bool false
+[****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 (Parralax occlusion mode) int 1 0 1
+parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1
 
 #    Strength of parallax.
-3d_parallax_strength (Parralax occlusion strength) float 0.025
+3d_parallax_strength (Parallax occlusion strength) float 0.025
 
 #    Number of parallax occlusion iterations.
-parallax_occlusion_iterations (Parralax occlusion iterations) int 4
+parallax_occlusion_iterations (Parallax occlusion iterations) int 4
 
 #    Overall scale of parallax occlusion effect.
-parallax_occlusion_scale (Parralax occlusion Scale) float 0.08
+parallax_occlusion_scale (Parallax occlusion Scale) float 0.08
 
 #    Overall bias of parallax occlusion effect, usually scale/2.
-parallax_occlusion_bias (Parralax occlusion bias) float 0.04
+parallax_occlusion_bias (Parallax occlusion bias) float 0.04
+
+[****Waving Nodes]
 
-#    Set to true enables waving water. Requires shaders enabled.
+#    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 enabled.
+#    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 enabled.
+#    Set to true enables waving plants.
+#    Requires shaders to be enabled.
 enable_waving_plants (Waving plants) bool false
 
-#    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
+[***Advanced]
+
+#    Minimum wanted FPS.
+#    The amount of rendered stuff is dynamically set according to this. and viewing range min and max.
+wanted_fps (Wanted FPS) int 30
+
+#    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
+
+#    The allowed adjustment range for the automatic rendering range adjustment.
+#    Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm.
+viewing_range_nodes_max (Viewing range maximum) int 160
+
+#    The allowed adjustment range for the automatic rendering range adjustment.
+#    Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm.
+viewing_range_nodes_min (Viewing range minimum) int 35
+
+#    Vertical initial window size.
+screenW (Screen width) int 800
+
+#    Horizontal 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.
+3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside
+
+#    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
+
+#    Enable selection highlighting for nodes (disables selectionbox).
+enable_node_highlighting (Node highlighting) bool false
 
 #    Enables caching of facedir rotated meshes.
 enable_mesh_cache (Mesh cache) bool false
@@ -356,6 +501,12 @@ 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
+
 [**Menus]
 
 #    Use a cloud animation for the main menu background.
@@ -388,7 +539,6 @@ freetype (Freetype fonts) bool true
 #    Path to TrueTypeFont or bitmap.
 font_path (Font path) path fonts/liberationsans.ttf
 
-#    Font size.
 font_size (Font size) int 15
 
 #    Font shadow offset, if 0 then shadow will not be drawn.
@@ -407,13 +557,18 @@ 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
+
 [**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]
@@ -430,40 +585,43 @@ show_debug (Show debug info) bool false
 
 [Server / Singleplayer]
 
-#    Name of the server.
+#    Name of the server, to be displayed when players join and in the serverlist.
 server_name (Server name) string Minetest server
 
-#    Description of 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.
+#    Domain name of server, to be displayed in the serverlist.
 server_address (Server address) string game.minetest.net
 
-#    Homepage of server.
+#    Homepage of server, to be displayed in the serverlist.
 server_url (Server URL) string http://minetest.net
 
-#    Automaticaly report to masterserver.
+#    Automaticaly report to the serverlist.
 server_announce (Announce server) bool false
 
-#    Announce to this masterserver.
-#    If you want to announce your ipv6 address - use  serverlist_url = v6.servers.minetest.net.
+#    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
 
-#    Set to true to disallow old clients from connecting.
+#    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 would be fetched the usual way.
+#    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
@@ -476,7 +634,7 @@ ipv6_server (IPv6 server) bool false
 #    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 per server.
+#    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.
@@ -490,38 +648,35 @@ max_packets_per_iteration (Max. packets per iteration) int 1024
 
 [*Game]
 
-#    Default game (default when creating a new world).
+#    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.
-motd (Message of the day) string Welcome to this awesome Minetest server!
+#    Message of the day displayed to players connecting.
+motd (Message of the day) string
 
-#    Maximum number of players connected simultaneously.
+#    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 to live.
+#    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
 
-#    Set to true to enable creative mode (unlimited inventory).
-creative_mode (Creative mode) bool false
-
 #    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
 
-#    Gives some stuff to players at the beginning.
-give_initial_stuff (Give initial stuff) bool false
-
 #    New users need to input this password.
 default_password (Default password) string
 
-#    Available privileges: interact, shout, teleport, settime, privs, ...
+#    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
 
@@ -532,19 +687,19 @@ unlimited_player_transfer_distance (Unlimited player transfer distance) bool tru
 #    Defines the maximal player transfer distance in blocks (0 = unlimited).
 player_transfer_distance (Player transfer distance) int 0
 
-#    Whether to enable players killing each other.
+#    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 0, 10, 0
+static_spawnpoint (Static spawnpoint) string
 
-#    If true, new players cannot join with an empty password.
+#    If enabled, new players cannot join with an empty password.
 disallow_empty_password (Disallow empty passwords) bool false
 
-#    If true, disable cheat prevention in multiplayer.
+#    If enabled, disable cheat prevention in multiplayer.
 disable_anticheat (Disable anticheat) bool false
 
-#    If true, actions are recorded for rollback.
+#    If enabled, actions are recorded for rollback.
 #    This option is only read when server starts.
 enable_rollback_recording (Rollback recording) bool false
 
@@ -558,24 +713,24 @@ kick_msg_crash (Crash message) string This server has experienced an internal er
 #    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 client knows about objects.
+#    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.
-#    Active = objects are loaded and ABMs run.
+#    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 blocks.
+#    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.
-#    72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged.
+#    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.
@@ -600,18 +755,18 @@ 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).
+#    -    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
 
-#    Mod profiler.
+#    Useful for mod developers.
 mod_profiling (Mod profiling) bool false
 
-#    Detailed mod profile data.
+#    Detailed mod profile data. Useful for mod developers.
 detailed_profiling (Detailed mod profiling) bool false
 
-#    Profiler data print interval. 0 = disable.
+#    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.
@@ -619,20 +774,21 @@ profiler_print_interval (Profiling print interval) int 0
 #    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.
+#    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
 
-#    http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2
-sqlite_synchronous (Synchronous SQLite) int 2 0 2
+#    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
 
-#    Can be set to true to disable shutting down on invalid world data.
+#    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.
@@ -649,10 +805,10 @@ liquid_update (Liquid update tick) float 1.0
 [*Mapgen]
 
 #    Name of map generator to be used when creating a new world.
-#    Currently supported: v5, v6, v7, singlenode.
+#    Creating a world in the main menu will override this.
 mg_name (Mapgen name) enum v6 v5,v6,v7,singlenode
 
-#    Water surface level of map
+#    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).
@@ -660,22 +816,21 @@ 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
+#    -    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.
-#    Currently supported: trees, caves, flat, dungeons, light.
 #    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.
+#    Flags starting with "no" are used to explicitly disable them.
 #    'trees' and 'flat' flags only have effect in mgv6.
-mg_flags (Mapgen flags) flags trees, caves, dungeons, light
+mg_flags (Mapgen flags) flags trees,caves,dungeons,light trees,caves,dungeons,light,flat,notrees,nocaves,nodungeons,nolight,noflat
 
 [**Advanced]
 
-#    Size of chunks to be generated, stated in mapblocks (16 nodes).
+#    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.
@@ -698,18 +853,18 @@ emergequeue_limit_generate (Limit of emerge queues to generate) int 32
 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_params 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0
-mg_biome_np_heat_blend (Mapgen heat blend) noise_params 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0
-mg_biome_np_humidity (Mapgen biome humidity) noise_params 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0
-mg_biome_np_humidity_blend (Mapgen biome humidity blend) noise_params 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0
+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]
 
-mgv5_np_filler_depth (Mapgen v5 filler depth) noise_params 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0
-mgv5_np_factor (Mapgen v5 factor) noise_params 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0
-mgv5_np_height (Mapgen v5 height) noise_params 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0
-mgv5_np_cave1 (Mapgen v5 cave1) noise_params 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0
-mgv5_np_cave2 (Mapgen v5 cave2) noise_params 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0
+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
@@ -725,50 +880,46 @@ mgv5_np_cave2 (Mapgen v5 cave2) noise_params 0, 12, (50, 50, 50), 10325, 4, 0.5,
 [***Mapgen v6]
 
 #    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 (Mapgen v6 flags) flags jungles, biomeblend, mudflow, snowbiomes
+#    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 jungles,biomeblend,mudflow,snowbiomes,nojungles,nobiomeblend,nomudflow,nosnowbiomes
 
 #    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
 
-#    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.
-#    For example:
-mgv6_np_terrain_base (Mapgen v6 terrain base) noise_params -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
-
-mgv6_np_terrain_base (Mapgen v6 terrain base) noise_params -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
-mgv6_np_terrain_higher (Mapgen v6 terrain altitude) noise_params 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0
-mgv6_np_steepness (Mapgen v6 steepness) noise_params 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0
-mgv6_np_height_select (Mapgen v6 height select) noise_params 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0
-mgv6_np_mud (Mapgen v6 mud) noise_params 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0
-mgv6_np_beach (Mapgen v6 beach) noise_params 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0
-mgv6_np_biome (Mapgen v6 biome) noise_params 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0
-mgv6_np_cave (Mapgen v6 cave) noise_params 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0
-mgv6_np_humidity (Mapgen v6 humidity) noise_params 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0
-mgv6_np_trees (Mapgen v6 trees) noise_params 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0
-mgv6_np_apple_trees (Mapgen v6 apple trees) noise_params 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0
+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.
-#    Currently supported: mountains, ridges.
 #    'ridges' are the rivers.
-mgv7_spflags (Mapgen v7 flags) flags mountains, ridges
-
-mgv7_np_terrain_base (Mapgen v7 terrain base) noise_params 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0
-mgv7_np_terrain_alt (Mapgen v7 terrain altitude) noise_params 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0
-mgv7_np_terrain_persist (Mapgen v7 terrain persistation) noise_params 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0
-mgv7_np_height_select (Mapgen v7 height select) noise_params -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0
-mgv7_np_filler_depth (Mapgen v7 filler depth) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0
-mgv7_np_mount_height (Mapgen v7 mount height) noise_params 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0
-mgv7_np_ridge_uwater (Mapgen v7 ridge water) noise_params 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0
-mgv7_np_mountain (Mapgen v7 mountain) noise_params -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0
-mgv7_np_ridge (Mapgen v7 ridge) noise_params 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0
-mgv7_np_cave1 (Mapgen v7 cave1) noise_params 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0
-mgv7_np_cave2 (Mapgen v7 cave2) noise_params 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0
+#    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
+
+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 -12, 24, (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
 
 [*Security]
 
@@ -780,45 +931,49 @@ secure.enable_security (Enable mod security) bool false
 secure.trusted_mods (Trusted 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
 
-#    Override language. When no value is provided (default) system language is used.
-#    Check "locale" directory for the list of available translations.
-language (Language) 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
+#    -    <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).
+#    -    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
+#    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
index 52da2d0957896162d3d73a4c2f3d7a8fe64079ca..e9d19ad279bb3f517d6736bc4d60966ef4b60711 100644 (file)
@@ -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
index caca198b91dd0217c921824be3e3ee07d395a8e3..b2630c1bd586070f50f8d8a9cd2b3cfa23977e93 100644 (file)
 #    type: bool
 # enable_build_where_you_stand = false
 
-#    Unobstructed movement without physics, downwards key is keymap_special1.
+#    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 (keymap_special1).
+#    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 arround.
 #    Useful for recording videos.
 #    type: bool
 # cinematic = false
 
 #    Smooths rotation of camera. 0 to disable.
-#    type: float min: 0.0 max: 0.99
+#    type: float min: 0 max: 0.99
 # camera_smoothing = 0.0
 
 #    Smooths rotation of camera in cinematic mode. 0 to disable.
-#    type: float min: 0.0 max: 0.99
+#    type: float min: 0 max: 0.99
 # cinematic_camera_smoothing = 0.7
 
 #    Invert vertical mouse movement.
@@ -52,7 +59,7 @@
 #    type: float
 # mouse_sensitivity = 0.2
 
-#    If enabled, keymap_special1 instead of keymap_sneak is used for climbing down and descending.
+#    If enabled, "use" key instead of "sneak" key is used for climbing down and descending.
 #    type: bool
 # aux1_descends = false
 
@@ -60,7 +67,7 @@
 #    type: bool
 # doubletap_jump = false
 
-#    If false aux1 is used to fly fast.
+#    If disabled "use" key is used to fly fast if both fly and fast mode are enabled.
 #    type: bool
 # always_fly_fast = true
 
 #    type: float
 # repeat_rightclick_time = 0.25
 
-#    Enable random user input, for testing.
+#    Enable random user input (only used for testing).
 #    type: bool
 # random_input = false
 
-#    Continuous forward movement (for testing).
+#    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
+#    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. Modifies the minimum viewing range.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+#    type: key
+# keymap_increase_viewing_range_min = +
+
+#    Key for decreasing the viewing range. Modifies the minimum 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 (blank = start local server).
+#    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).
-#    type: int
+#    Note that the port field in the main menu overrides this setting.
+#    type: int min: 1 max: 65535
 # remote_port = 30000
 
 #    Save the map received by the client on disk.
 # enable_local_map_saving = false
 
 #    Enable usage of remote media server (if provided by server).
+#    Remote servers offer a significantly faster way to download media (e.g. textures)
+#    when connecting to the server.
 #    type: bool
 # enable_remote_media_server = true
 
 
 ### In-Game
 
-#    Minimum wanted FPS.
-#    The amount of rendered stuff is dynamically set according to this.
-#    type: int
-# wanted_fps = 30
-
-#    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
-
-#    The allowed adjustment range for the automatic rendering range adjustment.
-#    type: int
-# viewing_range_nodes_max = 160
-
-#    The allowed adjustment range for the automatic rendering range adjustment.
-#    type: int
-# viewing_range_nodes_min = 35
-
-#    Vertical initial window size.
-#    type: int
-# screenW = 800
-
-#    Horizontal initial window size.
-#    type: int
-# screenH = 600
-
-#    Fullscreen mode.
-#    type: bool
-# fullscreen = false
-
-#    type: int
-# fullscreen_bpp = 24
-
-#    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
-
-#    Vertical screen synchronization.
-#    type: bool
-# vsync = false
-
-#    Field of view in degrees.
-#    type: int min: 30 max: 160
-# fov = 72
+#### Basic
 
 #    Whether to fog out the end of the visible area.
 #    type: bool
 # enable_fog = true
 
-#    Enable a bit lower water surface; disable for speed (not quite optimized).
+#    Enable a bit lower water surface, so it doesn't "fill" the node completely.
+#    Note that this is not quite optimized and that smooth lighting on the
+#    water surface doesn't work with this.
 #    type: bool
 # new_style_water = false
 
 #    Leaves style:
-#    - Fancy  -> all faces visible
-#    - Simple -> only outer faces, if defined special_tiles are used
-#    - Opaque -> disable transparency
+#    -   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
 
 #    type: bool
 # smooth_lighting = true
 
-#    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.0 max: 3.0
-# display_gamma = 1.8
-
-#    Path to texture directory. All textures are first searched from here.
-#    type: path
-# texture_path = 
-
-#    Video back-end.
-#    Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl.
-#    type: enum values: null, software, burningsvideo, direct3d8, direct3d9, opengl
-# video_driver = opengl
-
-#    Enable/disable clouds.
+#    Clouds are a client side effect.
 #    type: bool
 # enable_clouds = true
 
-#    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
-
 #    Use 3D cloud look instead of flat.
 #    type: bool
 # enable_3d_clouds = true
 
-#    Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double).
-#    type: float
-# view_bobbing_amount = 1.0
-
-#    Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double).
-#    type: float
-# 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.
-#    type: enum values: none, anaglyph, interlaced, topbottom, sidebyside
-# 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.
-#    type: int min: 1 max: 5
-# selectionbox_width = 2
-
-#    Crosshair color (R,G,B).
-#    type: string
-# crosshair_color = (255,255,255)
-
-#    Cross alpha (opaqueness, between 0 and 255).
-#    type: int min: 0 max: 255
-# crosshair_alpha = 255
-
-#    Path for screenshots.
-#    type: path
-# screenshot_path = 
-
-#    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
-
-#    Enable selection highlighting for nodes (disables selectionbox).
-#    type: bool
-# enable_node_highlighting = false
+#### 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
 
 #    type: int
 # texture_min_size = 64
 
-#    Set to true to pre-generate all item visuals.
+#    Pre-generate all item visuals used in the inventory.
+#    This increases startup time, but runs smoother in-game.
+#    The generated textures can easily exceed your VRAM, causing artifacts in the inventory.
 #    type: bool
 # preload_item_visuals = false
 
-#    Set to true to enable shaders. Disable them if video_driver = direct3d9/8.
+#    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
 
-#    Set to true to enable textures bumpmapping. Requires shaders enabled.
+##### 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
 
-#    Set to true enables on the fly normalmap generation (Emboss effect).
-#    Requires bumpmapping enabled.
+#    Enables on the fly normalmap generation (Emboss effect).
+#    Requires bumpmapping to be enabled.
 #    type: bool
 # generate_normalmaps = false
 
 #    type: float
 # normalmaps_strength = 0.6
 
-#    Defines sampling step of texture (0 - 2).
+#    Defines sampling step of texture.
 #    A higher value results in smoother normal maps.
 #    type: int min: 0 max: 2
 # normalmaps_smooth = 0
 
-#    Set to true enables parallax occlusion mapping. Requires shaders enabled.
+##### Parallax Occlusion
+
+#    Enables parallax occlusion mapping.
+#    Requires shaders to be enabled.
 #    type: bool
 # enable_parallax_occlusion = false
 
 #    type: float
 # parallax_occlusion_bias = 0.04
 
-#    Set to true enables waving water. Requires shaders enabled.
+##### Waving Nodes
+
+#    Set to true enables waving water.
+#    Requires shaders to be enabled.
 #    type: bool
 # enable_waving_water = false
 
 #    type: float
 # water_wave_speed = 5.0
 
-#    Set to true enables waving leaves. Requires shaders enabled.
+#    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 enabled.
+#    Set to true enables waving plants.
+#    Requires shaders to be enabled.
 #    type: bool
 # enable_waving_plants = false
 
-#    The strength (darkness) of node ambient-occlusion shading.
-#    Lower is darker, Higher is lighter. The valid range of values for this
-#    setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
-#    set to the nearest valid value.
-#    type: float min: 0.25 max: 4.0
-# ambient_occlusion_gamma = 2.2
+#### Advanced
+
+#    Minimum wanted FPS.
+#    The amount of rendered stuff is dynamically set according to this. and viewing range min and max.
+#    type: int
+# wanted_fps = 30
+
+#    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
+
+#    The allowed adjustment range for the automatic rendering range adjustment.
+#    Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm.
+#    type: int
+# viewing_range_nodes_max = 160
+
+#    The allowed adjustment range for the automatic rendering range adjustment.
+#    Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm.
+#    type: int
+# viewing_range_nodes_min = 35
+
+#    Vertical initial window size.
+#    type: int
+# screenW = 800
+
+#    Horizontal 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.
+#    type: enum values: none, anaglyph, interlaced, topbottom, sidebyside
+# 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
+
+#    Enable selection highlighting for nodes (disables selectionbox).
+#    type: bool
+# enable_node_highlighting = false
 
 #    Enables caching of facedir rotated meshes.
 #    type: bool
 #    type: bool
 # directional_colored_fog = true
 
+#    The strength (darkness) of node ambient-occlusion shading.
+#    Lower is darker, Higher is lighter. The valid range of values for this
+#    setting is 0.25 to 4.0 inclusive. If the value is out of range it will be
+#    set to the nearest valid value.
+#    type: float min: 0.25 max: 4
+# ambient_occlusion_gamma = 2.2
+
 ### Menus
 
 #    Use a cloud animation for the main menu background.
 #    type: path
 # font_path = fonts/liberationsans.ttf
 
-#    Font size.
 #    type: int
 # font_size = 15
 
 #    type: int min: 0 max: 255
 # fallback_font_shadow_alpha = 128
 
+#    Path to save screenshots at.
+#    type: path
+# screenshot_path = 
+
 ### Advanced
 
 #    Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
 #    type: bool
 # enable_sound = true
 
-#    type: float min: 0.0 max: 1.0
+#    type: float min: 0 max: 1
 # sound_volume = 0.7
 
 ## Advanced
 # Server / Singleplayer
 #
 
-#    Name of the server.
+#    Name of the server, to be displayed when players join and in the serverlist.
 #    type: string
 # server_name = Minetest server
 
-#    Description of server.
+#    Description of server, to be displayed when players join and in the serverlist.
 #    type: string
 # server_description = mine here
 
-#    Domain name of server.
+#    Domain name of server, to be displayed in the serverlist.
 #    type: string
 # server_address = game.minetest.net
 
-#    Homepage of server.
+#    Homepage of server, to be displayed in the serverlist.
 #    type: string
 # server_url = http://minetest.net
 
-#    Automaticaly report to masterserver.
+#    Automaticaly report to the serverlist.
 #    type: bool
 # server_announce = false
 
-#    Announce to this masterserver.
-#    If you want to announce your ipv6 address - use  serverlist_url = v6.servers.minetest.net.
+#    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
 
 #    type: string
 # bind_address = 
 
-#    Set to true to disallow old clients from connecting.
+#    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 would be fetched the usual way.
+#    Files that are not present will be fetched the usual way.
 #    type: string
 # remote_media = 
 
 #    type: int
 # max_simultaneous_block_sends_per_client = 10
 
-#    How many blocks are flying in the wire simultaneously per server.
+#    How many blocks are flying in the wire simultaneously for the whole server.
 #    type: int
 # max_simultaneous_block_sends_server_total = 40
 
 
 ## Game
 
-#    Default game (default when creating a new world).
+#    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.
+#    Message of the day displayed to players connecting.
 #    type: string
-# motd = Welcome to this awesome Minetest server!
+# motd = 
 
-#    Maximum number of players connected simultaneously.
+#    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 to live.
+#    Time in seconds for item entity (dropped items) to live.
 #    Setting it to -1 disables the feature.
 #    type: int
 # item_entity_ttl = 900
 
-#    Set to true to enable creative mode (unlimited inventory).
-#    type: bool
-# creative_mode = false
-
 #    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 = 
 
-#    Gives some stuff to players at the beginning.
-#    type: bool
-# give_initial_stuff = false
-
 #    New users need to input this password.
 #    type: string
 # default_password = 
 
-#    Available privileges: interact, shout, teleport, settime, privs, ...
+#    The privileges that new users automatically get.
 #    See /privs in game for a full list on your server and mod configuration.
 #    type: string
 # default_privs = interact, shout
 #    type: int
 # player_transfer_distance = 0
 
-#    Whether to enable players killing each other.
+#    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 = 0, 10, 0
+# static_spawnpoint = 
 
-#    If true, new players cannot join with an empty password.
+#    If enabled, new players cannot join with an empty password.
 #    type: bool
 # disallow_empty_password = false
 
-#    If true, disable cheat prevention in multiplayer.
+#    If enabled, disable cheat prevention in multiplayer.
 #    type: bool
 # disable_anticheat = false
 
-#    If true, actions are recorded for rollback.
+#    If enabled, actions are recorded for rollback.
 #    This option is only read when server starts.
 #    type: bool
 # enable_rollback_recording = false
 #    type: bool
 # ask_reconnect_on_crash = false
 
-#    From how far client knows about objects.
+#    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.
-#    Active = objects are loaded and ABMs run.
+#    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
 
 #    type: int
 # max_block_send_distance = 10
 
-#    Maximum number of forceloaded blocks.
+#    Maximum number of forceloaded mapblocks.
 #    type: int
 # max_forceloaded_blocks = 16
 
 # time_send_interval = 5
 
 #    Controls length of day/night cycle.
-#    72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged.
+#    Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged.
 #    type: int
 # time_speed = 72
 
 ### 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).
+#    -    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
 
-#    Mod profiler.
+#    Useful for mod developers.
 #    type: bool
 # mod_profiling = false
 
-#    Detailed mod profile data.
+#    Detailed mod profile data. Useful for mod developers.
 #    type: bool
 # detailed_profiling = false
 
-#    Profiler data print interval. 0 = disable.
+#    Profiler data print interval. 0 = disable. Useful for developers.
 #    type: int
 # profiler_print_interval = 0
 
 #    type: int
 # max_clearobjects_extra_loaded_blocks = 4096
 
-#    How much the server will wait before unloading unused MapBlocks.
+#    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
 #    type: int
 # max_objects_per_block = 49
 
-#    http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2
-#    type: int min: 0 max: 2
+#    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
 
-#    Can be set to true to disable shutting down on invalid world data.
+#    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
 
 ## Mapgen
 
 #    Name of map generator to be used when creating a new world.
-#    Currently supported: v5, v6, v7, singlenode.
+#    Creating a world in the main menu will override this.
 #    type: enum values: v5, v6, v7, singlenode
 # mg_name = v6
 
-#    Water surface level of map
+#    Water surface level of the world.
 #    type: int
 # water_level = 1
 
 
 #    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
+#    -    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.
-#    Currently supported: trees, caves, flat, dungeons, light.
 #    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.
+#    Flags starting with "no" are used to explicitly disable them.
 #    'trees' and 'flat' flags only have effect in mgv6.
-#    type: flags
-# mg_flags = trees, caves, dungeons, light
+#    type: flags possible values: trees, caves, dungeons, light, flat, notrees, nocaves, nodungeons, nolight, noflat
+# mg_flags = trees,caves,dungeons,light
 
 ### Advanced
 
-#    Size of chunks to be generated, stated in mapblocks (16 nodes).
+#    Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes).
 #    type: int
 # chunksize = 5
 
 #### Mapgen v6
 
 #    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.
-#    type: flags
-# mgv6_spflags = jungles, biomeblend, mudflow, snowbiomes
+#    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: jungles, biomeblend, mudflow, snowbiomes, nojungles, nobiomeblend, nomudflow, nosnowbiomes
+# mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes
 
 #    Controls size of deserts and beaches in Mapgen V6.
 #    When snowbiomes are enabled 'mgv6_freq_desert' is ignored.
 #    type: float
 # mgv6_freq_beach = 0.15
 
-#    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.
-#    For example:
-#    type: noise_params
-# mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
-
 #    type: noise_params
 # mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0
 
 #### Mapgen v7
 
 #    Map generation attributes specific to Mapgen V7.
-#    Currently supported: mountains, ridges.
 #    'ridges' are the rivers.
-#    type: flags
-# mgv7_spflags = mountains, ridges
+#    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
 
 #    type: noise_params
 # mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0
 
 #    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 = 
 
-#    Override language. When no value is provided (default) system language is used.
-#    Check "locale" directory for the list of available translations.
-#    type: string
-# language = 
+#    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
+#    -    <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.
 # 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).
+#    -    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
+#    Maximum time in ms a file download (e.g. a mod download) may take.
 #    type: int
 # curl_file_download_timeout = 300000
 
 #    type: bool
 # high_precision_fpu = true
 
+#    Replaces the default main menu with a custom one.
 #    type: string
 # main_menu_script = 
 
diff --git a/src/settings_translation_file.c b/src/settings_translation_file.c
deleted file mode 100644 (file)
index d92e845..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-// 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("Free movement");
-       gettext("Unobstructed movement without physics, downwards key is keymap_special1.");
-       gettext("Fast movement");
-       gettext("Fast movement (keymap_special1).");
-       gettext("Cinematic mode");
-       gettext("Smooths camera when moving and looking arround.\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, keymap_special1 instead of keymap_sneak 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 false aux1 is used to fly fast.");
-       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, for testing.");
-       gettext("Continuous forward");
-       gettext("Continuous forward movement (for testing).");
-       gettext("Network");
-       gettext("Server address");
-       gettext("Address to connect to (blank = start local server).");
-       gettext("Remote port");
-       gettext("Port to connect to (UDP).");
-       gettext("Saving map received by server");
-       gettext("Save the map received by the client on disk.");
-       gettext("Connect to external media server");
-       gettext("Enable usage of remote media server (if provided by server).");
-       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("Wanted FPS");
-       gettext("Minimum wanted FPS.\nThe amount of rendered stuff is dynamically set according to this.");
-       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 maximum");
-       gettext("The allowed adjustment range for the automatic rendering range adjustment.");
-       gettext("View range minimum");
-       gettext("The allowed adjustment range for the automatic rendering range adjustment.");
-       gettext("Screen width");
-       gettext("Vertical initial window size.");
-       gettext("Screen height");
-       gettext("Horizontal initial window size.");
-       gettext("Full screen");
-       gettext("Fullscreen mode.");
-       gettext("Full screen BPP");
-       gettext("FSAA");
-       gettext("Experimental option, might cause visible spaces between blocks\nwhen set to higher number than 0.");
-       gettext("V-Sync");
-       gettext("Vertical screen synchronization.");
-       gettext("Field of view");
-       gettext("Field of view in degrees.");
-       gettext("Fog");
-       gettext("Whether to fog out the end of the visible area.");
-       gettext("New style water");
-       gettext("Enable a bit lower water surface; disable for speed (not quite optimized).");
-       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("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("Video back-end.\nPossible values: null, software, burningsvideo, direct3d8, direct3d9, opengl.");
-       gettext("Clouds");
-       gettext("Enable/disable clouds.");
-       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("3D clouds");
-       gettext("Use 3D cloud look instead of flat.");
-       gettext("View bobbing");
-       gettext("Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double).");
-       gettext("Fall bobbing");
-       gettext("Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double).");
-       gettext("3D mode");
-       gettext("3D support.\nCurrently:\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.");
-       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.");
-       gettext("Crosshair color");
-       gettext("Crosshair color (R,G,B).");
-       gettext("Crosshair alpha");
-       gettext("Cross alpha (opaqueness, between 0 and 255).");
-       gettext("Screenshot folder");
-       gettext("Path for screenshots.");
-       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("Node highlighting");
-       gettext("Enable selection highlighting for nodes (disables selectionbox).");
-       gettext("Mipmapping");
-       gettext("Anisotropic filtering");
-       gettext("Bilinear filtering");
-       gettext("Trilinear filtering");
-       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("Preload inventory textures");
-       gettext("Set to true to pre-generate all item visuals.");
-       gettext("Shaders");
-       gettext("Set to true to enable shaders. Disable them if video_driver = direct3d9/8.");
-       gettext("Bumpmapping");
-       gettext("Set to true to enable textures bumpmapping. Requires shaders enabled.");
-       gettext("Generate normalmaps");
-       gettext("Set to true enables on the fly normalmap generation (Emboss effect).\nRequires bumpmapping enabled.");
-       gettext("Normalmaps strength");
-       gettext("Strength of generated normalmaps.");
-       gettext("Normalmaps sampling");
-       gettext("Defines sampling step of texture (0 - 2).\nA higher value results in smoother normal maps.");
-       gettext("Parralax occlusion");
-       gettext("Set to true enables parallax occlusion mapping. Requires shaders enabled.");
-       gettext("Parralax occlusion mode");
-       gettext("0 = parallax occlusion with slope information (faster).\n1 = relief mapping (slower, more accurate).");
-       gettext("Parralax occlusion strength");
-       gettext("Strength of parallax.");
-       gettext("Parralax occlusion iterations");
-       gettext("Number of parallax occlusion iterations.");
-       gettext("Parralax occlusion Scale");
-       gettext("Overall scale of parallax occlusion effect.");
-       gettext("Parralax occlusion bias");
-       gettext("Overall bias of parallax occlusion effect, usually scale/2.");
-       gettext("Waving water");
-       gettext("Set to true enables waving water. Requires shaders enabled.");
-       gettext("Waving water height");
-       gettext("Waving water length");
-       gettext("Waving water speed");
-       gettext("Waving leaves");
-       gettext("Set to true enables waving leaves. Requires shaders enabled.");
-       gettext("Waving plants");
-       gettext("Set to true enables waving plants. Requires shaders enabled.");
-       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("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("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 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("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.");
-       gettext("Server description");
-       gettext("Description of server.");
-       gettext("Server address");
-       gettext("Domain name of server.");
-       gettext("Server URL");
-       gettext("Homepage of server.");
-       gettext("Announce server");
-       gettext("Automaticaly report to masterserver.");
-       gettext("Serverlist URL");
-       gettext("Announce to this masterserver.\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).");
-       gettext("Bind address");
-       gettext("The network interface that the server listens on.");
-       gettext("Strict protocol checking");
-       gettext("Set to true to disallow old clients from connecting.");
-       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 would 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 per 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 (default when creating a new world).");
-       gettext("Message of the day");
-       gettext("Message of the Day.");
-       gettext("Maximum users");
-       gettext("Maximum number of players connected simultaneously.");
-       gettext("Map directory");
-       gettext("World directory (everything in the world is stored here).");
-       gettext("Item entity TTL");
-       gettext("Time in seconds for item entity to live.\nSetting it to -1 disables the feature.");
-       gettext("Creative mode");
-       gettext("Set to true to enable creative mode (unlimited inventory).");
-       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.");
-       gettext("Give initial stuff");
-       gettext("Gives some stuff to players at the beginning.");
-       gettext("Default password");
-       gettext("New users need to input this password.");
-       gettext("Default privileges");
-       gettext("Available privileges: interact, shout, teleport, settime, privs, ...\nSee /privs in game for a full list on your server and mod configuration.");
-       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 enable players killing 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 true, new players cannot join with an empty password.");
-       gettext("Disable anticheat");
-       gettext("If true, disable cheat prevention in multiplayer.");
-       gettext("Rollback recording");
-       gettext("If true, 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 client knows about objects.");
-       gettext("Active block range");
-       gettext("How large area of blocks are subject to the active block stuff.\nActive = 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 blocks.");
-       gettext("Time send interval");
-       gettext("Interval of sending time of day to clients.");
-       gettext("Time speed");
-       gettext("Controls length of day/night cycle.\n72=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("Mod profiler.");
-       gettext("Detailed mod profiling");
-       gettext("Detailed mod profile data.");
-       gettext("Profiling print interval");
-       gettext("Profiler data print interval. 0 = disable.");
-       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("http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2");
-       gettext("Dedicated server step");
-       gettext("Length of a server tick and the interval at which objects are generally updated over network.");
-       gettext("Ignore world errors");
-       gettext("Can be set to true to disable shutting down on invalid world data.");
-       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.\nCurrently supported: v5, v6, v7, singlenode.");
-       gettext("Water level");
-       gettext("Water surface level of map");
-       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.\nCurrently supported: trees, caves, flat, dungeons, light.\nFlags that are not specified in the flag string are not modified from the default.\nTo explicitly turn off a flag, prepend "no" to the beginning, e.g. nolight.\n'trees' and 'flat' flags only have effect in mgv6.");
-       gettext("Advanced");
-       gettext("Chunk size");
-       gettext("Size of chunks to be generated, 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");
-       gettext("Noise parameters for biome API temperature, humidity and biome blend.");
-       gettext("Mapgen heat blend");
-       gettext("Mapgen biome humidity");
-       gettext("Mapgen biome humidity blend");
-       gettext("Mapgen v5");
-       gettext("Mapgen v5 filler depth");
-       gettext("Mapgen v5 factor");
-       gettext("Mapgen v5 height");
-       gettext("Mapgen v5 cave1");
-       gettext("Mapgen v5 cave2");
-       gettext("Mapgen v6");
-       gettext("Mapgen v6 flags");
-       gettext("Map generation attributes specific to Mapgen V6.\nCurrently supported: jungles, biomeblend, mudflow, snowbiomes.\nWhen snowbiomes are enabled jungles are enabled and the jungles flag is ignored.");
-       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");
-       gettext("Perlin noise attributes for different map generation parameters.\nNoise parameters can be specified as a set of positional values:\nOffset, scale, (spread factors), seed offset, number of octaves, persistence, lacunarity.\nFor example:");
-       gettext("Mapgen v6 terrain base");
-       gettext("Mapgen v6 terrain altitude");
-       gettext("Mapgen v6 steepness");
-       gettext("Mapgen v6 height select");
-       gettext("Mapgen v6 mud");
-       gettext("Mapgen v6 beach");
-       gettext("Mapgen v6 biome");
-       gettext("Mapgen v6 cave");
-       gettext("Mapgen v6 humidity");
-       gettext("Mapgen v6 trees");
-       gettext("Mapgen v6 apple trees");
-       gettext("Mapgen v7");
-       gettext("Mapgen v7 flags");
-       gettext("Map generation attributes specific to Mapgen V7.\nCurrently supported: mountains, ridges.\n'ridges' are the rivers.");
-       gettext("Mapgen v7 terrain base");
-       gettext("Mapgen v7 terrain altitude");
-       gettext("Mapgen v7 terrain persistation");
-       gettext("Mapgen v7 height select");
-       gettext("Mapgen v7 filler depth");
-       gettext("Mapgen v7 mount height");
-       gettext("Mapgen v7 ridge water");
-       gettext("Mapgen v7 mountain");
-       gettext("Mapgen v7 ridge");
-       gettext("Mapgen v7 cave1");
-       gettext("Mapgen v7 cave2");
-       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("Client and Server");
-       gettext("Player name");
-       gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.");
-       gettext("Language");
-       gettext("Override language. When no value is provided (default) system language is used.\nCheck "locale" directory for the list of available translations.");
-       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("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/settings_translation_file.cpp b/src/settings_translation_file.cpp
new file mode 100644 (file)
index 0000000..961c613
--- /dev/null
@@ -0,0 +1,511 @@
+// 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 arround.\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. Modifies the minimum viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
+       gettext("View range decrease key");
+       gettext("Key for decreasing the viewing range. Modifies the minimum 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("Saving map received from server");
+       gettext("Save the map received by the client on disk.");
+       gettext("Connect to external media server");
+       gettext("Enable usage of remote media server (if provided by server).\nRemote servers offer a significantly faster way to download media (e.g. textures)\nwhen connecting to the server.");
+       gettext("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("Fog");
+       gettext("Whether to fog out the end of the visible area.");
+       gettext("New style water");
+       gettext("Enable a bit lower water surface, so it doesn't "fill" the node completely.\nNote that this is not quite optimized and that smooth lighting on the\nwater surface doesn't work with this.");
+       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("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("Preload inventory textures");
+       gettext("Pre-generate all item visuals used in the inventory.\nThis increases startup time, but runs smoother in-game.\nThe generated textures can easily exceed your VRAM, causing artifacts in the inventory.");
+       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("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("Wanted FPS");
+       gettext("Minimum wanted FPS.\nThe amount of rendered stuff is dynamically set according to this. and viewing range min and max.");
+       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 maximum");
+       gettext("The allowed adjustment range for the automatic rendering range adjustment.\nSet this to be equal to viewing range minimum to disable the auto-adjustment algorithm.");
+       gettext("Viewing range minimum");
+       gettext("The allowed adjustment range for the automatic rendering range adjustment.\nSet this to be equal to viewing range minimum to disable the auto-adjustment algorithm.");
+       gettext("Screen width");
+       gettext("Vertical initial window size.");
+       gettext("Screen height");
+       gettext("Horizontal 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.");
+       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("Node highlighting");
+       gettext("Enable selection highlighting for nodes (disables selectionbox).");
+       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("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("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("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("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.\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.\n'trees' and 'flat' flags only have effect in mgv6.");
+       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 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 enabled and the jungles flag is ignored.\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.\n'ridges' are the rivers.\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 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("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("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");
+}