This commit is contained in:
Brevven 2021-07-24 23:26:54 -07:00
parent 102835507f
commit 4e5bbd7bb1
8 changed files with 149 additions and 46 deletions

View file

@ -1,4 +1,9 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 0.1.1
Date: 2021-07-26
Changes:
- Minor refactor
---------------------------------------------------------------------------------------------------
Version: 0.1.0 Version: 0.1.0
Date: 2021-07-21 Date: 2021-07-21
Features: Features:

View file

@ -1,6 +1,8 @@
local me = require("me")
local util = {} local util = {}
util.name = "bzzirconium" util.me = me
util.get_setting = util.me.get_setting
function util.fe_plus(sub) function util.fe_plus(sub)
if mods["FactorioExtended-Plus-"..sub] then if mods["FactorioExtended-Plus-"..sub] then
@ -8,24 +10,6 @@ function util.fe_plus(sub)
end end
end end
function util.use_cermet()
return util.get_setting("bzzirconium-enable-intermediates") == "yes"
end
function util.get_setting(name)
if settings.startup[name] == nil then
return nil
end
return settings.startup[name].value
end
local bypass = {}
if util.get_setting(util.name.."-recipe-bypass") then
for recipe in string.gmatch(util.get_setting(util.name.."-recipe-bypass"), '[^",%s]+') do
bypass[recipe] = true
end
end
function util.get_stack_size(default) function util.get_stack_size(default)
if mods["Krastorio2"] then if mods["Krastorio2"] then
size = tonumber(krastorio.general.getSafeSettingValue("kr-stack-size")) size = tonumber(krastorio.general.getSafeSettingValue("kr-stack-size"))
@ -91,8 +75,8 @@ 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) function util.add_ingredient(recipe_name, ingredient, quantity)
if bypass[recipe_name] then return end if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then
add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity) add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity)
add_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity) add_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity)
add_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity) add_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity)
@ -114,7 +98,7 @@ end
-- Add a given quantity of product to a given recipe. -- Add a given quantity of product to a given recipe.
-- Only works for recipes with multiple products -- Only works for recipes with multiple products
function util.add_product(recipe_name, product) function util.add_product(recipe_name, product)
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] and data.raw.item[product] then
add_product(data.raw.recipe[recipe_name], product) add_product(data.raw.recipe[recipe_name], product)
add_product(data.raw.recipe[recipe_name].normal, product) add_product(data.raw.recipe[recipe_name].normal, product)
add_product(data.raw.recipe[recipe_name].expensive, product) add_product(data.raw.recipe[recipe_name].expensive, product)
@ -129,8 +113,8 @@ end
-- Replace one ingredient with another in a recipe -- Replace one ingredient with another in a recipe
function util.replace_ingredient(recipe_name, old, new) function util.replace_ingredient(recipe_name, old, new)
if bypass[recipe_name] then return end if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] and data.raw.item[new] then
replace_ingredient(data.raw.recipe[recipe_name], old, new) replace_ingredient(data.raw.recipe[recipe_name], old, new)
replace_ingredient(data.raw.recipe[recipe_name].normal, old, new) replace_ingredient(data.raw.recipe[recipe_name].normal, old, new)
replace_ingredient(data.raw.recipe[recipe_name].expensive, old, new) replace_ingredient(data.raw.recipe[recipe_name].expensive, old, new)
@ -154,7 +138,7 @@ end
-- Remove an ingredient from a recipe -- Remove an ingredient from a recipe
function util.remove_ingredient(recipe_name, old) function util.remove_ingredient(recipe_name, old)
if bypass[recipe_name] then return end if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] then
remove_ingredient(data.raw.recipe[recipe_name], old) remove_ingredient(data.raw.recipe[recipe_name], old)
remove_ingredient(data.raw.recipe[recipe_name].normal, old) remove_ingredient(data.raw.recipe[recipe_name].normal, old)
@ -177,11 +161,10 @@ function remove_ingredient(recipe, old)
end end
end end
-- Replace an amount of an ingredient in a recipe. Keep at least 1 of old. -- Replace an amount of an ingredient in a recipe. Keep at least 1 of old.
function util.replace_some_ingredient(recipe_name, old, old_amount, new, new_amount) function util.replace_some_ingredient(recipe_name, old, old_amount, new, new_amount)
if bypass[recipe_name] then return end if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] and data.raw.item[new] then
replace_some_ingredient(data.raw.recipe[recipe_name], old, old_amount, new, new_amount) replace_some_ingredient(data.raw.recipe[recipe_name], old, old_amount, new, new_amount)
replace_some_ingredient(data.raw.recipe[recipe_name].normal, old, old_amount, new, new_amount) replace_some_ingredient(data.raw.recipe[recipe_name].normal, old, old_amount, new, new_amount)
replace_some_ingredient(data.raw.recipe[recipe_name].expensive, old, old_amount, new, new_amount) replace_some_ingredient(data.raw.recipe[recipe_name].expensive, old, old_amount, new, new_amount)
@ -197,11 +180,9 @@ function replace_some_ingredient(recipe, old, old_amount, new, new_amount)
end end
end end
for i, ingredient in pairs(recipe.ingredients) do for i, ingredient in pairs(recipe.ingredients) do
-- For final fixes
if ingredient.name == old then if ingredient.name == old then
ingredient.amount = math.max(1, ingredient.amount - old_amount) ingredient.amount = math.max(1, ingredient.amount - old_amount)
end end
-- For updates
if ingredient[1] == old then if ingredient[1] == old then
ingredient[2] = math.max(1, ingredient[2] - old_amount) ingredient[2] = math.max(1, ingredient[2] - old_amount)
end end
@ -212,7 +193,7 @@ end
-- multiply the cost, energy, and results of a recipe by a multiple -- multiply the cost, energy, and results of a recipe by a multiple
function util.multiply_recipe(recipe_name, multiple) function util.multiply_recipe(recipe_name, multiple)
if bypass[recipe_name] then return end if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then if data.raw.recipe[recipe_name] then
multiply_recipe(data.raw.recipe[recipe_name], multiple) multiply_recipe(data.raw.recipe[recipe_name], multiple)
multiply_recipe(data.raw.recipe[recipe_name].normal, multiple) multiply_recipe(data.raw.recipe[recipe_name].normal, multiple)
@ -264,8 +245,49 @@ function multiply_recipe(recipe, multiple)
end end
end end
-- Returns true if a recipe has an ingredient
function util.has_ingredient(recipe_name, ingredient)
return data.raw.recipe[recipe_name] and (
has_ingredient(data.raw.recipe[recipe_name], ingredient) or
has_ingredient(data.raw.recipe[recipe_name].normal, ingredient))
end
function has_ingredient(recipe, ingredient)
if recipe ~= nil and recipe.ingredients ~= nil then
for i, existing in pairs(recipe.ingredients) do
if existing[1] == ingredient or existing.name == ingredient then
return true
end
end
end
return false
end
-- Replace one product with another in a recipe
function util.replace_product(recipe_name, old, new)
if data.raw.recipe[recipe_name] then
replace_product(data.raw.recipe[recipe_name], old, new)
replace_product(data.raw.recipe[recipe_name].normal, old, new)
replace_product(data.raw.recipe[recipe_name].expensive, old, new)
end
end
function replace_product(recipe, old, new)
if recipe ~= nil and recipe.results ~= nil then
if recipe.result == old then
recipe.results = new
return
end
for i, result in pairs(recipe.results) do
if result.name == old then result.name = new end
if result[1] == old then result[1] = new end
end
end
end
-- Remove an element of type t and name from data.raw -- Remove an element of type t and name from data.raw
function util.remove_raw(t, name) function util.remove_raw(t, name)
if data.raw[t][name] then
for i, elem in pairs(data.raw[t]) do for i, elem in pairs(data.raw[t]) do
if elem.name == name then if elem.name == name then
data.raw[t][i] = nil data.raw[t][i] = nil
@ -273,5 +295,58 @@ function util.remove_raw(t, name)
end end
end end
end end
end
-- Multiply energy required
function util.multiply_time(recipe, factor)
if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe_name] then
multiply_time(data.raw.recipe[recipe_name], factor)
multiply_time(data.raw.recipe[recipe_name].normal, factor)
multiply_time(data.raw.recipe[recipe_name].expensive, factor)
end
end
function multiply_time(recipe, factor)
if recipe then
if recipe.energy_required then
recipe.energy_required = recipe.energy_required * factor
end
end
end
-- Set recipe category
function util.set_category(recipe, category)
if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe] then
data.raw.recipe[recipe].category = category
end
end
-- Set recipe subgroup
function util.set_subgroup(recipe, subgroup)
if me.bypass[recipe_name] then return end
if data.raw.recipe[recipe] then
data.raw.recipe[recipe].subgroup = subgroup
end
end
function util.set_to_founding(recipe)
util.set_category(recipe, "founding")
util.set_subgroup(recipe, "foundry-intermediate")
end
-- Add crafting category to an entity
function util.add_crafting_category(entity_type, entity, category)
if data.raw[entity_type][entity] then
for i, existing in pairs(data.raw[entity_type][entity].crafting_categories) do
if existing == category then
log(entity.." not adding "..new.." -- duplicate")
return
end
end
table.insert(data.raw[entity_type][entity].crafting_categories, category)
end
end
return util return util

View file

@ -1,6 +1,6 @@
{ {
"name": "bzzirconium", "name": "bzzirconium",
"version": "0.1.0", "version": "0.1.1",
"factorio_version": "1.1", "factorio_version": "1.1",
"title": "Zirconium", "title": "Zirconium",
"author": "Brevven", "author": "Brevven",

23
me.lua Normal file
View file

@ -0,0 +1,23 @@
local me = {}
me.name = "bzzirconium"
function me.use_cermet()
return me.get_setting("bzzirconium-enable-intermediates") == "yes"
end
function me.get_setting(name)
if settings.startup[name] == nil then
return nil
end
return settings.startup[name].value
end
me.bypass = {}
if me.get_setting(me.name.."-recipe-bypass") then
for recipe in string.gmatch(me.get_setting(me.name.."-recipe-bypass"), '[^",%s]+') do
me.bypass[recipe] = true
end
end
return me

View file

@ -6,7 +6,7 @@ util.add_prerequisite("nuclear-power", "zirconia-processing")
util.add_prerequisite("explosives", "zirconia-processing") util.add_prerequisite("explosives", "zirconia-processing")
util.add_prerequisite("chemical-science-pack", "zirconia-processing") util.add_prerequisite("chemical-science-pack", "zirconia-processing")
if util.use_cermet() then if util.me.use_cermet() then
-- production science techs behind cermet -- production science techs behind cermet
util.add_prerequisite("effect-transmission", "cermet") util.add_prerequisite("effect-transmission", "cermet")
if not util.fe_plus("Machines") then if not util.fe_plus("Machines") then

View file

@ -6,7 +6,7 @@ if deadlock then
deadlock.add_stack("zircon", "__bzzirconium__/graphics/icons/stacked/zircon-stacked.png", "deadlock-stacking-2", 64) deadlock.add_stack("zircon", "__bzzirconium__/graphics/icons/stacked/zircon-stacked.png", "deadlock-stacking-2", 64)
deadlock.add_stack("zirconia", "__bzzirconium__/graphics/icons/stacked/zirconia-stacked.png", "deadlock-stacking-2", 128) deadlock.add_stack("zirconia", "__bzzirconium__/graphics/icons/stacked/zirconia-stacked.png", "deadlock-stacking-2", 128)
deadlock.add_stack("zirconium-plate", "__bzzirconium__/graphics/icons/stacked/zirconium-plate-stacked.png" , "deadlock-stacking-2", 128) deadlock.add_stack("zirconium-plate", "__bzzirconium__/graphics/icons/stacked/zirconium-plate-stacked.png" , "deadlock-stacking-2", 128)
if util.use_cermet() then if util.me.use_cermet() then
deadlock.add_stack("cermet", "__bzzirconium__/graphics/icons/stacked/cermet-stacked.png", "deadlock-stacking-2", 128) deadlock.add_stack("cermet", "__bzzirconium__/graphics/icons/stacked/cermet-stacked.png", "deadlock-stacking-2", 128)
end end
if mods["Krastorio2"] then if mods["Krastorio2"] then
@ -22,7 +22,7 @@ if deadlock_crating then
deadlock_crating.add_crate("zircon", "deadlock-crating-2") deadlock_crating.add_crate("zircon", "deadlock-crating-2")
deadlock_crating.add_crate("zirconia", "deadlock-crating-2") deadlock_crating.add_crate("zirconia", "deadlock-crating-2")
deadlock_crating.add_crate("zirconium-plate", "deadlock-crating-2") deadlock_crating.add_crate("zirconium-plate", "deadlock-crating-2")
if util.use_cermet() then if util.me.use_cermet() then
deadlock_crating.add_crate("cermet", "deadlock-crating-2") deadlock_crating.add_crate("cermet", "deadlock-crating-2")
end end
if mods["Krastorio2"] then if mods["Krastorio2"] then

View file

@ -26,7 +26,7 @@ if not mods.bztungsten then
end end
if util.use_cermet() then if util.me.use_cermet() then
util.add_ingredient("rocket-control-unit", "cermet", 1) util.add_ingredient("rocket-control-unit", "cermet", 1)
util.add_ingredient("speed-module-3", "cermet", 1) util.add_ingredient("speed-module-3", "cermet", 1)
util.add_ingredient("productivity-module-3", "cermet", 1) util.add_ingredient("productivity-module-3", "cermet", 1)
@ -57,7 +57,7 @@ if mods["Krastorio2"] then
util.replace_some_ingredient("matter-stabilizer", "imersium-plate", 1, "zirconium-plate", 5) util.replace_some_ingredient("matter-stabilizer", "imersium-plate", 1, "zirconium-plate", 5)
util.add_ingredient("kr-advanced-furnace", "zirconia", 60) util.add_ingredient("kr-advanced-furnace", "zirconia", 60)
if util.use_cermet() then if util.me.use_cermet() then
util.add_ingredient("ai-core", "cermet", 2) util.add_ingredient("ai-core", "cermet", 2)
util.add_ingredient("kr-matter-assembler", "cermet", 4) util.add_ingredient("kr-matter-assembler", "cermet", 4)
end end
@ -79,7 +79,7 @@ if mods["space-exploration"] then
util.replace_ingredient("se-heat-shielding-iridium", "stone-tablet", "zirconia") util.replace_ingredient("se-heat-shielding-iridium", "stone-tablet", "zirconia")
util.add_ingredient("se-thruster-suit", "zirconium-plate", 10) util.add_ingredient("se-thruster-suit", "zirconium-plate", 10)
util.add_ingredient("se-space-thermodynamics-laboratory", "zirconium-plate", 20) util.add_ingredient("se-space-thermodynamics-laboratory", "zirconium-plate", 20)
if util.use_cermet() then if util.me.use_cermet() then
util.add_ingredient("se-quantum-processor", "cermet", 1) util.add_ingredient("se-quantum-processor", "cermet", 1)
util.add_ingredient("se-space-mechanical-laboratory", "cermet", 40) util.add_ingredient("se-space-mechanical-laboratory", "cermet", 40)
end end
@ -146,7 +146,7 @@ util.replace_some_ingredient("rfp-matter-antimatter-fuel-cell-empty", "steel-pla
-- Cermet in other mods -- Cermet in other mods
if util.use_cermet() then if util.me.use_cermet() then
util.add_ingredient("advanced-assembler-rampant-industry", "cermet", 30) util.add_ingredient("advanced-assembler-rampant-industry", "cermet", 30)
util.add_ingredient("advanced-electric-furnace-rampant-industry", "cermet", 30) util.add_ingredient("advanced-electric-furnace-rampant-industry", "cermet", 30)
util.add_ingredient("advanced-oil-refinery-rampant-industry", "cermet", 30) util.add_ingredient("advanced-oil-refinery-rampant-industry", "cermet", 30)

View file

@ -145,7 +145,7 @@ data:extend({
}) })
-- cermet only if setting enabled -- cermet only if setting enabled
if util.use_cermet() then if util.me.use_cermet() then
local cermet_i = {{"zirconia", 1}, {"copper-plate", 1}} local cermet_i = {{"zirconia", 1}, {"copper-plate", 1}}
if mods.bztitanium then if mods.bztitanium then
local tutil = require("__bztitanium__.data-util"); local tutil = require("__bztitanium__.data-util");