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

@ -785,7 +785,7 @@ end
-- Add a given quantity of ingredient to a given recipe
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 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)
prepare_redo_recycling(recipe_name)
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
end
end
table.insert(recipe.ingredients, {ingredient, quantity})
table.insert(recipe.ingredients, util.item(ingredient, quantity))
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
function util.add_ingredient(recipe_name, ingredient, quantity, options)
if not should_force(options) and bypass(recipe_name) then return end
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)
prepare_redo_recycling(recipe_name)
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
end
-- Get the amount of the result
-- Get the amount of the result (currently ignores probability)
function util.get_amount(recipe_name, product)
if not product then product = recipe_name end
local recipe = data.raw.recipe[recipe_name]
if recipe then
if recipe.results then
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
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.
function util.replace_ingredient(recipe_name, old, new, amount, multiply, options)
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)
prepare_redo_recycling(recipe_name)
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
add_product(recipe, {new, new_amount})
add_product(recipe, util.item(new, new_amount))
for i, product in pairs(recipe.results) do
if product.name == old then
product.amount = math.max(1, product.amount - old_amount)
@ -1475,15 +1491,11 @@ function util.add_to_ingredient(recipe, ingredient, amount, options)
end
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
if ingredient.name == it then
ingredient.amount = ingredient.amount + amount
return
end
if ingredient[1] == it then
ingredient[2] = ingredient[2] + amount
return
end
end
end
@ -1513,7 +1525,7 @@ end
-- Adds a result to a mineable type
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
data.raw[t][name].minable.results = {
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
end
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)
else
data.raw[t][name].minable.results = {result}
@ -1528,6 +1543,16 @@ function util.add_minable_result(t, name, result)
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)
table.insert(node, value) -- store as parameter
@ -1612,6 +1637,7 @@ end
function remove_prior_unlocks(tech, recipe)
local technology = data.raw.technology[tech]
if technology then
log("Removing prior unlocks for ".. tech)
util.remove_recipe_effect(tech, recipe)
if technology.prerequisites then
for i, prerequisite in pairs(technology.prerequisites) do
@ -1647,6 +1673,7 @@ function util.replace_ingredients_prior_to(tech, old, new, multiplier)
end
function replace_ingredients_prior_to(tech, old, new, multiplier)
log("Replacing for tech "..tech)
local technology = data.raw.technology[tech]
if technology then
if technology.effects then
@ -1760,6 +1787,21 @@ function util.redo_recycling()
recycling.generate_recycling_recipe(recipe)
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
@ -1768,6 +1810,15 @@ function prepare_redo_recycling(recipe_name)
data.raw.recipe[recipe_name].redo_recycling = true
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
-- following function is under this MIT license (similar license, different author):