Compare commits

..

No commits in common. "master" and "1.2.0" have entirely different histories.

19 changed files with 61 additions and 201 deletions

View file

@ -1,40 +1,3 @@
---------------------------------------------------------------------------------------------------
Version: 1.2.6
Date: 18.04.2025
Changes:
- Add polish translation (I forgot who did it :-( )
- Move technology changes to final fixes stage
---------------------------------------------------------------------------------------------------
Version: 1.2.5
Date: 04.02.2025
Changes:
- Add Low density structure again after Wube fixed a bug (https://forums.factorio.com/123081)
- Add support for Muluna (Aluminum plate)
---------------------------------------------------------------------------------------------------
Version: 1.2.4
Date: 03.02.2025
Bug Fixes:
- Fix item weights (many items weights where way off)
---------------------------------------------------------------------------------------------------
Version: 1.2.3
Date: 03.02.2025
Changes:
- Use non-hot icon variants for the recipes
Bug Fixes:
- Properly load cf-lib util
---------------------------------------------------------------------------------------------------
Version: 1.2.2
Date: 02.02.2025
Changes:
- Recipes always output "fresh" hot metals (https://mods.factorio.com/mod/hot-metals/discussion/6775293c1c4d7b0e4bba8648)
- Recipe code now also works if the main result is not the first result in the results list
---------------------------------------------------------------------------------------------------
Version: 1.2.1
Date: 09.01.2025
Changes:
- Add hot stone bricks and hot concrete (https://mods.factorio.com/mod/hot-metals/discussion/677fdef8d37eef8332fa6c2f)
- Biochambers don't generate hot plastic (https://mods.factorio.com/mod/hot-metals/discussion/675af47f1fba71716b2b7f7f)
---------------------------------------------------------------------------------------------------
Version: 1.2.0 Version: 1.2.0
Date: 01.01.2025 Date: 01.01.2025
Changes: Changes:

View file

@ -1,7 +1,6 @@
local modList = { local modList = {
"space-age", "space-age",
"aai-industry", "aai-industry"
"planet-muluna"
} }
for _, mod in pairs(modList) do for _, mod in pairs(modList) do

View file

@ -1 +0,0 @@
table.insert(HotMetals.items, "aluminum-plate")

View file

@ -5,7 +5,8 @@ table.insert(HotMetals.items, "iron-stick")
table.insert(HotMetals.items, "pipe") table.insert(HotMetals.items, "pipe")
table.insert(HotMetals.items, "pipe-to-ground") table.insert(HotMetals.items, "pipe-to-ground")
table.insert(HotMetals.items, "tungsten-plate") table.insert(HotMetals.items, "tungsten-plate")
table.insert(HotMetals.items, "low-density-structure") -- Disabled because of https://forums.factorio.com/viewtopic.php?f=7&t=123081
--table.insert(HotMetals.items, "low-density-structure")
table.insert(HotMetals.craftingCategories, "metallurgy") table.insert(HotMetals.craftingCategories, "metallurgy")
table.insert(HotMetals.craftingCategories, "crafting-with-fluid-or-metallurgy") table.insert(HotMetals.craftingCategories, "crafting-with-fluid-or-metallurgy")
@ -19,8 +20,5 @@ table.insert(HotMetals.skipTechUnlocksFor, "pipe-to-ground")
if settings.startup["hot-metals-plastic"].value then if settings.startup["hot-metals-plastic"].value then
table.insert(HotMetals.craftingCategories, "chemistry-or-cryogenics") table.insert(HotMetals.craftingCategories, "chemistry-or-cryogenics")
end table.insert(HotMetals.craftingCategories, "organic")
if settings.startup["hot-metals-bricks"].value then
table.insert(HotMetals.items, "concrete")
end end

View file

@ -1 +0,0 @@
require("prototypes/hot-metals-final")

View file

@ -2,7 +2,7 @@ HotMetals = {
items = { items = {
"copper-plate", "copper-plate",
"iron-plate", "iron-plate",
"steel-plate" "steel-plate",
}, },
craftingCategories = { craftingCategories = {
"smelting" "smelting"
@ -10,8 +10,6 @@ HotMetals = {
skipTechUnlocksFor = {} skipTechUnlocksFor = {}
} }
require("__cf-lib__/util")
if settings.startup["hot-metals-plastic"].value then if settings.startup["hot-metals-plastic"].value then
table.insert(HotMetals.items, "plastic-bar") table.insert(HotMetals.items, "plastic-bar")
if not mods["space-age"] then -- Space age uses other crafting categories if not mods["space-age"] then -- Space age uses other crafting categories
@ -19,8 +17,4 @@ if settings.startup["hot-metals-plastic"].value then
end end
end end
if settings.startup["hot-metals-bricks"].value then
table.insert(HotMetals.items, "stone-brick")
end
require("compatibility.data") require("compatibility.data")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,14 +1,13 @@
{ {
"name": "hot-metals", "name": "hot-metals",
"version": "1.2.6", "version": "1.2.0",
"title": "Hot metals", "title": "Hot metals",
"description": "A furnace doesn't just output cold usable results. You need to wait for them to cool down.", "description": "A furnace doesn't just output cold usable results. You need to wait for them to cool down.",
"author": "cackling fiend", "author": "cackling fiend",
"homepage": "", "homepage": "",
"factorio_version": "2.0", "factorio_version": "2.0",
"dependencies": [ "dependencies": [
"base", "base"
"cf-lib >= 0.0.2"
], ],
"spoiling_required": true "spoiling_required": true
} }

View file

@ -4,9 +4,7 @@ hot=Hot
[mod-setting-name] [mod-setting-name]
hot-metals-time=Cooldown time hot-metals-time=Cooldown time
hot-metals-plastic=Add hot plastic hot-metals-plastic=Add hot plastic
hot-metals-bricks=Add hot stone bricks and concrete
[mod-setting-description] [mod-setting-description]
hot-metals-time=The time in seconds for a hot item to cool down. hot-metals-time=The time in seconds for a hot item to cool down.
hot-metals-plastic=Although the temperature of hot plastic is way lower compared to metals, you might want to have a hot variant anyway. hot-metals-plastic=Although the temperature of hot plastic is way lower compared to metals, you might want to have a hot variant anyway.
hot-metals-bricks=Stone bricks and concrete are not included by default. If you like to play with hot variants, you can enable this option.

View file

@ -1,12 +0,0 @@
[item-name]
hot=Hot
[mod-setting-name]
hot-metals-time=Czas stygnięcia
hot-metals-plastic=Dodaj gorący plastik
hot-metals-bricks=dodaj gorące kamienne cegły i beton
[mod-setting-description]
hot-metals-time=Czas w sekundach, jaki jest potrzebny, aby gorący przedmiot ostygł.
hot-metals-plastic=Chociaż temperatura gorącego plastiku jest znacznie niższa w porównaniu do metali, możesz chcieć mieć jego gorącą wersję.
hot-metals-bricks=Kamienne cegły i beton nie są domyślnie uwzględnione. Jeśli lubisz grać z gorącymi wariantami, możesz włączyć tę opcję.

View file

@ -1,9 +0,0 @@
-- Change technology triggers
for _, tech in pairs(data.raw.technology) do
if tech.research_trigger then
local item = data.raw.item[tech.research_trigger.item]
if item and item.hot_item and not contains(HotMetals.skipTechUnlocksFor, item.name) then
tech.research_trigger.item = item.hot_item
end
end
end

View file

@ -1,107 +1,46 @@
local defaultSpoilTicks = settings.startup["hot-metals-time"].value * 60 local defaultSpoilTicks = settings.startup["hot-metals-time"].value * 60
---@param name data.ItemID function createHotVariant(item)
---@return data.ItemPrototype? local itemName = item
function getItem(name)
if data.raw.item[name] then
return data.raw.item[name] --[[@as data.ItemPrototype]]
end
for item_type in pairs(defines.prototypes.item) do
local type_lookup = data.raw[item_type]
if type_lookup and type_lookup[name] then
return type_lookup[name] --[[@as data.ItemPrototype]]
end
end
end
---@param table item
---@return number
function getWeight(item)
if type(item) == "string" then
item = getItem(item)
end
if item.weight then return item.weight end
local factor = item.ingredient_to_weight_coefficient or 0.5
for _, recipe in pairs(data.raw.recipe) do
if recipe.results == nil then
goto continue
end
local function isResultMatch(result)
return result.name == item.name
end
local results = table.filter(recipe.results, isResultMatch)
if #results > 0 then
for _, ingredient in pairs(recipe.ingredients) do
if ingredient.type == "item" then
local weight = data.raw.item[ingredient.name].weight or getWeight(data.raw.item[ingredient.name])
local amount = ingredient.amount
if ingredient.amount_min and ingredient.amount_max then
amount = (ingredient.amount_min + ingredient.amount_max) / 2
end
return amount * weight * factor
end
end
end
::continue::
end
return 100
end
function createHotVariant(config)
local itemName = config
local spoilTicks = defaultSpoilTicks local spoilTicks = defaultSpoilTicks
local iconFolder = "__hot-metals__/graphics/icons/" local iconFolder = "__hot-metals__/graphics/icons/"
if type(config) == "table" then if type(item) == "table" then
itemName = config.name itemName = item.name
spoilTicks = config.spoilTicks or spoilTicks spoilTicks = item.spoilTicks or spoilTicks
iconFolder = config.iconFolder or iconFolder iconFolder = item.iconFolder or iconFolder
end end
local item = data.raw.item[itemName]
item.weight = getWeight(item)
-- Create new item -- Create new item
local hotItem = table.deepcopy(data.raw.item[itemName]) local hotItem = table.deepcopy(data.raw.item[itemName])
hotItem.name = "hot-" .. itemName hotItem.name = "hot-" .. itemName
hotItem.localised_name = { "", { "item-name.hot" }, " ", { "item-name." .. itemName } } hotItem.localised_name = { "", { "item-name.hot" }, " ", { "item-name." .. itemName } }
if (config.icons) then if (item.icons) then
hotItem.icons = config.icons hotItem.icons = item.icons
else else
hotItem.icon = iconFolder .. "hot-" .. itemName .. ".png" hotItem.icon = iconFolder .. "hot-" .. itemName .. ".png"
end end
hotItem.order = hotItem.order .. "-hot" hotItem.order = hotItem.order .. "-hot"
hotItem.ingredient_to_weight_coefficient = item.ingredient_to_weight_coefficient
hotItem.weight = item.weight
hotItem.spoil_result = itemName hotItem.spoil_result = itemName
hotItem.spoil_ticks = spoilTicks hotItem.spoil_ticks = spoilTicks
data:extend({ hotItem }) data:extend({ hotItem })
item.hot_item = hotItem.name
-- Change recipes -- Change recipes
for _, recipe in pairs(data.raw.recipe) do for _, recipe in pairs(data.raw.recipe) do
if contains(HotMetals.craftingCategories, recipe.category) then if contains(HotMetals.craftingCategories, recipe.category) and recipe.results[1].name == itemName then
local function isResultMatch(result) recipe.results[1].name = hotItem.name
return result.name == itemName
end
local results = table.filter(recipe.results, isResultMatch)
if #results > 0 then
-- Change regular recipe to be the "hot" recipe
for _, result in pairs(results) do
result.name = hotItem.name
end
recipe.localised_name = { "item-name." .. itemName } recipe.localised_name = { "item-name." .. itemName }
recipe.icon = recipe.icon or item.icon
recipe.icon_size = recipe.icon_size or item.icon_size
recipe.icons = recipe.icons or item.icons
if recipe.main_product == itemName then if recipe.main_product == itemName then
recipe.main_product = hotItem.name recipe.main_product = hotItem.name
end end
recipe.preserve_products_in_machine_output = true
recipe.result_is_always_fresh = true
end end
end end
-- Change technology triggers
for _, tech in pairs(data.raw.technology) do
if tech.research_trigger and tech.research_trigger.item == itemName and not contains(HotMetals.skipTechUnlocksFor, itemName) then
tech.research_trigger.item = hotItem.name
end
end end
end end

View file

@ -12,12 +12,5 @@ data:extend({
setting_type = "startup", setting_type = "startup",
default_value = false, default_value = false,
order = "b" order = "b"
},
{
type = "bool-setting",
name = "hot-metals-bricks",
setting_type = "startup",
default_value = false,
order = "c"
} }
}) })

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.