From 4e0f6741ccb6e1b8dd1fd2abe9eef7308186fa1d Mon Sep 17 00:00:00 2001 From: Brevven Date: Wed, 13 Jul 2022 00:09:16 -0700 Subject: [PATCH] adamo's gas boiler --- gas-boiler/changelog.txt | 55 + gas-boiler/data-updates.lua | 4 + gas-boiler/data.lua | 182 + gas-boiler/factsheet.lua | 3095 +++++++++++++++++ .../entity/assembling-machine-1-pipe-E.png | Bin 0 -> 1872 bytes .../entity/assembling-machine-1-pipe-N.png | Bin 0 -> 1415 bytes .../entity/assembling-machine-1-pipe-S.png | Bin 0 -> 3109 bytes .../entity/assembling-machine-1-pipe-W.png | Bin 0 -> 1800 bytes .../graphics/entity/gas-boiler-E-light.png | Bin 0 -> 7676 bytes .../graphics/entity/gas-boiler-N-light.png | Bin 0 -> 7382 bytes .../graphics/entity/gas-boiler-S-light.png | Bin 0 -> 5665 bytes .../graphics/entity/gas-boiler-W-light.png | Bin 0 -> 7457 bytes .../entity/hr-assembling-machine-1-pipe-E.png | Bin 0 -> 5930 bytes .../entity/hr-assembling-machine-1-pipe-N.png | Bin 0 -> 4380 bytes .../entity/hr-assembling-machine-1-pipe-S.png | Bin 0 -> 10426 bytes .../entity/hr-assembling-machine-1-pipe-W.png | Bin 0 -> 5557 bytes .../graphics/entity/hr-gas-boiler-E-light.png | Bin 0 -> 23875 bytes .../graphics/entity/hr-gas-boiler-N-light.png | Bin 0 -> 23000 bytes .../graphics/entity/hr-gas-boiler-S-light.png | Bin 0 -> 16669 bytes .../graphics/entity/hr-gas-boiler-W-light.png | Bin 0 -> 23398 bytes gas-boiler/graphics/icons/gas-boiler.png | Bin 0 -> 2904 bytes gas-boiler/info.json | 11 + gas-boiler/locale/en/base.cfg | 13 + gas-boiler/locale/ru/base.cfg | 13 + gas-boiler/migrations/absorb_boilers.json | 18 + gas-boiler/settings.lua | 7 + 26 files changed, 3398 insertions(+) create mode 100644 gas-boiler/changelog.txt create mode 100644 gas-boiler/data-updates.lua create mode 100644 gas-boiler/data.lua create mode 100644 gas-boiler/factsheet.lua create mode 100644 gas-boiler/graphics/entity/assembling-machine-1-pipe-E.png create mode 100644 gas-boiler/graphics/entity/assembling-machine-1-pipe-N.png create mode 100644 gas-boiler/graphics/entity/assembling-machine-1-pipe-S.png create mode 100644 gas-boiler/graphics/entity/assembling-machine-1-pipe-W.png create mode 100644 gas-boiler/graphics/entity/gas-boiler-E-light.png create mode 100644 gas-boiler/graphics/entity/gas-boiler-N-light.png create mode 100644 gas-boiler/graphics/entity/gas-boiler-S-light.png create mode 100644 gas-boiler/graphics/entity/gas-boiler-W-light.png create mode 100644 gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-E.png create mode 100644 gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-N.png create mode 100644 gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-S.png create mode 100644 gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-W.png create mode 100644 gas-boiler/graphics/entity/hr-gas-boiler-E-light.png create mode 100644 gas-boiler/graphics/entity/hr-gas-boiler-N-light.png create mode 100644 gas-boiler/graphics/entity/hr-gas-boiler-S-light.png create mode 100644 gas-boiler/graphics/entity/hr-gas-boiler-W-light.png create mode 100644 gas-boiler/graphics/icons/gas-boiler.png create mode 100644 gas-boiler/info.json create mode 100644 gas-boiler/locale/en/base.cfg create mode 100644 gas-boiler/locale/ru/base.cfg create mode 100644 gas-boiler/migrations/absorb_boilers.json create mode 100644 gas-boiler/settings.lua diff --git a/gas-boiler/changelog.txt b/gas-boiler/changelog.txt new file mode 100644 index 0000000..5adb839 --- /dev/null +++ b/gas-boiler/changelog.txt @@ -0,0 +1,55 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2020-11-15 + + Changes: + - Incremented to version 1.0. + + Entities: + - Reduced fuel input fluid box to height 1. + +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 2020-02-03 + + Changes: + - Incremented to version 18. + - Copied old assembler 1 graphics from 0.17 + because they match the boiler's color. + +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 +Date: 2019-11-26 + + Locale: + - Added Russian translations provided by Va7ya. + +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 +Date: 2019-09-30 + + Graphics: + - Increased secondary draw orders on south- + facing fuel connection picture so it will + cover the working_light picture. I plan + to make a new working_light picture in + the long run. + + Fixes: + - Fixed changelog. + +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 +Date: 2019-09-05 + + Fixes: + - Fixed version number. + +--------------------------------------------------------------------------------------------------- +Version: 0.0.1 +Date: 2019-09-05 + + Prototypes: + - Created new gas-boiler prototype to replace + multiple fluid-powered boiler entities in my + other mods. diff --git a/gas-boiler/data-updates.lua b/gas-boiler/data-updates.lua new file mode 100644 index 0000000..36e0e53 --- /dev/null +++ b/gas-boiler/data-updates.lua @@ -0,0 +1,4 @@ +require("factsheet") +if settings.startup["vanilla-fluid-fuel-values"].value then + apply_vanilla_fluid_fuel_stats() +end \ No newline at end of file diff --git a/gas-boiler/data.lua b/gas-boiler/data.lua new file mode 100644 index 0000000..ea03dd1 --- /dev/null +++ b/gas-boiler/data.lua @@ -0,0 +1,182 @@ +require("factsheet") +gf_boiler_entity = util.table.deepcopy(data.raw.boiler.boiler) +gf_boiler_entity.name = "gas-boiler" +gf_boiler_entity.icon = "__gas-boiler__/graphics/icons/gas-boiler.png" +gf_boiler_entity.icon_size = 32 +gf_boiler_entity.minable.result = "gas-boiler" +gf_boiler_entity.fast_replaceable_group = "boiler" +gf_boiler_entity.energy_source = { + type = "fluid", + fluid_box = { + base_area = 1, + height = 1, + base_level = -1, + pipe_covers = pipecoverspictures(), + pipe_picture = { + north = { + filename = "__gas-boiler__/graphics/entity/" + .."assembling-machine-1-pipe-N.png", + priority = "extra-high", + width = 35, + height = 18, + shift = util.by_pixel(2.5, 14), + hr_version = { + filename = "__gas-boiler__/graphics/entity/" + .."hr-assembling-machine-1-pipe-N.png", + priority = "extra-high", + width = 71, + height = 38, + shift = util.by_pixel(2.25, 13.5), + scale = 0.5 + } + }, + east = { + filename = "__gas-boiler__/graphics/entity/" + .."assembling-machine-1-pipe-E.png", + priority = "extra-high", + width = 20, + height = 38, + shift = util.by_pixel(-25, 1), + hr_version = { + filename = "__gas-boiler__/graphics/entity/" + .."hr-assembling-machine-1-pipe-E.png", + priority = "extra-high", + width = 42, + height = 76, + shift = util.by_pixel(-24.5, 1), + scale = 0.5 + } + }, + south = { + filename = "__gas-boiler__/graphics/entity/" + .."assembling-machine-1-pipe-S.png", + priority = "extra-high", + width = 44, + height = 31, + shift = util.by_pixel(0, -31.5), + hr_version = { + filename = "__gas-boiler__/graphics/entity/" + .."hr-assembling-machine-1-pipe-S.png", + priority = "extra-high", + width = 88, + height = 61, + shift = util.by_pixel(0, -31.25), + scale = 0.5 + } + }, + west = { + filename = "__gas-boiler__/graphics/entity/" + .."assembling-machine-1-pipe-W.png", + priority = "extra-high", + width = 19, + height = 37, + shift = util.by_pixel(25.5, 1.5), + hr_version = { + filename = "__gas-boiler__/graphics/entity/" + .."hr-assembling-machine-1-pipe-W.png", + priority = "extra-high", + width = 39, + height = 73, + shift = util.by_pixel(25.75, 1.25), + scale = 0.5 + } + } + }, + pipe_connections = { + {type = "input", position = {0, 1.5}}, + }, + secondary_draw_orders = { + south = 32, + north = -1, + east = -1, + west = -1, + } + }, + burns_fluid = true, + scale_fluid_usage = true, + emissions_per_minute = 30, + smoke = {{ + name = "smoke", + north_position = util.by_pixel(-38, -47.5), + south_position = util.by_pixel(38.5, -32), + east_position = util.by_pixel(20, -70), + west_position = util.by_pixel(-19, -8.5), + frequency = 15, + starting_vertical_speed = 0.3, + starting_frame_deviation = 0 + }}, + light_flicker = { + color = colors.gas_fire_glow, + minimum_light_size = 0.1, + light_intensity_to_size_coefficient = 1 + } +} +gf_boiler_entity.fire_flicker_enabled = false +gf_boiler_entity.fire_glow_flicker_enabled = false +gf_boiler_entity.fire = {} +gf_boiler_entity.fire_glow.north.filename = + "__gas-boiler__/graphics/entity/".. + "gas-boiler-N-light.png" +gf_boiler_entity.fire_glow.south.filename = + "__gas-boiler__/graphics/entity/".. + "gas-boiler-S-light.png" +gf_boiler_entity.fire_glow.east.filename = + "__gas-boiler__/graphics/entity/".. + "gas-boiler-E-light.png" +gf_boiler_entity.fire_glow.west.filename = + "__gas-boiler__/graphics/entity/".. + "gas-boiler-W-light.png" +gf_boiler_entity.fire_glow.north.hr_version.filename = + "__gas-boiler__/graphics/entity/".. + "hr-gas-boiler-N-light.png" +gf_boiler_entity.fire_glow.south.hr_version.filename = + "__gas-boiler__/graphics/entity/".. + "hr-gas-boiler-S-light.png" +gf_boiler_entity.fire_glow.east.hr_version.filename = + "__gas-boiler__/graphics/entity/".. + "hr-gas-boiler-E-light.png" +gf_boiler_entity.fire_glow.west.hr_version.filename = + "__gas-boiler__/graphics/entity/".. + "hr-gas-boiler-W-light.png" +gf_boiler_entity.fire_glow.north.apply_runtime_tint = true +gf_boiler_entity.fire_glow.south.apply_runtime_tint = true +gf_boiler_entity.fire_glow.east.apply_runtime_tint = true +gf_boiler_entity.fire_glow.west.apply_runtime_tint = true +gf_boiler_entity.fire_glow.north.tint={r=1,g=0.6,b=0.6,a=0.4} +gf_boiler_entity.fire_glow.south.tint={r=1,g=0.6,b=0.6,a=0.4} +gf_boiler_entity.fire_glow.east.tint={r=1,g=0.6,b=0.6,a=0.4} +gf_boiler_entity.fire_glow.west.tint={r=1,g=0.6,b=0.6,a=0.4} +gf_boiler_entity.fire_glow.north.blend_mode = "additive-soft" +gf_boiler_entity.fire_glow.south.blend_mode = "additive-soft" +gf_boiler_entity.fire_glow.east.blend_mode = "additive-soft" +gf_boiler_entity.fire_glow.west.blend_mode = "additive-soft" + + +gf_boiler_item = util.table.deepcopy(data.raw.item.boiler) +gf_boiler_item.name = "gas-boiler" +gf_boiler_item.icon_size = 32 +gf_boiler_item.icon = "__gas-boiler__/graphics/icons/gas-boiler.png" +gf_boiler_item.order = "b[steam-power]-b[gas-boiler]" +gf_boiler_item.place_result = "gas-boiler" + +gf_boiler_recipe = { + type = "recipe", + name = "gas-boiler", + enabled = false, + ingredients = {{ + "boiler",1 + },{ + "pump",1 + }}, + result = "gas-boiler" +} + +data:extend({ + gf_boiler_item, + gf_boiler_recipe, + gf_boiler_entity +}) +add_recipe_to_tech( + "fluid-handling", + "gas-boiler" +) \ No newline at end of file diff --git a/gas-boiler/factsheet.lua b/gas-boiler/factsheet.lua new file mode 100644 index 0000000..37a1a60 --- /dev/null +++ b/gas-boiler/factsheet.lua @@ -0,0 +1,3095 @@ +-- Freeware modding by Adamo +require("util") + +-- Basic utils +adamo = { + opts = { + logging = false, + debugging = false + }, + logfile = function(str) + if adamo.opts.log and string_or_bust(str) + and type(game) == 'table' + and type(game.write_file) == 'function' then + game.write_file("adamo.log",str,true) + end + end, + debugfile = function(str) + if adamo.opts.debugging and string_or_bust(str) + and type(game) == 'table' + and type(game.write_file) == 'function' then + game.write_file("adamo.debug",str,true) + end + end, + log = function(str) + if adamo.opts.log and string_or_bust(str) then + log(str) + end + end, + debug = function(str) + if adamo.opts.debugging and string_or_bust(str) then + log("[DEBUG] "..tostring(str)) + end + end +} + +-- Power production efficiencies. +-- Temps determined to maintain blueprint compatibility. +-- Applied by my physics mod. +boiler_eff = 0.85 +gen_eff = 0.5 +furnace_eff = 0.65 +reactor_eff = 0.80 +chem_temp_max = 315 +nuke_temp_max = 990 +reactor_consump_mult = 2.01 +chem_fuel_quotient = boiler_eff*gen_eff +nuke_fuel_quotient = reactor_eff*gen_eff +-- Based on theoretical max throughput +-- of a 3 meter^2 solar panel (5.1kW). +solar_panel_eff = 1/10 -- should be 6 kW +accumulator_power_quotient = 1/solar_panel_eff + +adamo.fuel = { + factors = { + ["topower"] = 1/60, + ["coal"] = 3, + ["light-oil"] = 10, + ["heavy-oil"] = 20, + ["petroleum-gas"] = 20, + ["crude-oil"] = 30, + ["methane"] = 50, + }, + values = { + ["sulfur"] = "600kJ" + } +} +adamo.fuel.factors["syngas"] = adamo.fuel.factors["methane"]*2 + +-- For backward compatibility. +fuelfactors = { + topower = adamo.fuel.factors.topower +} +fuelfactors["coal"] = adamo.fuel.factors["coal"] +fuelfactors["light-oil"] = adamo.fuel.factors["light-oil"] +fuelfactors["heavy-oil"] = adamo.fuel.factors["heavy-oil"] +fuelfactors["petroleum-gas"] = adamo.fuel.factors["petroleum-gas"] +fuelfactors["crude-oil"] = adamo.fuel.factors["crude-oil"] +fuelfactors["methane"] = adamo.fuel.factors["methane"] +fuelfactors["syngas"] = adamo.fuel.factors["syngas"] + +fuelvalues = { + sulfur = adamo.fuel.values.sulfur +} + +-- Chemical constants +adamo.chem = { + mult = { + fluid = 10 + }, + fluxables = { + ["iron-ore"] = "iron-plate", + ["copper-ore"] = "copper-plate" + }, + ratio = { + lime_per_clinker = 1, + gypsum_per_clinker = 1/100, + fluorite_per_clinker = 1/100, + clinker_per_cement = 10, + gypsum_per_cement = 1, + stone_per_concrete = 1, + cement_per_concrete = 1/10, + quartz_per_concrete = 1/5, + quartz_per_redchip = 3/5, + fluorite_per_HF = 1/20, + lime_per_battery = 1, + HF_per_battery = 10, + sulfur_per_flask = 1, + redchip_per_flask = 3, + } +} +adamo.chem.ratio.lime_per_cement = + adamo.chem.ratio.lime_per_clinker + * adamo.chem.ratio.clinker_per_cement +adamo.chem.ratio.lime_per_concrete = + adamo.chem.ratio.lime_per_cement + * adamo.chem.ratio.cement_per_concrete +adamo.chem.ratio.gypsum_per_lime = + adamo.chem.ratio.gypsum_per_cement + / adamo.chem.ratio.lime_per_cement +adamo.chem.ratio.quart_per_lime = + adamo.chem.ratio.quartz_per_concrete + / adamo.chem.ratio.lime_per_concrete +adamo.chem.ratio.fluorite_per_lime = + adamo.chem.ratio.fluorite_per_HF + * adamo.chem.ratio.HF_per_battery + / adamo.chem.ratio.lime_per_battery +adamo.chem.ratio.quartz_per_sulfur = + adamo.chem.ratio.quartz_per_redchip + * adamo.chem.ratio.redchip_per_flask + / adamo.chem.ratio.sulfur_per_flask + + +adamo.geo = { + ore = {}, + abundance = { + calcite = 0.6, + quartz, + gypsum, + sulfur, + fluorite, + coal, + } +} + + +-- values must be between 0 and 1 +local battery_share = 0.05 +local blue_flask_share = 0.1 +local coal_recovery = 0.075 +adamo.geo.abundance.fluorite = battery_share + *adamo.geo.abundance.calcite + *adamo.chem.ratio.fluorite_per_lime +adamo.geo.abundance.gypsum = adamo.geo.abundance.calcite + *adamo.chem.ratio.gypsum_per_lime +adamo.geo.abundance.quartz = adamo.geo.abundance.calcite + *adamo.chem.ratio.quart_per_lime +adamo.geo.abundance.sulfur = adamo.geo.abundance.fluorite + + ( + blue_flask_share + *adamo.geo.abundance.quartz + /adamo.chem.ratio.quartz_per_sulfur + ) +if adamo.geo.abundance.sulfur < 0 then + adamo.geo.abundance.sulfur = 0 +end +local sum = adamo.geo.abundance.calcite + +adamo.geo.abundance.fluorite + +adamo.geo.abundance.gypsum + +adamo.geo.abundance.quartz + +adamo.geo.abundance.sulfur +adamo.geo.abundance.coal = coal_recovery * (1 - sum) + + + +local quartz_recovery = 1/5 +local recover_ratio = 1/2 +local ore_mineral_norm = recover_ratio * 1 / ( + adamo.geo.abundance.fluorite + + adamo.geo.abundance.quartz + + adamo.geo.abundance.sulfur + ) + +adamo.geo.ore.mineral_results = { + ["adamo-chemical-fluorite"] = adamo.geo.abundance.fluorite + * ore_mineral_norm, + ["adamo-chemical-quartz"] = adamo.geo.abundance.quartz + * ore_mineral_norm, + ["SiSi-quartz"] = quartz_recovery*adamo.geo.abundance.quartz + * ore_mineral_norm, + ["sulfur"] = adamo.geo.abundance.sulfur + * ore_mineral_norm, + ["coal"] = adamo.geo.abundance.coal + * ore_mineral_norm, +} + +adamo.geo.ore.impurity_ratio = 1/20 + +-- Physical quantities +physical_units = { "J", "W", "C" } +metrics = { "K","M","G","T","P","E","Z","Y" } + +get_phynum_val = function(phynum) + local phynum,val = phynum_or_bust(phynum) + return val +end + +phynum_or_bust = function(phynum) + if type(phynum) == 'string' then + local val = phynum:match "[0-9%.]+" + local unit = phynum:match "%a+" + if val and unit then return val..unit,val,unit end + end + return nil,nil,nil +end + +energy_or_bust = function(energy) + if type(energy) == 'number' then + return energy..'J',energy,'J' + end + return phynum_or_bust(energy) +end + +power_or_bust = function(power) + if type(power) == 'number' then + return power..'W',power,'W' + end + return phynum_or_bust(power) +end + +energy_to_power = function(energy) + return energy_mult(energy,fuelfactors.topower) +end + +power_to_energy = function(energy) + return energy_div(energy,fuelfactors.topower) +end + +energy_mult = function(energy,mult) + local energy = energy_or_bust(energy) + return phynum_mult(energy,mult) +end + +energy_div = function(energy,div) + local energy = energy_or_bust(energy) + return phynum_div(energy,div) +end + +phynum_mult = function(phynum,mult) + local e,val,unit = phynum_or_bust(phynum) + if val and unit then e = (val*mult)..unit end + return e +end + +phynum_div = function(phynum,div) + local e,val,unit = phynum_or_bust(phynum) + if val and unit then e = (val/div)..unit end + return e +end + +add_prereq_to_tech = function(tech,prereq_name) + local tech = tech_or_bust(tech) + local prereq_name = string_or_bust(prereq_name) + if not tech or not prereq_name then return nil end + return add_string_to_list(tech.prerequisites,prereq_name) +end + +add_prereqs_to_tech = function (tech,prereq_table) + local prereq_table = table_or_bust(prereq_table) + if not prereq_table then return false end + local return_val = true + for _,prereq_name in pairs(prereq_table) do + if not add_prereq_to_tech(tech,prereq_name) then + return_val = false + end + end + return return_val +end + +remove_tech = function(old_tech) + local old_tech = tech_or_bust(old_tech) + if not old_tech then return false end + for _,tech in pairs(data.raw.technology) do + remove_val_from_table( + tech.prerequisites, + old_tech.name + ) + end + data.raw.technology[old_tech.name] = nil + return true +end + +add_recipe_to_tech = function(tech_name,recipe_name) + local recipe_name = string_name_or_bust(recipe_name) + local tech = false + if type(tech_name) == "table" + and tech_name.type == "technology" then + tech = tech_name + elseif type(tech_name) == "string" then + tech = data.raw["technology"][tech_name] + end + if tech then + if not tech.effects then + tech.effects = {{ + type="unlock-recipe", + recipe=recipe_name + }} + else + table.insert(tech.effects, { + type="unlock-recipe", + recipe=recipe_name + }) + end + return true + end + return false +end + +add_tech_recipe = function(tech_name,recipe_name) + return add_recipe_to_tech(tech_name,recipe_name) +end + +add_recipe_tech = function(tech_name,recipe_name) + return add_recipe_to_tech(tech_name,recipe_name) +end + +add_recipes_to_tech = function(tech_name,name_table) + if type(name_table) ~= "table" then return nil end + for _,name in pairs(name_table) do + add_recipe_to_tech(tech_name,name) + end +end + +move_recipe_to_tech = function(tech_name,recipe_name) + if add_tech_recipe(tech_name,recipe_name) then + remove_recipe_all_techs(recipe_name) + add_tech_recipe(tech_name,recipe_name) + return true + end + return false +end + +move_recipes_to_tech = function(tech_name,name_table) + if type(name_table) ~= "table" then return false end + for _,name in pairs(name_table) do + move_recipe_to_tech(tech_name,name) + end +end + +remove_recipe_all_techs = function(recipe_name) + for _,tech in pairs(data.raw.technology) do + remove_tech_recipe(tech.name,recipe_name) + end +end + +remove_tech_recipe = function(tech_name,recipe_name) + if type(recipe_name) == "table" then + remove_tech_recipes(recipe_name) + end + local recipe_name = string_name_or_bust(recipe_name) + if not recipe_name then return nil end + local tech = false + if type(tech_name) == "table" + and tech_name.type == "technology" then + tech = tech_name + elseif type(tech_name) == "string" then + tech = data.raw["technology"][tech_name] + end + if tech then + if not tech.effects then + return false + elseif type(tech.effects) == "table" then + return remove_val_from_table( + tech.effects, + { + type="unlock-recipe", + recipe=recipe_name + } + ) + end + return true + end + return false +end + +remove_tech_recipes = function(tech_name,name_table) + if type(name_table) ~= "table" then return nil end + for _,name in pairs(name_table) do + remove_tech_recipe(tech_name,name) + end +end + +find_recipe_techs = function(recipe_name) + local tech_names = {} + local recipe_name = string_name_or_bust(recipe_name) + for k,tech in pairs(data.raw.technology) do + local found_tech = false + if tech.effects then + for l,effect in pairs(tech.effects) do + if effect.type == "unlock-recipe" + and effect.recipe == recipe_name then + table.insert( + tech_names, + tech.name + ) + end + end + end + end + return tech_names +end + +all_recipes_of_category = function(category_str) + if category_str == "crafting" then + return smoosh_tables( + all_prototypes_with_value( + "recipe", + "category", + category_str + ), + all_prototypes_with_value( + "recipe", + "category", + nil + ) + ) + end + return all_prototypes_with_value( + "recipe", + "category", + category_str + ) +end + +mirror_recipe_in_techs = function(orig_recipe,new_recipe) + local tech_names = find_recipe_techs(orig_recipe) + for _,tech_name in pairs(tech_names) do + add_recipe_to_tech(tech_name,new_recipe) + end +end + +mult_recipe_energy = function(recipe,mult) + local recipe = recipe_or_bust(recipe) + if recipe.normal then + recipe.normal.energy_required = + (recipe.normal.energy_required or 0.5) + * mult + if recipe.expensive then + recipe.expensive.energy_required = + (recipe.expensive.energy_required or 0.5) + * mult + end + else + recipe.energy_required = + (recipe.energy_required or 0.5) + * mult + end +end + +get_recipe_category = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return false end + if recipe.category then return recipe.category end + if recipe.expensive and recipe.expensive.category then + return recipe.expensive.category + end + if recipe.normal and recipe.normal.category then + return recipe.normal.category + end + return "crafting" +end + +get_recipe_energy = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return nil,0,0 end + local normal_energy_required = 1 + local expensive_energy_required = 1 + if recipe.normal then + normal_energy_required = + recipe.normal.energy_required + if recipe.expensive then + expensive_energy_required = + recipe.expensive.energy_required + end + else + return (recipe.energy_required or 0.5) + end + return normal_energy_required,expensive_energy_required +end + +set_recipe_hidden = function(recipe) + recipe = table_or_bust(recipe) + if not recipe then return nil end + if recipe.normal + and type(recipe.normal) == "table" then + recipe.normal.hidden = true + end + if recipe.expensive + and type(recipe.expensive) == "table" then + recipe.expensive.hidden = true + end + recipe.hidden = true + return true +end + +mult_recipe_io = function(recipe,mult,name) + mult_in_recipe(recipe,mult,name) +end + +mult_in_recipe = function(recipe,mult,name) + if name then + replace_recipe_io(recipe,name,name,mult) + else + local ingredients,results = get_io_names(recipe) + for _,name in pairs(ingredients) do + replace_recipe_io(recipe,name,name,mult) + end + for _,name in pairs(results) do + replace_recipe_io(recipe,name,name,mult) + end + end +end + +replace_in_recipe_io = function(recipe,old_name,new_name,mult) + io_manip(recipe,old_name,new_name,mult) +end + +replace_recipe_io = function(recipe,old_name,new_name,mult) + replace_in_recipe(recipe,old_name,new_name,mult) +end + +replace_in_recipe = function(recipe,old_name,new_name,mult) + io_manip(recipe,old_name,new_name,mult) +end + +io_manip = function(io_handler,old_name,new_name,mult) + local io_handler = io_handler_or_bust(io_handler) + local old_name = string_name_or_bust(old_name) + local new_io_type = get_io_type(new_name) + local new_name = string_name_or_bust(new_name) + local new_normal = 0 + local new_expensive = 0 + local new_amount = 0 + if type(new_name) == "number" then + mult = new_name + new_name = old_name + end + if not io_handler or not old_name + or not new_name then return false end + if not new_io_type then new_io_type = "item" end + local mult = number_or_one(mult) + if io_handler.normal then + new_normal = io_manip( + io_handler.normal,old_name,new_name,mult + ) + end + if io_handler.expensive then + new_expensive = io_manip( + io_handler.expensive,old_name,new_name,mult + ) + end + if io_handler.result then + if io_handler.result == old_name then + if new_io_type == "item" then + io_handler.result = new_name + adamo.debug(io_handler.result..": "..(io_handler.result_count or 1)) + io_handler.result_count = + (io_handler.result_count or 1) + * mult + new_amount = io_handler.result_count + adamo.debug("Replaced as simple result. Count: "..new_amount) + else + if not io_handler.results then + io_handler.results = {} + end + table.insert( + io_handler.results, + { + name = new_name, + type = new_io_type, + amount = (io_handler.result_count or 1)*mult + } + ) + io_handler.main_product = new_name + new_amount = (io_handler.result_count or 1)*mult + io_handler.result = nil + io_handler.result_count = nil + adamo.debug("Moved result to results. Count: "..new_amount) + end + end + end + for _,ingredient in pairs(io_handler.ingredients or {}) do + if ingredient.name == old_name then + ingredient.name = new_name + ingredient.type = new_io_type + adamo.debug(ingredient.name..": "..ingredient.amount) + ingredient.amount = + (ingredient.amount or ingredient[2] or 1)*mult + ingredient[2] = nil + new_amount = ingredient.amount + adamo.debug("Replaced in table by name. Count: "..new_amount) + end + if ingredient[1] == old_name then + ingredient.name = new_name + ingredient.amount = + (ingredient[2] or ingredient.amount or 1)*mult + ingredient.type = new_io_type + ingredient[1] = nil + ingredient[2] = nil + new_amount = ingredient.amount + adamo.debug("Replaced in table by index. Count: "..new_amount) + end + if ingredient.name == nil + and ingredient[1] == nil then + ingredient = nil + end + end + for _,result in pairs(io_handler.results or {}) do + if result.name == old_name then + result.name = new_name + result.type = new_io_type + adamo.debug(result.name..": "..result.amount) + result.amount = math.floor( + (result.amount or result[2] or 1)*mult + ) + if new_io_type == "fluid" then + result.amount = + result.amount + *(result.probability or 1) + result.probability = nil + end + result[2] = nil + new_amount = result.amount + adamo.debug("Replaced in table by name. Count: "..new_amount) + end + if result[1] == old_name then + result.name = new_name + result.amount = math.floor( + (result[2] or result.amount or 1)*mult + ) + result.type = new_io_type + if new_io_type == "fluid" then + result.amount = + result.amount + *(result.probability or 1) + result.probability = nil + end + result[1] = nil + result[2] = nil + new_amount = result.amount + adamo.debug("Replaced in table by index. Count: "..new_amount) + end + if result.name == nil + and result[1] == nil then + result = nil + end + end + if io_handler.main_product == old_name then + adamo.debug("Replaced main product.") + io_handler.main_product = new_name + end + if io_handler.name then + adamo.debug( + 'Replaced '..(io_handler.name)..' IO: ' + ..old_name..' --> '..new_name..' ['..new_io_type..']' + .." x"..mult.." => {"..new_amount..", "..new_normal..", "..new_expensive.."}" + ) + end + return new_amount +end + +remove_ingredient = function(recipe,ingred_name) + local recipe = recipe_or_bust(recipe) + local ingred_name = + string_name_or_bust(ingred_name,count,prob) + local found_and_removed = false + if not recipe or not ingred_name + then return found_and_removed end + if recipe.expensive then + for _,ingredient + in pairs(recipe.expensive.ingredients or {}) + do + if ingredient.name == ingred_name + or ingredient[1] == ingred_name then + recipe.expensive.ingredients[_] = nil + found_and_removed = true + end + end + end + if recipe.normal then + for _,ingredient + in pairs(recipe.normal.ingredients or {}) + do + if ingredient.name == ingred_name + or ingredient[1] == ingred_name then + recipe.normal.ingredients[_] = nil + found_and_removed = true + end + end + end + for _,ingredient + in pairs(recipe.ingredients or {}) + do + if ingredient.name == ingred_name + or ingredient[1] == ingred_name then + recipe.ingredients[_] = nil + found_and_removed = true + end + end + return found_and_removed +end + +blend_io_if_match = function(io_base,io_counter) + local io_base = io_prototype_or_bust(io_base) + local io_counter = io_prototype_or_bust(io_counter) + if not io_counter or not io_base then return end + local found_match = false + if io_base.name == io_counter.name + and ( io_base.type == io_counter.type + or ( + io_base.type == "item" + or io_counter.type == "item" + ) + ) then + found_match = true + if io_base.probability or io_counter.probability then + io_base.probability = + ( + (io_base.probability or 1) + *io_base.amount + + + (io_counter.probability or 1) + *io_counter.amount + ) + /(io_base.amount + io_counter.amount) + if io_base.probability == 1 then + io_base.probability = nil + end + end + io_base.amount = io_base.amount + io_counter.amount + end + adamo.debug( + "Blended: " + ..tostring(io_base.name).."[" + ..tostring(io_base.amount)..", " + ..tostring(io_base.probability).."] <-> [" + ..tostring(io_counter.name).."[" + ..tostring(io_counter.amount)..", " + ..tostring(io_counter.probability).."]" + ) + return found_match +end + +add_ingredient = function(recipe,ingred,count,prob,catalyst_amount) + if type(count) == "number" and count == 0 then + return nil + end + if type(prob) == "number" and count == 0 then + return nil + end + local recipe = recipe_or_bust(recipe) + local ingred = io_prototype_or_bust(ingred,count,prob,catalyst_amount) + if type(prob) ~= "number" then prob = nil end + if not recipe or not ingred then return nil end + if uses_ingredient(recipe,ingred.name) then + if recipe.expensive then + for _,ingredient + in pairs(recipe.expensive.ingredients or {}) + do + blend_io_if_match(ingredient,ingred) + end + end + if recipe.normal then + for _,ingredient + in pairs(recipe.normal.ingredients or {}) + do + blend_io_if_match(ingredient,ingred) + end + end + for _,ingredient + in pairs(recipe.ingredients or {}) + do + blend_io_if_match(ingredient,ingred) + end + else + if recipe.expensive then + local exp_ingred = util.table.deepcopy(ingred) + if not recipe.expensive.ingredients then + recipe.expensive.ingredients = {} + end + table.insert(recipe.expensive.ingredients,exp_ingred) + end + if recipe.normal then + if not recipe.normal.ingredients then + recipe.normal.ingredients = {} + end + table.insert(recipe.normal.ingredients,ingred) + end + if recipe.ingredients then + table.insert(recipe.ingredients,ingred) + elseif not recipe.normal and not recipe.expensive + then + recipe.ingredients = {} + table.insert(recipe.ingredients,ingred) + end + end +end + +add_result = function(recipe,product,count,prob) + if type(count) == "number" and count == 0 then + return nil + end + if type(prob) == "number" and count == 0 then + return nil + end + local recipe = recipe_or_bust(recipe) + local product = io_prototype_or_bust(product,count,prob) + if not recipe or not product then return nil end + if type(count) ~= "number" then count = nil end + if type(prob) ~= "number" then prob = nil end + format_results(recipe) + if uses_result(recipe,product) then + if recipe.expensive then + for _,result + in pairs(recipe.expensive.results + or {recipe.expensive.result} + ) do + blend_io_if_match(result,product) + end + end + if recipe.normal then + for _,result + in pairs(recipe.normal.results + or {recipe.normal.result} + ) do + blend_io_if_match(result,product) + end + end + for _,result + in pairs(recipe.results + or {recipe.result} + ) do + blend_io_if_match(result,product) + end + else + if recipe.expensive then + local exp_product = util.table.deepcopy(product) + exp_product.amount = (exp_product.amount or 1)*2 + table.insert(recipe.expensive.results,exp_product) + end + if recipe.normal then + table.insert(recipe.normal.results,product) + end + if recipe.results then + table.insert(recipe.results,product) + elseif not recipe.normal and not recipe.expensive + then + recipe.results = {} + table.insert(recipe.results,product) + end + end +end + +move_result_to_main_product = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return false end + if recipe.expensive then + if not recipe.expensive.results + or type(recipe.expensive.results) ~= "table" + then + if recipe.expensive.result then + recipe.expensive.results = {{ + type = "item", + name = recipe.expensive.result, + amount = + recipe.expensive.result_count + or 1 + }} + if not recipe.expensive.main_product then + recipe.expensive.main_product = + recipe.expensive.result + end + recipe.expensive.result = nil + recipe.expensive.result_count = nil + end + elseif recipe.expensive.result then + if not recipe.expensive.main_product then + recipe.expensive.main_product = + recipe.expensive.result + end + table.insert( + results, + { + type = "item", + name = recipe.expensive.result, + amount = + (recipe.expensive.result_count + or 1) + } + ) + recipe.expensive.result = nil + recipe.expensive.result_count = nil + end + end + if recipe.normal then + if not recipe.normal.results + or type(recipe.normal.results) ~= "table" + then + if recipe.normal.result then + recipe.normal.results = {{ + type = "item", + name = recipe.normal.result, + amount = + recipe.normal.result_count + or 1 + }} + if not recipe.normal.main_product then + recipe.normal.main_product = + recipe.normal.result + end + recipe.normal.result = nil + recipe.normal.result_count = nil + end + elseif recipe.normal.result then + if not recipe.normal.main_product then + recipe.normal.main_product = + recipe.normal.result + end + table.insert( + results, + { + type = "item", + name = recipe.normal.result, + amount = + (recipe.normal.result_count + or 1) + } + ) + recipe.normal.result = nil + recipe.normal.result_count = nil + end + end + if not recipe.results + or type(recipe.results) ~= "table" + then + if recipe.result then + recipe.results = {{ + type = "item", + name = recipe.result, + amount = + recipe.result_count + or 1 + }} + if not recipe.main_product then + recipe.main_product = + recipe.result + end + recipe.result = nil + recipe.result_count = nil + end + elseif recipe.result then + if not recipe.main_product then + recipe.main_product = + recipe.result + end + table.insert( + results, + { + type = "item", + name = recipe.result, + amount = + (recipe.result_count + or 1) + } + ) + recipe.result = nil + recipe.result_count = nil + end +end + +format_results = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return false end + move_result_to_main_product(recipe) + -- needs to reformat the results table, yet. +end + +format_ingredients = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return false end + if recipe.normal + and type(recipe.normal) == "table" then + for _,ingredient + in pairs(recipe.normal.ingredients or {}) do + if ingredient[1] then + ingredient.name = ingredient[1] + ingredient[1] = nil + end + if ingredient[2] then + ingredient.amount = ingredient[2] + ingredient[2] = nil + end + if ingredient.name + and not ingredient.type then + ingredient.type = "item" + end + end + end + if recipe.expensive + and type(recipe.expensive) == "table" then + for _,ingredient + in pairs(recipe.expensive.ingredients or {}) do + if ingredient[1] then + ingredient.name = ingredient[1] + ingredient[1] = nil + end + if ingredient[2] then + ingredient.amount = ingredient[2] + ingredient[2] = nil + end + if ingredient.name + and not ingredient.type then + ingredient.type = "item" + end + end + end + for _,ingredient + in pairs(recipe.ingredients or {}) do + if ingredient[1] then + ingredient.name = ingredient[1] + ingredient[1] = nil + end + if ingredient[2] then + ingredient.amount = ingredient[2] + ingredient[2] = nil + end + if ingredient.name + and not ingredient.type then + ingredient.type = "item" + end + end + return true +end + +set_main_product = function(recipe,name) + local recipe = recipe_or_bust(recipe) + local name = string_name_or_bust(name) + if not recipe or not name then return false end + if not uses_result(recipe,name) then return false end + if recipe.normal then + recipe.normal.main_product = name + end + if recipe.expensive then + recipe.expensive.main_product = name + end + if recipe.results or recipe.result then + recipe.main_product = name + end +end + +get_main_result = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return nil,0,0,0 end + local result_name = nil + local result_count = nil + local expensive_result_count = 0 + local normal_result_count = 0 + if recipe.expensive then + if recipe.expensive.results then + for _,result + in pairs(recipe.expensive.results) do + if result_name == nil then + result_name = result.name or result[1] + end + if (result.name == result_name) + or (result[1] == result_name) then + expensive_result_count = + result.amount + or result[2] + end + end + elseif recipe.expensive.result then + if result_name == nil then + result_name = recipe.expensive.result + end + expensive_result_count = + recipe.expensive.result_count or 1 + end + end + if recipe.normal then + if recipe.normal.results then + for _,result + in pairs(recipe.normal.results) do + if result_name == nil then + result_name = result.name or result[1] + end + if (result.name == result_name) + or (result[1] == result_name) then + normal_result_count = + result.amount + or result[2] + end + end + elseif recipe.normal.result then + if result_name == nil then + result_name = recipe.normal.result + end + normal_result_count = + recipe.normal.result_count or 1 + end + end + if recipe.results then + for _,result + in pairs(recipe.results) do + if result_name == nil then + result_name = result.name or result[1] + end + if (result.name == result_name) + or (result[1] == result_name) then + result_count = + result.amount + or result[2] + end + end + elseif recipe.result then + result_count = recipe.result_count or 1 + result_name = recipe.result + end + if result_count == nil then + result_count = + normal_result_count + or expensive_result_count + or 0 + end + return result_name,result_count,expensive_result_count +end + +has_ingredients = function(recipe) + local recipe = recipe_or_bust(recipe) + if recipe then + if recipe.normal then + if recipe.normal.ingredients then + for _,ingredient + in pairs(recipe.normal.ingredients) do + if ingredient.amount + and ingredient.amount > 0 then + return true + end + if ingredient[2] + and ingredient[2] > 0 then + return true + end + end + end + end + if recipe.ingredients then + for _,ingredient in pairs(recipe.ingredients) do + if ingredient.amount + and ingredient.amount > 0 then + return true + end + if ingredient[2] + and ingredient[2] > 0 then + return true + end + end + end + end + return false +end + +has_results = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return false end + if recipe.expensive then + if recipe.expensive.results then + for _,result + in pairs(recipe.expensive.results) do + if result.amount + and result.amount > 0 then + return true + end + if result[2] + and result[2] > 0 then + return true + end + end + end + if recipe.normal.result then return true end + end + if recipe.normal then + if recipe.normal.results then + for _,result + in pairs(recipe.normal.results) do + if result.amount + and result.amount > 0 then + return true + end + if result[2] + and result[2] > 0 then + return true + end + end + end + if recipe.normal.result then return true end + end + if recipe.results then + for _,result in pairs(recipe.results) do + if result.amount + and result.amount > 0 then + return true + end + if result[2] + and result[2] > 0 then + return true + end + end + end + if recipe.result then return true end + return false +end + +get_io_names = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe or recipe.type ~= "recipe" then + return {} + end + local ingredients = {} + local results = {} + if recipe.expensive then + add_strings_to_list( + ingredients, + get_table_names(recipe.expensive.ingredients) + ) + add_strings_to_list( + results, + get_table_names(recipe.expensive.results) + ) + add_string_to_list( + results, + recipe.expensive.result + ) + end + if recipe.normal then + add_strings_to_list( + ingredients, + get_table_names(recipe.normal.ingredients) + ) + add_strings_to_list( + results, + get_table_names(recipe.normal.results) + ) + add_string_to_list( + results, + recipe.normal.result + ) + end + add_strings_to_list( + ingredients, + get_table_names(recipe.ingredients) + ) + add_strings_to_list( + results, + get_table_names(recipe.results) + ) + add_string_to_list( + results, + recipe.result + ) + return ingredients,results +end + +recipe_uses = function(recipe,name) + local name = string_name_or_bust(name) + local recipe = recipe_or_bust(recipe) + if not recipe or not name then return false end + local ingredients,results = get_io_names(recipe) + for _,ingredient_name in pairs(ingredients) do + if ingredient_name == name then + return true + end + end + for _,result_name in pairs(results) do + if (result_name) == name then + return true + end + end + return false +end + +uses_ingredient = function(recipe,name) + local name = string_name_or_bust(name) + local recipe = recipe_or_bust(recipe) + if not recipe or not name then return false end + local ingredients,results = get_io_names(recipe) + for _,ingredient_name in pairs(ingredients) do + if ingredient_name == name then + return true + end + end + return false +end + +uses_result = function(recipe,name) + local name = string_name_or_bust(name) + local recipe = recipe_or_bust(recipe) + if not recipe or not name then return false end + local ingredients,results = get_io_names(recipe) + for _,result_name in pairs(results) do + if (result_name) == name then + return true + end + end + return false +end + +get_io_type = function(prototype) + if type(prototype) == "table" then + local io_type = get_table_type(prototype) + if io_type == "item" then + return "item" + elseif io_type == "fluid" then + return "fluid" + end + end + if type(prototype) == "string" then + if data.raw.item[prototype] then + return "item" + elseif data.raw.fluid[prototype] then + return "fluid" + end + end + return nil +end + +get_table_type = function(prototype) + if type(prototype) == "table" then + return prototype.type + end + return nil +end + +get_table_names = function(prototable) + local names = {} + local prototable = table_or_bust(prototable) + if not prototable then return end + for _,prototype in pairs(prototable) do + prototype = table_or_bust(prototype) + if prototype then + if prototype.name + and type(prototype.name) == "string" then + table.insert( + names, + prototype.name + ) + elseif prototype[1] + and type(prototype[1]) == "string" then + table.insert( + names, + prototype[1] + ) + end + end + end + return names +end + +get_ingredient = function(recipe,index) + local recipe = recipe_or_bust(recipe) + if type(recipe) ~= "table" then return end + local ingredient_name = index + local ingredient_amount = 0 + local expensive_amount = 0 + if not has_ingredients(recipe) then return nil,0,0 end + if recipe.normal + and type(recipe.normal.ingredients) == "table" then + if type(ingredient_name) == "string" then + for _,ingredient + in pairs(recipe.normal.ingredients) do + if (ingredient.name == ingredient_name) + or (ingredient[1] == ingredient_name) + then + ingredient_amount = + ingredient.amount + or ingredient[2] + end + end + if ingredient_amount == 0 then + return nil,0,0 + end + if recipe.expensive then + for _,ingredient + in pairs(recipe.expensive.ingredients or {}) do + if (ingredient.name == ingredient_name) + or (ingredient[1] == ingredient_name) + then + expensive_amount = + ingredient.amount + or ingredient[2] + end + end + end + else + if type( + recipe.normal.ingredients[ingredient_name] + ) == "table" then + ingredient_amount = + recipe.normal + .ingredients[ingredient_name].amount + or recipe.normal + .ingredients[ingredient_name][2] + ingredient_name = + recipe.normal + .ingredients[ingredient_name].name + or recipe.normal + .ingredients[ingredient_name][1] + if recipe.expensive then + for _,ingredient + in pairs(recipe.expensive.ingredients) do + if ( + ingredient.name + == ingredient_name + ) or ( + ingredient[1] + == ingredient_name + ) then + expensive_amount = + ingredient.amount + or ingredient[2] + end + end + end + else + return nil,0,0 + end + end + else + if type(ingredient_name) == "string" then + for _,ingredient + in pairs(recipe.ingredients or {}) do + if (ingredient.name == ingredient_name) + or (ingredient[1] == ingredient_name) + then + ingredient_amount = + ingredient.amount + or ingredient[2] + end + end + if ingredient_amount == 0 then + return nil,0,0 + end + else + if type(recipe.ingredients[ingredient_name]) + == "table" then + ingredient_amount = + recipe.ingredients[ingredient_name] + .amount + or recipe.ingredients[ingredient_name][2] + ingredient_name = + recipe.ingredients[ingredient_name].name + or recipe.ingredients[ingredient_name][1] + else + return nil,0,0 + end + end + end + return ingredient_name,ingredient_amount,expensive_amount +end + +-- Might be broken +get_result = function(recipe,index) + local recipe = recipe_or_bust(recipe) + if not recipe then return end + format_results(recipe) + if not has_results(recipe) then return nil,0,0 end + local result_name = index + local result_amount = 0 + local expensive_amount = 0 + if recipe.normal + and type(recipe.normal.results) == "table" then + if type(result_name) == "string" then + for _,result in pairs(recipe.normal.results) do + if (result.name == result_name) + or (result[1] == result_name) + then + result_amount = + result.amount or result[2] + end + end + if result_amount == 0 then + return nil,0,0 + end + if recipe.expensive then + for _,result + in pairs(recipe.expensive.results or {}) do + if (result.name == result_name) + or (result[1] == result_name) + then + expensive_amount = + result.amount + or result[2] + end + end + end + else + if type( + recipe.normal.results[result_name] + ) == "table" then + result_amount = + recipe.normal + .results[result_name].amount + or recipe.normal + .results[result_name][2] + result_name = + recipe.normal + .results[result_name].name + or recipe.normal + .results[result_name][1] + if recipe.expensive then + for _,result + in pairs(recipe.expensive.results) do + if ( + result.name + == result_name + ) or ( + result[1] + == result_name + ) then + expensive_amount = + result.amount + or result[2] + end + end + end + else + return nil,0,0 + end + end + else + if type(result_name) == "string" then + for _,result + in pairs(recipe.results or {}) do + if (result.name == result_name) + or (result[1] == result_name) + then + result_amount = + result.amount + or result[2] + end + end + if result_amount == 0 then + return nil,0,0 + end + else + if type(recipe.results[result_name]) + == "table" then + result_amount = + recipe.results[result_name] + .amount + or recipe.results[result_name][2] + result_name = + recipe.results[result_name].name + or recipe.results[result_name][1] + else + return nil,0,0 + end + end + end + return result_name,result_amount,expensive_amount + +end + +set_productivity_recipe = function(recipe_name) + local recipe_name = string_name_or_bust(recipe_name) + if not recipe_name then return end + for k,v in pairs({ + data.raw.module["productivity-module"], + data.raw.module["productivity-module-2"], + data.raw.module["productivity-module-3"] + }) do + if v.limitation then + table.insert(v.limitation, recipe_name) + end + end +end + +set_productivity_recipes = function(recipe_names) + for _,recipe_name in pairs(recipe_names or {}) do + set_productivity_recipe(recipe_name) + end +end + +add_productivity_recipe = function(recipe_name) + set_productivity_recipe(recipe_name) +end + +add_productivity_recipes = function(recipe_names) + set_productivity_recipes(recipe_names) +end + +is_productivity_recipe = function(recipe_name) + local recipe_name = string_name_or_bust(recipe_name) + if not data.raw.recipe[recipe_name] then return false end + for k,listed_recipe_name in pairs( + data.raw.module["productivity-module"].limitation + ) do + if listed_recipe_name == recipe_name then + return true + end + end + return false +end + +find_unused_layer = function() + local unused_layers = { + "layer-11", + "layer-12", + "layer-13", + "layer-14", + "layer-15", + } + for i,data_type in pairs(data.raw) do + for j,data_obj in pairs(data_type) do + for k,layer + in pairs(data_obj.collision_mask or {}) do + for l,unused_layer in pairs(unused_layers) do + if layer == unused_layer then + unused_layers[l] = nil + end + end + end + end + end + for _,layer in pairs(unused_layers) do + return layer + end + return nil +end + +-- Not really checking if it's an entit, +-- but entity definitely has to have "order". +entity_or_bust = function(entity) + local entity = table_or_bust(entity) + return entity +end + +get_collision_lengths = function(entity) + local lengths = {0,0} + if entity_or_bust(entity) then + local colbox = entity.collision_box + if type(colbox) == "table" then + if type(colbox[1]) == "table" then + if type(colbox[1][1]) == "number" then + lengths[1] + = lengths[1] - colbox[1][1] + end + if type(colbox[1][2]) == "number" then + lengths[2] + = lengths[2] - colbox[1][2] + end + end + if type(colbox[2]) == "table" then + if type(colbox[2][1]) == "number" then + lengths[1] + = lengths[1] + colbox[2][1] + end + if type(colbox[2][2]) == "number" then + lengths[2] + = lengths[2] + colbox[2][2] + end + end + end + end + return lengths +end + +get_collision_hypotenuse = function(entity) + local len = get_collision_lengths(entity) + return math.sqrt(len[1]*len[1] + len[2]*len[2]) +end + +get_collision_area = function(entity) + local len = get_collision_lengths(entity) + return len[1]*len[2] +end + +set_pipe_distance = function(pipe, dist) + if data.raw["pipe-to-ground"][pipe] then + for _,connection in pairs( + data.raw["pipe-to-ground"][pipe] + .fluid_box.pipe_connections + ) do + if connection.max_underground_distance then + data.raw["pipe-to-ground"][pipe] + .fluid_box.pipe_connections[_] + .max_underground_distance = dist + end + end + end +end + +set_shift = function(shift, tab) + tab.shift = shift + if tab.hr_version then + tab.hr_version.shift = shift + end + return tab +end + +-- probably doesn't work as written: could work +-- with sufficiently large empty image. +empty_animation = function(frames,speed) + if type(frames) ~= "number" then + frames = 1 + end + if type(speed) ~= "number" then + speed = 1 + end + return { + frame_count = frames, + speed = speed, + type = "forward-then-backward", + filename = "__core__/graphics/empty.png", + priority = "extra-high", + line_length = 1/math.sqrt(frames), + width = 1, + height = 1 + } +end + +empty_sprite = function() + return { + filename = "__core__/graphics/empty.png", + priority = "extra-high", + width = 1, + height = 1, + hr_version = { + filename = "__core__/graphics/empty.png", + priority = "extra-high", + width = 1, + height = 1, + } + } +end + +emptysprite = function() + return empty_sprite() +end + +centrifuge_idle_layers = function(size,speed) + local size = number_or_one(size) + local speed = number_or_one(speed) + return {{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-C.png", + priority = "extra-high", + line_length = 8, + width = 119, + height = 107, + scale = size, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + -0.5, + -26.5 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-C.png", + priority = "extra-high", + scale = size*0.5, + line_length = 8, + width = 237, + height = 214, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + -0.25, + -26.5 + ) + } + },{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-C-shadow.png", + draw_as_shadow = true, + priority = "extra-high", + line_length = 8, + width = 132, + height = 74, + frame_count = 64, + scale = size, + animation_speed = speed, + shift = + util.by_pixel( + 20, + -10 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-C-shadow.png", + draw_as_shadow = true, + priority = "extra-high", + scale = size*0.5, + line_length = 8, + width = 279, + height = 152, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + 16.75, + -10 + ) + } + },{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-B.png", + priority = "extra-high", + line_length = 8, + width = 78, + height = 117, + scale = size, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + 23, + 6.5 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-B.png", + priority = "extra-high", + scale = size*0.5, + line_length = 8, + width = 156, + height = 234, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + 23, + 6.5 + ) + } + },{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-B-shadow.png", + draw_as_shadow = true, + priority = "extra-high", + line_length = 8, + width = 124, + height = 74, + frame_count = 64, + scale = size, + animation_speed = speed, + shift = + util.by_pixel( + 63, + 16 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-B-shadow.png", + draw_as_shadow = true, + priority = "extra-high", + scale = size*0.5, + line_length = 8, + width = 251, + height = 149, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + 63.25, + 15.25 + ) + } + },{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-A.png", + priority = "extra-high", + line_length = 8, + width = 70, + height = 123, + scale = size, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + -26, + 3.5 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-A.png", + priority = "extra-high", + scale = size*0.5, + line_length = 8, + width = 139, + height = 246, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + -26.25, + 3.5 + ) + } + },{ + filename = + "__base__/graphics/entity/" + .."centrifuge/centrifuge-A-shadow.png", + priority = "extra-high", + draw_as_shadow = true, + line_length = 8, + width = 108, + height = 54, + frame_count = 64, + scale = size, + animation_speed = speed, + shift = + util.by_pixel( + 6, + 27 + ), + hr_version = { + filename = + "__base__/graphics/entity/" + .."centrifuge/hr-centrifuge-A-shadow.png", + priority = "extra-high", + draw_as_shadow = true, + scale = size*0.5, + line_length = 8, + width = 230, + height = 124, + frame_count = 64, + animation_speed = speed, + shift = + util.by_pixel( + 8.5, + 23.5 + ) + } + }} +end + +bulkypipepictures = function() + local pipe_sprites = pipepictures() + return { + north = set_shift( + {0, 1}, + util.table + .deepcopy(pipe_sprites.straight_vertical) + ), + south = empty_sprite(), + east = set_shift( + {-1, 0}, + util.table + .deepcopy(pipe_sprites.straight_horizontal) + ), + west = set_shift( + {1, 0}, + util.table + .deepcopy(pipe_sprites.straight_horizontal) + ) + } +end + +chem_assembling_machine_fluid_boxes = function() + return {{ + production_type = "input", + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1, + base_level = -1, + height = 2, + pipe_connections = {{ type="input-output", position = {0, -2} }}, + secondary_draw_orders = { north = -1 } + },{ + production_type = "input", + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1, + base_level = -1, + height = 2, + pipe_connections = {{ type="input-output", position = {2, 0} }}, + secondary_draw_orders = { north = -1 } + },{ + production_type = "output", + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1, + base_level = 1, + pipe_connections = {{ type="output", position = {-2, 0} }}, + secondary_draw_orders = { north = -1 } + },{ + production_type = "input", + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 1, + base_level = -1, + height = 2, + pipe_connections = {{ type="input-output", position = {0, 2} }}, + secondary_draw_orders = { north = -1 } + }, + off_when_no_fluid_recipe = true + } +end + +centrifuge_fluid_boxes = function() + return {{ + production_type = "input", + base_area = 1, + base_level = -1, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = {{ + position = { + 0, + 2 + }, + }}, + secondary_draw_orders = { + north = -32, + west = -32, + east = -32, + south = 4 + } + },{ + production_type = "output", + base_area = 1, + base_level = 1, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = {{ + position = { + -2, + 0 + }, + }}, + secondary_draw_orders = { + north = -32, + west = -32, + east = -32, + south = 4 + } + },{ + production_type = "output", + base_area = 1, + base_level = 1, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = {{ + position = { + 0, + -2 + }, + }}, + secondary_draw_orders = { + north = -32, + west = -32, + east = -32, + south = 4 + } + },{ + production_type = "output", + base_area = 1, + base_level = 1, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = {{ + position = { + 2, + 0 + }, + }}, + secondary_draw_orders = { + north = -32, + west = -32, + east = -32, + south = 4 + }, + }, + off_when_no_fluid_recipe = true + } +end + +trivial_smoke = function(opts) + return { + type = "trivial-smoke", + name = opts.name, + duration = opts.duration or 600, + fade_in_duration = opts.fade_in_duration or 0, + fade_away_duration = + opts.fade_away_duration + or ( + (opts.duration or 600) - (opts.fade_in_duration or 0) + ), + spread_duration = opts.spread_duration or 600, + start_scale = opts.start_scale or 0.20, + end_scale = opts.end_scale or 1.0, + color = opts.color, + cyclic = true, + affected_by_wind = opts.affected_by_wind or true, + animation = { + width = 152, + height = 120, + line_length = 5, + frame_count = 60, + shift = {-0.53125, -0.4375}, + priority = "high", + animation_speed = 0.25, + filename = "__base__/graphics/entity/smoke/smoke.png", + flags = { "smoke" } + } + } +end + + +apply_vanilla_fluid_fuel_stats = function() + local solid_fuel = + item_or_bust(data.raw.item["solid-fuel"]) + if not solid_fuel then return false end + local solid_fuel_value = get_fuel_value(solid_fuel) + apply_fluid_fuel_stat( + "light-oil", + energy_div( + solid_fuel_value, + fuelfactors["light-oil"] + ) + ) + apply_fluid_fuel_stat( + "heavy-oil", + energy_div( + solid_fuel_value, + fuelfactors["heavy-oil"] + ) + ) + apply_fluid_fuel_stat( + "petroleum-gas", + energy_div( + solid_fuel_value, + fuelfactors["petroleum-gas"] + ) + ) + apply_fluid_fuel_stat( + "crude-oil", + energy_div( + solid_fuel_value, + fuelfactors["crude-oil"] + ) + ) +end + +apply_fluid_fuel_stat = function(fluid,fuel_value,fuel_type) + local fluid = fluid_or_bust(fluid) + local fuel_value = string_or_bust(fuel_value) + if not fluid or not fuel_value then return nil end + local fuel_type = string_or_bust(fuel_type) + fluid.fuel_category = fuel_type + fluid.fuel_value = fuel_value + return fluid +end + +apply_sulfur_fuel_stats = function(sulfur) + if type(sulfur) ~= "table" + or sulfur.type ~= "item" + then + log("invalid sulfur item received") + return nil + end + local sulfur_fueltype = "sulfur" + sulfur.fuel_category = sulfur_fueltype + sulfur.fuel_emissions_multiplier = 12 + sulfur.fuel_value = fuelvalues.sulfur + sulfur.fuel_acceleration_multiplier = 0.4 + sulfur.fuel_glow_color = {r = 1, g = 0.2, b = 1} + add_fueltype_to_basic_burners(sulfur_fueltype) + return sulfur +end + +add_fueltype_to_basic_burners = function(fueltype) + if not data.raw["fuel-category"][fueltype] then + data:extend({ + {type="fuel-category",name=fueltype} + }) + end + add_fuel_type(data.raw.boiler.boiler,fueltype) + for _,ent in pairs(data.raw.car) do + if table_incl("chemical",get_fuel_types(ent)) + then + add_fuel_type(ent,fueltype) + end + end + add_fuel_type(data.raw.furnace["stone-furnace"],fueltype) + add_fuel_type(data.raw.furnace["steel-furnace"],fueltype) + for _,ent in pairs(data.raw.reactor) do + if table_incl("chemical",get_fuel_types(ent)) + then + add_fuel_type(ent,fueltype) + end + end + for _,ent in pairs(data.raw.lamp) do + if table_incl("chemical",get_fuel_types(ent)) + then + add_fuel_type(ent,fueltype) + end + end +end + +add_fuel_type = function(entity,fuel_type) + entity = table_or_bust(entity) + fuel_type = string_or_bust(fuel_type) + if not entity or not fuel_type then return false end + local energy_source = get_energy_source(entity) + if not energy_source then return false end + if is_burner(energy_source) then + if not energy_source.fuel_categories then + if energy_source.fuel_category then + energy_source + .fuel_categories = {energy_source.fuel_category} + else + energy_source.fuel_categories = {"chemical"} + end + energy_source.fuel_category = nil + end + add_string_to_list( + energy_source.fuel_categories, + fuel_type + ) + end +end + +get_fuel_value = function(prototype) + local prototype = table_or_bust(prototype) + local fuel_value = "0kW" + if not prototype then return fuel_value end + if prototype.type == "fluid" + or prototype.type == "item" then + fuel_value = prototype.fuel_value + end + if type(fuel_value) ~= "string" then return "0kW" end + return fuel_value +end + +get_fuel_types = function(entity) + entity = table_or_bust(entity) + if not entity then return {} end + local energy_source = get_energy_source(entity) + if not energy_source then return {} end + if is_burner(energy_source) then + if energy_source.fuel_categories then + return energy_source.fuel_categories + end + if energy_source.fuel_category then + return {energy_source.fuel_category} + end + return ({"chemical"}) + end + return {} +end + +uses_fuel_type = function(name,entity) + local name = string_name_or_bust(name) + local entity = table_or_bust(entity) + if entity and name + and table_incl(name,get_fuel_types(entity)) then + return true + end + return false +end + +is_burner = function(energy_source) + energy_source = table_or_bust(energy_source) + if not energy_source then return false end + if energy_source.type == "burner" + or not energy_source.type then + return true + end + return false +end + +get_energy_source = function(entity) + entity = entity_or_bust(entity) + if not entity then return nil end + if entity.burner then + return entity.burner + else + return entity.energy_source + end +end + +number_or_bust = function(number) + if type(number) ~= "number" then + return nil + end + return number +end + +number_or_one = function(number) + if type(number) ~= "number" then + number = 1 + end + return number +end + +number_or_zero = function(number) + if type(number) ~= "number" then + number = 0 + end + return number +end + +table_or_bust = function(prototype) + if type(prototype) == "table" then + return prototype + end + return nil +end + +string_or_bust = function(str) + if type(str) == "string" then + return str + end + return nil +end + +fluid_or_bust = function(prototype) + if type(prototype) == "table" + and prototype.type == "fluid" then + return prototype + end + if type(prototype) == "string" then + return fluid_or_bust(data.raw.fluid[prototype]) + end + return nil +end + +item_or_bust = function(prototype) + if type(prototype) == "table" then + for _,type in pairs(adamo.item.types) do + if prototype.type == type then + return prototype + end + end + end + if type(prototype) == "string" then + local item = adamo.get.from_types(adamo.item.types,prototype) + if item then return item end + end + return nil +end + +all_prototypes_with_value = function(type_tbl,key,val) + local type_tbl = prototype_table_or_bust(type_tbl) + if not type_tbl then return {} end + local prototypes = {} + for _,prototype in pairs(type_tbl) do + if prototype and type(prototype) == "table" + and prototype[key] == val then + table.insert(prototypes,prototype) + end + end + return prototypes +end + +prototype_table_or_bust = function(prototype_tbl) + if type(prototype_tbl) == "string" then + return data.raw[prototype_tbl] + else + return table_or_bust(prototype_tbl) + end +end + +io_prototype_or_bust = function(prototype,count,prob,catalyst_amount) + if type(prototype) == "table" then + if type(prototype.name) == "string" + and type(prototype.type) == "string" + and type(prototype.amount) == "number" then + return prototype + end + end + local new_prototype = construct_io_prototype( + prototype,count,prob,catalyst_amount + ) + if type(new_prototype.name) == "string" + and type(new_prototype.type) == "string" + and type(new_prototype.amount) == "number" then + prototype = new_prototype + return prototype + end + return nil +end + +construct_io_prototype = function( + prototype,count,prob,catalyst_amount +) + local new_prototype = {} + if type(prob) == "number" then + if prob < 0 or prob > 1 then prob = nil end + end + if type(count) == "number" then + if count < 0 then count = nil + elseif count < 1 then + prob = (prob or 1)*count + count = 1 + end + end + if type(count) ~= "number" then count = nil end + if type(prob) ~= "number" then prob = nil end + if type(prototype) == "table" then + new_prototype.name = prototype.name or prototype[1] + new_prototype.type = prototype.type or "item" + new_prototype.amount = + count or prototype.amount + or prototype[2] or 1 + new_prototype.catalyst_amount = + catalyst_amount + or prototype.catalyst_amount + new_prototype.probability = + prob or prototype.probability + end + if type(prototype) == "string" then + if data.raw.fluid[prototype] then + new_prototype.name = prototype + new_prototype.type = "fluid" + new_prototype.amount = count or 1 + if data.raw.item[prototype] then + new_prototype.type = "item" + new_prototype.catalyst_amount = + catalyst_amount + or prototype.catalyst_amount + new_prototype.probability = prob + end + else + new_prototype.name = prototype + new_prototype.type = "item" + new_prototype.amount = count or 1 + new_prototype.catalyst_amount = + catalyst_amount + or prototype.catalyst_amount + new_prototype.probability = prob + end + end + if new_prototype.type == "item" then + if new_prototype.amount < 0 then + elseif new_prototype.amount < 1 then + new_prototype.probability = + (new_prototype.probability or 1) + *new_prototype.amount + new_prototype.amount = 1 + end + elseif new_prototype.type == "fluid" and prob then + new_prototype.amount = new_prototype.amount*prob + end + adamo.debug( + "Constructed IO Prototype: " + ..new_prototype.name..": "..new_prototype.amount + ) + return new_prototype +end + +tech_or_bust = function(prototype) + if type(prototype) == "table" + and prototype.type == "technology" then + return prototype + end + if type(prototype) == "string" then + return data.raw.technology[prototype] + end + return nil +end + +recipe_or_bust = function(prototype) + if type(prototype) == "table" + and prototype.type == "recipe" then + return prototype + end + if type(prototype) == "string" then + return data.raw.recipe[prototype] + end + return nil +end + +io_handler_or_bust = function(io_handler) + local recipe = recipe_or_bust(io_handler) + if recipe then return recipe end + if type(io_handler) == "table" then + if type(io_handler.result) == "string" + or type(io_handler.results) == "table" + or type(io_handler.ingredients) == "table" then + return io_handler + end + end + return nil +end + +string_name_or_bust = function(prototype_name) + if type(prototype_name) == "string" then + return prototype_name + end + if type(prototype_name) == "table" then + return prototype_name.name + end + return nil +end + +add_strings_to_table = function(str_list,new_strings) + return add_strings_to_list(str_list,new_strings) +end + +add_strings_to_list = function(str_list,new_strings) + if type(new_strings) ~= "table" then + if type(str_list) == "table" then + return str_list + else + return {} + end + end + for _,str in pairs(new_strings) do + add_string_to_list(str_list,str) + end + if type(str_list) == "table" then + return str_list + else + return {} + end +end + +add_string_to_table = function(str_list,new_str) + return add_string_to_list(str_list,new_str) +end + +add_string_to_list = function(str_list,new_str) + if type(new_str) == "table" then + add_strings_to_list( + str_list, + new_str + ) + end + if type(str_list) ~= "table" then + if type(new_str) == "string" then + if type(str_list) == "string" then + str_list = { + str_list, + new_str + } + end + if str_list == nil then + str_list = {new_str} + end + return str_list + else + return str_list + end + end + for _,str in pairs(str_list) do + if str == new_str then + return str_list + end + end + if type(new_str) == "string" then + table.insert(str_list,new_str) + end + return str_list +end + +table_incl = function(val,comp) + comp = table_or_bust(comp) + if not val or not comp then return false end + for _,val_comp in pairs(comp) do + if val_comp == val then + return true + end + end + return false +end + +remove_val_from_table = function(tbl,val) + local tbl = table_or_bust(tbl) + local removed = false + for _,match in pairs(tbl or {}) do + if table_match(match,val) then + tbl[_] = nil + removed = true + end + end + return removed +end + +table_match = function(left_table,right_table) + if left_table == right_table then return true end + if type(left_table) == "table" + and type(right_table) == "table" + then + if #(left_table) ~= #(right_table) then + return false + end + for _,val in pairs(left_table) do + if not right_table[_] then return false end + if not table_match(right_table[_],val) then + return false + end + end + return true + end + return false +end + +smoosh_tables = function(left_table,right_table) + local left_table = table_or_bust(left_table) + local right_table = table_or_bust(right_table) + local new_table = {} + for _,entry in pairs(left_table or {}) do + table.insert(new_table,entry) + end + for _,entry in pairs(right_table or {}) do + table.insert(new_table,entry) + end + return new_table +end + +get_player_index = function(player) + local player = get_player(player) + if player then return player.index end + return nil +end + +get_player = function(player_index) + if type(player_index) == "table" then + if player_index.index then + return get_player(player_index.index) + end + end + if game and game.players and type(game.players) == "table" + and game.players[player_index] + and type(game.players[player_index]) == "table" + and game.players[player_index]['valid'] then + return game.players[player_index] + end + return nil +end + +get_player_armor_inventory = function(player) + local player = get_player(player) + if player then + return player.get_inventory(defines.inventory.character_armor) + end +end + +dict_to_str = function(dict) + local str = "{" + if table_or_bust(dict) then + str = str.."\n" + for key,val in pairs(dict) do + str = str.."\t"..tostring(key)..": "..tostring(val).."\n" + end + end + str = str.."}\n" + return str +end + + + +adamo.color = { + clear = {r=0,g=0,b=0,a=0}, + black = {}, + white = {r=1,g=1,b=1}, + red = {r=1,g=0,b=0}, + green = {r=0,g=1,b=0}, + blue = {r=0,g=0,b=1}, + yellow = {r=1,g=1,b=0}, + magenta = {r=1,b=0,g=1}, + cyan = {r=0,g=1,b=1}, + softpink = {r=255,g=150,b=150}, + softgreen = {r=126,g=255,b=126}, + darkgrey = {r=40,g=40,b=40}, + lowgrey = {r=80,g=80,b=80}, + midgrey = {r=127,g=127,b=127}, + highgrey = {r=204,g=204,b=204}, + darkbrown = {r=48,g=26,b=2}, + lowbrown = {r=84,g=50,b=13}, + midbrown = {r=145,g=95,b=41}, + highbrown = {r=222,g=184,b=135}, + hf_base = {r=46,g=51,b=5}, + hf_flow = {r=0.7,g=1,b=0.1}, + sodiumlamp = {r=255,g=223,b=0}, + syngasred = {r=255,g=120, b=110}, + heating_element_core = {r=255,g=50,b=0}, + heating_element_glow = {r=255,g=40,b=20}, + gas_fire_glow = {r=1,g=0.5,b=0.5}, + chemical_fire_glow = {r=255,g=63,b=0}, + is_clear = function(color) + if not color then return true end + local color = table_or_bust(color) + if color then + --color = util.table.deepcopy(color) + color = { + r = color.r or color[1] or 0, + g = color.g or color[2] or 0, + b = color.b or color[3] or 0, + a = color.a or color[4] or 1 + } + end + if color.r == 0 and color.g == 0 and color.b == 0 then return true end + --if adamo.obj.match(color,adamo.color.clear) then + -- return true + --end + return false + end +} + +adamo.item = { + types = { + "ammo", + "armor", + "blueprint", + "blueprint-book", + "capsule", + "copy-paste-tool", + "deconstruction-item", + "gun", + "item", + "item-with-entity-data", + "item-with-inventory", + "item-with-label", + "item-with-tags", + "mining-tool", + "module", + "rail-planner", + "repair-tool", + "selection-tool", + "tool", + "upgrade-item", + }, + color = { + ['chemical-science-pack'] = { + base_color = {r=90,g=200,b=220}, + flow_color = adamo.color.cyan + }, + ['coal'] = { + base_color = adamo.color.black, + flow_color = adamo.color.darkgrey + }, + ['adamo-chemical-fluorite'] = { + base_color = adamo.color.midgrey, + flow_color = adamo.color.hf_flow + }, + ['adamo-chemical-gypsum'] = { + base_color = adamo.color.highgrey, + flow_color = adamo.color.darkgrey + }, + ['adamo-chemical-calcite'] = { + base_color = adamo.color.highgrey, + flow_color = adamo.color.midgrey + }, + by_item = function(item) + local item = item_or_bust(item) + if item then return + adamo.shape.item_color(adamo.item.color[item.name]) + end + return adamo.shape.item_color() + end + }, + manifest = { + pu238 = { + "adamo-nuclear-Pu238-oxide", + "plutonium-238", + "pu-238" + }, + HF = { + "adamo-chemical-hydrofluoric-acid" + } + }, + -- Returns first item found. + find = function(name) + if string_or_bust(name) and adamo.item.manifest[name] then + for _,item_name in pairs(adamo.item.manifest[name]) do + local item = item_or_bust(item_name) + if item then return item end + local fluid = fluid_or_bust(item_name) + if fluid then return fluid end + end + end + return nil + end +} +adamo.finditem = function(name) + return adamo.item.find(name) +end + +adamo.get = { + from_types = function(types,name) + if not table_or_bust(types) or not string_or_bust(name) then + return nil + end + for _,category in pairs(types) do + if data.raw[category] and data.raw[category][name] then + return data.raw[category][name] + end + end + return nil + end, + recipe_tint = function(recipe) + local recipe = recipe_or_bust(recipe) + local tint = recipe.crafting_machine_tint + if recipe then + return adamo.shape.crafting_machine_tint(tint) + end + return { + primary = adamo.color.clear, + secondary = adamo.color.clear, + tertiary = adamo.color.clear, + quaternary = adamo.color.clear + } + end +} + +adamo.shapes = { + color = {["r"] = 0,["g"] = 0,["b"] = 0,["a"] = 255} +} + +adamo.shape = { + color = function(color) + local shape = util.table.deepcopy(adamo.shapes.color) + local color = table_or_bust(color) + if not color then return adamo.color.clear end + for field,val in pairs(adamo.shapes.color) do + if color[field] > 0 and color[field] < 1 then + shape[field] = shape[field]*255 + elseif color[field] then + shape[field] = color[field] + end + end + return shape + end, + item_color = function(item_color) + local item_color = table_or_bust(item_color) + if not item_color then return { + base_color = adamo.color.clear, + flow_color = adamo.color.clear + } end + return { + base_color = item_color.base_color or adamo.color.clear, + flow_color = item_color.flow_color or adamo.color.clear + } + end, + crafting_machine_tint = function(primary,secondary,tertiary,quaternary) + if not adamo.test.is_color(primary) then + + end + local crafting_machine_tint = primary + local tint = tint_or_bust(crafting_machine_tint) + if tint then + if type(tint.crafting_machine_tint) ~= "table" then + tint.crafting_machine_tint = + adamo.shape.crafting_machine_tint() + end + tint = tint.crafting_machine_tint + else + tint = table_or_bust(crafting_machine_tint) + end + if type(tint) ~= "table" then return { + primary = adamo.color.clear, + secondary = adamo.color.clear, + tertiary = adamo.color.clear, + quaternary = adamo.color.clear + } end + return { + primary = adamo.shape.color(tint.primary), + secondary = adamo.shape.color(tint.secondary), + tertiary = adamo.shape.color(tint.tertiary), + quaternary = adamo.shape.color(tint.quaternary), + } + end +} + +adamo.obj = { + match = function(obj1,obj2) + if type(obj1) ~= type(obj2) then return false end + if type(obj1) == "table" then + local internals_match = true + local tab1 = next(obj1) + local tab2 = next(obj2) + if not tab1 and not tab2 then return true end + if (tab1 and not tab2) + or (not tab1 and tab2) then + return false + end + for k,v in pairs(obj1) do + if obj2[k] then + if not adamo.obj.match(v,obj2[k]) then + internals_match = false + end + else return false + end + end + for k,v in pairs(obj2) do + if obj1[k] then + if not adamo.obj.match(v,obj1[k]) then + internals_match = false + end + else return false + end + end + return internals_match + else + return obj1 == obj2 + end + end, + stringify = function(obj,ml_mode,lead_str) + if type(obj) == "table" then + result = "{" + if (ml_mode) then result = result.."\n" end + for k,v in pairs(obj) do + if (ml_mode) then + result = result..(lead_str or "\t") + end + result = result + ..tostring(k)..": " + ..adamo.obj.stringify( + v,ml_mode,(lead_str or "\t").."\t" + ) + .."," + if (ml_mode) then result = result.."\n" end + end + result = result.."}" + else + result = tostring(obj) + end + return result + end +} + +colors = adamo.color + +adamo.recipe = { + -- Ingredient/result-based colors + tint = { + -- adamo.recipe.tint.apply + apply = function(recipe) + local recipe = recipe_or_bust(recipe) + if not recipe then return end + local tint = recipe.crafting_machine_tint + if not tint then + recipe.crafting_machine_tint = {} + tint = recipe.crafting_machine_tint + end + local old_tint = util.table.deepcopy(tint) + local ingredients,results = get_io_names(recipe) + adamo.debug("Applying tint to recipe "..recipe.name) + + local fields = {"quaternary","tertiary"} + for _,name in pairs(ingredients) do + adamo.debug("Checking flow_color "..name) + adamo.recipe.tint.fill(tint,name,"flow_color",fields) + end + + fields = {"primary","secondary"} + for _,name in pairs(results) do + adamo.debug("Checking base_color"..name) + adamo.recipe.tint.fill(tint,name,"base_color",fields) + end + + fields = {"secondary","primary"} + for _,name in pairs(ingredients) do + adamo.debug("Checking base_color "..name) + adamo.recipe.tint.fill(tint,name,"base_color",fields) + end + + fields = {"quaternary","tertiary","primary","secondary"} + for _,name in pairs(results) do + adamo.debug("Checking flow_color"..name) + adamo.recipe.tint.fill(tint,name,"flow_color",fields) + end + for _,name in pairs(ingredients) do + adamo.debug("Checking base_color "..name) + adamo.recipe.tint.fill(tint,name,"base_color",fields) + end + + fields = {"secondary","primary"} + for _,name in pairs(results) do + adamo.debug("Checking flow_color"..name) + adamo.recipe.tint.fill(tint,name,"flow_color",fields) + end + for _,name in pairs(ingredients) do + adamo.debug("Checking flow_color "..name) + adamo.recipe.tint.fill(tint,name,"flow_color",fields) + end + + if not adamo.obj.match(old_tint,tint) then + adamo.debug("Tint changed on recipe "..recipe.name..".") + adamo.debug("Old tint: "..adamo.obj.stringify(old_tint)) + --adamo.debug("New tint: "..adamo.obj.stringify(tint)) + --recipe.crafting_machine_tint = tint + adamo.debug( + "Recipe tint: " + ..adamo.obj.stringify(recipe.crafting_machine_tint) + ) + end + end, + fill = function(tint,name,color_type,fields) + local fluid = fluid_or_bust(name) + local item = item_or_bust(name) + if not table_or_bust(tint) + or not string_or_bust(color_type) + or not table_or_bust(fields) then + return + end + if fluid and fluid[color_type] then + for _,field in pairs(fields) do + if adamo.color.is_clear(tint[field]) then + adamo.debug( + "Applying {" + ..tostring(fluid[color_type].r) + ..", " + ..tostring(fluid[color_type].b) + ..", " + ..tostring(fluid[color_type].g) + ..", " + ..tostring(fluid[color_type].a) + .. "} to " + .. tostring(field) + ) + tint[field] = util.table.deepcopy(fluid[color_type]) + break + end + end + elseif item then + local item_colors = adamo.item.color.by_item(item) + for _,field in pairs(fields) do + if adamo.color.is_clear(tint[field]) then + adamo.debug( + "Applying {" + ..tostring(item_colors[color_type].r) + ..", " + ..tostring(item_colors[color_type].b) + ..", " + ..tostring(item_colors[color_type].g) + ..", " + ..tostring(item_colors[color_type].a) + .. "} to " + .. tostring(field) + ) + tint[field] = util.table.deepcopy(item_colors[color_type]) + break + end + end + end + end + } +} + + +adamo.test = { + unit ={ + recipe = { + tint = { + apply = function() + local tint + -- = adamo.example.recipe.tint + end + } + } + } +} + +adamo.example = { + recipe = { +-- ["crafting_machine_tint"] = { +-- ["primary"] = adamo.shapes.color, +-- ["secondary"] =, +-- ["tertiary"] =, +-- ["quaternary"] = +-- +-- }, +-- ["tinted"] = { +-- name = "test-recipe", +-- type = "recipe", +-- flow_color = +-- } + } +} \ No newline at end of file diff --git a/gas-boiler/graphics/entity/assembling-machine-1-pipe-E.png b/gas-boiler/graphics/entity/assembling-machine-1-pipe-E.png new file mode 100644 index 0000000000000000000000000000000000000000..3e277b5a56290df77b1460688340376a59b8b3b9 GIT binary patch literal 1872 zcmV-W2e0^vP)p9&)&ZTE1y?{LmN=X^u4Xkt4C2U6=# zkE-geuii2ohXR%W3-o{iG9d6F!vJh9runkEvl=Blje(m`RiNb50jxrak@;?uZ)hy7bf*Y zxqvFFqI~n8TN|@__UK?Zcwt(1-TwpB09vWS6satJeI=Y^5j>)wtDl`KR%u6JCiRr}GE@TA`Ir<+p^d>PKq7(= zf>185aQVt5cHVh+^Pz{FIn#Mgd$f1EhmsmK?t+xY7-9r%Er~UR zD1;apEG%NJ#Z5=7uP>{%^`K@b-Enj09U9l8wYm+A3%TAGt*q9X7#w+);C(n%O%U_MRBgPDE&$2Ja)@2SN}uir_s8h@$A-ao1M| z6`7lng%&G;sv6wxAuhxRebXNYb2>OA90lcK46iog9C8{p^o_ zu=w!i#bGX;te1g;mS*oQKDv1UX~AfP_l~A%h}trnOqta!H*f7DK^Rs8HrAFn8rR1? z93332qRqoG^vm0Cyh7&$i2=R+8fgknBE#hsnr4noEk~n6*0YT3?{0Jb)PRU5%!Q_I zj)Bj7|A$*Aa$~fm+N*s`jnauusOyfru;?x#Ay7AS$};0!vi0UR z^ZqVTCN6Hxd-K-*J!xX`E?{gzJ)NO##@?+RTpvl4X4bUt2Oh8Q`1)jg zaHDNoT~-z8aDmz-49kdB5hX%d<;?1quJ?o}tgWt-*^IjB-Vc0WXv`Zo`))R#K3~u3 zQH+s=g#~P05|f-v_gIAB1red|d%PH~?;UV$Zx841DLK_D17vqJ|I^WU`pW+PLGQh% zEK8<+MwSUhst8?2P?mbuASPpcxJ&N?QRI&60jw1|tdv^sH?fT|uE*d{7^_dFX{wAd z%<2{udPHeN8@je5D+;uRcGl2G7*FTly`ABkM?NY*M6_1wcU|vxr_F}jA)%Po7J>k zPuI=y-m|ijKd0}t#O2ChG}q^?uM?|pc3t;&*L5UGN|xu$d`VSCiXx#bb0mVbIZ7LV znYkCZKMNtTdhWao2g7{9J6|PfvKeDkMNtr<(7Q;cYN8z?B6MAk^KrVpwf~I%Z^qrZ z7`%_Kx2-$0R_`>;{IG40%c`o1s7rb;WHh9Cjv(H3?Krba%m-W*eT*VSk)BsjIp7NbqqD+Q1XS9f@4?4|0cH!)k zMycOhErfRZt-79nX5NLD6RrN>o!`>5$ixfke_f;(){|0@)<;1CSwxXr<+?tE?Mak--~S6UaP%VBMa{?n0000< KMNUMnLSTaW$CAhZ literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/assembling-machine-1-pipe-N.png b/gas-boiler/graphics/entity/assembling-machine-1-pipe-N.png new file mode 100644 index 0000000000000000000000000000000000000000..dca8cfb076a75bd00998f9306d9141e41e2dc1a1 GIT binary patch literal 1415 zcmV;21$g?2P)jYgx9EL*W8i{L=8y>T!EOd#HP zlaP(c)&xR+LH@ ze3kNwJX2;mor-sF?hxqm=Xv2iYMlQ#&{}k2$r~F1|CwuopusywIxm0ZCtqU{OM}1NYjgApAq%sW% zMbt@{jK`>UHdQrioc-~*7xic7lP?brm)Wb{jClRZ)(o z>*}AB)FZ7WyHAcdJUOG52~SVYFqK6}#m?m&in2thfFKC*-Xmx@S>&W`7FkXhg>>T> zgnSJl-Y<&!bL*UWk&K|t=4=#v_}*LpOgizUqh-py$NQvtMP3+s-5%r7h}+k%bN$LT ziI&{Haf9Q>kJy?`xwLtn`Nl%a%NYe%VZbA_0ZQt;EniYS1q0FS$T^z*R_BBWi=m=1h_pV+_85Zq#8k93X_^ z?CgxfSc=NxonX+5zZWU}**q)ed<7v5L1{1xfKX0iF|{p>sBgYp%i6lXly_ofOe2u_cn0nXW@^g3z-x_eKm!N!6O`6S6;U_M_W_DGgpp)8 z88IBj4A!QsZ){Lza~c&O1uU}+7ld?26Oz*5nu0LyP?{Q{6pot4S~Os)nxxys6uEez zOq!Q&P*ogdhe#oy&2T&+)Pg5_dpx{*mw%KcrZhxxg!SN>HbA#G!nFs0USLsO#h}w= zz6?nh8QqSh&I^JtAe~!)-vXX*^H&XU?b7yoUS(`=UuE~3J5;An+NXV&M+hXoX=uEoSQ?5&fsme#_sF^=QsRMOpIXa3sH(MJc6zMYC<=foX-`v}sM~CSzJHGfyTI62mqQMFk9 zJ4;iB(`mBNv3CxnNNwZ$fCns)0S5xu0d4~C0dEK)ranYA0cWk-2Wla}IUfQu;9k484?G0^1(-kyRXaZbYQU}93LpY{z(wHA)!73I zsDR~a*{?bW4B%It0v6B!KnWD9SpoGb4PamDuf6I3hye}wmAzfbvHHgU&3=_v=D${x Vi$v}7NQwXe002ovPDHLkV1mA#p}_zE literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/assembling-machine-1-pipe-S.png b/gas-boiler/graphics/entity/assembling-machine-1-pipe-S.png new file mode 100644 index 0000000000000000000000000000000000000000..46f8dbd749fa1d0088c1e01fa8fad6d57bab0b46 GIT binary patch literal 3109 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 IM6N<$g7C%=c>n+a literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/gas-boiler-S-light.png b/gas-boiler/graphics/entity/gas-boiler-S-light.png new file mode 100644 index 0000000000000000000000000000000000000000..c43ac398a68a484afcf63b56ba1b6126f54965c2 GIT binary patch literal 5665 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 Hu0mjfjV0`R literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/gas-boiler-W-light.png b/gas-boiler/graphics/entity/gas-boiler-W-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2a907d7811ed4093379335a11ef57e4d1cc6babe GIT binary patch literal 7457 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 literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-E.png b/gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-E.png new file mode 100644 index 0000000000000000000000000000000000000000..62c198a9d45c44ab7387dfd27c6961a7c0ab3291 GIT binary patch literal 5930 zcmV+_7uD#AP)mtkU?GH&h47|VEHD@&+1Qwt+Z49D%Y|#M9IA4B(;dF)oD;#~ zzD!pSSykQTHnF<*yHEH1Z=8tuNBrY>zSRT>Km;m40sFSkJ^vppe3xfCz}DI8TW4Sa z+}YnZXW-W#`0NL6?%UpbU{{1IB5XNf{xg5+%L0gicwzekKP3EVdQ=|1_~M0H2IaXn z>y?wCeAas|KKsn2v^}lUz1z2%VJs)5@cWBSuXoArfBFkwSbzG{p9}x)-~ZC;Pxa_u zJ5JMUd*RPcqMI4^GtRr8_{`^jw4O}2WV!e+Y;U#J4MPgS9UIkKmkz40k3;{dpZ?1~ z^;iGvul~2ipB7M8%=EC+cDMFTz+W^C^?JQ<-SRr?{+Ru3CtGn^Uw+~97qkpdzWR-C z{P}wF?!Bbp>Sv!lc;%J15A6pD^kD`&MJAP(=cAJ!PKB3JDLZ#>-SYSE-JxWoPvBhO z3!i^hUVZHb_wF4_*RN+O4?ouS<$pbOVdwtgN&5o_>IL>@l{=`tdooP7o>%YA`zko8 z8mPA@<|(P?`t=*!xw~XODV(+{PV`COFZM(Eoo3qHX}i&WpfMVp3{GUrsO2zLV02D;QUvwTzm0vLizPy{k7lF9~4k4#+DgY zMgM;1^r@Yl{Saehe}9h{BkQ)~@J^38&l7tUr)xM}We_3Mb9wPopT82T>X%>sz5nyK zp8KI||M|_g-YMTJn7{Kke){bp4>R$`zy0OkxbWTTs5dj6SJG9%Yu!v#RoUI$#mp$B z;GLr%jIBwe_JV501WbgIT7K{4m*scA_S@%DxBA7gU;p)MS1(rI3rGW*Zcolle0APi zIR7}0iWAA}Wc{w_+&Nzl!ytX%v$wZLRaG1x9|KT%Lr|P|gdmI=EEme~fTAj{@&~c1 ze3{L+8@I*}{==7^uH?dgBVYc;f^YuZUwPr`#b@d(=k_lC<8S`%-}4eD zV}^Qek3V|DCX*l;we!Q+skqHY-g~O5!a0W_7(!O1A9d3NIEO0uU^sP@QL)rdE$6?V zy5O#zpZ&`(ec{>c>g`KK^VNQF`%|ZZmiVM!1bK?D`Fyx$>PAYuGNTr3B<_}n#)?%m~Z7UlZQw@G*2=koKH$eK7hSwBAO%?uHOscorp z>R~&^NGXL70y$@*cLe7c#{nk}19B;-8fHeb`vgC9^=U3#IM2z+socALr#`6l?>_bP zW!CM|pWeBL#mnqmo^ku`eLnx$&++ut=Xmk?EBwKK|20Ytss+vEu|Pc_UgUmpey2~v zo~t5#-!q$UQP(xzdl0C+uwE;M0|irX;!q!X`tl{3rY3~I>FI*Sz1w`|N1pY~bjrAX zK->0gAMA0VGA5VK(X9`;^=8klcVA^J1N%%73@zoc-IFx$<0z_%b3)(u^nHhDA(zakLQ%zg zp&biqf|=o*!+TE|M$n9N0T*ga{pJUmaPGoICN`o1>t##Zt~okcu;@q5Ke>zZf!VZv ze23o-g+9~wMT&Dyz4v(US*=!#MXI6+H!R3SthPCN?qqmpu= zWF`2TCof*5i5^=o2$pFaY)@-ubwzNVCf3xG4*{A@+^Eb|Z5=`wtE#f)a=AHrGt{82 zYr1a0aHtyI3*I}-pp;B0g<%*dIg`{Fvk^RKaRl!nFM02cS8)B3K&E!a*0f<71G|%& z>3m8NPw?UKKvPk1=!=^5+4Z^$%jFX19IBfX3?UGzDY2?p4TkE5<~B$Au%v9BsVb(1 z=0Yk;uZp>fw(k+`p{kk8wh1BNLWTE{rkPPsx0%i-xKKa7;OBx9<)Wd@I3ximrI2%G zdwZL494UDq2zU`hgrbJ`8wyRiFpP=CV!<$s6fKO&==%{rQ+!oXPiOea7B<_Z3Bu3{ z)z%K5`7`G!*WaOb1J~w}F8B|bLdBdH8glVs=2A+elpb|ZAq2b_MFQEtIf!Sa$%!zg zLMh5Pj>H(i3FDY)*GqCzN;Xu5Rh!5v_$snIzCnL-hu41pYkcFKH$WUJhIjH|Oi6OyjwR_JDpB#Hk(mO*%Wng zG$CP{a0sdeW5Z739HvUinVd7u3C;()Ug^7mq6Hr}G%QlceTUaX<%GJb7>0q@-@S=s zW!V;n{P;GH3;TQK^J?Z|Xv1_C=kvLwVZhWldT>Y?m+aLm9Fh6!3VZxQ$F|7H5xArIn%e}cLM!K z|L`A3+pd1}XMgTz|3b5M;3~(2{v=v|2<3><-@@xLt1jUsbNkL69^8Hn9TU+E(TsC; zMyX0EWdk$>6rt}&EN{XkXT`MR{r7L6npmtB+&{d}m=cB&oU&YXq@n-Lqwm_a41N2< zH*VaVHPh{TZTDa*&cb{OU;m%KPTMIb%a$07t{-^s?KeoP9t(B<%C{M#lq2XVi*!hjdl&IH3Tp0AIvdxbbUsgC)9H;UB1SpOBXpj zdH_IOSFG0^IwmI5nlNc-+m3d5L_a9AtvMxUW;;_t?Wrn{3l$HJ7MNyUef#~dd`B|< zlYjcpZtX|sCQ&{ofu~9$l+JK=R?{4iH+A#&-I1fy%=UJT_kpYhkKtovy=qC>kYU&~ z+cA>Tz|aj?F8CPnAuyRn7H#6-+6z4Y-1BTrE57+#zsaH-8FkY$JT~h^u(9x-h`m*m z%S9+&h|b}hfr(?XHDlE)ZQp?}IPbABk=>fN|LB`oQgWzpvS|nFCUUYAR&C2p8mX#C z=OY5#z4w4?=V!eB@>?vIOK#s^@WhkPY|7qu>6{+{Jsj1hUS6)u{k%Bccft$aNiE34 zyIN=(G}bVjl8YzTyX?#x+UvJ)2r+p2RFG20X+wcc(|~j2lvpp;Ot-cOp<)nM)|l;IB8o7Ge7KO?790DbUpJHg;GNv8yrd9o{LUWI)M$)2F+v6N*^KS| zCzx#QB3kev5+^lYHq+@a3}@rEqaXDVW2vhcQlhFGRwJAa#_>ASjY=^vfuj16inH~_ zmIlAl1ouje&WHJSuA2(yHd*YZ+nDp4I@qq6#t~5?IK$Tsp{^b^Go=*jNzIszoHDA0 za}|ciBoHUN^hv=rhzktE$T*Zo9ot7~_y$~eBERH(oFVM>egC7*xmrXdRt>4|=$FU5 zyE>t+GEL>^b;SFC)D1qjl%nLE5ho~)H1u?RhZ7Gt)~gdvPUj56MlRZ#)C4j5qI5(4 zNRI+=I;eWj%g(!BIe+2FH=lUoT=&#dPib8@G);w%6|s&uHZ(b%gXDsgaTBjzu(R=` zsv_ASr9>VRv8r%BGW2VX9^9epN4yKvF_Mxpro@=b#{+sMm>#3~opHUq=e@jpa&lTk zzqtVQbXoW~7I7j6-L%)bH znb!29(hWUr-%$#9UlAPaZOwW1nP++7$`wqFwojC-A0OyuWn#C{@ekIkrH$k0R5x56 zW2CAgK6sq>tcJjJ>Zqe)DN!`j)RAG>cxHQhj`NN*42Ttq3F;#4dWDY__m57w{{9`> zA(K-kmyZ#n7w7)b9Ps*`(MrmHn8)GmaTwZ^l7;ZcD&K52qpB-hh@A8d+q)2bruK$+ z4wn<~m9e2?QrN3lXy zw<$WN+&f-<$YvnVzD6S%zC{(3xkSW3X47x zYey56;Ebk@cpE8d;5-S(c-FJ3bKq-08Tytn7n~SlDw{pwM;-knN;c!*;rpW2^<%l2 z#(ZbB8g8|1f1;}Sp=7SAR8_U1OYw9m5TY>+y4mmskL8WlpUp9jg*1#C8Bi)hRTEvI zij$3`h~Pv&`sfckwf)AWgQ@4ZR|CwH%8a^{@|0l%X4|SdanA8jpL+PZ>kC#AVgjh&UHeEr<=Q*CP(-QlXe}blQI9BeVXUMH%D+tfgj02=964ZkJq6 zhkm%;b={cKMrM2{olhncoQsTESagNl^rnRwUAX&KSiR)#88p%n)Qzb`sPVaV)!%epX98)6I$ow5H$BgeoIx0 zs?v2GbzKwV=6Kh6%GP`vUxC+z6KI+mS2Est)QqlAc<-s}icnQl(_N~`bR)8TjD7vL zSNt-sodGp)3E}#DR=*s)JI*PSQaO1z_s1BCF*0dt9y~bY{ribfIdB;%37k+xhm}l- z0mCtyZZn&0v%i0i^G{vo!lkDPRfCA*$A9dq`_N?ipdEF}g)Q$Fy$Y}`B6&8go+?Gp zn-Ox>NnMA%5Q3;Gb=^>klJdxy3SNw+QW|dzMF^onHDNePO01U)#$jaLwk#H>EEgwd zvcS=ZsZ6INz=XT9!D9Seev?=^(RCwcM&GpnyJy!z_*g)zAbEG{3NWbJWZjNU zjP7(YiElcQ^LXqo2GGX+ak_URS`K8 zd=VjK!%IOdq3W;@DL6z6!#H3jXDYU^T=lCPH;;e*`t@T4$`kX=0Q0?A0*VOdy?525 z36hfTsG18gTmgb}?rdSU=>g1)ls1`erO?C?G?6tRE`sxDNi0uJIaw@0grV!-5YvC1 z)iOXk+V^!UOhu%q+Cf$Oeec|uvz`ZbL-1SUIEwfFQH(xhE;Az)!SYBQ6%<{#A=ogCkJdgR1nRop zcvl?Dp{7rQmma5yDr`jGs&1@q>NTKs9qjz}x32HLAD{*t=B(fB`gE@pjowKSvAa2G z*L8i`EYSK*$#ISt?d2%e^jI-SK&3=}|f)&dh)Hbe;4Q0e$YdXJr5UfgC+JHdR~YtgGFfsh>=$xtUD7 zk589UCaUTls>hr4WCx%ntJ=`@rnxs4?hK=@oY|p-aL3HGeLtv2zq;y+eWIfmL3C5v z5|H~LpQLPGYj9&#iBpx!-nls<6EhQ4<@os6QcB0choxX$5GzIXwzu@EI=^j{zOwYX z1vgvda&59x8^^;Zi&24E)DF%r!WLi|Vq7^_zmfB>J*NCWO0n%R4WAMbZI0LF6;fzx4e3Z~W043g|oU+~ISd zeeSxbecE!lqs9KW726+%ZdOT8f8pw`p!;WC)tOq6d#B~FV*GPvIcUkRh?RFRc_2lNcJbVF zU2^&~K6pF5WZY{Hl6_)k`oq`nn%8`vJRFev&wgw4CKIvy7;k!K%OG}A3HK_;(Zt)r ziCS>R+b6|d-1DLa*XCZXPQ3tJY@DE!?`;bGP!1giG`+6l@ROgqJbx7HX&7gDELTPI zt5WQ)M-3|ltleDhvq!#Dg`AP1CaIWQYP^7OqbvH6lFrAq`zHhYQ@JCiFNx{92XnVN zn0wJu&Rf>20&kV9Eifs?f~sMKq>83w?AJmnP!w))EgB?&{d4A4sU<4&byDVbOww z0V)Y31QQr$lKcUX0YqUCMZw7^5+Ei~tc(y6Mj1I+mg4~-?sn5%?sB=is=K-#_i>(k zuh+-moa$URM%YlnIP#W`_FiZ0y&k{)z1FujeET8%@c53$55fF>1Nm>)uG#-RIXtuM z%FS@U{uj;Y%5UDd{zm)M#gSXBHqymSOez0ii0O~#3;$;C!@UcmD~td1`OmKa{r?S) z{PML=|MPc}AF)s~`gN5jfa@AXcKLP&kk;RxB#_sPeczPa(? z3w_q#_|rfA+R+azoY!7^wi?9I^IaGJ9muPiqXC001ZQE;8ZHkFgUa&f9|~;^F=awj zQjB;Xi7^qQlCx5l1x4uySwW%i{hg4~7oscw)tA5g#^J}tum6zXd^DhIue{QjQTHF# zo9@?EeGmRaIb1M`56?4NuMr2BqQu+!LB6lNFo+11uLEeV;g4bZk0LN?@!( zjKf+X=Zv$Cq=qQ^-ehv-m;UHazW6`?U#p$`ZRo%H>Z@+#RzKe@R{z-=nWY#&l&Ww5 zI9o6pwTy-}lcwR^L5ZttoGp0ZODYpdLFv1mlroATgvhE3^xhM^C-}hee8GC->G}?_ z7Uvu}WqeHk#dqP?ouvMMy?Oh=KN!jR#h?4kZyqnxKlR6lKOR%W6@tZ3RE}|5F&U32 zikkBW6Hb;MvghUpcX@C$C*({G2NRmn@$-v4ZiPLEEX(R zD>i*kh#plX_;8d}J{ODlxvPJE=fUS8eLvuQBw0WE&wlLX(1)*t&eMk;YYk0RaA9u@ zP0hLKkdw9N`psM1J3L0k;9NmU5itfa7FU!YhU1eH$V$$coD$ADoHGbQA3TLKBXuIpGV=J-KxZm_CA2mL)|| zpsFAC+X;s=`qOq++)5v1OaOcVvgkA(`_~wfgkzQfRp(# z%f*tI5+XuYMG=g(2*T4(Kg0F6-XJN2kT3{2B+8=Z=6km(oUlKevVXQ=el(}^9%F>_ zv+Bzl-LF14p8ww87aV@&r$6&Wb@3Rd4;TCi;8pSF0fcE z>G}@uH)zhZZOf&L7isE>6xR4|!>9l8%Y=}2F-|6iNJ^3U{1_*ZZhbpG^>JwAB zbwWz4Hl98tVp4pJ_-;cEJ%VuV;DEi!gtN05kDWU}`!zO2p1bli@87z`dcI)T)GQv{ z!!PDs*q@R%8wzVUJDVXXQI`!#4SW0hoIiga&CvHf&RL#+{zY!zdUqQu6(u1m>-CzZ z8IUz&CCi{{UU_h`{GGoG9CPYgKYsnmtB-$$DpQ)4u7jJmK4cRT&1fG?N!JH_2&5R9 z?d|c>^Dpr9W0&~kv(J+I4woaTTVa!@B=P>YzDaF`QB@$m!{$gKnbpyK@Ea-v%abEC zWemdJXoSs~QiKZ!XL;tz6|6DD;OTo$?*off$70oSvi98m;4UOf&O+O`XUA1_^-)QV zIqkZyz4A&^?8$FeGN70Q%nXe#0Z)> zx__55lOdzF!Wpne5HjS5=75n*%#qP#L{5>}{*3u*MNAp2LsfCs;803u={FndrlBkf zuD|sbA@nFhN(lvuqQI3E^Tm=uGa#nKbTWG4?%~OQeG~>cpSCyc8T+php{QEE_KkO0 z_Z!yUqgja|kV2p-E3Q2CB$qFoC-rNB@3$aGyzr^#a3o5T2olLTV~PrEm7)NVL{(YV z>kS$M_wIj)ieue(U`w(pR+N|{g*Y_ytWF|>;fQX%X1ce>@nX3()G?7$rfG$yZdtBZ z4B7!Xg`av1kl%Bd$y`<`)`-)K$jFB0x>4K zO-J;e)%=(zFJGn*VOW*aP7o4eK&()d1j`_(kA;oP7(KM7s?9pQN zg+~$RC?Ko*)xp`vO5S?!E@BJT>ov>e5<$o*F>VL6RmIwO6iyIpP?W5Z5PM9yU6~K+ zieX)XDNtKLQIL%zq|9(K#TsGIbQ~|1EIW^eM2eYi6ES7ET|VTD7=voY76oF2qOeHH zXi8hJw^(vKKVdW)07}~qP=%9KPgxc}@u-480p#)hD&9RjBISg01s5(p#y4+VXMQqA zL*NrHy+FTOF&>X_WkDu^73!*izGpZdad2kFsK_*B0k%Y3NwS8d!n*TR!x5Si#uj*l z9%~D1j3fo)EbDHC0xE(SgUKMWjeTZ&Qx>ZwgQf0Iy)!dvrxeyA zcIQc!ORN~i?HC^-Qr3`_dN_o-B`lVNRY#G8oD>y<*a9CTNreQMvL1f(!o7V6ikxb!A^GKHu<;3R2yMekLAjYs<&dD(%3bVbvt&uD&b=y+bB}GwU zEQ}{pimGNZ+oK+|6jpG~(ydph3hiiubtUWGgGnS+h=F!gLmy}|EH|F2bgb4r))nN; zR<*1p`mGJhs;KJLFe7Nr)MZIjC5A{@mD@2INAK72Na5VLan~f-diLmhmM2Fz1dHIT zB^$w36-8Chwhe9V7z`V#c7QD_>bhkxoRCxC-ktZ!nrV_SKRLz~6@3Wwn+@%7h!0!O z)5nB}Wjq|y_mQHgx$h4#Wr5~IFa|-Xih^|rWRxs|ri|(~1KIZ;Qxu#%IAFb5)Av2y zCOp!Gr>-=5LMC`mih&2q4LK!-!yz#x3N;J{1I`|tWq&q7!-l+jYxDVn&VN7(o}&l% zu|^nAry$VvJt_r9hlez6i*b&w^Mnv-2O|c<5#&r^!6@wSjR-NaE*!>ebEJC+`A8;NN_Y*-iz1>pM!$dcDfyWop<eWy1#v89=jr~Z?x_RX2-S@b0d`MwE`+Fs=5xOW0nh_!y z)9ev8D>Qn_!mwT*Q4|(ul*J|xLZEbp6cj~StWL-{a23%9%xFZ22_FNR0{w}gu_tS$ z@0Adhl{dr~$%VxUv`$GmvN$=y7@@FsVFdrztRMeIK!3%RU%Pg#K78jZ*XGe+t>eX) zUgDj1-p1t2*d{pofVE$5jdN=mG!1SrL#q+R&QMC|Ft(s|o;;Z1DHsW8IU?d{Ck1|a zpBOW?ve;oPlzJqC|Rn^<>i#b0YbN8AZj~j3Y9vOG+2` zR#$$huCOH1A!4@?b1ENH~q)*%ESIQQj5@p?PL-WERB8Zr6ZWUNAPKX)G zx?waP&~+P9%ESmE_??|uvDvJttCr*YM+}A|4sX4S#*UCO7;tsPU^-<~sg}(dzYcnG z`-2bv$Gv;^u73}b^M7s5Prme|(fJ2Ix{>^HZ(Moy;wAbIZ*ua^*O^v^J}R!MDQ7c6 zdj?yUsI$cE>HD702Xasf4coXRCz57F1Y-n=n{9xWGF{gpA`Auty!Vu4NlFQ048{t} z)d?YXOs7-&zDFcrOeV%iQ8=6%0dVHRKCUQ{@(RZv-X|X2At#7FpeYjUNK8MkLMMB1 zvn;+xXQdy(QSICAc=g5gI{sXB=F)4ry8Bdjbbmjje9;wdYT9uTN9WDT*|P7uWK(j> zI$Yoj5G>y*A@0)x5GRDm+<(w^kEh6Jw42E&A zxufSAz1n$qYvbemyHKeJJRC4~tK78C*)xMddoZ-=eDeOEPlkiD&EADJz~%YkunjS8 ze=P&uy+>_IyDP=O5O$TQ$K0d0%e=8ro zfBlX3mis4Nd=A*#Wh5Sgh`Z|^cpvyW@D~r^RKN_l2p&MNY2HB#pc4^PM24!W#^?hd z^`40MZC^T3#RCf!j)gSHIdxufBJ??F%BuaTWSrf$O;%+D?5R@hpxl9NTf5&9xc?p8 z_htv}yWZ3*c0UV@c4YT~t2^mA*umTEI$NHiz1}@{1k86Z{SL0*)fwRA)cs~xx8A+U z`L5jUo=?DFC+798ZMSRda0ki(?e5;qskR@2OuOeF$&RNvRko)(pX}<&Qv)3DV4B@P zR=e_gcRu~L*1&K#sj#bScGqz?v4_CoDd?x$h`V#x)umHeO#NE~c#mW|SUzUO%N?AD zpk}*)hh6#M2$Jfch(=oFS|}pOg{D*%g48O@(=Pifqw~! WwR3Rgm1+b40000k1X2>lC!*q1 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 literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-W.png b/gas-boiler/graphics/entity/hr-assembling-machine-1-pipe-W.png new file mode 100644 index 0000000000000000000000000000000000000000..a11981e348370f1d5efb98e81c38e4bf6b7f66d8 GIT binary patch literal 5557 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

yIC#Sfy#%NQgSKf^|X|ftrm0T1bA}ME#iKy*B z94RNpVIXBNRSg)nT4lbq4SB^lE?J*?mV?r6T_U-Lx)R25q?AI=84)4pbX?cfQB^n3 zw5@-4aH$kRDuAFFR26G0#I+!XFb%|zz#3fBQW?<&;J zK`MM$G7ckZ40YR)#)0!!9)LI?ammTB;ohMI1SuXw3EtzqM^&k+iq&d4P195f+-XgE z>d9vh^Sg#iIa3tG2#Z$TPiOVHu9J5awNG7{OH*4+E=o~FRf#bX#bHc^GnUO} z1Ti>Q5yyeW_BI-qlyu5^Dx^}=v>n}io9JeUZJDO&?Da5)&1Mr)ikr%sCug<%_LDE2 zOz#FxK%51q_rbCV?V@LUXOEl(VTRgUq!___9=LFxuBmY87E?^D*C6S2@^Fe6p*epA zq~Iq{*L8UBi7||jzS}qEcY9L~-tBfi^V+(cnQiw)iwK06xOa4nM$hrR1J>&i>kQ7q z&h8$qY{=^IW1F>XMbnX4j)LdO#N-2my%s?DCJ~}0d4ATq@4erFpXr*Ks;a@(glXjP;Fy>*)(G?MIhP;4LK+Wf z%#vY9Y(}N6TiWdlxZNvU*x$Q9nvB$S&3e5i#u!r$SDlsTO?kVW`mQ6_bv;!nEZ1wS zsW8@3SB|=JJn-NHB)?&|6+&DyjLM=mbi3y>)X#nWOg;F)_4#=O#0sb!rgac;gP6^+4OU?494{ zp@**!#}zX(l6++F%A%{O`z`vNbBLVP;hZz$IO4r$wOSElIBFaBoVDhqC%*k!c&}hz z{K!m1sK5FAiJB6oe0q9kL6EErK--Q#K4jDf!Ina}4; z)5J7QY&ILb_gJIfXgl{mtd+a(Cu*e>gX$8%+&elPk4{!JP0iN!j9K4ON?~*O2IMuv zm>8n6Xj-f|GCkJT?CtH5bH1-|Cx&4l=d`LS^GfB+^(Ve{J-k0SEl*wDD1fyXMV1G*>8rvxCDvnsWEe+b96Ww~$lkdfRF!-8?%};BrNnx@MucaZwtBv( zx&D4n=y$JA`Xjb08&g^Bx<>Z)_E?^t;=&qbVvL29g-0KGnBo=;cWe2WQTxVEb1L6+o^#f`XbjsTlzTT{JvYmP$yS+C0Rx?dlj|>G zst(Zz)^T`nz}-8y7>41#nu)szMe6IG5wV${M^ z3Mr_?H+#tbM`+Joq^^aks@UJ(zd!HNY^{CKR_^Pu)c%9Ke&lk|?8oVNUZtB(H2bJ# zD(bDutQf9LG>=~1+jr;B@37fysN9*oF;0OP6UNBxtn%Np=Y`i_{6YCZ;S5D3r^9Tx z8^lB94CC(PV|nA|O^LzV+BFiUHAV%Y`roC?INqbmA}|_c1V#ZhT6~TrI%Br6(k11$6>d1o3)Zq4#?kmuw?QQZ00000NkvXXu0mjf D^r#8% literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/hr-gas-boiler-E-light.png b/gas-boiler/graphics/entity/hr-gas-boiler-E-light.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd546056e6f3f0c725e8a98b9425aa0fc06b611 GIT binary patch literal 23875 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%0DAU}3TF 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 WP&hyDMkMk80000o$HJ<>h11Rt^@Co2^ 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 literal 0 HcmV?d00001 diff --git a/gas-boiler/graphics/entity/hr-gas-boiler-S-light.png b/gas-boiler/graphics/entity/hr-gas-boiler-S-light.png new file mode 100644 index 0000000000000000000000000000000000000000..249fffa91fa4216e771e7005bcd66d0df5f4b3d2 GIT binary patch literal 16669 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�QjCra@N%gJ95rOv)+X&rvPd+0CngKFpa#nXODt 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