diff --git a/builtin/mainmenu/dlg_settings_advanced.lua b/builtin/mainmenu/dlg_settings_advanced.lua index 67e8c9ede..6d40ace35 100644 --- a/builtin/mainmenu/dlg_settings_advanced.lua +++ b/builtin/mainmenu/dlg_settings_advanced.lua @@ -670,14 +670,18 @@ local function create_change_setting_formspec(dialogdata) height = height + 1.1 elseif setting.type == "flags" then - local enabled_flags = flags_to_table(get_current_value(setting)) + local current_flags = flags_to_table(get_current_value(setting)) local flags = {} - for _, name in ipairs(enabled_flags) do + for _, name in ipairs(current_flags) do -- Index by name, to avoid iterating over all enabled_flags for every possible flag. - flags[name] = true + if name:sub(1, 2) == "no" then + flags[name:sub(3)] = false + else + flags[name] = true + end end - local flags_count = #setting.possible - local max_height = flags_count / 4 + local flags_count = #setting.possible / 2 + local max_height = math.ceil(flags_count / 2) / 2 -- More space for flags description_height = description_height - 1 @@ -685,19 +689,21 @@ local function create_change_setting_formspec(dialogdata) local fields = {} -- To build formspec for i, name in ipairs(setting.possible) do - local x = 0.5 - local y = height + i / 2 - 0.75 - if i - 1 >= flags_count / 2 then -- 2nd column - x = 5 - y = y - max_height - end - local checkbox_name = "cb_" .. name - local is_enabled = flags[name] == true -- to get false if nil - checkboxes[checkbox_name] = is_enabled + if name:sub(1, 2) ~= "no" then + local x = 0.5 + local y = height + i / 2 - 0.75 + if i - 1 >= flags_count / 2 then -- 2nd column + x = 5 + y = y - max_height + end + local checkbox_name = "cb_" .. name + local is_enabled = flags[name] == true -- to get false if nil + checkboxes[checkbox_name] = is_enabled - fields[#fields + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format( - x, y, checkbox_name, name, tostring(is_enabled) - ) + fields[#fields + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format( + x, y, checkbox_name, name, tostring(is_enabled) + ) + end end formspec = table.concat(fields) height = height + max_height + 0.25 @@ -833,8 +839,12 @@ local function handle_change_setting_buttons(this, fields) elseif setting.type == "flags" then local values = {} for _, name in ipairs(setting.possible) do - if checkboxes["cb_" .. name] then - table.insert(values, name) + if name:sub(1, 2) ~= "no" then + if checkboxes["cb_" .. name] then + table.insert(values, name) + else + table.insert(values, "no" .. name) + end end end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index a3059a7cb..4254603e2 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -1887,7 +1887,7 @@ mgfractal_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), # 'vary_river_depth': If enabled, low humidity and high heat causes rivers # to become shallower and occasionally dry. # 'altitude_dry': Reduces humidity with altitude. -mgvalleys_spflags (Mapgen Valleys specific flags) flags altitude_chill,humid_rivers,vary_river_depth,altitude_dry altitude_chill,noaltitude_chill,humid_rivers,nohumid_rivers,vary_river_depth,novary_river_depth,altitude_dry,noaltitude_dry +mgvalleys_spflags (Mapgen Valleys specific flags) flags altitude_chill,humid_rivers,vary_river_depth,altitude_dry altitude_chill,humid_rivers,vary_river_depth,altitude_dry,noaltitude_chill,nohumid_rivers,novary_river_depth,noaltitude_dry # The vertical distance over which heat drops by 20 if 'altitude_chill' is # enabled. Also the vertical distance over which humidity drops by 10 if diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index b6ab7c9a0..7756bc45d 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -417,7 +417,7 @@ void set_default_settings(Settings *settings) settings->setDefault("water_level", "1"); settings->setDefault("mapgen_limit", "31000"); settings->setDefault("chunksize", "5"); - settings->setDefault("mg_flags", "dungeons"); + settings->setDefault("mg_flags", "caves,dungeons,light,decorations,biomes"); settings->setDefault("fixed_map_seed", ""); settings->setDefault("max_block_generate_distance", "8"); settings->setDefault("projecting_dungeons", "true");