Skip to content
10 changes: 10 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
---------------------------------------------------------------------------------------------------
Version: 6.0.1
Date: 01. 12. 2024
Features:
- Checkboxes to skip resources on a surface.
---------------------------------------------------------------------------------------------------
Version: 6.0.0
Date: 01. 11. 2024
Features:
- Updated to Factorio 2.0.
---------------------------------------------------------------------------------------------------
Version: 5.0.2
Date: ????
Changes:
Expand Down
12 changes: 7 additions & 5 deletions control.lua
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ local function set_to_current_map_gen_settings(player)
gui.get_preset_dropdown(player).selected_index = 0

--the rest
map_gen_gui.set_to_current(gui.get_map_gen_settings_container(player), map_gen_settings)
map_gen_gui.set_to_current(gui.get_map_gen_settings_container(player), map_gen_settings, true)
end

local function set_to_current_map_settings(player)
Expand All @@ -46,7 +46,7 @@ local function set_to_current_map_settings(player)
local config_table = gui.get_map_settings_container(player)
local map_settings = game.map_settings
map_settings_gui.expansion_set_to_current(config_table, map_settings)
map_settings_gui.evolution_set_to_current(config_table, map_settings)
map_settings_gui.evolution_set_to_current(config_table, map_settings, player.surface)
map_settings_gui.pollution_set_to_current(config_table, map_settings)
end

Expand Down Expand Up @@ -98,9 +98,11 @@ local function change_map_settings(player)
map_settings.enemy_expansion[k] = v
end
for k, v in pairs(enemy_evolution) do
map_settings.enemy_evolution[k] = v
if k ~= "evolution_factor" then
map_settings.enemy_evolution[k] = v
end
end
game.forces["enemy"].evolution_factor = enemy_evolution.evolution_factor
game.forces["enemy"].set_evolution_factor(enemy_evolution.evolution_factor, player.surface)

player.print({"msg.change-map-settings-applied"})

Expand Down Expand Up @@ -199,7 +201,7 @@ script.on_event(defines.events.on_gui_selection_state_changed, function(event)
-- then set up the preset
-- {"map-gen-preset-name." .. preset_name}
local preset_name = item[1]:sub(string.len("map-gen-preset-name.") + 1)
local preset = game.map_gen_presets[preset_name]
local preset = prototypes.map_gen_preset[preset_name]

map_gen_gui.set_to_current(gui.get_map_gen_settings_container(player), preset.basic_settings)
end)
Expand Down
7 changes: 6 additions & 1 deletion data.lua
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,20 @@ data.raw["gui-style"]["default"]["frame_in_deep_frame"] =
}
}

-- 2.0 removed 'b_inner_frame' so this now defines its 'base' properties
-- instead of inheriting from 'b_inner_frame'.
-- It always changed the shadow.
data.raw["gui-style"]["default"]["b_inner_frame_no_border"] =
{
type = "frame_style",
parent = "b_inner_frame",
graphical_set =
{
base =
{
position = {17, 0},
corner_size = 8,
center = {position = {76, 8}, size = {1, 1}},
draw_type = "outer"
},
-- we only show shadow on the top, to solve the problem of it not being casted from the subheader panel above
shadow =
Expand Down
6 changes: 3 additions & 3 deletions gui.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ gui.make_map_settings = function(parent, surface)
local inner_frame = parent.add{
type = "frame",
direction = "vertical",
style = "window_content_frame_packed"
style = "inside_shallow_frame_packed"
}

-- tool buttons
Expand Down Expand Up @@ -108,7 +108,7 @@ gui.make_map_settings = function(parent, surface)
--make different map gen option groups
map_settings_gui.make_pollution_settings(config_table, map_settings)
map_settings_gui.make_expansion_settings(config_table, map_settings)
map_settings_gui.make_evolution_settings(config_table, map_settings)
map_settings_gui.make_evolution_settings(config_table, map_settings, surface)
gui.make_general_map_settings(config_table, surface)
end

Expand Down Expand Up @@ -189,7 +189,7 @@ gui.make_map_gen_settings = function(parent)

-- presets
local presets = {}
for name, preset in pairs(game.map_gen_presets) do
for name, preset in pairs(prototypes.map_gen_preset) do
if not preset.basic_settings then
goto continue
end
Expand Down
4 changes: 2 additions & 2 deletions info.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ChangeMapSettings",
"version": "5.0.2",
"factorio_version" : "1.1",
"version": "6.0.0",
"factorio_version" : "2.0",
"title": "Change Map Settings",
"author": "Bilka",
"description": "Allows you to change your map and map generation settings at any time you want.",
Expand Down
161 changes: 113 additions & 48 deletions map_gen_settings_gui.lua
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ map_gen_gui.create_resource_table = function(parent)
}

-- resources
for _, control in pairs(game.autoplace_control_prototypes) do
for _, control in pairs(prototypes.autoplace_control) do
if control.category == "resource" then
map_gen_gui.make_autoplace_options(control.name, table, true, control)
end
Expand Down Expand Up @@ -175,11 +175,8 @@ map_gen_gui.create_controls_with_scale_table = function(parent)
}
table.children[1].style.horizontally_stretchable = true

-- water
map_gen_gui.make_autoplace_options("water", table, false)

-- trees and custom mod stuff
for _, control in pairs(game.autoplace_control_prototypes) do
for _, control in pairs(prototypes.autoplace_control) do
if control.category == "terrain" and control.name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
map_gen_gui.make_autoplace_options(control.name, table, false, control)
end
Expand Down Expand Up @@ -264,7 +261,7 @@ map_gen_gui.create_enemies_table = function(parent)
table.children[1].style.horizontally_stretchable = true

-- biter bases
for _, control in pairs(game.autoplace_control_prototypes) do
for _, control in pairs(prototypes.autoplace_control) do
if control.category == "enemy" then
map_gen_gui.make_autoplace_options(control.name, table, false, control)
end
Expand Down Expand Up @@ -322,23 +319,36 @@ end
local autoplace_name_locale =
{
["aux"] = {"gui-map-generator.aux"},
["cliffs"] = {"gui-map-generator.cliffs"},
["cliffs"] = {"autoplace-control-names.nauvis_cliff"},
["moisture"] = {"gui-map-generator.moisture"},
["water"] = {"", {"gui-map-generator.water"}, "/", {"gui-map-generator.island-size"}}
}

-- if autoplace is provided, the localised name is taken from there
map_gen_gui.make_autoplace_label = function(name, parent, autoplace)
local label = parent.add{
type = "label"
}
local label

if autoplace then
-- an autoplace has a flow with (checkbox, label)
local flow = parent.add {
type = "flow",
name = ENTIRE_PREFIX .. name .. "-check-wrapper",
direction = "horizontal"
}
flow.add {
type = "checkbox",
name = "check",
state = true
}
label = flow.add{type = "label"}

label.caption = autoplace.localised_name
assert(label.caption ~= "nil")
return
end

-- other things just have a label
label = parent.add{type = "label"}
label.caption = autoplace_name_locale[name]
if name == "moisture" or name == "aux" then
label.tooltip = {"gui-map-generator." .. name .. "-description"}
Expand All @@ -362,25 +372,39 @@ map_gen_gui.reset_to_defaults = function(parent)
map_gen_gui.create_expression_selectors(expression_selectors_flow)


-- water stuff
controls_with_scale_table[ENTIRE_PREFIX .. "water-freq"].text = "1"
controls_with_scale_table[ENTIRE_PREFIX .. "water-size"].text = "1"
-- starting area
enemies_table[ENTIRE_PREFIX .. "starting-area-size"].text = "1"

-- resources and terrain and enemies
local autoplace_control_prototypes = game.autoplace_control_prototypes
for _, control in pairs(autoplace_control_prototypes) do
local autoplace_control_prototypes = prototypes.autoplace_control
for name, control in pairs(autoplace_control_prototypes) do
local check_wrapper_name = ENTIRE_PREFIX .. name .. "-check-wrapper"
if control.category == "resource" then
resource_table[ENTIRE_PREFIX .. control.name .. "-freq"].text = "1"
resource_table[ENTIRE_PREFIX .. control.name .. "-size"].text = "1"
resource_table[ENTIRE_PREFIX .. control.name .. "-richn"].text = "1"
elseif control.category == "terrain" and control.name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
controls_with_scale_table[ENTIRE_PREFIX .. control.name .. "-freq"].text = "1"
controls_with_scale_table[ENTIRE_PREFIX .. control.name .. "-size"].text = "1"
if resource_table[check_wrapper_name] and not resource_table[check_wrapper_name].check.state then
resource_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
resource_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
resource_table[ENTIRE_PREFIX .. name .. "-richn"].text = ""
else
resource_table[ENTIRE_PREFIX .. name .. "-freq"].text = "1"
resource_table[ENTIRE_PREFIX .. name .. "-size"].text = "1"
resource_table[ENTIRE_PREFIX .. name .. "-richn"].text = "1"
end
elseif control.category == "terrain" and name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
if controls_with_scale_table[check_wrapper_name] and not controls_with_scale_table[check_wrapper_name].check.state then
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
else
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-freq"].text = "1"
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-size"].text = "1"
end
elseif control.category == "enemy" then
enemies_table[ENTIRE_PREFIX .. control.name .. "-freq"].text = "1"
enemies_table[ENTIRE_PREFIX .. control.name .. "-size"].text = "1"
if enemies_table[check_wrapper_name] and not enemies_table[check_wrapper_name].check.state then
enemies_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
enemies_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
else
enemies_table[ENTIRE_PREFIX .. name .. "-freq"].text = "1"
enemies_table[ENTIRE_PREFIX .. name .. "-size"].text = "1"
end
end
end

Expand All @@ -395,7 +419,7 @@ map_gen_gui.reset_to_defaults = function(parent)
cliffs_table[ENTIRE_PREFIX .. "cliffs-size"].text = "1"
end

map_gen_gui.set_to_current = function(parent, map_gen_settings)
map_gen_gui.set_to_current = function(parent, map_gen_settings, reset_checkboxes)
local expression_selectors_flow = parent[ENTIRE_PREFIX .. "gui-frame-2"][ENTIRE_PREFIX .. "expression-selectors-table"][ENTIRE_PREFIX .. "expression-selectors-flow"]
local resource_table = parent[ENTIRE_PREFIX .. "gui-frame-1"][ENTIRE_PREFIX .. "resource-scroll-pane"][ENTIRE_PREFIX .."resource-table"]
local controls_with_scale_table = parent[ENTIRE_PREFIX .. "gui-frame-2"][ENTIRE_PREFIX .. "terrain-scroll-pane"][ENTIRE_PREFIX .."controls-with-scale-table"]
Expand All @@ -415,7 +439,7 @@ map_gen_gui.set_to_current = function(parent, map_gen_settings)
if property_expression_names then -- can be missing when reading from preset
local possible_properties = util.get_possible_noise_expression_properties()
local relevant_noise_expressions = util.get_relevant_noise_expressions()
local valid_named_noise_expressions = game.named_noise_expressions
local valid_named_noise_expressions = prototypes.named_noise_expression
for property in pairs(possible_properties) do
local selected_expression = property_expression_names[property]
if selected_expression then
Expand All @@ -435,28 +459,61 @@ map_gen_gui.set_to_current = function(parent, map_gen_settings)
end
end

-- water stuff
controls_with_scale_table[ENTIRE_PREFIX .. "water-freq"].text = util.number_to_string(1 / (util.map_gen_size_to_number(map_gen_settings.terrain_segmentation) or 1)) -- inverse
controls_with_scale_table[ENTIRE_PREFIX .. "water-size"].text = util.number_to_string(util.map_gen_size_to_number(map_gen_settings.water) or 1)
-- starting area
enemies_table[ENTIRE_PREFIX .. "starting-area-size"].text = util.number_to_string(util.map_gen_size_to_number(map_gen_settings.starting_area) or 1)

-- resources and terrain and enemies
local valid_autoplace_controls = game.autoplace_control_prototypes
if autoplace_controls then
for name, autoplace_control in pairs(autoplace_controls) do
if valid_autoplace_controls[name] then
if valid_autoplace_controls[name].category == "resource" then
resource_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)
resource_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
resource_table[ENTIRE_PREFIX .. name .. "-richn"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["richness"]) or 1)
elseif valid_autoplace_controls[name].category == "terrain" and name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(1 / (util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)) -- inverse
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
elseif valid_autoplace_controls[name].category == "enemy" then
enemies_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)
enemies_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
end
local valid_autoplace_controls = prototypes.autoplace_control
for name, control_prototype in pairs(valid_autoplace_controls) do
-- find checkbox
local checkbox
if control_prototype.category == "resource" then
checkbox = resource_table[ENTIRE_PREFIX .. name .. "-check-wrapper"].check
elseif control_prototype.category == "terrain" then
checkbox = controls_with_scale_table[ENTIRE_PREFIX .. name .. "-check-wrapper"].check
elseif control_prototype.category == "enemy" then
checkbox = enemies_table[ENTIRE_PREFIX .. name .. "-check-wrapper"].check
end
-- reset checkbox to match data, if we were told to
if reset_checkboxes and checkbox then
if (
autoplace_controls and
autoplace_controls[name] and
autoplace_controls[name].size and
util.map_gen_size_to_number(autoplace_controls[name].size) > 0
) then
checkbox.state = true
else
checkbox.state = false
end
end
-- defaults to 1,1,1
local autoplace_control = autoplace_controls and autoplace_controls[name] or {frequency=1, size=1, richness=1}
if control_prototype.category == "resource" then
if checkbox.state then
resource_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)
resource_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
resource_table[ENTIRE_PREFIX .. name .. "-richn"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["richness"]) or 1)
else
resource_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
resource_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
resource_table[ENTIRE_PREFIX .. name .. "-richn"].text = ""
end
elseif control_prototype.category == "terrain" and name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
if checkbox.state then
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(1 / (util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)) -- inverse
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
else
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
controls_with_scale_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
end
elseif control_prototype.category == "enemy" then
if checkbox.state then
enemies_table[ENTIRE_PREFIX .. name .. "-freq"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["frequency"]) or 1)
enemies_table[ENTIRE_PREFIX .. name .. "-size"].text = util.number_to_string(util.map_gen_size_to_number(autoplace_control["size"]) or 1)
else
enemies_table[ENTIRE_PREFIX .. name .. "-freq"].text = ""
enemies_table[ENTIRE_PREFIX .. name .. "-size"].text = ""
end
end
end
Expand Down Expand Up @@ -523,36 +580,44 @@ map_gen_gui.read = function(parent, current_map_gen_settings)
end
end

-- water stuff
map_gen_settings.terrain_segmentation = 1 / util.textfield_to_number_with_error(controls_with_scale_table[ENTIRE_PREFIX .. "water-freq"]) -- inverse
map_gen_settings.water = util.textfield_to_number_with_error(controls_with_scale_table[ENTIRE_PREFIX .. "water-size"])
-- starting area
map_gen_settings.starting_area = util.textfield_to_number_with_error(enemies_table[ENTIRE_PREFIX .. "starting-area-size"])

local autoplace_control_prototypes = game.autoplace_control_prototypes
local autoplace_control_prototypes = prototypes.autoplace_control
-- resources and terrain and enemies
for _, control in pairs(autoplace_control_prototypes) do
local check_wrapper_name = ENTIRE_PREFIX .. control.name .. "-check-wrapper"
if control.category == "resource" then
if resource_table[check_wrapper_name] and not resource_table[check_wrapper_name].check.state then
goto continue
end
autoplace_controls_mine[control.name] = {
frequency = util.textfield_to_number_with_error(resource_table[ENTIRE_PREFIX .. control.name .. "-freq"]),
size = util.textfield_to_number_with_error(resource_table[ENTIRE_PREFIX .. control.name .. "-size"]),
richness = util.textfield_to_number_with_error(resource_table[ENTIRE_PREFIX .. control.name .. "-richn"])
}
elseif control.category == "terrain" and control.name ~= "planet-size" then -- planet size is a space exploration thing, we don't want the player to change it
if controls_with_scale_table[check_wrapper_name] and not controls_with_scale_table[check_wrapper_name].check.state then
goto continue
end
autoplace_controls_mine[control.name] = {
frequency = 1 / util.textfield_to_number_with_error(controls_with_scale_table[ENTIRE_PREFIX .. control.name .. "-freq"]), -- inverse
size = util.textfield_to_number_with_error(controls_with_scale_table[ENTIRE_PREFIX .. control.name .. "-size"])
}
elseif control.category == "enemy" then
if enemies_table[check_wrapper_name] and not enemies_table[check_wrapper_name].check.state then
goto continue
end
autoplace_controls_mine[control.name] = {
frequency = util.textfield_to_number_with_error(enemies_table[ENTIRE_PREFIX .. control.name .. "-freq"]),
size = util.textfield_to_number_with_error(enemies_table[ENTIRE_PREFIX .. control.name .. "-size"])
}
end
::continue::
end

-- but space explorations planet size still needs to be set!
if current_map_gen_settings.autoplace_controls["planet-size"] then
if current_map_gen_settings.autoplace_controls and current_map_gen_settings.autoplace_controls["planet-size"] then
autoplace_controls_mine["planet-size"] = current_map_gen_settings.autoplace_controls["planet-size"]
end

Expand Down
Loading