diff --git a/hot-metals/changelog.txt b/hot-metals/changelog.txt index 8816037..6d65d67 100644 --- a/hot-metals/changelog.txt +++ b/hot-metals/changelog.txt @@ -1,4 +1,26 @@ --------------------------------------------------------------------------------------------------- +Version: 1.2.9 +Date: 01.10.2025 + Changes: + - Add support for Any Planet Start (Fulgora) +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 +Date: 22.09.2025 + Changes: + - Add support for Glass (https://mods.factorio.com/mod/Glass) +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 22.08.2025 + Bug Fixes: + - Simplify weight calculation to prevent infinite recursion (https://mods.factorio.com/mod/hot-metals/discussion/68a3a137a86e2ca3d73388fe) + - Always show hot variants in filter menus (https://mods.factorio.com/mod/hot-metals/discussion/685ac28c1436373189fc0bff) +--------------------------------------------------------------------------------------------------- +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: diff --git a/hot-metals/compatibility/Glass.lua b/hot-metals/compatibility/Glass.lua new file mode 100644 index 0000000..0453bed --- /dev/null +++ b/hot-metals/compatibility/Glass.lua @@ -0,0 +1 @@ +table.insert(HotMetals.items, "glass-plate") \ No newline at end of file diff --git a/hot-metals/compatibility/any-planet-start.lua b/hot-metals/compatibility/any-planet-start.lua new file mode 100644 index 0000000..ac2ce12 --- /dev/null +++ b/hot-metals/compatibility/any-planet-start.lua @@ -0,0 +1,10 @@ +local planet = settings.startup["aps-planet"].value + +if planet == "fulgora" then + table.merge(HotMetals.skipTechUnlocksFor, { + "low-density-structure", + "steel-plate", + "plastic-bar", + "concrete" + }) +end \ No newline at end of file diff --git a/hot-metals/compatibility/data.lua b/hot-metals/compatibility/data.lua index c6bd480..f8066a2 100644 --- a/hot-metals/compatibility/data.lua +++ b/hot-metals/compatibility/data.lua @@ -1,6 +1,8 @@ local modList = { "space-age", "aai-industry", + "any-planet-start", + "Glass", "planet-muluna" } diff --git a/hot-metals/data-final-fixes.lua b/hot-metals/data-final-fixes.lua new file mode 100644 index 0000000..5a61b06 --- /dev/null +++ b/hot-metals/data-final-fixes.lua @@ -0,0 +1 @@ +require("prototypes/hot-metals-final") \ No newline at end of file diff --git a/hot-metals/graphics/icons/hot-glass-plate.png b/hot-metals/graphics/icons/hot-glass-plate.png new file mode 100644 index 0000000..8d8d944 Binary files /dev/null and b/hot-metals/graphics/icons/hot-glass-plate.png differ diff --git a/hot-metals/info.json b/hot-metals/info.json index 1678653..3a715b3 100644 --- a/hot-metals/info.json +++ b/hot-metals/info.json @@ -1,10 +1,10 @@ { "name": "hot-metals", - "version": "1.2.5", + "version": "1.2.9", "title": "Hot metals", "description": "A furnace doesn't just output cold usable results. You need to wait for them to cool down.", "author": "cackling fiend", - "homepage": "", + "homepage": "https://discord.gg/ufvFUJtVwk", "factorio_version": "2.0", "dependencies": [ "base", diff --git a/hot-metals/locale/pl/strings.cfg b/hot-metals/locale/pl/strings.cfg new file mode 100644 index 0000000..01c6fa9 --- /dev/null +++ b/hot-metals/locale/pl/strings.cfg @@ -0,0 +1,12 @@ +[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ę. \ No newline at end of file diff --git a/hot-metals/prototypes/hot-metals-final.lua b/hot-metals/prototypes/hot-metals-final.lua new file mode 100644 index 0000000..7b42417 --- /dev/null +++ b/hot-metals/prototypes/hot-metals-final.lua @@ -0,0 +1,9 @@ +-- 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 \ No newline at end of file diff --git a/hot-metals/prototypes/hot-metals.lua b/hot-metals/prototypes/hot-metals.lua index d6ab1a1..4c7bec5 100644 --- a/hot-metals/prototypes/hot-metals.lua +++ b/hot-metals/prototypes/hot-metals.lua @@ -1,52 +1,5 @@ local defaultSpoilTicks = settings.startup["hot-metals-time"].value * 60 ----@param name data.ItemID ----@return data.ItemPrototype? -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 @@ -58,13 +11,13 @@ function createHotVariant(config) iconFolder = config.iconFolder or iconFolder end local item = data.raw.item[itemName] - item.weight = getWeight(item) + item.weight = item.weight or 10000 -- Create new item local hotItem = table.deepcopy(data.raw.item[itemName]) hotItem.name = "hot-" .. itemName hotItem.localised_name = { "", { "item-name.hot" }, " ", { "item-name." .. itemName } } - if (config.icons) then + if config.icons then hotItem.icons = config.icons else hotItem.icon = iconFolder .. "hot-" .. itemName .. ".png" @@ -74,8 +27,15 @@ function createHotVariant(config) hotItem.weight = item.weight hotItem.spoil_result = itemName hotItem.spoil_ticks = spoilTicks + hotItem.flags = hotItem.flags or {} + if not table.contains(hotItem.flags, "always-show") then + table.insert(hotItem.flags, "always-show") + end + data:extend({ hotItem }) + item.hot_item = hotItem.name + -- Change recipes for _, recipe in pairs(data.raw.recipe) do if contains(HotMetals.craftingCategories, recipe.category) then @@ -101,13 +61,6 @@ function createHotVariant(config) 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 -- Checks if a table contains a certain value diff --git a/sources/hot-glass-plate.afphoto b/sources/hot-glass-plate.afphoto new file mode 100644 index 0000000..3c61c64 Binary files /dev/null and b/sources/hot-glass-plate.afphoto differ