start
20
LICENSE.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2022 Brevven
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
37
Makefile
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# General makefile for factorio mods.
|
||||
#
|
||||
# Presumes the development work is done in a <factoriodir>/dev/<modname>/
|
||||
# directory where this makefile resides. This directory must be parallel to
|
||||
# the <factoriodir>/mods/ directory where mods are installed. Run `make
|
||||
# install` from dev/<modname> to install the mod as a zip file. That zip file
|
||||
# should also be ready to upload to the mod portal
|
||||
|
||||
.PHONY: copy lint-changelog install
|
||||
|
||||
libdir = "../bzlib"
|
||||
libfiles = $(shell ls $(libdir)/*.lua | grep -o '[^/]*.lua')
|
||||
pwd = $(shell pwd)
|
||||
v = $(shell basename "$(pwd)")_$(shell jq -r .version info.json)
|
||||
|
||||
link:
|
||||
for f in $(libfiles) ; do \
|
||||
echo "using $(libdir)/$$f" ;\
|
||||
cp $(libdir)/$$f .; \
|
||||
done;
|
||||
|
||||
copy: link
|
||||
rm -rf ../$(v)
|
||||
mkdir -p ../$(v)
|
||||
cp -rf * ../$(v)
|
||||
rm -f ../$(v).zip
|
||||
cd ..; zip -9 -r -y $(v).zip $(v) -x "*.xcf" -x "*.git*" -x "*.bak" -x "*.blend*"
|
||||
|
||||
install: lint-changelog copy
|
||||
cp -f ../$(v).zip ../../mods/
|
||||
|
||||
lint-changelog: copy
|
||||
python3 ../da-changelog-tools_0.0.14/changelog-checker.py --changelog ../$(v).zip
|
||||
|
||||
zorro:
|
||||
python3 ../da-changelog-tools_0.0.14/changelog-checker.py --zorro --changelog ../$(v).zip
|
||||
|
||||
19
README.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Mod
|
||||
|
||||
[factorio mod page](https://mods.factorio.com/mod/bztin)
|
||||
|
||||
Adds tin to the base game
|
||||
|
||||
## Version History
|
||||
See changelog.txt
|
||||
|
||||
## Created by
|
||||
|
||||
- [brevven](https://mods.factorio.com/user/brevven) (code, design, graphics)
|
||||
|
||||
## Thanks to
|
||||
- [snouz](https://github.com/snouz) (logo inspiration, ore graphics templates)
|
||||
- https://www.flickr.com/photos/free-stock/6837291528/ for beta solder icon (modified from public domain image)
|
||||
|
||||
### Localization
|
||||
|
||||
7
changelog.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---------------------------------------------------------------------------------------------------
|
||||
Version: 0.0.1
|
||||
Date: 2022-07-01
|
||||
Features:
|
||||
- Alpha release. Adds tin, solder, and other optional intermediates
|
||||
- Compatible with Krastorio 2
|
||||
- Compatible with Space Exploration
|
||||
23
control-util.lua
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
local me = require("me")
|
||||
|
||||
local util = {}
|
||||
util.me = me
|
||||
|
||||
function decode(data)
|
||||
if type(data) == "string" then return data end
|
||||
local str = {}
|
||||
for i = 2, #data do
|
||||
str[i-1] = decode(data[i])
|
||||
end
|
||||
return table.concat(str, "")
|
||||
end
|
||||
|
||||
function util.get_list()
|
||||
local p = game.item_prototypes[me.name.."-list"]
|
||||
if p then
|
||||
data = p.localised_description
|
||||
return decode(data)
|
||||
end
|
||||
end
|
||||
|
||||
return util
|
||||
16
control.lua
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
local util = require("control-util")
|
||||
|
||||
function on_console_chat(event)
|
||||
if event.message and string.lower(event.message) == "bzlist" then
|
||||
local player = game.players[event.player_index]
|
||||
if player and player.connected then
|
||||
local list = util.get_list()
|
||||
if list and #list>0 then
|
||||
local filename = util.me.name..".txt"
|
||||
game.write_file(filename, list, false, event.player_index)
|
||||
player.print("Wrote recipes to script-output/"..filename)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
script.on_event(defines.events.on_console_chat, on_console_chat)
|
||||
13
data-final-fixes.lua
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
-- require("tin-recipe-final-stacking")
|
||||
require("tin-recipe-modules")
|
||||
-- require("tin-recipe-final-5d")
|
||||
require("tin-recipe-final-rrr")
|
||||
|
||||
local util = require("data-util");
|
||||
util.replace_some_ingredient("se-glass-vulcanite", "sand", 1, "tin-plate", 1)
|
||||
util.add_product("se-glass-vulcanite", {type="item", name="tin-plate", amount=1, probability=0.8})
|
||||
util.set_main_product("se-glass-vulcanite", "glass")
|
||||
|
||||
|
||||
-- Must be last
|
||||
util.create_list()
|
||||
10
data-updates.lua
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
require("tin-recipe-updates")
|
||||
require("tin-matter")
|
||||
-- require("omni")
|
||||
require("map-gen-preset-updates")
|
||||
require("strange-matter")
|
||||
|
||||
local util = require("data-util");
|
||||
|
||||
-- Must be last
|
||||
util.create_list()
|
||||
743
data-util.lua
Normal file
|
|
@ -0,0 +1,743 @@
|
|||
-- WARNING WARNING WARNING
|
||||
-- This file will be overwritten in mod zipfiles, edit bzlib/data-util.lua
|
||||
-- WARNING WARNING WARNING
|
||||
|
||||
local me = require("me")
|
||||
local util = {}
|
||||
|
||||
util.me = me
|
||||
util.get_setting = util.me.get_setting
|
||||
|
||||
util.titanium_plate = ""
|
||||
util.titanium_processing = ""
|
||||
|
||||
if mods["FactorioExtended-Plus-Core"] then
|
||||
util.titanium_plate = "titanium-alloy"
|
||||
else
|
||||
util.titanium_plate = "titanium-plate"
|
||||
end
|
||||
|
||||
if mods["pyrawores"] then
|
||||
util.titanium_processing = "titanium-mk01"
|
||||
else
|
||||
util.titanium_processing = "titanium-processing"
|
||||
end
|
||||
|
||||
function util.fe_plus(sub)
|
||||
if mods["FactorioExtended-Plus-"..sub] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function util.get_stack_size(default)
|
||||
if mods["Krastorio2"] then
|
||||
size = tonumber(krastorio.general.getSafeSettingValue("kr-stack-size"))
|
||||
return size or default
|
||||
end
|
||||
return default
|
||||
end
|
||||
|
||||
function util.k2assets()
|
||||
if mods["Krastorio2Assets"] then
|
||||
return "__Krastorio2Assets__"
|
||||
end
|
||||
return "__Krastorio2__/graphics"
|
||||
end
|
||||
|
||||
-- check if a table contains a sought value
|
||||
function util.contains(table, sought)
|
||||
for i, value in pairs(table) do
|
||||
if value == sought then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Set/override a technology's prerequisites
|
||||
function util.set_prerequisite(technology_name, prerequisites)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
if technology then
|
||||
technology.prerequisites = {}
|
||||
for i, prerequisite in pairs(prerequisites) do
|
||||
if data.raw.technology[prerequisite] then
|
||||
table.insert(technology.prerequisites, prerequisite)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add a prerequisite to a given technology
|
||||
function util.add_prerequisite(technology_name, prerequisite)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
if technology and data.raw.technology[prerequisite] then
|
||||
if technology.prerequisites then
|
||||
table.insert(technology.prerequisites, prerequisite)
|
||||
else
|
||||
technology.prerequisites = {prerequisite}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Remove a prerequisite from a given technology
|
||||
function util.remove_prerequisite(technology_name, prerequisite)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
local index = -1
|
||||
if technology then
|
||||
for i, prereq in pairs(technology.prerequisites) do
|
||||
if prereq == prerequisite then
|
||||
index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if index > -1 then
|
||||
table.remove(technology.prerequisites, index)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Add an effect to a given technology
|
||||
function util.add_effect(technology_name, effect)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
if technology then
|
||||
if not technology.effects then technology.effects = {} end
|
||||
if effect and effect.type == "unlock-recipe" then
|
||||
if not data.raw.recipe[effect.recipe] then
|
||||
return
|
||||
end
|
||||
table.insert(technology.effects, effect)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- remove recipe unlock effect from a given technology
|
||||
function util.remove_recipe_effect(technology_name, recipe_name)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
local index = -1
|
||||
if technology then
|
||||
for i, effect in pairs(technology.effects) do
|
||||
if effect.type == "unlock-recipe" and effect.recipe == recipe_name then
|
||||
index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if index > -1 then
|
||||
table.remove(technology.effects, index)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Set technology ingredients
|
||||
function util.set_tech_recipe(technology_name, ingredients)
|
||||
local technology = data.raw.technology[technology_name]
|
||||
if technology then
|
||||
technology.unit.ingredients = ingredients
|
||||
end
|
||||
end
|
||||
|
||||
function util.set_enabled(recipe_name, enabled)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
if data.raw.recipe[recipe_name].normal then data.raw.recipe[recipe_name].normal.enabled = enabled end
|
||||
if data.raw.recipe[recipe_name].expensive then data.raw.recipe[recipe_name].expensive.enabled = enabled end
|
||||
if not data.raw.recipe[recipe_name].normal then data.raw.recipe[recipe_name].enabled = enabled end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add a given quantity of ingredient to a given recipe
|
||||
function util.add_or_add_to_ingredient(recipe_name, ingredient, quantity)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then
|
||||
me.add_modified(recipe_name)
|
||||
add_or_add_to_ingredient(data.raw.recipe[recipe_name], ingredient, quantity)
|
||||
add_or_add_to_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity)
|
||||
add_or_add_to_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity)
|
||||
end
|
||||
end
|
||||
|
||||
function add_or_add_to_ingredient(recipe, ingredient, quantity)
|
||||
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
|
||||
add_to_ingredient(recipe, ingredient, quantity)
|
||||
return
|
||||
end
|
||||
end
|
||||
table.insert(recipe.ingredients, {ingredient, quantity})
|
||||
end
|
||||
end
|
||||
|
||||
-- Add a given quantity of ingredient to a given recipe
|
||||
function util.add_ingredient(recipe_name, ingredient, quantity)
|
||||
if me.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
|
||||
me.add_modified(recipe_name)
|
||||
add_ingredient(data.raw.recipe[recipe_name], ingredient, quantity, is_fluid)
|
||||
add_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity, is_fluid)
|
||||
add_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity, is_fluid)
|
||||
end
|
||||
end
|
||||
|
||||
function add_ingredient(recipe, ingredient, quantity, is_fluid)
|
||||
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
|
||||
log("Not adding "..ingredient.." -- duplicate")
|
||||
return
|
||||
end
|
||||
end
|
||||
if is_fluid then
|
||||
table.insert(recipe.ingredients, {type="fluid", name=ingredient, amount=quantity})
|
||||
else
|
||||
table.insert(recipe.ingredients, {ingredient, quantity})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add a given ingredient prototype to a given recipe
|
||||
function util.add_ingredient_raw(recipe_name, ingredient)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] and (data.raw.item[ingredient.name] or data.raw.item[ingredient[1]]) then
|
||||
me.add_modified(recipe_name)
|
||||
add_ingredient_raw(data.raw.recipe[recipe_name], ingredient)
|
||||
add_ingredient_raw(data.raw.recipe[recipe_name].normal, ingredient)
|
||||
add_ingredient_raw(data.raw.recipe[recipe_name].expensive, ingredient)
|
||||
end
|
||||
end
|
||||
|
||||
function add_ingredient_raw(recipe, ingredient)
|
||||
if recipe ~= nil and recipe.ingredients ~= nil then
|
||||
for i, existing in pairs(recipe.ingredients) do
|
||||
if (
|
||||
(existing[1] and (existing[1] == ingredient[1] or existing[1] == ingredient.name)) or
|
||||
(existing.name and (existing.name == ingredient[1] or existing.name == ingredient.name))
|
||||
) then
|
||||
return
|
||||
end
|
||||
end
|
||||
table.insert(recipe.ingredients, ingredient)
|
||||
end
|
||||
end
|
||||
|
||||
-- Set an ingredient to a given quantity
|
||||
function util.set_ingredient(recipe_name, ingredient, quantity)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] and data.raw.item[ingredient] then
|
||||
me.add_modified(recipe_name)
|
||||
set_ingredient(data.raw.recipe[recipe_name], ingredient, quantity)
|
||||
set_ingredient(data.raw.recipe[recipe_name].normal, ingredient, quantity)
|
||||
set_ingredient(data.raw.recipe[recipe_name].expensive, ingredient, quantity)
|
||||
end
|
||||
end
|
||||
|
||||
function set_ingredient(recipe, ingredient, quantity)
|
||||
if recipe ~= nil and recipe.ingredients ~= nil then
|
||||
for i, existing in pairs(recipe.ingredients) do
|
||||
if existing[1] == ingredient then
|
||||
existing[2] = quantity
|
||||
return
|
||||
elseif existing.name == ingredient then
|
||||
existing.amount = quantity
|
||||
existing.amount_min = nil
|
||||
existing.amount_max = nil
|
||||
return
|
||||
end
|
||||
end
|
||||
table.insert(recipe.ingredients, {ingredient, quantity})
|
||||
end
|
||||
end
|
||||
-- Add a given quantity of product to a given recipe.
|
||||
-- Only works for recipes with multiple products
|
||||
function util.add_product(recipe_name, product)
|
||||
if data.raw.recipe[recipe_name] and (data.raw.item[product[1]] or data.raw.item[product.name]) then
|
||||
add_product(data.raw.recipe[recipe_name], product)
|
||||
add_product(data.raw.recipe[recipe_name].normal, product)
|
||||
add_product(data.raw.recipe[recipe_name].expensive, product)
|
||||
end
|
||||
end
|
||||
|
||||
function add_product(recipe, product)
|
||||
if recipe ~= nil then
|
||||
if not recipe.normal then
|
||||
if recipe.results == nil then
|
||||
recipe.results = {{recipe.result, recipe.result_count and recipe.result_count or 1}}
|
||||
end
|
||||
recipe.result = nil
|
||||
recipe.result_count = nil
|
||||
table.insert(recipe.results, product)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Replace one ingredient with another in a recipe
|
||||
function util.replace_ingredient(recipe_name, old, new)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] and (data.raw.item[new] or data.raw.fluid[new]) then
|
||||
me.add_modified(recipe_name)
|
||||
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].expensive, old, new)
|
||||
end
|
||||
end
|
||||
|
||||
function replace_ingredient(recipe, old, new)
|
||||
if recipe ~= nil and recipe.ingredients ~= nil then
|
||||
for i, existing in pairs(recipe.ingredients) do
|
||||
if existing[1] == new or existing.name == new then
|
||||
log("Not adding "..new.." -- duplicate")
|
||||
return
|
||||
end
|
||||
end
|
||||
for i, ingredient in pairs(recipe.ingredients) do
|
||||
if ingredient.name == old then ingredient.name = new end
|
||||
if ingredient[1] == old then ingredient[1] = new end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Remove an ingredient from a recipe
|
||||
function util.remove_ingredient(recipe_name, old)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] then
|
||||
me.add_modified(recipe_name)
|
||||
remove_ingredient(data.raw.recipe[recipe_name], old)
|
||||
remove_ingredient(data.raw.recipe[recipe_name].normal, old)
|
||||
remove_ingredient(data.raw.recipe[recipe_name].expensive, old)
|
||||
end
|
||||
end
|
||||
|
||||
function remove_ingredient(recipe, old)
|
||||
index = -1
|
||||
if recipe ~= nil and recipe.ingredients ~= nil then
|
||||
for i, ingredient in pairs(recipe.ingredients) do
|
||||
if ingredient.name == old or ingredient[1] == old then
|
||||
index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if index > -1 then
|
||||
table.remove(recipe.ingredients, index)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- 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)
|
||||
if me.bypass[recipe_name] then return end
|
||||
local is_fluid = not not data.raw.fluid[new]
|
||||
if data.raw.recipe[recipe_name] and (data.raw.item[new] or is_fluid) then
|
||||
me.add_modified(recipe_name)
|
||||
replace_some_ingredient(data.raw.recipe[recipe_name], old, old_amount, new, new_amount, is_fluid)
|
||||
replace_some_ingredient(data.raw.recipe[recipe_name].normal, old, old_amount, new, new_amount, is_fluid)
|
||||
replace_some_ingredient(data.raw.recipe[recipe_name].expensive, old, old_amount, new, new_amount, is_fluid)
|
||||
end
|
||||
end
|
||||
|
||||
function replace_some_ingredient(recipe, old, old_amount, new, new_amount, is_fluid)
|
||||
if recipe ~= nil and recipe.ingredients ~= nil then
|
||||
for i, existing in pairs(recipe.ingredients) do
|
||||
if existing[1] == new or existing.name == new then
|
||||
log("Not adding "..new.." -- duplicate")
|
||||
return
|
||||
end
|
||||
end
|
||||
for i, ingredient in pairs(recipe.ingredients) do
|
||||
if ingredient.name == old then
|
||||
ingredient.amount = math.max(1, ingredient.amount - old_amount)
|
||||
end
|
||||
if ingredient[1] == old then
|
||||
ingredient[2] = math.max(1, ingredient[2] - old_amount)
|
||||
end
|
||||
end
|
||||
add_ingredient(recipe, new, new_amount, is_fluid)
|
||||
end
|
||||
end
|
||||
|
||||
-- multiply the cost, energy, and results of a recipe by a multiple
|
||||
function util.multiply_recipe(recipe_name, multiple)
|
||||
me.add_modified(recipe_name)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
if me.bypass[recipe_name] then return end
|
||||
multiply_recipe(data.raw.recipe[recipe_name], multiple)
|
||||
multiply_recipe(data.raw.recipe[recipe_name].normal, multiple)
|
||||
multiply_recipe(data.raw.recipe[recipe_name].expensive, multiple)
|
||||
end
|
||||
end
|
||||
|
||||
function multiply_recipe(recipe, multiple)
|
||||
if recipe then
|
||||
if recipe.energy_required then
|
||||
recipe.energy_required = recipe.energy_required * multiple
|
||||
end
|
||||
if recipe.result_count then
|
||||
recipe.result_count = recipe.result_count * multiple
|
||||
end
|
||||
if recipe.results then
|
||||
for i, result in pairs(recipe.results) do
|
||||
if result.name then
|
||||
if result.amount then
|
||||
result.amount = result.amount * multiple
|
||||
end
|
||||
if result.amount_min ~= nil then
|
||||
result.amount_min = result.amount_min * multiple
|
||||
result.amount_max = result.amount_max * multiple
|
||||
end
|
||||
if result.catalyst_amount then
|
||||
result.catalyst_amount = result.catalyst_amount * multiple
|
||||
end
|
||||
end
|
||||
if result[1] then
|
||||
result[2] = result[2] * multiple
|
||||
end
|
||||
end
|
||||
end
|
||||
if not recipe.results and not recipe.result_count then
|
||||
-- implicit one item result
|
||||
recipe.result_count = multiple
|
||||
end
|
||||
if recipe.ingredients then
|
||||
for i, ingredient in pairs(recipe.ingredients) do
|
||||
if ingredient.name then
|
||||
ingredient.amount = ingredient.amount * multiple
|
||||
end
|
||||
if ingredient[1] then
|
||||
ingredient[2] = ingredient[2] * multiple
|
||||
end
|
||||
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
|
||||
|
||||
-- Remove a product from a recipe, WILL NOT remove the only product
|
||||
function util.remove_product(recipe_name, old)
|
||||
me.add_modified(recipe_name)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
if me.bypass[recipe_name] then return end
|
||||
remove_product(data.raw.recipe[recipe_name], old)
|
||||
remove_product(data.raw.recipe[recipe_name].normal, old)
|
||||
remove_product(data.raw.recipe[recipe_name].expensive, old)
|
||||
end
|
||||
end
|
||||
|
||||
function remove_product(recipe, old)
|
||||
index = -1
|
||||
if recipe ~= nil and recipe.results ~= nil then
|
||||
for i, result in pairs(recipe.results) do
|
||||
if result.name == old or result[1] == old then
|
||||
index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
if index > -1 then
|
||||
table.remove(recipe.results, index)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function util.set_main_product(recipe_name, product)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
set_main_product(data.raw.recipe[recipe_name], product)
|
||||
set_main_product(data.raw.recipe[recipe_name].normal, product)
|
||||
set_main_product(data.raw.recipe[recipe_name].expensive, product)
|
||||
end
|
||||
end
|
||||
|
||||
function set_main_product(recipe, product)
|
||||
if recipe then
|
||||
recipe.main_product = product
|
||||
end
|
||||
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 then
|
||||
if recipe.main_product == old then
|
||||
recipe.main_product = new
|
||||
end
|
||||
if recipe.result == old then
|
||||
recipe.result = new
|
||||
return
|
||||
end
|
||||
if recipe.results then
|
||||
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
|
||||
end
|
||||
|
||||
-- Remove an element of type t and name from data.raw
|
||||
function util.remove_raw(t, name)
|
||||
if not data.raw[t] then
|
||||
log(t.." not found in data.raw")
|
||||
return
|
||||
end
|
||||
if data.raw[t][name] then
|
||||
for i, elem in pairs(data.raw[t]) do
|
||||
if elem.name == name then
|
||||
data.raw[t][i] = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Multiply energy required
|
||||
function util.multiply_time(recipe_name, factor)
|
||||
me.add_modified(recipe_name)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
if me.bypass[recipe_name] then return end
|
||||
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
|
||||
|
||||
-- Add to energy required
|
||||
function util.add_time(recipe_name, amount)
|
||||
me.add_modified(recipe_name)
|
||||
if data.raw.recipe[recipe_name] then
|
||||
if me.bypass[recipe_name] then return end
|
||||
add_time(data.raw.recipe[recipe_name], amount)
|
||||
add_time(data.raw.recipe[recipe_name].normal, amount)
|
||||
add_time(data.raw.recipe[recipe_name].expensive, amount)
|
||||
end
|
||||
end
|
||||
|
||||
function add_time(recipe, amount)
|
||||
if recipe then
|
||||
if recipe.energy_required then
|
||||
recipe.energy_required = recipe.energy_required + amount
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Set recipe category
|
||||
function util.set_category(recipe_name, category)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] then
|
||||
me.add_modified(recipe_name)
|
||||
data.raw.recipe[recipe_name].category = category
|
||||
end
|
||||
end
|
||||
|
||||
-- Set recipe subgroup
|
||||
function util.set_subgroup(recipe_name, subgroup)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] then
|
||||
me.add_modified(recipe_name)
|
||||
data.raw.recipe[recipe_name].subgroup = subgroup
|
||||
end
|
||||
end
|
||||
|
||||
-- Set recipe icons
|
||||
function util.set_icons(recipe_name, icons)
|
||||
if me.bypass[recipe_name] then return end
|
||||
if data.raw.recipe[recipe_name] then
|
||||
me.add_modified(recipe_name)
|
||||
data.raw.recipe[recipe_name].icons = icons
|
||||
data.raw.recipe[recipe_name].icon = nil
|
||||
data.raw.recipe[recipe_name].icon_size = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Set recipe icons
|
||||
function util.set_item_icons(item_name, icons)
|
||||
if data.raw.item[item_name] then
|
||||
data.raw.item[item_name].icons = icons
|
||||
data.raw.item[item_name].icon = nil
|
||||
data.raw.item[item_name].icon_size = nil
|
||||
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 "..category.." -- duplicate")
|
||||
return
|
||||
end
|
||||
end
|
||||
table.insert(data.raw[entity_type][entity].crafting_categories, category)
|
||||
end
|
||||
end
|
||||
|
||||
function util.add_to_ingredient(recipe, ingredient, amount)
|
||||
if data.raw.recipe[recipe] then
|
||||
add_to_ingredient(data.raw.recipe[recipe], ingredient, amount)
|
||||
add_to_ingredient(data.raw.recipe[recipe].normal, ingredient, amount)
|
||||
add_to_ingredient(data.raw.recipe[recipe].expensive, ingredient, amount)
|
||||
end
|
||||
end
|
||||
|
||||
function add_to_ingredient(recipe, it, amount)
|
||||
if recipe ~= nil and recipe.ingredients ~= nil 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
|
||||
end
|
||||
|
||||
function util.add_to_product(recipe, product, amount)
|
||||
if data.raw.recipe[recipe] then
|
||||
add_to_product(data.raw.recipe[recipe], product, amount)
|
||||
add_to_product(data.raw.recipe[recipe].normal, product, amount)
|
||||
add_to_product(data.raw.recipe[recipe].expensive, product, amount)
|
||||
end
|
||||
end
|
||||
|
||||
function add_to_product(recipe, product, amount)
|
||||
if recipe ~= nil and recipe.results ~= nil then
|
||||
if recipe.result == product then
|
||||
recipe.result_count = recipe.result_count + amount
|
||||
return
|
||||
end
|
||||
for i, result in pairs(recipe.results) do
|
||||
if result.name == product then
|
||||
result.amount = result.amount + amount
|
||||
return
|
||||
end
|
||||
if result[1] == product then
|
||||
result[2] = result[2] + amount
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
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][name].minable.result and not data.raw[t][name].minable.results then
|
||||
data.raw[t][name].minable.results = {
|
||||
{data.raw[t][name].minable.result ,data.raw[t][name].minable.count}}
|
||||
data.raw[t][name].minable.result = nil
|
||||
data.raw[t][name].minable.result_count = nil
|
||||
end
|
||||
if data.raw[t][name].minable.results then
|
||||
table.insert(data.raw[t][name].minable.results, result)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function insert(nodes, node, value)
|
||||
table.insert(node, value) -- store as parameter
|
||||
if 21 == #node then
|
||||
node = {""}
|
||||
table.insert(nodes, node)
|
||||
end
|
||||
return node
|
||||
end
|
||||
|
||||
local function encode(data)
|
||||
local node = {""}
|
||||
local root = {node}
|
||||
local n = string.len(data)
|
||||
for i = 1,n,200 do
|
||||
local value = string.sub(data, i, i+199)
|
||||
node = insert(root, node, value)
|
||||
end
|
||||
while #root > 20 do
|
||||
local nodes,node = {},{""}
|
||||
for _, value in ipairs(root) do
|
||||
node = insert(nodes, node, value)
|
||||
end
|
||||
root = nodes
|
||||
end
|
||||
if #root == 1 then root = root[1] else
|
||||
table.insert(root, 1, "") -- no locale template
|
||||
end
|
||||
return #root < 3 and (root[2] or "") or root
|
||||
end
|
||||
|
||||
function decode(data)
|
||||
if type(data) == "string" then return data end
|
||||
local str = {}
|
||||
for i = 2, #data do
|
||||
str[i-1] = decode(data[i])
|
||||
end
|
||||
return table.concat(str, "")
|
||||
end
|
||||
|
||||
function util.create_list()
|
||||
if #me.list>0 then
|
||||
if not data.raw.item[me.name.."-list"] then
|
||||
data:extend({{
|
||||
type="item",
|
||||
name=me.name.."-list",
|
||||
localised_description = "",
|
||||
enabled=false,
|
||||
icon = "__core__/graphics/empty.png",
|
||||
icon_size = 1,
|
||||
stack_size = 1,
|
||||
flags = {"hidden", "hide-from-bonus-gui"}
|
||||
}})
|
||||
end
|
||||
|
||||
local have = {}
|
||||
local list = {}
|
||||
for i, recipe in pairs(me.list) do
|
||||
if not have[recipe] then
|
||||
have[recipe] = true
|
||||
table.insert(list, recipe)
|
||||
end
|
||||
end
|
||||
|
||||
if #list>0 then
|
||||
data.raw.item[me.name.."-list"].localised_description =
|
||||
encode(decode(data.raw.item[me.name.."-list"].localised_description).."\n"..table.concat(list, "\n"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return util
|
||||
9
data.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
require("tin-ore")
|
||||
require("tin-recipe")
|
||||
-- require("tin-enriched") -- Enriched Al for Krastorio 2
|
||||
-- require("tin-recipe-se") -- Space Exploration
|
||||
|
||||
local util = require("data-util");
|
||||
|
||||
-- Must be last
|
||||
util.create_list()
|
||||
BIN
graphics/entity/ores/hr-tin-ore.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
graphics/entity/ores/hr-tin-ore.xcf
Normal file
BIN
graphics/entity/ores/tin-ore.png
Normal file
|
After Width: | Height: | Size: 517 KiB |
BIN
graphics/icons/enriched-tin-1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
graphics/icons/enriched-tin-1.xcf
Normal file
BIN
graphics/icons/enriched-tin-2.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
graphics/icons/enriched-tin-2.xcf
Normal file
BIN
graphics/icons/enriched-tin-3.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
graphics/icons/enriched-tin-3.xcf
Normal file
BIN
graphics/icons/enriched-tin.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
graphics/icons/enriched-tin.xcf
Normal file
BIN
graphics/icons/organotins.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
graphics/icons/organotins.xcf
Normal file
BIN
graphics/icons/solder.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
graphics/icons/solder.xcf
Normal file
BIN
graphics/icons/stacked/acsr-cable-stacked.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
graphics/icons/stacked/acsr-cable-stacked.xcf
Normal file
BIN
graphics/icons/stacked/alumina-stacked.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
graphics/icons/stacked/alumina-stacked.xcf
Normal file
BIN
graphics/icons/stacked/aluminum-2219-stacked.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
graphics/icons/stacked/aluminum-2219-stacked.xcf
Normal file
BIN
graphics/icons/stacked/aluminum-6061-stacked.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
graphics/icons/stacked/aluminum-6061-stacked.xcf
Normal file
BIN
graphics/icons/stacked/aluminum-ore-stacked.png
Normal file
|
After Width: | Height: | Size: 8 KiB |
BIN
graphics/icons/stacked/aluminum-ore-stacked.xcf
Normal file
BIN
graphics/icons/stacked/aluminum-plate-stacked.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
graphics/icons/stacked/aluminum-plate-stacked.xcf
Normal file
BIN
graphics/icons/stacked/automation-core-stacked.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
graphics/icons/stacked/automation-core-stacked.xcf
Normal file
BIN
graphics/icons/stacked/enriched-aluminum-ore-stacked.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
graphics/icons/stacked/enriched-aluminum-ore-stacked.xcf
Normal file
BIN
graphics/icons/stacked/spark-plug-stacked.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
graphics/icons/stacked/spark-plug-stacked.xcf
Normal file
BIN
graphics/icons/stacked/ti-sapphire-stacked.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
graphics/icons/stacked/ti-sapphire-stacked.xcf
Normal file
BIN
graphics/icons/tin-ore-2.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
graphics/icons/tin-ore-2.xcf
Normal file
BIN
graphics/icons/tin-ore-3.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
graphics/icons/tin-ore-3.xcf
Normal file
BIN
graphics/icons/tin-ore-4.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
graphics/icons/tin-ore-4.xcf
Normal file
BIN
graphics/icons/tin-ore-powder.png
Normal file
|
After Width: | Height: | Size: 9 KiB |
BIN
graphics/icons/tin-ore-powder.xcf
Normal file
BIN
graphics/icons/tin-ore.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
graphics/icons/tin-ore.xcf
Normal file
BIN
graphics/icons/tin-plate.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
graphics/icons/tin-plate.xcf
Normal file
BIN
graphics/icons/tinned-cable.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
graphics/icons/tinned-cable.xcf
Normal file
BIN
graphics/technology/automation-core.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
graphics/technology/automation-core.xcf
Normal file
BIN
graphics/technology/organotins.jpg
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
graphics/technology/organotins.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
graphics/technology/organotins.xcf
Normal file
BIN
graphics/technology/reinforced-cable.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
graphics/technology/reinforced-cable.xcf
Normal file
25
info.json
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "bztin",
|
||||
"version": "0.0.1",
|
||||
"factorio_version": "1.1",
|
||||
"title": "Tin",
|
||||
"author": "Brevven",
|
||||
"contact": "",
|
||||
"homepage": "",
|
||||
"dependencies": [
|
||||
"base >= 1.1.0",
|
||||
"bzfoundry",
|
||||
"? bztitanium >= 1.1.1",
|
||||
"? bzlead",
|
||||
"? bzzirconium >= 0.5.4",
|
||||
"? bztungsten >= 0.5.4",
|
||||
"? bzcarbon >= 0.2.0",
|
||||
"? space-exploration",
|
||||
"? aai-industry",
|
||||
"? Krastorio2",
|
||||
"? deadlock-beltboxes-loaders",
|
||||
"? DeadlockCrating"
|
||||
],
|
||||
"description": "Adds tin to the base game.\n\nCompatible with Krastorio 2 and Space Exploration. A standalone piece of BZ Mods."
|
||||
}
|
||||
|
||||
58
locale/en/tin.cfg
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
[entity-name]
|
||||
tin-ore=Tin ore
|
||||
|
||||
[autoplace-control-names]
|
||||
tin-ore=Tin ore
|
||||
|
||||
[item-name]
|
||||
tin-ore=Tin ore
|
||||
tin-dust=Tin dust
|
||||
tin-plate=Tin plate
|
||||
solder=Solder
|
||||
tinned-cable=Tinned cable
|
||||
enriched-tin=Enriched tin
|
||||
compressed-tin-ore=Compressed tin ore
|
||||
|
||||
[item-description]
|
||||
tin-ore=Can be smelted into tin plates
|
||||
enriched-tin=Can be efficiently smelted into tin plates
|
||||
|
||||
[fluid-name]
|
||||
organotins=Organotins
|
||||
|
||||
[technology-name]
|
||||
tinned-cable=Tinned cable
|
||||
organotins=Organotins
|
||||
tin-matter-processing=Tin conversion
|
||||
|
||||
[technology-description]
|
||||
enriched-tin=Enrich tin ore, purifying with sulfuric acid [fluid=sulfuric-acid] and water [fluid=water], improving the final yield. Produce dirty water [fluid=dirty-water] as a byproduct.
|
||||
tinned-cable=Tinned copper cables
|
||||
|
||||
[recipe-name]
|
||||
alumina=__ITEM__alumina__
|
||||
enriched-tin=__ITEM__enriched-tin__
|
||||
tin-plate=__ITEM__tin-plate__
|
||||
smelt-compressed-tin-ore=__ITEM__tin-plate__
|
||||
tin-dust=__ITEM__tin-dust__
|
||||
dirty-water-filtration-tin=Filter dirty water [item=tin-ore]
|
||||
bz-tin-ingot=Tin ingot
|
||||
|
||||
[recipe-description]
|
||||
enriched-tin=Enrich tin ore, purifying with sulfuric acid [fluid=sulfuric-acid] and water [fluid=water], improving the final yield. Produce dirty water [fluid=dirty-water] as a byproduct.
|
||||
dirty-water-filtration-tin=Filter dirty water, giving tin ore [item=tin-ore] and other outputs (probabilistically).
|
||||
|
||||
# Settings
|
||||
|
||||
[mod-setting-name]
|
||||
bztin-recipe-bypass=Bypass recipes
|
||||
bztin-list=Make a list of modified recipes
|
||||
bztin-more-intermediates=Enable more intermediates
|
||||
|
||||
[mod-setting-description]
|
||||
bztin-recipe-bypass=Skip modifying these recipes (comma-separated list).
|
||||
bztin-list=If enabled, the text command [color=orange]BZList[/color] will dump a file to the script-output directory with a full list of recipes modified.\nRecommended to turn this off after you are done configuring your other settings.
|
||||
|
||||
[string-mod-setting]
|
||||
bztin-more-intermediates-no=No
|
||||
bztin-more-intermediates-cable=Yes: Tinned cable
|
||||
10
map-gen-preset-updates.lua
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
if data.raw["map-gen-presets"] and data.raw["map-gen-presets"].default then
|
||||
for name, preset in pairs(data.raw["map-gen-presets"].default) do
|
||||
if type(preset) == "table" and
|
||||
preset.basic_settings and
|
||||
preset.basic_settings.autoplace_controls and
|
||||
preset.basic_settings.autoplace_controls["iron-ore"] then
|
||||
preset.basic_settings.autoplace_controls["tin-ore"] = preset.basic_settings.autoplace_controls["iron-ore"]
|
||||
end
|
||||
end
|
||||
end
|
||||
31
me.lua
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
local me = {}
|
||||
|
||||
me.name = "bztin"
|
||||
me.list = {}
|
||||
|
||||
function me.use_cable()
|
||||
return me.get_setting("bztin-more-intermediates") == "cable"
|
||||
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
|
||||
|
||||
function me.add_modified(name)
|
||||
if me.get_setting(me.name.."-list") then
|
||||
table.insert(me.list, name)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return me
|
||||
22
settings.lua
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
data:extend({
|
||||
{
|
||||
type = "string-setting",
|
||||
name = "bztin-recipe-bypass",
|
||||
setting_type = "startup",
|
||||
default_value = "",
|
||||
allow_blank = true,
|
||||
},
|
||||
{
|
||||
type = "bool-setting",
|
||||
name = "bztin-list",
|
||||
setting_type = "startup",
|
||||
default_value = false,
|
||||
},
|
||||
{
|
||||
type = "string-setting",
|
||||
name = "bztin-more-intermediates",
|
||||
setting_type = "startup",
|
||||
default_value = (mods.Krastorio2 or mods["space-exploration"]) and "cable" or "no",
|
||||
allowed_values = {"cable", "no"},
|
||||
},
|
||||
})
|
||||
48
strange-matter.lua
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
local util = require("data-util");
|
||||
|
||||
local ore = "tin-ore"
|
||||
local ore_icon = "__bztin__/graphics/icons/tin-ore.png"
|
||||
|
||||
if mods["StrangeMatter"] then
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
name = ore.."-synthesis",
|
||||
icons = {
|
||||
{ icon = ore_icon, icon_size = 64 },
|
||||
{ icon = "__StrangeMatter__/graphics/icons/fluid/matter.png", icon_size = 32, scale=0.5, shift= {-8, -8}},
|
||||
},
|
||||
enabled = false,
|
||||
energy_required = 1,
|
||||
ingredients = {{type="fluid", name="strange-matter", amount = 2}},
|
||||
result = ore,
|
||||
category = "crafting-with-fluid",
|
||||
subgroup = "synthesis",
|
||||
},
|
||||
{
|
||||
type = "technology",
|
||||
name = ore.."-synthesis",
|
||||
icons = {
|
||||
{ icon = "__StrangeMatter__/graphics/icons/fluid/matter.png", icon_size = 32, shift= {-6, 0}},
|
||||
{ icon = ore_icon, icon_size = 64, scale=0.25, shift={8, 8}},
|
||||
},
|
||||
prerequisites = {"stone-synthesis"},
|
||||
effects = {
|
||||
{
|
||||
type = "unlock-recipe",
|
||||
recipe = ore.."-synthesis",
|
||||
},
|
||||
},
|
||||
unit = {
|
||||
count = 800,
|
||||
time = 30,
|
||||
ingredients = {
|
||||
{"automation-science-pack", 1},
|
||||
{"logistic-science-pack", 1},
|
||||
{"chemical-science-pack", 1},
|
||||
{"production-science-pack", 1},
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
end
|
||||
BIN
thumbnail.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
thumbnail.xcf
Normal file
119
tin-enriched.lua
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
-- Enriched Lead for Krastorio2
|
||||
local util = require("data-util");
|
||||
|
||||
if mods["Krastorio2"] then
|
||||
data:extend(
|
||||
{
|
||||
{
|
||||
type = "item",
|
||||
name = "enriched-tin",
|
||||
icon_size = 128,
|
||||
icon = "__bztin__/graphics/icons/enriched-tin.png",
|
||||
pictures = {
|
||||
{filename="__bztin__/graphics/icons/enriched-tin.png", size=128, scale=0.125},
|
||||
{filename="__bztin__/graphics/icons/enriched-tin-1.png", size=128, scale=0.125},
|
||||
{filename="__bztin__/graphics/icons/enriched-tin-2.png", size=128, scale=0.125},
|
||||
{filename="__bztin__/graphics/icons/enriched-tin-3.png", size=128, scale=0.125},
|
||||
},
|
||||
subgroup = "raw-material",
|
||||
order = "e05-a[enriched-ores]-a1[enriched-tin]",
|
||||
stack_size = util.get_stack_size(100)
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "enriched-tin",
|
||||
icon = "__bztin__/graphics/icons/enriched-tin.png",
|
||||
icon_size = 128,
|
||||
category = "chemistry",
|
||||
energy_required = 3,
|
||||
enabled = false,
|
||||
always_show_made_in = true,
|
||||
always_show_products = true,
|
||||
allow_productivity = true,
|
||||
ingredients =
|
||||
{
|
||||
{type = "fluid", name = "sulfuric-acid", amount = 3},
|
||||
{type = "fluid", name = "water", amount = 25, catalyst_amount = 25},
|
||||
{type = "item", name = "tin-ore", amount = 9}
|
||||
},
|
||||
results =
|
||||
{
|
||||
{type = "item", name = "enriched-tin", amount = 6},
|
||||
{type = "fluid", name = "dirty-water", amount = 25, catalyst_amount = 25}
|
||||
},
|
||||
crafting_machine_tint =
|
||||
{
|
||||
primary = {r = 0.721, g = 0.525, b = 0.043, a = 0.000},
|
||||
secondary = {r = 0.200, g = 0.680, b = 0.300, a = 0.357},
|
||||
tertiary = {r = 0.690, g = 0.768, b = 0.870, a = 0.000},
|
||||
quaternary = {r = 0.0, g = 0.980, b = 0.603, a = 0.900}
|
||||
},
|
||||
subgroup = "raw-material",
|
||||
order = "e03[enriched-tin]"
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "enriched-alumina",
|
||||
icons =
|
||||
{
|
||||
{ icon = "__bztin__/graphics/icons/alumina.png", icon_size = 128 },
|
||||
{ icon = "__bztin__/graphics/icons/enriched-tin.png", icon_size = 128, scale=0.125, shift= {-8, -8}},
|
||||
},
|
||||
category = "smelting",
|
||||
energy_required = 16,
|
||||
enabled = false,
|
||||
always_show_made_in = true,
|
||||
always_show_products = true,
|
||||
allow_productivity = true,
|
||||
ingredients = { {"enriched-tin", 5} },
|
||||
results = { {"alumina", 5} },
|
||||
order = "b[alumina]-b[enriched-alumina]",
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "dirty-water-filtration-tin",
|
||||
category = "fluid-filtration",
|
||||
icons =
|
||||
{
|
||||
{
|
||||
icon = data.raw.fluid["dirty-water"].icon,
|
||||
icon_size = data.raw.fluid["dirty-water"].icon_size
|
||||
},
|
||||
{
|
||||
icon = data.raw.item["tin-ore"].icon,
|
||||
icon_size = data.raw.item["tin-ore"].icon_size,
|
||||
scale = 0.20 * (data.raw.fluid["dirty-water"].icon_size/data.raw.item["tin-ore"].icon_size),
|
||||
shift = {0, 4}
|
||||
}
|
||||
},
|
||||
icon_size = data.raw.fluid["dirty-water"].icon_size,
|
||||
energy_required = 2,
|
||||
enabled = false,
|
||||
allow_as_intermediate = false,
|
||||
always_show_made_in = true,
|
||||
always_show_products = true,
|
||||
ingredients =
|
||||
{
|
||||
{type = "fluid", name = "dirty-water", amount = 100, catalyst_amount = 100},
|
||||
},
|
||||
results =
|
||||
{
|
||||
{type = "fluid", name = "water", amount = 90, catalyst_amount = 90},
|
||||
mods.bzsilicon and {type = "item", name = "silica", amount = 1} or
|
||||
{type = "item", name = "stone", probability = 0.40, amount = 1},
|
||||
{type = "item", name = "tin-ore", probability = 0.10, amount = 1},
|
||||
},
|
||||
crafting_machine_tint =
|
||||
{
|
||||
primary = {r = 0.60, g = 0.20, b = 0, a = 0.6},
|
||||
secondary = {r = 1.0, g = 0.843, b = 0.0, a = 0.9}
|
||||
},
|
||||
subgroup = "raw-material",
|
||||
order = "w013[dirty-water-filtration-tin]"
|
||||
}
|
||||
}
|
||||
)
|
||||
util.add_effect("kr-enriched-ores", { type = "unlock-recipe", recipe = "enriched-tin" })
|
||||
util.add_effect("kr-enriched-ores", { type = "unlock-recipe", recipe = "enriched-alumina" })
|
||||
util.add_effect("kr-enriched-ores", { type = "unlock-recipe", recipe = "dirty-water-filtration-tin" })
|
||||
end
|
||||
71
tin-matter.lua
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
-- Matter recipes for Krastorio2
|
||||
if mods["Krastorio2"] then
|
||||
local util = require("data-util");
|
||||
local matter = require("__Krastorio2__/lib/public/data-stages/matter-util")
|
||||
|
||||
data:extend(
|
||||
{
|
||||
{
|
||||
type = "technology",
|
||||
name = "tin-matter-processing",
|
||||
icons =
|
||||
{
|
||||
{
|
||||
icon = util.k2assets().."/technologies/matter-coal.png",
|
||||
icon_size = 256,
|
||||
},
|
||||
{
|
||||
icon = "__bztin__/graphics/icons/tin-ore.png",
|
||||
icon_size = 64,
|
||||
scale = 1.4,
|
||||
}
|
||||
},
|
||||
prerequisites = {"kr-matter-processing"},
|
||||
unit =
|
||||
{
|
||||
count = 350,
|
||||
ingredients =
|
||||
{
|
||||
{"production-science-pack", 1},
|
||||
{"utility-science-pack", 1},
|
||||
{"matter-tech-card", 1}
|
||||
},
|
||||
time = 45
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
local flake_graphite_matter =
|
||||
{
|
||||
item_name = "tin-ore",
|
||||
minimum_conversion_quantity = 10,
|
||||
matter_value = 5,
|
||||
energy_required = 1,
|
||||
need_stabilizer = false,
|
||||
unlocked_by_technology = "tin-matter-processing"
|
||||
}
|
||||
matter.createMatterRecipe(flake_graphite_matter)
|
||||
|
||||
local graphite_matter =
|
||||
{
|
||||
item_name = "alumina",
|
||||
minimum_conversion_quantity = 10,
|
||||
matter_value = 7.5,
|
||||
energy_required = 2,
|
||||
only_deconversion = true,
|
||||
need_stabilizer = true,
|
||||
unlocked_by_technology = "tin-matter-processing"
|
||||
}
|
||||
matter.createMatterRecipe(graphite_matter)
|
||||
local graphite_matter =
|
||||
{
|
||||
item_name = "tin-plate",
|
||||
minimum_conversion_quantity = 10,
|
||||
matter_value = 10,
|
||||
energy_required = 3,
|
||||
only_deconversion = true,
|
||||
need_stabilizer = true,
|
||||
unlocked_by_technology = "tin-matter-processing"
|
||||
}
|
||||
matter.createMatterRecipe(graphite_matter)
|
||||
end
|
||||
83
tin-ore.lua
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
local resource_autoplace = require('resource-autoplace');
|
||||
local noise = require('noise');
|
||||
|
||||
local util = require("data-util");
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "autoplace-control",
|
||||
category = "resource",
|
||||
name = "tin-ore",
|
||||
richness = true,
|
||||
order = "b-e"
|
||||
},
|
||||
{
|
||||
type = "noise-layer",
|
||||
name = "tin-ore"
|
||||
},
|
||||
{
|
||||
type = "resource",
|
||||
icon_size = 64, icon_mipmaps = 3,
|
||||
name = "tin-ore",
|
||||
icon = "__bztin__/graphics/icons/tin-ore.png",
|
||||
flags = {"placeable-neutral"},
|
||||
order="a-b-a",
|
||||
map_color = {r=0.90, g=1.00, b=0.10},
|
||||
minable =
|
||||
{
|
||||
hardness = 1,
|
||||
mining_particle = "copper-ore-particle",
|
||||
mining_time = 1,
|
||||
result = "tin-ore"
|
||||
},
|
||||
collision_box = {{ -0.1, -0.1}, {0.1, 0.1}},
|
||||
selection_box = {{ -0.5, -0.5}, {0.5, 0.5}},
|
||||
|
||||
autoplace = resource_autoplace.resource_autoplace_settings{
|
||||
name = "tin-ore",
|
||||
order = "b-z",
|
||||
base_density = 3,
|
||||
base_spots_per_km2 = 1,
|
||||
has_starting_area_placement = true,
|
||||
regular_rq_factor_multiplier = 1.0,
|
||||
starting_rq_factor_multiplier = 1.3,
|
||||
},
|
||||
|
||||
stage_counts = {15000, 9500, 5500, 2900, 1300, 400, 150, 80},
|
||||
stages =
|
||||
{
|
||||
sheet =
|
||||
{
|
||||
filename = "__bztin__/graphics/entity/ores/tin-ore.png",
|
||||
priority = "extra-high",
|
||||
size = 64,
|
||||
frame_count = 8,
|
||||
variation_count = 8,
|
||||
hr_version =
|
||||
{
|
||||
filename = "__bztin__/graphics/entity/ores/hr-tin-ore.png",
|
||||
priority = "extra-high",
|
||||
size = 128,
|
||||
frame_count = 8,
|
||||
variation_count = 8,
|
||||
scale = 0.5
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
type = "item",
|
||||
name = "tin-ore",
|
||||
icon_size = 64, icon_mipmaps = 3,
|
||||
icon = "__bztin__/graphics/icons/tin-ore.png",
|
||||
pictures = {
|
||||
{filename="__bztin__/graphics/icons/tin-ore.png", size=64, scale=0.25},
|
||||
{filename="__bztin__/graphics/icons/tin-ore-2.png", size=64, scale=0.25},
|
||||
{filename="__bztin__/graphics/icons/tin-ore-3.png", size=64, scale=0.25},
|
||||
{filename="__bztin__/graphics/icons/tin-ore-4.png", size=64, scale=0.25},
|
||||
},
|
||||
subgroup = "raw-resource",
|
||||
order = "t-c-a",
|
||||
stack_size = util.get_stack_size(50)
|
||||
},
|
||||
})
|
||||
16
tin-recipe-final-rrr.lua
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
local util = require("data-util");
|
||||
|
||||
if mods["Rich-Rocks-Requiem"] then
|
||||
if data.raw.recipe["rrr-stone-processing"] then
|
||||
table.insert(data.raw.recipe["rrr-stone-processing"].results,
|
||||
{name = "tin-ore", probability = 0.25, amount = 1}
|
||||
)
|
||||
end
|
||||
|
||||
if data.raw.recipe["rrr-raw-ores-processing"] then
|
||||
table.insert(data.raw.recipe["rrr-raw-ores-processing"].results,
|
||||
{name = "tin-ore", probability = 0.75, amount = 10}
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
21
tin-recipe-final-stacking.lua
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
-- Deadlock stacking recipes
|
||||
|
||||
local util = require("data-util");
|
||||
|
||||
if deadlock then
|
||||
deadlock.add_stack("tin-ore", "__bztin__/graphics/icons/stacked/tin-ore-stacked.png", "deadlock-stacking-1", 64)
|
||||
deadlock.add_stack("tin-plate", "__bztin__/graphics/icons/stacked/tin-plate-stacked.png", "deadlock-stacking-1", 128)
|
||||
deadlock.add_stack("solder", "__bztin__/graphics/icons/stacked/solder-stacked.png", "deadlock-stacking-1", 128)
|
||||
|
||||
if mods.Krastorio2 then
|
||||
deadlock.add_stack("enriched-tin", "__bztin__/graphics/icons/stacked/enriched-tin-ore-stacked.png" , "deadlock-stacking-3", 128)
|
||||
end
|
||||
end
|
||||
|
||||
-- Deadlock crating recipes
|
||||
if deadlock_crating then
|
||||
deadlock_crating.add_crate("tin-ore", "deadlock-crating-1")
|
||||
deadlock_crating.add_crate("tin-plate", "deadlock-crating-1")
|
||||
deadlock_crating.add_crate("solder", "deadlock-crating-1")
|
||||
end
|
||||
|
||||
26
tin-recipe-modules.lua
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
-- Enable prod modules for all tin plate and ore recipes
|
||||
|
||||
recipes = {"tin-plate", "solder", "organotins"}
|
||||
if mods["Krastorio2"] then
|
||||
table.insert(recipes, "enriched-tin")
|
||||
end
|
||||
if mods["space-exploration"] then
|
||||
table.insert(recipes, "tin-smelting-vulcanite")
|
||||
if mods["Krastorio2"] then
|
||||
table.insert(recipes, "enriched-tin-smelting-vulcanite")
|
||||
end
|
||||
end
|
||||
|
||||
for i, recipe in pairs(recipes) do
|
||||
if data.raw.recipe[recipe] then
|
||||
for j, module in pairs(data.raw.module) do
|
||||
if module.effect then
|
||||
for effect_name, effect in pairs(module.effect) do
|
||||
if effect_name == "productivity" and effect.bonus > 0 and module.limitation and #module.limitation > 0 then
|
||||
table.insert(module.limitation, recipe)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
133
tin-recipe-se.lua
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
-- Additional recipes if Space Exploration mod is enabled
|
||||
local util = require("data-util");
|
||||
|
||||
if mods["space-exploration"] then
|
||||
se_delivery_cannon_recipes["tin-ore"] = {name= "tin-ore"}
|
||||
se_delivery_cannon_recipes["alumina"] = {name= "alumina"}
|
||||
se_delivery_cannon_recipes["tin-plate"] = {name= "tin-plate"}
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
icons = {
|
||||
{ icon = "__base__/graphics/icons/landfill.png", icon_size = 64, icon_mipmaps = 3 },
|
||||
{ icon = "__bztin__/graphics/icons/tin-ore.png", icon_size = 64, scale = 0.25},
|
||||
},
|
||||
name = "landfill-tin-ore",
|
||||
category = "hard-recycling",
|
||||
order = "z-b-tin",
|
||||
subgroup = "terrain",
|
||||
result = "landfill",
|
||||
ingredients = {{"tin-ore", 50}},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
icons = {
|
||||
{ icon = "__base__/graphics/icons/landfill.png", icon_size = 64, icon_mipmaps = 3 },
|
||||
{ icon = "__bztin__/graphics/icons/tin-ore.png", icon_size = 64, scale = 0.25},
|
||||
},
|
||||
name = "landfill-tin-ore",
|
||||
category = "hard-recycling",
|
||||
order = "z-b-tin",
|
||||
subgroup = "terrain",
|
||||
result = "landfill",
|
||||
ingredients = {{"tin-ore", 50}},
|
||||
}
|
||||
})
|
||||
|
||||
if mods["Krastorio2"] then
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
name = "enriched-alumina-smelting-vulcanite",
|
||||
category = "smelting",
|
||||
order = "d[alumina]",
|
||||
energy_required = 24,
|
||||
enabled = false,
|
||||
always_show_made_in = true,
|
||||
allow_as_intermediate = false,
|
||||
ingredients = {
|
||||
{name = "enriched-tin", amount = 8},
|
||||
{name = "se-vulcanite-block", amount = 1},
|
||||
},
|
||||
results = {
|
||||
{name = "alumina", amount = 12},
|
||||
},
|
||||
icons =
|
||||
{
|
||||
{ icon = "__bztin__/graphics/icons/alumina.png", icon_size = 128 },
|
||||
{ icon = "__space-exploration-graphics__/graphics/icons/vulcanite-block.png", icon_size = 64, scale=0.25, shift= {-10, -10}},
|
||||
},
|
||||
|
||||
},
|
||||
})
|
||||
table.insert(data.raw.technology["se-processing-vulcanite"].effects,
|
||||
{type = "unlock-recipe", recipe= "enriched-alumina-smelting-vulcanite"})
|
||||
data.raw.recipe["enriched-alumina"].order= "d[alumina]"
|
||||
se_delivery_cannon_recipes["enriched-tin"] = {name= "enriched-tin"}
|
||||
else
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
name = "alumina-smelting-vulcanite",
|
||||
category = "smelting",
|
||||
subgroup = "plates",
|
||||
order = "d[alumina]",
|
||||
energy_required = 24,
|
||||
enabled = false,
|
||||
always_show_made_in = true,
|
||||
allow_as_intermediate = false,
|
||||
ingredients = {
|
||||
{name = "tin-ore", amount = 8},
|
||||
{name = "se-vulcanite-block", amount = 1},
|
||||
},
|
||||
results = {
|
||||
{name = "alumina", amount = 10},
|
||||
{name = "silica", amount = 2},
|
||||
},
|
||||
icons =
|
||||
{
|
||||
{ icon = "__bztin__/graphics/icons/alumina.png", icon_size = 128},
|
||||
{ icon = "__space-exploration-graphics__/graphics/icons/vulcanite-block.png", icon_size = 64, icon_mipmaps = 3, scale=0.25, shift= {-10, -10}},
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
})
|
||||
table.insert(data.raw.technology["se-processing-vulcanite"].effects,
|
||||
{type = "unlock-recipe", recipe= "alumina-smelting-vulcanite"})
|
||||
end
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
name = "tin-plate-smelting-vulcanite",
|
||||
category = "smelting",
|
||||
subgroup = "plates",
|
||||
order = "d[tin-plate]",
|
||||
energy_required = 24,
|
||||
enabled = false,
|
||||
always_show_made_in = true,
|
||||
allow_as_intermediate = false,
|
||||
ingredients = {
|
||||
{name = "alumina", amount = 8},
|
||||
{name = "se-vulcanite-block", amount = 1},
|
||||
},
|
||||
results = {
|
||||
{name = "tin-plate", amount = 12},
|
||||
},
|
||||
icons =
|
||||
{
|
||||
{ icon = "__bztin__/graphics/icons/tin-plate.png", icon_size = 128},
|
||||
{ icon = "__space-exploration-graphics__/graphics/icons/vulcanite-block.png", icon_size = 64, icon_mipmaps = 3, scale=0.25, shift= {-10, -10}},
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
})
|
||||
table.insert(data.raw.technology["se-processing-vulcanite"].effects,
|
||||
{type = "unlock-recipe", recipe= "tin-plate-smelting-vulcanite"})
|
||||
end
|
||||
78
tin-recipe-updates.lua
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
local util = require("data-util");
|
||||
|
||||
|
||||
-- Main vanilla changes
|
||||
|
||||
local organotins_quant = mods.Krastorio2 and 10 or 5
|
||||
util.replace_some_ingredient("plastic-bar", "petroleum-gas", organotins_quant, "organotins", organotins_quant)
|
||||
|
||||
util.replace_some_ingredient("pipe-to-ground", "lead-plate", 3, "solder", 3)
|
||||
util.replace_some_ingredient("pipe-to-ground", "iron-plate", 3, "solder", 3)
|
||||
util.multiply_recipe("electronic-circuit", 2)
|
||||
util.replace_some_ingredient("electronic-circuit", "copper-cable", 1, "solder", 1)
|
||||
util.replace_some_ingredient("advanced-circuit", "copper-cable", 1, "solder", 1)
|
||||
util.add_ingredient("chemical-plant", "solder", 5)
|
||||
util.add_ingredient("oil-refinery", "solder", 5)
|
||||
util.add_ingredient("assembling-machine-2", "solder", 5)
|
||||
util.add_ingredient("rocket-silo", "solder", 100)
|
||||
|
||||
-- glass
|
||||
if mods.Krastorio2 then
|
||||
util.replace_some_ingredient("glass", "sand", 1, "tin-plate", 1)
|
||||
util.add_product("glass", {type="item", name="tin-plate", amount=1, probability=0.8})
|
||||
util.set_main_product("glass", "glass")
|
||||
elseif mods["aai-industry"] then
|
||||
if mods.bzfoundry then
|
||||
if not mods.bzaluminum then
|
||||
util.multiply_recipe("glass-from-sand", 4)
|
||||
end
|
||||
util.replace_some_ingredient("glass-from-sand", "sand", 1, "tin-plate", 1)
|
||||
util.add_product("glass-from-sand", {type="item", name="tin-plate", amount=1, probability=0.8})
|
||||
util.set_main_product("glass-from-sand", "glass")
|
||||
util.set_to_founding("glass-from-sand")
|
||||
end
|
||||
end
|
||||
-- NOTE: K2 seems to reset this recipe, so moved to final fixes
|
||||
-- util.replace_some_ingredient("se-glass-vulcanite", "sand", 1, "tin-plate", 1)
|
||||
-- util.add_product("se-glass-vulcanite", {type="item", name="tin-plate", amount=1, probability=0.8})
|
||||
-- util.set_main_product("se-glass-vulcanite", "glass")
|
||||
-- end glass
|
||||
|
||||
|
||||
util.add_product("se-scrap-recycling", {name="tin-ore", amount=1, probability=0.05})
|
||||
util.add_ingredient("se-experimental-alloys-data", "tin-plate", 1)
|
||||
util.add_to_product("se-experimental-alloys-data", "se-experimental-alloys-data", 1)
|
||||
util.add_to_product("se-experimental-alloys-data", "se-scrap", 1)
|
||||
util.add_to_ingredient("se-experimental-alloys-data", "se-empty-data", 1)
|
||||
|
||||
util.multiply_recipe("lithium-sulfur-battery", 2)
|
||||
util.replace_some_ingredient("lithium-sulfur-battery", "copper-plate", 1, "tin-plate", 1)
|
||||
|
||||
|
||||
|
||||
if util.me.use_cable() then
|
||||
util.add_prerequisite("circuit-network", "tinned-cable")
|
||||
util.replace_ingredient("arithmetic-combinator", "copper-cable", "tinned-cable")
|
||||
util.replace_ingredient("decider-combinator", "copper-cable", "tinned-cable")
|
||||
util.replace_ingredient("constant-combinator", "copper-cable", "tinned-cable")
|
||||
util.replace_ingredient("power-switch", "copper-cable", "tinned-cable")
|
||||
util.replace_ingredient("programmable-speaker", "copper-cable", "tinned-cable")
|
||||
|
||||
local modded_combinators = {"timer-combinator", "counting-combinator", "random-combinator",
|
||||
"power-combinator", "max-combinator", "min-combinator", "and-gate-combinator",
|
||||
"nand-gate-combinator", "nor-gate-combinator", "not-gate-combinator", "or-gate-combinator",
|
||||
"xnor-gate-combinator", "xor-gate-combinator", "converter-combinator", "detector-combinator",
|
||||
"sensor-combinator", "railway-combinator", "color-combinator", "daytime-combinator",
|
||||
"statistic-combinator", "pollution-combinator", "emitter-combinator", "receiver-combinator",
|
||||
"crafting_combinator:crafting-combinator",
|
||||
"crafting_combinator:recipe-combinator",
|
||||
"clock-combinator",
|
||||
"power-meter-combinator",
|
||||
"ghost-scanner",
|
||||
"item-sensor",
|
||||
"bi-pollution-sensor",
|
||||
}
|
||||
for i, v in pairs(modded_combinators) do
|
||||
util.replace_ingredient(v, "copper-cable", "tinned-cable")
|
||||
end
|
||||
end
|
||||
167
tin-recipe.lua
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
-- Aluminum smelting
|
||||
|
||||
local util = require("data-util");
|
||||
local futil = require("util");
|
||||
|
||||
if (not mods["pyrawores"] and not mods["bobplates"] and not mods["angelssmelting"] ) then
|
||||
data:extend({
|
||||
{
|
||||
type = "recipe",
|
||||
name = "tin-plate",
|
||||
category = "smelting",
|
||||
subgroup = "raw-material",
|
||||
order = "d[tin-plate]",
|
||||
icons = (mods["Krastorio2"] and
|
||||
{
|
||||
{ icon = "__bztin__/graphics/icons/tin-plate.png", icon_size = 128},
|
||||
{ icon = "__bztin__/graphics/icons/tin-ore.png", icon_size = 64, scale=0.125, shift= {-8, -8}},
|
||||
} or {
|
||||
{ icon = "__bztin__/graphics/icons/tin-plate.png", icon_size = 128},
|
||||
}
|
||||
),
|
||||
normal = (mods["Krastorio2"] and
|
||||
{
|
||||
enabled = true,
|
||||
energy_required = 12,
|
||||
ingredients = {{"tin-ore", 10}},
|
||||
results = {
|
||||
{type="item", name = "tin-plate", amount=10}
|
||||
}
|
||||
} or
|
||||
{
|
||||
enabled = true,
|
||||
energy_required = 2.4,
|
||||
ingredients = {{"tin-ore", 1}},
|
||||
results = {
|
||||
{type="item", name = "tin-plate", amount=1}
|
||||
}
|
||||
}),
|
||||
expensive =
|
||||
{
|
||||
enabled = true,
|
||||
energy_required = 4.8,
|
||||
ingredients = {{"tin-ore", 1}},
|
||||
results = {
|
||||
{type="item", name = "tin-plate", amount=1},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type = "item",
|
||||
name = "tin-plate",
|
||||
icon = "__bztin__/graphics/icons/tin-plate.png",
|
||||
icon_size = 128,
|
||||
subgroup = "raw-material",
|
||||
order = "b[tin-plate]",
|
||||
stack_size = util.get_stack_size(100)
|
||||
},
|
||||
})
|
||||
|
||||
local solder_ingredeents = {{"tin-plate", 4}, {"copper-plate"}, 1}
|
||||
if mods.bzlead then
|
||||
solder_ingredeents = {{"tin-plate", 3}, {"lead-plate", 2}}
|
||||
end
|
||||
data:extend({
|
||||
{
|
||||
type = "item",
|
||||
name = "solder",
|
||||
icon = "__bztin__/graphics/icons/solder.png",
|
||||
icon_size = 128,
|
||||
subgroup = "intermediate-product",
|
||||
order = "b[acsr-cable]",
|
||||
stack_size = util.get_stack_size(100),
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "solder",
|
||||
category = "crafting",
|
||||
order = "d[acsr-cable]",
|
||||
enabled = true,
|
||||
energy_required = 1,
|
||||
ingredients = solder_ingredeents,
|
||||
results = {{"solder", 5}},
|
||||
}
|
||||
})
|
||||
|
||||
data:extend({
|
||||
{
|
||||
type = "fluid",
|
||||
name = "organotins",
|
||||
default_temperature = 25,
|
||||
heat_capacity = "0.1KJ",
|
||||
base_color = {r=0.75, g=0.65, b=0.1},
|
||||
flow_color = {r=0.7, g=1, b=0.1},
|
||||
icon = "__bztin__/graphics/icons/organotins.png",
|
||||
icon_size = 64,
|
||||
order = "a[fluid]-f[organotins]"
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "organotins",
|
||||
category = "oil-processing",
|
||||
subgroup = "fluid-recipes",
|
||||
order = "d[organotins]",
|
||||
enabled = true,
|
||||
energy_required = 5,
|
||||
ingredients = {{"tin-plate", 3}, {type="fluid", name="petroleum-gas", amount=20}},
|
||||
results = {{type="fluid", name="organotins", amount=50}},
|
||||
},
|
||||
{
|
||||
type = "technology",
|
||||
name = "organotins",
|
||||
icon = "__bztin__/graphics/technology/organotins.png",
|
||||
icon_size = 256,
|
||||
effects = {
|
||||
{ type = "unlock-recipe", recipe = "organotins" },
|
||||
},
|
||||
unit = {
|
||||
count = 50, time = 30,
|
||||
ingredients = {{"automation-science-pack", 1}, {"logistic-science-pack", 1}},
|
||||
},
|
||||
prerequisites = {"oil-processing"},
|
||||
order = "b-b",
|
||||
},
|
||||
})
|
||||
|
||||
util.add_prerequisite("plastics", "organotins")
|
||||
|
||||
if util.me.use_cable() then
|
||||
data:extend({
|
||||
{
|
||||
type = "item",
|
||||
name = "tinned-cable",
|
||||
icon = "__bztin__/graphics/icons/tinned-cable.png",
|
||||
icon_size = 64, icon_mipmaps = 4,
|
||||
subgroup = "intermediate-product",
|
||||
order = "b[tinned-cable]",
|
||||
stack_size = util.get_stack_size(100),
|
||||
},
|
||||
{
|
||||
type = "recipe",
|
||||
name = "tinned-cable",
|
||||
category = "crafting",
|
||||
order = "d[tinned-cable]",
|
||||
enabled = true,
|
||||
energy_required = 1.5,
|
||||
ingredients = {{"tin-plate", 1}, {"copper-cable", 4}},
|
||||
results = {{"tinned-cable", 4}},
|
||||
},
|
||||
{
|
||||
type = "technology",
|
||||
name = "tinned-cable",
|
||||
icon = "__bztin__/graphics/icons/tinned-cable.png",
|
||||
icon_size = 64, icon_mipmaps = 4,
|
||||
effects = {
|
||||
{ type = "unlock-recipe", recipe = "tinned-cable" },
|
||||
},
|
||||
unit = {
|
||||
count = 50, time = 15,
|
||||
ingredients = {{"automation-science-pack", 1}, {"logistic-science-pack", 1}},
|
||||
},
|
||||
prerequisites = {"logistic-science-pack"},
|
||||
order = "b-b",
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||