any planet start, maraxsis, etc updates

This commit is contained in:
Brevven 2025-01-29 13:28:59 -08:00
parent 350c6854d1
commit e310e144b2
10 changed files with 136 additions and 37 deletions

View file

@ -1,4 +1,17 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 2.0.6
Date: 2025-01-29
Changes:
- Changes to Any Planet Start progression
- Maraxsis: Can make silica from sand, silica is used for glass on Maraxsis.
Fixes:
- Fix razorgrass regenerate
---------------------------------------------------------------------------------------------------
Version: 2.0.5
Date: 2025-01-25
Fixes:
- Improve compatibility with mods that modify armor recipes in certain ways
---------------------------------------------------------------------------------------------------
Version: 2.0.4 Version: 2.0.4
Date: 2025-01-16 Date: 2025-01-16
Changes: Changes:

View file

@ -4,7 +4,8 @@ if mods["any-planet-start"] and util.me.get_setting("aps-planet") == "vulcanus"
util.set_prerequisite("silica-processing", {}) util.set_prerequisite("silica-processing", {})
util.add_unlock("automation", "basic-crusher") util.add_unlock("automation", "basic-crusher")
util.set_prerequisite("silicon-processing", {"silica-processing"}) util.set_prerequisite("silicon-processing", {"silica-processing"})
util.set_tech_trigger("silica-processing", {type = "mine-entity", entity="huge-volcanic-rock"}) util.set_tech_trigger("silica-processing", {type = "mine-entity", entity="vulcanus-chimney-truncated"})
util.replace_ingredient("solar-cell", "silicon-wafer", "silicon")
util.set_tech_trigger("silicon-processing", {type = "craft-item", item="silica", count=50}) util.set_tech_trigger("silicon-processing", {type = "craft-item", item="silica", count=50})
if util.me.more_intermediates() then if util.me.more_intermediates() then
util.add_new_crafting_category("handcrafting", true) util.add_new_crafting_category("handcrafting", true)
@ -27,7 +28,7 @@ if mods["any-planet-start"] and util.me.get_setting("aps-planet") == "vulcanus"
util.add_unlock("silicon-processing", "silicon-wafer-by-hand") util.add_unlock("silicon-processing", "silicon-wafer-by-hand")
end end
elseif mods["any-planet-start"] and util.me.get_setting("aps-planet") == "fulgora" then elseif mods["any-planet-start"] and util.me.get_setting("aps-planet") == "fulgora" then
util.set_prerequisite("silica-processing", {"automation-science-pack"}) util.set_prerequisite("silica-processing", {"automation-2"})
util.set_prerequisite("silicon-processing", {"silica-processing"}) util.set_prerequisite("silicon-processing", {"silica-processing"})
util.remove_prerequisite("advanced-circuit", "silicon-processing") util.remove_prerequisite("advanced-circuit", "silicon-processing")
elseif mods["any-planet-start"] and util.me.get_setting("aps-planet") == "gleba" then elseif mods["any-planet-start"] and util.me.get_setting("aps-planet") == "gleba" then

View file

@ -58,8 +58,17 @@ function list(event)
end end
end end
function util.add_command_handler()
script.on_event(defines.events.on_console_command, route)
end
function route(event)
if event.command == regenerate_command then regenerate_ore(event) end
if event.command == list_command then list(event) end
end
function util.add_list_command_handler() function util.add_list_command_handler()
script.on_event(defines.events.on_console_command, list) util.add_command_handler()
if not commands.commands[list_command] then if not commands.commands[list_command] then
commands.add_command(list_command, "", function() end) commands.add_command(list_command, "", function() end)
@ -134,7 +143,7 @@ Regenerates ore patches. If frequency/size/richness are provided, the planet wil
- Ores can sometimes overlap on regeneration. This can sometimes hide ore patches. If none seem to be made for a resource, regenerate just that resource and tweak frequency/size. - Ores can sometimes overlap on regeneration. This can sometimes hide ore patches. If none seem to be made for a resource, regenerate just that resource and tweak frequency/size.
]] ]]
function util.add_regenerate_command_handler() function util.add_regenerate_command_handler()
script.on_event(defines.events.on_console_command, regenerate_ore) util.add_command_handler()
if not commands.commands[regenerate_command] then if not commands.commands[regenerate_command] then
commands.add_command( regenerate_command, usage_regenerate, function() end) commands.add_command( regenerate_command, usage_regenerate, function() end)
@ -147,9 +156,9 @@ function regenerate_ore(event)
for w in event.parameters:gmatch("%S+") do table.insert(params, w) end for w in event.parameters:gmatch("%S+") do table.insert(params, w) end
if #params == 1 and params[1] == "all" then if #params == 1 and params[1] == "all" then
for _, resource in pairs(me.resources) do for _, resource in pairs(me.resources) do
if prototypes.entity[resource] then if prototypes.entity[resource[1]] then
game.print("Regenerating "..resource) game.print("Regenerating "..resource[1])
game.regenerate_entity(resource) game.regenerate_entity(resource[1])
end end
end end
return return
@ -164,17 +173,17 @@ function regenerate_ore(event)
game.print("Could not find surface for "..planet..". May not exist, or may not yet be explored.") game.print("Could not find surface for "..planet..". May not exist, or may not yet be explored.")
return return
end end
if resource == params[2] then if resource[1] == params[2] and resource[2] == planet then
if #params == 5 then if #params == 5 then
local settings = {frequency=params[3], size=params[4], richness=params[5]} local settings = {frequency=params[3], size=params[4], richness=params[5]}
local map_gen_settings = game.surfaces[planet].map_gen_settings local map_gen_settings = game.surfaces[planet].map_gen_settings
map_gen_settings.autoplace_controls[resource] = settings map_gen_settings.autoplace_controls[resource[1]] = settings
map_gen_settings.autoplace_settings.entity.settings[resource] = settings map_gen_settings.autoplace_settings.entity.settings[resource[1]] = settings
game.surfaces[planet].map_gen_settings = map_gen_settings game.surfaces[planet].map_gen_settings = map_gen_settings
game.print("Set "..resource.." on "..planet.." to "..serpent.line(settings)) game.print("Set "..resource[1].." on "..planet.." to "..serpent.line(settings))
end end
game.print("Regenerating "..resource) game.print("Regenerating "..resource[1])
game.surfaces[planet].regenerate_entity(resource) game.surfaces[planet].regenerate_entity(resource[1])
end end
end end
end end
@ -182,6 +191,7 @@ end
function util.ore_fix() function util.ore_fix()
ore_fix("nauvis") ore_fix("nauvis")
ore_fix("vulcanus")
if game.surfaces.tenebris then if game.surfaces.tenebris then
ore_fix("tenebris") ore_fix("tenebris")
end end
@ -189,14 +199,18 @@ end
function ore_fix(surface_name) function ore_fix(surface_name)
for _, resource in pairs(me.resources) do for _, resource in pairs(me.resources) do
local map_gen_settings = game.surfaces[surface_name].map_gen_settings if resource[2] == surface_name then
if map_gen_settings.autoplace_controls[resource] == nil then if game.surfaces[resource[2]] then
map_gen_settings.autoplace_controls[resource] = {} local map_gen_settings = game.surfaces[surface_name].map_gen_settings
if map_gen_settings.autoplace_controls[resource[1]] == nil then
map_gen_settings.autoplace_controls[resource[1]] = {}
end
if map_gen_settings.autoplace_settings.entity.settings[resource[1]] == nil then
map_gen_settings.autoplace_settings.entity.settings[resource[1]] = {}
end
game.surfaces[surface_name].map_gen_settings = map_gen_settings
end
end end
if map_gen_settings.autoplace_settings.entity.settings[resource] == nil then
map_gen_settings.autoplace_settings.entity.settings[resource] = {}
end
game.surfaces[surface_name].map_gen_settings = map_gen_settings
end end
end end

View file

@ -785,7 +785,7 @@ end
-- Add a given quantity of ingredient to a given recipe -- Add a given quantity of ingredient to a given recipe
function util.add_or_add_to_ingredient(recipe_name, ingredient, quantity, options) function util.add_or_add_to_ingredient(recipe_name, ingredient, quantity, options)
if not should_force(options) and bypass(recipe_name) then return end if not should_force(options) and bypass(recipe_name) then return end
if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then if data.raw.recipe[recipe_name] and util.get_item(ingredient) then
me.add_modified(recipe_name) me.add_modified(recipe_name)
prepare_redo_recycling(recipe_name) prepare_redo_recycling(recipe_name)
add_or_add_to_ingredient(data.raw.recipe[recipe_name], ingredient, quantity) add_or_add_to_ingredient(data.raw.recipe[recipe_name], ingredient, quantity)
@ -800,15 +800,25 @@ function add_or_add_to_ingredient(recipe, ingredient, quantity)
return return
end end
end end
table.insert(recipe.ingredients, {ingredient, quantity}) table.insert(recipe.ingredients, util.item(ingredient, quantity))
end end
end end
function util.get_item(name)
if data.raw.item[name] then return data.raw.item[name] end
if data.raw.armor[name] then return data.raw.armor[name] end
if data.raw.fluid[name] then return data.raw.fluid[name] end
if data.raw.capsule[name] then return data.raw.capsule[name] end
if data.raw["space-platform-starter-pack"] and data.raw["space-platform-starter-pack"][name] then return data.raw["space-platform-starter-pack"][name] end
-- TODO add more subtypes of item here
return nil
end
-- Add a given quantity of ingredient to a given recipe -- Add a given quantity of ingredient to a given recipe
function util.add_ingredient(recipe_name, ingredient, quantity, options) function util.add_ingredient(recipe_name, ingredient, quantity, options)
if not should_force(options) and bypass(recipe_name) then return end if not should_force(options) and bypass(recipe_name) then return end
local is_fluid = not not data.raw.fluid[ingredient] local is_fluid = not not data.raw.fluid[ingredient]
if data.raw.recipe[recipe_name] and (data.raw.item[ingredient] or is_fluid) then if data.raw.recipe[recipe_name] and (util.get_item(ingredient) or is_fluid) then
me.add_modified(recipe_name) me.add_modified(recipe_name)
prepare_redo_recycling(recipe_name) prepare_redo_recycling(recipe_name)
add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity, is_fluid) add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity, is_fluid)
@ -912,14 +922,20 @@ function util.get_ingredient_amount(recipe_name, ingredient_name)
return 0 return 0
end end
-- Get the amount of the result -- Get the amount of the result (currently ignores probability)
function util.get_amount(recipe_name, product) function util.get_amount(recipe_name, product)
if not product then product = recipe_name end if not product then product = recipe_name end
local recipe = data.raw.recipe[recipe_name] local recipe = data.raw.recipe[recipe_name]
if recipe then if recipe then
if recipe.results then if recipe.results then
for i, result in pairs(recipe.results) do for i, result in pairs(recipe.results) do
if result.name == product then return result.amount end if result.name == product then
if result.amount then
return result.amount
elseif result.amount_min then
return (result.amount_min + result.amount_max) / 2
end
end
end end
end end
return 0 return 0
@ -944,7 +960,7 @@ end
-- Use amount to set an amount. If that amount is a multiplier instead of an exact amount, set multiply true. -- Use amount to set an amount. If that amount is a multiplier instead of an exact amount, set multiply true.
function util.replace_ingredient(recipe_name, old, new, amount, multiply, options) function util.replace_ingredient(recipe_name, old, new, amount, multiply, options)
if not should_force(options) and bypass(recipe_name) then return end if not should_force(options) and bypass(recipe_name) then return end
if data.raw.recipe[recipe_name] and (data.raw.item[new] or data.raw.fluid[new]) then if data.raw.recipe[recipe_name] and (data.raw.item[new] or data.raw.fluid[new]) and (data.raw.item[old] or data.raw.fluid[old]) then
me.add_modified(recipe_name) me.add_modified(recipe_name)
prepare_redo_recycling(recipe_name) prepare_redo_recycling(recipe_name)
replace_ingredient(data.raw.recipe[recipe_name], old, new, amount, multiply) replace_ingredient(data.raw.recipe[recipe_name], old, new, amount, multiply)
@ -1019,7 +1035,7 @@ function replace_some_product(recipe, old, old_amount, new, new_amount)
end end
end end
end end
add_product(recipe, {new, new_amount}) add_product(recipe, util.item(new, new_amount))
for i, product in pairs(recipe.results) do for i, product in pairs(recipe.results) do
if product.name == old then if product.name == old then
product.amount = math.max(1, product.amount - old_amount) product.amount = math.max(1, product.amount - old_amount)
@ -1475,15 +1491,11 @@ function util.add_to_ingredient(recipe, ingredient, amount, options)
end end
function add_to_ingredient(recipe, it, amount) function add_to_ingredient(recipe, it, amount)
if recipe ~= nil and recipe.ingredients ~= nil then if recipe and recipe.ingredients then
for i, ingredient in pairs(recipe.ingredients) do for i, ingredient in pairs(recipe.ingredients) do
if ingredient.name == it then if ingredient.name == it then
ingredient.amount = ingredient.amount + amount ingredient.amount = ingredient.amount + amount
return return
end
if ingredient[1] == it then
ingredient[2] = ingredient[2] + amount
return
end end
end end
end end
@ -1513,7 +1525,7 @@ end
-- Adds a result to a mineable type -- Adds a result to a mineable type
function util.add_minable_result(t, name, result) function util.add_minable_result(t, name, result)
if data.raw[t] and data.raw[t][name] and data.raw[t][name].minable then if data.raw[t] and data.raw[t][name] and data.raw[t][name].minable and data.raw.item[result.name] then
if data.raw[t][name].minable.result and not data.raw[t][name].minable.results then if data.raw[t][name].minable.result and not data.raw[t][name].minable.results then
data.raw[t][name].minable.results = { data.raw[t][name].minable.results = {
util.item(data.raw[t][name].minable.result ,data.raw[t][name].minable.count)} util.item(data.raw[t][name].minable.result ,data.raw[t][name].minable.count)}
@ -1521,6 +1533,9 @@ function util.add_minable_result(t, name, result)
data.raw[t][name].minable.result_count = nil data.raw[t][name].minable.result_count = nil
end end
if data.raw[t][name].minable.results then if data.raw[t][name].minable.results then
for _, other in pairs(data.raw[t][name].minable.results) do
if other.name == result.name then return end -- don't add if already present
end
table.insert(data.raw[t][name].minable.results, result) table.insert(data.raw[t][name].minable.results, result)
else else
data.raw[t][name].minable.results = {result} data.raw[t][name].minable.results = {result}
@ -1528,6 +1543,16 @@ function util.add_minable_result(t, name, result)
end end
end end
function util.set_surface_property(surface, condition, value)
if not data.raw["surface-property"][condition] then return end
if data.raw.surface[surface] then
data.raw.surface[surface].surface_properties[condition] = value
end
if data.raw.planet[surface] then
data.raw.planet[surface].surface_properties[condition] = value
end
end
local function insert(nodes, node, value) local function insert(nodes, node, value)
table.insert(node, value) -- store as parameter table.insert(node, value) -- store as parameter
@ -1612,6 +1637,7 @@ end
function remove_prior_unlocks(tech, recipe) function remove_prior_unlocks(tech, recipe)
local technology = data.raw.technology[tech] local technology = data.raw.technology[tech]
if technology then if technology then
log("Removing prior unlocks for ".. tech)
util.remove_recipe_effect(tech, recipe) util.remove_recipe_effect(tech, recipe)
if technology.prerequisites then if technology.prerequisites then
for i, prerequisite in pairs(technology.prerequisites) do for i, prerequisite in pairs(technology.prerequisites) do
@ -1647,6 +1673,7 @@ function util.replace_ingredients_prior_to(tech, old, new, multiplier)
end end
function replace_ingredients_prior_to(tech, old, new, multiplier) function replace_ingredients_prior_to(tech, old, new, multiplier)
log("Replacing for tech "..tech)
local technology = data.raw.technology[tech] local technology = data.raw.technology[tech]
if technology then if technology then
if technology.effects then if technology.effects then
@ -1760,6 +1787,21 @@ function util.redo_recycling()
recycling.generate_recycling_recipe(recipe) recycling.generate_recycling_recipe(recipe)
end end
end end
-- Find all recycling recipes that result in armor and make sure not to output more than 1
for _, recipe in pairs(data.raw.recipe) do
if recipe.name:find("recycling") then
for _, product in pairs(recipe.results) do
if data.raw.armor[product.name] then
if product.amount then
if product.amount > .99 then
product.amount = 1
product.extra_count_fraction = nil
end
end
end
end
end
end
end end
end end
@ -1768,6 +1810,15 @@ function prepare_redo_recycling(recipe_name)
data.raw.recipe[recipe_name].redo_recycling = true data.raw.recipe[recipe_name].redo_recycling = true
end end
-- Change furnace output count
function util.set_minimum_furnace_outputs(category, count)
for i, entity in pairs(data.raw.furnace) do
if entity.result_inventory_size ~= nil and entity.result_inventory_size < count and util.contains(entity.crafting_categories, category) then
entity.result_inventory_size = count
end
end
end
-- According to https://mods.factorio.com/mod/Asteroid_Mining, the -- According to https://mods.factorio.com/mod/Asteroid_Mining, the
-- following function is under this MIT license (similar license, different author): -- following function is under this MIT license (similar license, different author):

View file

@ -1,6 +1,6 @@
{ {
"name": "bzsilicon", "name": "bzsilicon",
"version": "2.0.4", "version": "2.0.6",
"factorio_version": "2.0", "factorio_version": "2.0",
"title": "Silica & Silicon", "title": "Silica & Silicon",
"author": "Brevven", "author": "Brevven",

View file

@ -55,7 +55,7 @@ razorgrass-ash-washing=Silica from ash
stone-from-lava=Stone from lava stone-from-lava=Stone from lava
[recipe-description] [recipe-description]
razorgrass-dried=A furnace is required to dry razorgrass release its seeds. razorgrass-dried=A furnace is required to dry razorgrass and release its seeds.
# Settings # Settings

2
me.lua
View file

@ -1,6 +1,6 @@
local me = {} local me = {}
me.name = "bzsilicon" me.name = "bzsilicon"
me.resources = {"razorgrass"} me.resources = {{"razorgrass-plant", "gleba"}}
me.silicon_processing = (mods and mods["Krastorio2"] and "kr-silicon-processing") or "silicon-processing" me.silicon_processing = (mods and mods["Krastorio2"] and "kr-silicon-processing") or "silicon-processing"
me.recipes = {"silica", "silicon", "optical-fiber", "silicon-wafer", "solar-cell", "gyro", "silicon-smelting-vulcanite"} me.recipes = {"silica", "silicon", "optical-fiber", "silicon-wafer", "solar-cell", "gyro", "silicon-smelting-vulcanite"}

View file

@ -65,7 +65,7 @@ data:extend({
{ {
type = "item", type = "item",
name = "basic-crusher", name = "basic-crusher",
icon = "__space-age__/graphics/icons/crusher.png", icons = {{icon = "__space-age__/graphics/icons/crusher.png", icon_size=64, scale=0.8, tint={.7,.7,.7}}},
subgroup = "production-machine", subgroup = "production-machine",
order = "s[crusher]", order = "s[crusher]",
inventory_move_sound = item_sounds.drill_inventory_move, inventory_move_sound = item_sounds.drill_inventory_move,
@ -78,6 +78,7 @@ data:extend({
{ {
type = "furnace", type = "furnace",
name = "basic-crusher", name = "basic-crusher",
icons = {{icon = "__space-age__/graphics/icons/crusher.png", icon_size=64, scale=0.8, tint={.7,.7,.7}}},
source_inventory_size = 1, source_inventory_size = 1,
result_inventory_size = 1, result_inventory_size = 1,
icon = "__space-age__/graphics/icons/crusher.png", icon = "__space-age__/graphics/icons/crusher.png",

View file

@ -125,3 +125,18 @@ data:extend(
}, },
} }
) )
if mods.maraxsis then
data:extend({
{
type = "recipe",
name = "silica-from-sand-maraxsis",
localised_name = {"item-name.silica"},
category = "basic-crushing",
enabled = false,
energy_required = 1.6,
allow_productivity = true,
ingredients = {util.item("sand", 1)},
results = {util.item("silica", 5)},
}
})
end

View file

@ -281,3 +281,7 @@ if mods["space-age"] then
log(serpent.block(data.raw.recipe["sand"])) log(serpent.block(data.raw.recipe["sand"]))
end end
end end
-- Maraxsis
util.replace_ingredient("maraxsis-glass-panes", "sand", "silica", 10)
util.add_unlock("maraxsis-glassworking", "silica-from-sand-maraxsis")