├── .git-blame-ignore-revs ├── LICENSE.md ├── cached-configs └── pycoalprocessing.lua ├── changelog.txt ├── control.lua ├── data-final-fixes.lua ├── data-updates.lua ├── data.lua ├── info.json ├── locale ├── de │ └── locale.cfg ├── en │ ├── locale.cfg │ └── tips.cfg ├── fr │ └── locale.cfg ├── ja │ └── locale.cfg ├── ru │ ├── locale.cfg │ └── tips.cfg ├── uk │ ├── locale.cfg │ └── tips.cfg └── zh-CN │ └── pycoalprocessing.cfg ├── migrations ├── 2.1.15.lua ├── 2.1.16.lua ├── 3.0.0.lua ├── 3.0.14.lua ├── barreling-recipes-mega-migration.json ├── evaporator-fluidboxes.json ├── explode.lua ├── inbuilt-loader.json ├── pYColaprocessing_1.6.9.json ├── pyCoalprocessing_2.0.4.lua ├── soil-extractor.json ├── there-is-no-rcu.json └── wiki.lua ├── notes.txt ├── prototypes ├── achievements.lua ├── buildings │ ├── advanced-foundry.lua │ ├── automated-factory.lua │ ├── ball-mill.lua │ ├── beacon.lua │ ├── borax-mine.lua │ ├── botanical-nursery.lua │ ├── carbon-filter.lua │ ├── chemical-plant.lua │ ├── classifier.lua │ ├── co2-absorber.lua │ ├── cooling-tower-mk01.lua │ ├── cooling-tower-mk02.lua │ ├── desulfurizator-unit.lua │ ├── diet-beacon.lua │ ├── distilator.lua │ ├── evaporator.lua │ ├── fawogae-plantation.lua │ ├── fluid-separator.lua │ ├── fts-reactor.lua │ ├── gas-turbine-mk01.lua │ ├── gas-turbine-mk02.lua │ ├── gas-turbine-mk03.lua │ ├── gasifier.lua │ ├── glassworks.lua │ ├── ground-borer.lua │ ├── hpf.lua │ ├── jaw-crusher.lua │ ├── lab.lua │ ├── methanol-reactor.lua │ ├── mukmoux-pasture.lua │ ├── niobium-mine.lua │ ├── olefin-plant.lua │ ├── power-house.lua │ ├── quenching-tower.lua │ ├── ralesia-plantation.lua │ ├── rectisol.lua │ ├── sand-extractor.lua │ ├── soil-extractor.lua │ ├── solid-separator.lua │ ├── stack-inserter.lua │ ├── tailings-pond.lua │ ├── tar-processing-unit.lua │ ├── ulric-corral.lua │ ├── washer.lua │ └── wpu.lua ├── circuit-connector-definitions.lua ├── custom-input.lua ├── fluids │ ├── acetylene.lua │ ├── acidgas.lua │ ├── anthraquinone.lua │ ├── aromatics.lua │ ├── boric-acid.lua │ ├── carbon-dioxide.lua │ ├── coal-gas.lua │ ├── coal-slurry.lua │ ├── combustion-mixture1.lua │ ├── combustion-mixture2.lua │ ├── creosote.lua │ ├── diborane.lua │ ├── diesel.lua │ ├── dirty-water-heavy.lua │ ├── dirty-water-light.lua │ ├── flue-gas.lua │ ├── gasoline.lua │ ├── glycerol.lua │ ├── hydrogen-peroxide.lua │ ├── methanol.lua │ ├── molten-glass.lua │ ├── niobium-complex.lua │ ├── olefin.lua │ ├── oleochemicals.lua │ ├── organic-solvent.lua │ ├── rare-earth-mud.lua │ ├── refsyngas.lua │ ├── slacked-lime.lua │ ├── syngas.lua │ ├── tar.lua │ ├── tpa.lua │ └── water-saline.lua ├── gui-style.lua ├── item-groups.lua ├── item-sounds.lua ├── items │ ├── canister.lua │ └── items.lua ├── logo.lua ├── map-gen-presets.lua ├── menu-simulations.lua ├── ores │ ├── borax.lua │ └── niobium.lua ├── recipe-categories.lua ├── recipes │ ├── advanced-foundry-recipes.lua │ ├── base-overrides.lua │ ├── coal-processing-recipes.lua │ ├── combustion-recipes.lua │ ├── crusher-recipes.lua │ ├── desulfurization-recipes.lua │ ├── filtration-recipes.lua │ ├── fts-reactor-recipes.lua │ ├── fuel-canister-recipes.lua │ ├── ground-borer-recipes.lua │ ├── mukmoux-recipes.lua │ ├── olefin-plant-recipes.lua │ ├── recipes.lua │ ├── sand-extractor-recipes.lua │ ├── seperation-recipes.lua │ └── tailings-recipes.lua ├── sprites │ └── sprites.lua ├── technologies │ ├── artillery-2.lua │ ├── artillery-range.lua │ ├── biofilm.lua │ ├── cargo-landing-pad-capacity.lua │ ├── chromium.lua │ ├── coal-processing-1.lua │ ├── coal-processing-2.lua │ ├── coal-processing-3.lua │ ├── cooling-tower-1.lua │ ├── cooling-tower-2.lua │ ├── creosote.lua │ ├── crusher.lua │ ├── desulfurization.lua │ ├── energy-1.lua │ ├── energy-2.lua │ ├── energy-3.lua │ ├── excavation-1.lua │ ├── excavation-2.lua │ ├── filtration.lua │ ├── fine-electronics.lua │ ├── fluid-processing-machines.lua │ ├── fluid-separation.lua │ ├── fuel-production.lua │ ├── hidden-mining-fluid-autounlock.lua │ ├── kevlar.lua │ ├── lab-instrument.lua │ ├── methanol-processing-1.lua │ ├── methanol-processing-2.lua │ ├── mukmoux.lua │ ├── nexelit.lua │ ├── niobium.lua │ ├── organic-solvent.lua │ ├── pyrrhic.lua │ ├── ralesia.lua │ ├── separation.lua │ ├── stacking-belts.lua │ ├── syngas.lua │ ├── tar-processing.lua │ ├── ulric.lua │ ├── wood-processing-2.lua │ └── wood-processing.lua ├── tiles │ └── polluted-ground.lua └── updates │ ├── base-oil.lua │ ├── base-updates.lua │ ├── entity-updates.lua │ └── pyindustry-updates.lua ├── readme.md ├── scripts ├── beacons.lua ├── generator-equipment-autofill.lua ├── milestones.lua ├── tailings-pond.lua └── wiki │ ├── spreadsheet-pages.lua │ ├── statistics-page.lua │ ├── text-pages.lua │ └── wiki.lua ├── settings.lua └── thumbnail.png /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # format everything 2 | 72fc67ae90d1edac14565ce489a377d4889adf3e 3 | 1c002978a4e3cfecff35c97751371e385658f2c6 -------------------------------------------------------------------------------- /data-final-fixes.lua: -------------------------------------------------------------------------------- 1 | if not mods.pyalternativeenergy then 2 | for _, recipe in pairs(data.raw.recipe) do 3 | if not recipe.localised_name and recipe.category == "combustion" and not recipe.name:find("%-biomass$") then 4 | local temp 5 | for _, result in pairs(recipe.results) do 6 | if result.name == "combustion-mixture1" then 7 | temp = result.temperature 8 | end 9 | end 10 | recipe.localised_name = {"recipe-name." .. recipe.name, tostring(temp)} 11 | end 12 | end 13 | end 14 | 15 | require "prototypes/map-gen-presets" 16 | 17 | -- Updating requester paste setting 18 | local rpm_entity = tonumber(settings.startup["rpm_entity"].value) 19 | local rpm_items = tonumber(settings.startup["rpm_items"].value) 20 | local overload = tonumber(settings.startup["overload"].value) 21 | if rpm_entity ~= 30 or rpm_items ~= 30 or overload ~= 0 then 22 | --log("Updating recipe requester paste values") 23 | --These types (data.raw[entity_type]) are placeable entities 24 | local entity_types = defines.prototypes.entity 25 | -- We store the result of each lookup so we don't have to do it again 26 | -- When iterating *the entire recipe table X every individual result* this is worthwhile! 27 | local valid_entities = {} 28 | -- This is only hit when we request an index that doesn't exist (name we haven't checked) 29 | -- We then check if it's an entity and make an entry for that answer, followed by returning that result 30 | setmetatable(valid_entities, { 31 | __index = function(self, index) 32 | local item = data.raw.item[index] 33 | -- Place result? 34 | if item and item.place_result then 35 | rawset(self, index, true) 36 | return true 37 | end 38 | -- Valid entity? 39 | for type_name, _ in pairs(entity_types) do 40 | if data.raw[type_name] and data.raw[type_name][index] then 41 | rawset(self, index, true) 42 | return true 43 | end 44 | end 45 | -- Otherwise, nope! 46 | rawset(self, index, false) 47 | return false 48 | end 49 | }) 50 | 51 | for _, recipe in pairs(data.raw.recipe) do 52 | if not recipe.results then 53 | goto continue 54 | end 55 | for _, result in pairs(recipe.results) do -- This looks long, however we skip a lot of the logic with caching 56 | local result_name = result[1] or result.name 57 | if result_name and valid_entities[result_name] then 58 | --log("Set multiplier for " .. recipe.name .. " (" .. result_name .. ")") 59 | recipe.requester_paste_multiplier = tonumber(rpm_entity) 60 | recipe.overload_multiplier = tonumber(overload) 61 | goto continue 62 | end 63 | end 64 | recipe.requester_paste_multiplier = tonumber(rpm_items) 65 | recipe.overload_multiplier = tonumber(overload) 66 | ::continue:: 67 | end 68 | end 69 | 70 | data.raw["utility-constants"].default.minimum_recipe_overload_multiplier = 1 71 | 72 | for _, recipe in pairs(data.raw.recipe) do 73 | if recipe.category == "tar" and not recipe.crafting_machine_tint then 74 | error("Recipe " .. recipe.name .. " is missing crafting_machine_tint. Please fill out this field.") 75 | end 76 | end 77 | -------------------------------------------------------------------------------- /info.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pycoalprocessing", 3 | "version": "3.0.36", 4 | "factorio_version": "2.0", 5 | "title": "Pyanodons Coal Processing", 6 | "author": "Pyanodon, Nexela, Kingarthur, notnotmelon, Mootykins, ShadowGlass, Archezekiel, Quintuple, przemo1232", 7 | "contact": "https://discord.gg/SBHM3h5Utj", 8 | "homepage": "https://mods.factorio.com/mods/pyanodon/pycoalprocessing", 9 | "description": "Extends and overhauls Factorio's burner phase. Use realistic oil and coal processes to create advanced products. Functions as the core and library for the rest of the pY mods.", 10 | "dependencies": [ 11 | "base >= 2.0.48", 12 | "~ pycoalprocessinggraphics >= 3.0.6", 13 | "~ pypostprocessing >= 3.0.28", 14 | "(?) DiscoScience", 15 | "(?) better-victory-screen", 16 | "(?) elevated-rails", 17 | "! wret-beacon-rebalance-mod", 18 | "! beacon-overhaul", 19 | "! BigBags" 20 | ], 21 | "package": { 22 | "ignore": [], 23 | "scripts": {} 24 | }, 25 | "quality_required": false, 26 | "space_travel_required": false, 27 | "spoiling_required": false, 28 | "freezing_required": false, 29 | "segmented_units_required": false 30 | } -------------------------------------------------------------------------------- /migrations/2.1.15.lua: -------------------------------------------------------------------------------- 1 | for _, surface in pairs(game.surfaces) do 2 | local replace = {} 3 | for _, tile in pairs(surface.find_tiles_filtered { 4 | name = {"polluted-ground", "polluted-ground-burnt"} 5 | }) do 6 | replace[#replace + 1] = {name = "grass-1", position = tile.position} 7 | end 8 | surface.set_tiles(replace, true) 9 | end 10 | -------------------------------------------------------------------------------- /migrations/2.1.16.lua: -------------------------------------------------------------------------------- 1 | local killed_ninjas = 0 2 | for _, surface in pairs(game.surfaces) do 3 | for _, ninja in pairs(surface.find_entities_filtered {type = "tree", name = "ninja-tree"}) do 4 | ninja.destroy() 5 | killed_ninjas = killed_ninjas + 1 6 | end 7 | end 8 | 9 | if killed_ninjas > 0 then 10 | game.print("Killed " .. killed_ninjas .. " ninjas") 11 | end 12 | -------------------------------------------------------------------------------- /migrations/3.0.0.lua: -------------------------------------------------------------------------------- 1 | storage.on_tick = {} 2 | -- fix rotation of fawogae plantations after fixing the graphics 3 | for _, surface in pairs(game.surfaces) do 4 | for i = 1, 4 do 5 | local target = "fawogae-plantation-mk0" .. i 6 | if not prototypes.entity[target] then 7 | break 8 | end 9 | for _, plantation in pairs(surface.find_entities_filtered {name = target}) do 10 | if plantation.valid then 11 | local result = plantation.rotate {reverse = true} 12 | log("Rotating " .. plantation.unit_number .. " was " .. (result and "successful" or "unsuccessful")) 13 | end 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /migrations/3.0.14.lua: -------------------------------------------------------------------------------- 1 | for _, player in pairs(game.players) do 2 | if script.active_mods.quality and not script.active_mods.pystellarexpedition then 3 | player.print {"messages.warning-quality"} 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /migrations/evaporator-fluidboxes.json: -------------------------------------------------------------------------------- 1 | { 2 | "entity": [ 3 | [ 4 | "evaporator", 5 | "evaporator-legacy" 6 | ], 7 | [ 8 | "evaporator-mk02", 9 | "evaporator-mk02-legacy" 10 | ], 11 | [ 12 | "evaporator-mk03", 13 | "evaporator-mk03-legacy" 14 | ], 15 | [ 16 | "evaporator-mk04", 17 | "evaporator-mk04-legacy" 18 | ] 19 | ] 20 | } -------------------------------------------------------------------------------- /migrations/explode.lua: -------------------------------------------------------------------------------- 1 | local killed_ninjas = 0 2 | local remaining_ninjas = 0 3 | for _, surface in pairs(game.surfaces) do 4 | for _, ninja in pairs(surface.find_entities_filtered {type = "tree", name = "ninja-tree"}) do 5 | local tile_position = ninja.position 6 | tile_position.x = math.floor(tile_position.x) 7 | tile_position.y = math.floor(tile_position.y) 8 | if tile_position.x % 4 ~= 0 or tile_position.y % 4 ~= 0 then 9 | ninja.destroy() 10 | killed_ninjas = killed_ninjas + 1 11 | else 12 | remaining_ninjas = remaining_ninjas + 1 13 | end 14 | end 15 | end 16 | 17 | if killed_ninjas > 0 then 18 | game.print("Killed " .. killed_ninjas .. " ninjas. " .. remaining_ninjas .. " ninjas remain.") 19 | end 20 | -------------------------------------------------------------------------------- /migrations/inbuilt-loader.json: -------------------------------------------------------------------------------- 1 | { 2 | "entity": [ 3 | [ 4 | "soil-extractor-mk01", 5 | "soil-extractor-mk01-legacy" 6 | ], 7 | [ 8 | "soil-extractor-mk02", 9 | "soil-extractor-mk02-legacy" 10 | ], 11 | [ 12 | "soil-extractor-mk03", 13 | "soil-extractor-mk03-legacy" 14 | ], 15 | [ 16 | "soil-extractor-mk04", 17 | "soil-extractor-mk04-legacy" 18 | ], 19 | [ 20 | "sand-extractor", 21 | "sand-extractor-legacy" 22 | ], 23 | [ 24 | "sand-extractor-mk02", 25 | "sand-extractor-mk02-legacy" 26 | ], 27 | [ 28 | "sand-extractor-mk03", 29 | "sand-extractor-mk03-legacy" 30 | ], 31 | [ 32 | "sand-extractor-mk04", 33 | "sand-extractor-mk04-legacy" 34 | ], 35 | [ 36 | "ground-borer", 37 | "ground-borer-legacy" 38 | ], 39 | [ 40 | "ground-borer-mk02", 41 | "ground-borer-mk02-legacy" 42 | ], 43 | [ 44 | "ground-borer-mk03", 45 | "ground-borer-mk03-legacy" 46 | ], 47 | [ 48 | "ground-borer-mk04", 49 | "ground-borer-mk04-legacy" 50 | ], 51 | [ 52 | "wpu", 53 | "wpu-legacy" 54 | ], 55 | [ 56 | "wpu-mk02", 57 | "wpu-mk02-legacy" 58 | ], 59 | [ 60 | "wpu-mk03", 61 | "wpu-mk03-legacy" 62 | ], 63 | [ 64 | "wpu-mk04", 65 | "wpu-mk04-legacy" 66 | ], 67 | [ 68 | "classifier", 69 | "classifier-legacy" 70 | ], 71 | [ 72 | "classifier-mk02", 73 | "classifier-mk02-legacy" 74 | ], 75 | [ 76 | "classifier-mk03", 77 | "classifier-mk03-legacy" 78 | ], 79 | [ 80 | "classifier-mk04", 81 | "classifier-mk04-legacy" 82 | ], 83 | [ 84 | "casting-unit-mk01", 85 | "casting-unit-mk01-legacy" 86 | ], 87 | [ 88 | "casting-unit-mk02", 89 | "casting-unit-mk02-legacy" 90 | ], 91 | [ 92 | "casting-unit-mk03", 93 | "casting-unit-mk03-legacy" 94 | ], 95 | [ 96 | "casting-unit-mk04", 97 | "casting-unit-mk04-legacy" 98 | ], 99 | [ 100 | "sap-extractor-mk01", 101 | "sap-extractor-mk01-legacy" 102 | ], 103 | [ 104 | "sap-extractor-mk02", 105 | "sap-extractor-mk02-legacy" 106 | ], 107 | [ 108 | "sap-extractor-mk03", 109 | "sap-extractor-mk03-legacy" 110 | ], 111 | [ 112 | "sap-extractor-mk04", 113 | "sap-extractor-mk04-legacy" 114 | ] 115 | ] 116 | } -------------------------------------------------------------------------------- /migrations/pYColaprocessing_1.6.9.json: -------------------------------------------------------------------------------- 1 | { 2 | "entity": [ 3 | [ 4 | "fawogae-plantation", 5 | "fawogae-plantation-mk01" 6 | ], 7 | [ 8 | "ulric-corral", 9 | "ulric-corral-mk01" 10 | ], 11 | [ 12 | "ralesia-plantation", 13 | "ralesia-plantation-mk01" 14 | ] 15 | ], 16 | "item": [ 17 | [ 18 | "fawogae-plantation", 19 | "fawogae-plantation-mk01" 20 | ], 21 | [ 22 | "ulric-corral", 23 | "ulric-corral-mk01" 24 | ], 25 | [ 26 | "ralesia-plantation", 27 | "ralesia-plantation-mk01" 28 | ] 29 | ], 30 | "recipe": [ 31 | [ 32 | "fawogae-plantation", 33 | "fawogae-plantation-mk01" 34 | ], 35 | [ 36 | "ulric-corral", 37 | "ulric-corral-mk01" 38 | ], 39 | [ 40 | "ralesia-plantation", 41 | "ralesia-plantation-mk01" 42 | ] 43 | ] 44 | } -------------------------------------------------------------------------------- /migrations/pyCoalprocessing_2.0.4.lua: -------------------------------------------------------------------------------- 1 | game.reload_script() 2 | 3 | for _, player in pairs(game.players) do 4 | player.force.reset_recipes() 5 | player.force.reset_technologies() 6 | player.force.reset_technology_effects() 7 | end 8 | -------------------------------------------------------------------------------- /migrations/soil-extractor.json: -------------------------------------------------------------------------------- 1 | { 2 | "item": [ 3 | [ 4 | "soil-extractormk01", 5 | "soil-extractor-mk01" 6 | ], 7 | [ 8 | "soil-extractormk02", 9 | "soil-extractor-mk02" 10 | ], 11 | [ 12 | "soil-extractormk03", 13 | "soil-extractor-mk03" 14 | ], 15 | [ 16 | "soil-extractormk04", 17 | "soil-extractor-mk04" 18 | ] 19 | ], 20 | "recipe": [ 21 | [ 22 | "soil-extractormk01", 23 | "soil-extractor-mk01" 24 | ], 25 | [ 26 | "soil-extractormk02", 27 | "soil-extractor-mk02" 28 | ], 29 | [ 30 | "soil-extractormk03", 31 | "soil-extractor-mk03" 32 | ], 33 | [ 34 | "soil-extractormk04", 35 | "soil-extractor-mk04" 36 | ] 37 | ], 38 | "entity": [ 39 | [ 40 | "soil-extractormk01", 41 | "soil-extractor-mk01" 42 | ], 43 | [ 44 | "soil-extractormk02", 45 | "soil-extractor-mk02" 46 | ], 47 | [ 48 | "soil-extractormk03", 49 | "soil-extractor-mk03" 50 | ], 51 | [ 52 | "soil-extractormk04", 53 | "soil-extractor-mk04" 54 | ] 55 | ] 56 | } -------------------------------------------------------------------------------- /migrations/there-is-no-rcu.json: -------------------------------------------------------------------------------- 1 | { 2 | "item": [ 3 | [ 4 | "rocket-control-unit", 5 | "speed-module" 6 | ], 7 | [ 8 | "destablilized-toxirus", 9 | "destabilized-toxirus" 10 | ] 11 | ], 12 | "recipe": [ 13 | [ 14 | "rocket-control-unit", 15 | "speed-module" 16 | ] 17 | ] 18 | } -------------------------------------------------------------------------------- /migrations/wiki.lua: -------------------------------------------------------------------------------- 1 | for _, player in pairs(game.players) do 2 | local frame = player.gui.top.pywiki_frame 3 | if frame then 4 | frame.destroy() 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /notes.txt: -------------------------------------------------------------------------------- 1 | need to sort out lube 2 | 3 | make oil finite same as py petroleum handling 4 | -- no bull shit mechanics just limited oil 5 | 6 | got 4 good choices for making oil from things you produce and oleochemicals can make an unlimited supply 7 | 8 | 9 | add gunpowder to artillery shell -------------------------------------------------------------------------------- /prototypes/buildings/ball-mill.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "ball-mill-mk01", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "assembling-machine-1", amount = 1}, 8 | {type = "item", name = "steam-engine", amount = 1}, 9 | {type = "item", name = "copper-plate", amount = 30}, 10 | {type = "item", name = "steel-plate", amount = 40}, 11 | {type = "item", name = "iron-plate", amount = 50}, 12 | }, 13 | results = { 14 | {type = "item", name = "ball-mill-mk01", amount = 1} 15 | } 16 | }:add_unlock("crusher") 17 | 18 | for i = 1, 4 do 19 | if not mods.pyrawores and i == 2 then return end 20 | 21 | local name = "ball-mill-mk0" .. i 22 | local icon = "__pycoalprocessinggraphics__/graphics/icons/" .. name .. ".png" 23 | local icon_size = 64 24 | 25 | ITEM { 26 | type = "item", 27 | name = name, 28 | icon = icon, 29 | icon_size = icon_size, 30 | flags = {}, 31 | subgroup = "py-cp-buildings-mk0" .. i, 32 | order = "d", 33 | place_result = name, 34 | stack_size = 10 35 | } 36 | 37 | ENTITY { 38 | type = "assembling-machine", 39 | name = name, 40 | icon = icon, 41 | icon_size = icon_size, 42 | flags = {"placeable-neutral", "player-creation"}, 43 | minable = {mining_time = 1, result = name}, 44 | fast_replaceable_group = "ball-mill", 45 | max_health = 400 * i, 46 | corpse = "big-remnants", 47 | dying_explosion = "medium-explosion", 48 | collision_box = {{-2.9, -2.9}, {2.9, 2.9}}, 49 | selection_box = {{-3.0, -3.0}, {3.0, 3.0}}, 50 | module_slots = i, 51 | allowed_effects = {"speed", "productivity", "consumption", "pollution", "quality"}, 52 | crafting_categories = {"ball-mill"}, 53 | crafting_speed = i, 54 | energy_source = { 55 | type = "electric", 56 | usage_priority = "secondary-input", 57 | emissions_per_minute = { 58 | pollution = 1 59 | }, 60 | }, 61 | energy_usage = i .. "MW", 62 | graphics_set = { 63 | animation = { 64 | layers = { 65 | { 66 | filename = "__pycoalprocessinggraphics__/graphics/entity/ball-mill/ball-mill.png", 67 | width = 215, 68 | height = 198, 69 | frame_count = 80, 70 | line_length = 8, 71 | animation_speed = 0.8, 72 | shift = {0.318, -0.12} 73 | }, 74 | { 75 | filename = "__pycoalprocessinggraphics__/graphics/entity/ball-mill/ball-mill-mask.png", 76 | width = 215, 77 | height = 198, 78 | frame_count = 80, 79 | line_length = 8, 80 | animation_speed = 0.8, 81 | shift = {0.318, -0.12}, 82 | tint = py.tints[i], 83 | }, 84 | } 85 | }, 86 | }, 87 | impact_category = "metal", 88 | working_sound = { 89 | sound = {filename = "__pycoalprocessinggraphics__/sounds/niobium-mine.ogg"}, 90 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/niobium-mine.ogg", volume = 0.3}, 91 | apparent_volume = 2.5 92 | } 93 | } 94 | end 95 | 96 | RECIPE { 97 | type = "recipe", 98 | name = "ball-mill-mk02", 99 | energy_required = 0.5, 100 | enabled = false, 101 | ingredients = { 102 | {type = "item", name = "ball-mill-mk01", amount = 1}, 103 | {type = "item", name = "steel-plate", amount = 30}, 104 | {type = "item", name = "engine-unit", amount = 1}, 105 | {type = "item", name = "advanced-circuit", amount = 5}, 106 | }, 107 | results = { 108 | {type = "item", name = "ball-mill-mk02", amount = 1} 109 | } 110 | } 111 | 112 | RECIPE { 113 | type = "recipe", 114 | name = "ball-mill-mk03", 115 | energy_required = 0.5, 116 | enabled = false, 117 | ingredients = { 118 | {type = "item", name = "ball-mill-mk02", amount = 1}, 119 | {type = "item", name = "niobium-plate", amount = 15}, 120 | {type = "item", name = "electric-engine-unit", amount = 2}, 121 | {type = "item", name = "processing-unit", amount = 10}, 122 | }, 123 | results = { 124 | {type = "item", name = "ball-mill-mk03", amount = 1} 125 | } 126 | } 127 | 128 | RECIPE { 129 | type = "recipe", 130 | name = "ball-mill-mk04", 131 | energy_required = 0.5, 132 | enabled = false, 133 | ingredients = { 134 | {type = "item", name = "ball-mill-mk03", amount = 1}, 135 | {type = "item", name = "concrete", amount = 35}, 136 | {type = "item", name = "nbfe-alloy", amount = 10}, 137 | }, 138 | results = { 139 | {type = "item", name = "ball-mill-mk04", amount = 1} 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /prototypes/buildings/beacon.lua: -------------------------------------------------------------------------------- 1 | -- create A.M and F.M beacons 2 | 3 | local graphics_set = { 4 | apply_module_tint = "primary", 5 | module_tint_mode = "mix", 6 | no_modules_tint = {1, 0, 0}, 7 | animation_list = { 8 | { 9 | render_layer = "floor-mechanics-under-corpse", 10 | animation = { 11 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/terrain.png", 12 | priority = "high", 13 | width = 160, 14 | height = 160, 15 | frame_count = 1, 16 | line_length = 1, 17 | shift = util.by_pixel(-0, -0), 18 | --scale = 1.25 19 | } 20 | }, 21 | { 22 | animation = { 23 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/b-raw.png", 24 | priority = "high", 25 | width = 192, 26 | height = 192, 27 | frame_count = 90, 28 | line_length = 10, 29 | animation_speed = 0.25, 30 | shift = util.by_pixel(-0, -32), 31 | } 32 | }, 33 | { 34 | animation = { 35 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/b-ao.png", 36 | priority = "high", 37 | width = 192, 38 | height = 192, 39 | frame_count = 90, 40 | line_length = 10, 41 | animation_speed = 0.25, 42 | shift = util.by_pixel(-0, -32), 43 | } 44 | }, 45 | { 46 | animation = { 47 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/b-l.png", 48 | priority = "high", 49 | width = 192, 50 | height = 192, 51 | frame_count = 90, 52 | line_length = 10, 53 | animation_speed = 0.25, 54 | draw_as_glow = true, 55 | shift = util.by_pixel(-0, -32) 56 | }, 57 | apply_tint = true 58 | }, 59 | { 60 | animation = { 61 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/t-raw.png", 62 | priority = "high", 63 | width = 192, 64 | height = 192, 65 | frame_count = 90, 66 | line_length = 10, 67 | animation_speed = 0.25, 68 | shift = util.by_pixel(-0, -224), 69 | } 70 | }, 71 | { 72 | animation = { 73 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/t-ao.png", 74 | priority = "high", 75 | width = 192, 76 | height = 192, 77 | frame_count = 90, 78 | line_length = 10, 79 | animation_speed = 0.25, 80 | shift = util.by_pixel(-0, -224), 81 | } 82 | }, 83 | { 84 | animation = { 85 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/t-l.png", 86 | priority = "high", 87 | width = 192, 88 | height = 192, 89 | frame_count = 90, 90 | line_length = 10, 91 | draw_as_glow = true, 92 | animation_speed = 0.25, 93 | shift = util.by_pixel(-0, -224) 94 | }, 95 | apply_tint = true 96 | }, 97 | { 98 | animation = { 99 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/b-sh.png", 100 | priority = "high", 101 | width = 192, 102 | height = 192, 103 | frame_count = 90, 104 | line_length = 10, 105 | animation_speed = 0.25, 106 | shift = util.by_pixel(48, -32), 107 | draw_as_shadow = true 108 | } 109 | }, 110 | } 111 | } 112 | 113 | for am = 5, 1, -1 do 114 | for fm = 5, 1, -1 do 115 | local beacon = table.deepcopy(data.raw.beacon.beacon) 116 | beacon.name = "beacon-AM" .. am .. "-FM" .. fm 117 | beacon.distribution_effectivity = settings.startup["future-beacons"].value and (0.2 * am * fm) or (0.5 * am * fm) 118 | beacon.energy_usage = 1000 * am * (fm ^ 3) .. "kW" 119 | beacon.supply_area_distance = 64 - 16 * (am - 1) 120 | if beacon.supply_area_distance < 2 then beacon.supply_area_distance = 2 end 121 | beacon.placeable_by = {item = "beacon", count = 1} 122 | beacon.localised_name = {"entity-name.new-beacon", tostring(am), tostring(fm)} 123 | beacon.allowed_effects = {"speed", "consumption"} 124 | beacon.graphics_set = graphics_set 125 | beacon.collision_box = {{-2.05, -2.05}, {2.05, 2.05}} 126 | beacon.selection_box = {{-2.5, -2.5}, {2.5, 2.5}} 127 | beacon.drawing_box_vertical_extension = 3.5 128 | beacon.collision_mask = {layers = {item = true, object = true, water_tile = true}} 129 | beacon.next_upgrade = nil 130 | beacon.icon = "__pycoalprocessinggraphics__/graphics/icons/beacon.png" 131 | beacon.icon_size = 64 132 | data:extend {beacon} 133 | end 134 | end 135 | 136 | data.raw.item.beacon.place_result = "beacon-AM1-FM1" 137 | data.raw.item.beacon.icon = "__pycoalprocessinggraphics__/graphics/icons/beacon.png" 138 | data.raw.item.beacon.icon_size = 64 139 | data.raw.item.beacon.stack_size = 20 140 | data.raw.beacon.beacon.subgroup = data.raw.item.beacon.subgroup 141 | 142 | data.raw.module["speed-module"].beacon_tint.primary = {0, 0.65, 1} 143 | data.raw.module["speed-module-2"].beacon_tint.primary = {0, 0.65, 1} 144 | data.raw.module["speed-module-3"].beacon_tint.primary = {0, 0.65, 1} 145 | 146 | TECHNOLOGY("effect-transmission"):add_prereq("diet-beacon") 147 | -------------------------------------------------------------------------------- /prototypes/buildings/co2-absorber.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "co2-absorber", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "gasturbinemk01", amount = 3}, 8 | {type = "item", name = "advanced-circuit", amount = 30}, 9 | {type = "item", name = "steel-plate", amount = 50}, 10 | {type = "item", name = "carbon-filter", amount = 2}, 11 | {type = "item", name = "nexelit-plate", amount = 50} 12 | }, 13 | results = { 14 | {type = "item", name = "co2-absorber", amount = 1} 15 | } 16 | }:add_unlock("filtration-mk02") 17 | 18 | ITEM { 19 | type = "item", 20 | name = "co2-absorber", 21 | icon = "__pycoalprocessinggraphics__/graphics/icons/co2-absorber.png", 22 | icon_size = 64, 23 | flags = {}, 24 | subgroup = "coal-processing", 25 | order = "g", 26 | place_result = "co2-absorber", 27 | stack_size = 10 28 | } 29 | 30 | ENTITY { 31 | type = "furnace", 32 | name = "co2-absorber", 33 | icon = "__pycoalprocessinggraphics__/graphics/icons/co2-absorber.png", 34 | icon_size = 64, 35 | flags = {"placeable-neutral", "player-creation"}, 36 | minable = {mining_time = 1, result = "co2-absorber"}, 37 | fast_replaceable_group = "co2-absorber", 38 | max_health = 400, 39 | corpse = "big-remnants", 40 | dying_explosion = "medium-explosion", 41 | collision_box = {{-3.45, -3.45}, {3.45, 3.45}}, 42 | selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, 43 | module_slots = 4, 44 | allowed_effects = {"consumption", "speed"}, 45 | crafting_categories = {"co2"}, 46 | source_inventory_size = 1, 47 | result_inventory_size = 1, 48 | crafting_speed = 1, 49 | energy_source = { 50 | type = "electric", 51 | usage_priority = "secondary-input", 52 | emissions_per_minute = { 53 | pollution = -30 54 | }, 55 | }, 56 | energy_usage = "200kW", 57 | graphics_set = { 58 | animation = { 59 | filename = "__pycoalprocessinggraphics__/graphics/entity/co2-absorber/co2-absorber.png", 60 | width = 278, 61 | height = 280, 62 | frame_count = 31, 63 | line_length = 7, 64 | animation_speed = 0.5, 65 | shift = {0.83, -0.869} 66 | }, 67 | }, 68 | impact_category = "metal", 69 | working_sound = { 70 | sound = {filename = "__pycoalprocessinggraphics__/sounds/co2-absorber.ogg"}, 71 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/co2-absorber.ogg", volume = 0.3}, 72 | apparent_volume = 1.0 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /prototypes/buildings/cooling-tower-mk01.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "cooling-tower-mk01", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "electronic-circuit", amount = 5}, 8 | {type = "item", name = "pipe", amount = 20}, --bob copper-pipe 9 | {type = "item", name = "iron-gear-wheel", amount = 15}, --bob brass-gear-wheel 10 | {type = "item", name = "iron-plate", amount = 30} --bob brass-plate 11 | }, 12 | results = { 13 | {type = "item", name = "cooling-tower-mk01", amount = 1} 14 | } 15 | }:add_unlock("cooling-tower-1") 16 | 17 | ITEM { 18 | type = "item", 19 | name = "cooling-tower-mk01", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/cooling-tower-mk01.png", 21 | icon_size = 64, 22 | flags = {}, 23 | subgroup = "coal-processing", 24 | order = "h", 25 | place_result = "cooling-tower-mk01", 26 | stack_size = 10 27 | } 28 | 29 | ENTITY { 30 | type = "assembling-machine", 31 | name = "cooling-tower-mk01", 32 | icon = "__pycoalprocessinggraphics__/graphics/icons/cooling-tower-mk01.png", 33 | icon_size = 64, 34 | flags = {"placeable-neutral", "player-creation"}, 35 | minable = {mining_time = 1, result = "cooling-tower-mk01"}, 36 | fast_replaceable_group = "cooling-tower", 37 | max_health = 300, 38 | corpse = "big-remnants", 39 | dying_explosion = "medium-explosion", 40 | collision_box = {{-1.4, -1.4}, {1.4, 1.4}}, 41 | selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, 42 | forced_symmetry = "diagonal-pos", 43 | fixed_recipe = "cooling-water", 44 | module_slots = 2, 45 | allowed_effects = {"speed", "consumption"}, 46 | crafting_categories = {"cooling"}, 47 | crafting_speed = 2, 48 | energy_source = {type = "void"}, 49 | energy_usage = "50kW", 50 | graphics_set = { 51 | animation = { 52 | filename = "__pycoalprocessinggraphics__/graphics/entity/cooling-tower-mk01/cooling-tower-mk01.png", 53 | width = 113, 54 | height = 133, 55 | frame_count = 30, 56 | line_length = 10, 57 | animation_speed = 2, 58 | shift = {0.20, -0.4} 59 | }, 60 | }, 61 | fluid_boxes = { 62 | { 63 | production_type = "input", 64 | pipe_picture = py.pipe_pictures("assembling-machine-2", nil, {-0.0, -0.9}, nil, nil), 65 | pipe_covers = py.pipe_covers(false, true, true, true), 66 | volume = 1000, 67 | pipe_connections = {{flow_direction = "input", position = {1.0, 0.0}, direction = defines.direction.east}} 68 | }, 69 | { 70 | production_type = "output", 71 | pipe_picture = py.pipe_pictures("assembling-machine-2", nil, {-0.0, -0.9}, nil, nil), 72 | pipe_covers = py.pipe_covers(false, true, true, true), 73 | volume = 100, 74 | pipe_connections = {{flow_direction = "output", position = {-1.0, 0.0}, direction = defines.direction.west}} 75 | } 76 | }, 77 | impact_category = "metal-large", 78 | working_sound = { 79 | sound = {filename = "__pycoalprocessinggraphics__/sounds/cooling-tower-mk01.ogg"}, 80 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/cooling-tower-mk01.ogg", volume = 0.3}, 81 | apparent_volume = 2.5 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /prototypes/buildings/cooling-tower-mk02.lua: -------------------------------------------------------------------------------- 1 | local pipes = { 2 | south = { 3 | filename = "__base__/graphics/entity/assembling-machine-2/assembling-machine-2-pipe-S.png", 4 | priority = "extra-high", 5 | width = 44, 6 | height = 31 7 | } 8 | } 9 | 10 | RECIPE { 11 | type = "recipe", 12 | name = "cooling-tower-mk02", 13 | energy_required = 0.5, 14 | enabled = false, 15 | ingredients = { 16 | {type = "item", name = "storage-tank", amount = 1}, 17 | {type = "item", name = "pump", amount = 2}, 18 | {type = "item", name = "advanced-circuit", amount = 5}, 19 | {type = "item", name = "pipe", amount = 30}, --bob copper-pipe 20 | {type = "item", name = "iron-plate", amount = 30}, --bob brass-allloy 21 | {type = "item", name = "concrete", amount = 50} 22 | }, 23 | results = { 24 | {type = "item", name = "cooling-tower-mk02", amount = 1} 25 | } 26 | }:add_unlock("cooling-tower-2") 27 | 28 | ITEM { 29 | type = "item", 30 | name = "cooling-tower-mk02", 31 | icon = "__pycoalprocessinggraphics__/graphics/icons/cooling-tower-mk02.png", 32 | icon_size = 64, 33 | flags = {}, 34 | subgroup = "coal-processing", 35 | order = "i", 36 | place_result = "cooling-tower-mk02", 37 | stack_size = 10 38 | } 39 | 40 | ENTITY { 41 | type = "assembling-machine", 42 | name = "cooling-tower-mk02", 43 | icon = "__pycoalprocessinggraphics__/graphics/icons/cooling-tower-mk02.png", 44 | icon_size = 64, 45 | flags = {"placeable-neutral", "player-creation"}, 46 | fixed_recipe = "cooling-water-2", 47 | minable = {mining_time = 1, result = "cooling-tower-mk02"}, 48 | fast_replaceable_group = "cooling-tower", 49 | max_health = 300, 50 | corpse = "big-remnants", 51 | dying_explosion = "medium-explosion", 52 | collision_box = {{-2.4, -2.4}, {2.4, 2.4}}, 53 | selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, 54 | forced_symmetry = "diagonal-pos", 55 | module_slots = 4, 56 | allowed_effects = {"speed", "consumption"}, 57 | crafting_categories = {"cooling"}, 58 | crafting_speed = 4, 59 | energy_source = {type = "void"}, 60 | energy_usage = "70kW", 61 | graphics_set = { 62 | working_visualisations = { 63 | { 64 | north_position = {-0.0, -5.01}, 65 | west_position = {-0.0, -5.01}, 66 | south_position = {-0.0, -5.01}, 67 | east_position = {-0.0, -5.01}, 68 | animation = { 69 | filename = "__pycoalprocessinggraphics__/graphics/entity/cooling-tower-mk02/smoke-sheet.png", 70 | frame_count = 96, 71 | line_length = 12, 72 | width = 160, 73 | height = 160, 74 | animation_speed = 0.2 75 | } 76 | } 77 | }, 78 | animation = { 79 | filename = "__pycoalprocessinggraphics__/graphics/entity/cooling-tower-mk02/cooling_tower_mk02.png", 80 | width = 192, 81 | height = 256, 82 | frame_count = 1, 83 | animation_speed = 1, 84 | shift = {0.5, -1.504} 85 | }, 86 | }, 87 | fluid_boxes = { 88 | { 89 | production_type = "input", 90 | pipe_picture = py.pipe_pictures("assembling-machine-2", nil, {-0.05, -0.7}, nil, nil, pipes), 91 | pipe_covers = py.pipe_covers(false, true, true, true), 92 | volume = 1000, 93 | pipe_connections = {{flow_direction = "input", position = {1.0, -2.0}, direction = defines.direction.north}} 94 | }, 95 | { 96 | production_type = "output", 97 | pipe_picture = py.pipe_pictures("assembling-machine-2", nil, {-0.05, -0.7}, nil, nil, pipes), 98 | pipe_covers = py.pipe_covers(false, true, true, true), 99 | volume = 100, 100 | pipe_connections = {{flow_direction = "output", position = {-1.0, -2.0}, direction = defines.direction.north}} 101 | } 102 | }, 103 | impact_category = "metal-large", 104 | working_sound = { 105 | sound = {filename = "__pycoalprocessinggraphics__/sounds/cooling-tower-mk01.ogg"}, 106 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/cooling-tower-mk01.ogg", volume = 0.3}, 107 | apparent_volume = 2.5 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /prototypes/buildings/diet-beacon.lua: -------------------------------------------------------------------------------- 1 | -- create A.M and F.M beacons 2 | 3 | TECHNOLOGY { 4 | type = "technology", 5 | name = "diet-beacon", 6 | icon = "__base__/graphics/technology/module.png", 7 | icon_size = 256, 8 | prerequisites = {"speed-module", "productivity-module", "efficiency-module"}, 9 | effects = {}, 10 | unit = { 11 | count = 2100, 12 | ingredients = { 13 | {type = "item", name = "automation-science-pack", amount = 6}, 14 | {type = "item", name = "logistic-science-pack", amount = 2}, 15 | {type = "item", name = "chemical-science-pack", amount = 1} 16 | }, 17 | time = 90, 18 | }, 19 | localised_description = {"technology-description.effect-transmission"} 20 | } 21 | 22 | RECIPE { 23 | type = "recipe", 24 | name = "beacon-mk01", 25 | enabled = false, 26 | energy_required = 15, 27 | ingredients = 28 | { 29 | {type = "item", name = "steel-plate", amount = 10}, 30 | {type = "item", name = "electric-engine-unit", amount = 1}, 31 | {type = "item", name = "iron-gear-wheel", amount = 50}, 32 | {type = "item", name = "advanced-circuit", amount = 5} 33 | }, 34 | results = { 35 | {type = "item", name = "beacon-mk01", amount = 1} 36 | } 37 | }:add_unlock("diet-beacon") 38 | 39 | ITEM { 40 | type = "item", 41 | name = "beacon-mk01", 42 | icon = "__pycoalprocessinggraphics__/graphics/icons/beacon-01.png", 43 | icon_size = 64, 44 | subgroup = "module", 45 | order = "a[beacon]", 46 | place_result = "diet-beacon-AM1-FM1", 47 | stack_size = 20 48 | } 49 | 50 | local graphics_set = { 51 | apply_module_tint = "primary", 52 | module_tint_mode = "mix", 53 | no_modules_tint = {1, 0, 0}, 54 | animation_list = { 55 | { 56 | render_layer = "floor-mechanics-under-corpse", 57 | animation = { 58 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/terrain.png", 59 | priority = "high", 60 | width = 160, 61 | height = 160, 62 | frame_count = 1, 63 | line_length = 1, 64 | shift = util.by_pixel(-0, -0), 65 | scale = 0.6 66 | } 67 | }, 68 | { 69 | animation = { 70 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/01/raw.png", 71 | priority = "high", 72 | width = 96, 73 | height = 224, 74 | frame_count = 50, 75 | line_length = 10, 76 | animation_speed = 0.25, 77 | shift = util.by_pixel(-0, -96), 78 | } 79 | }, 80 | { 81 | animation = { 82 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/01/ao.png", 83 | priority = "high", 84 | width = 96, 85 | height = 224, 86 | frame_count = 50, 87 | line_length = 10, 88 | animation_speed = 0.25, 89 | shift = util.by_pixel(-0, -96), 90 | } 91 | }, 92 | { 93 | animation = { 94 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/01/l.png", 95 | priority = "high", 96 | width = 160, 97 | height = 128, 98 | frame_count = 50, 99 | line_length = 10, 100 | animation_speed = 0.25, 101 | draw_as_glow = true, 102 | shift = util.by_pixel(-0, -112) 103 | }, 104 | apply_tint = true 105 | }, 106 | { 107 | animation = { 108 | filename = "__pycoalprocessinggraphics__/graphics/entity/beacon/01/sh.png", 109 | priority = "high", 110 | width = 128, 111 | height = 96, 112 | draw_as_shadow = true, 113 | frame_count = 50, 114 | line_length = 10, 115 | animation_speed = 0.25, 116 | shift = util.by_pixel(48, 0), 117 | } 118 | }, 119 | } 120 | } 121 | 122 | for am = 5, 1, -1 do 123 | for fm = 5, 1, -1 do 124 | local beacon = table.deepcopy(data.raw.beacon.beacon) 125 | beacon.name = "diet-beacon-AM" .. am .. "-FM" .. fm 126 | beacon.distribution_effectivity = 0.1 * am * fm 127 | beacon.energy_usage = 500 * am * (fm ^ 3) .. "kW" 128 | beacon.supply_area_distance = 32 - 8 * (am - 1) 129 | if beacon.supply_area_distance < 2 then beacon.supply_area_distance = 2 end 130 | beacon.placeable_by = {item = "beacon-mk01", count = 1} 131 | beacon.localised_name = {"entity-name.new-beacon-mk01", tostring(am), tostring(fm)} 132 | beacon.allowed_effects = {"speed", "consumption"} 133 | beacon.graphics_set = graphics_set 134 | beacon.collision_box = {{-1.05, -1.05}, {1.05, 1.05}} 135 | beacon.selection_box = {{-1.5, -1.5}, {1.5, 1.5}} 136 | beacon.drawing_box_vertical_extension = 3 137 | beacon.collision_mask = {layers = {item = true, object = true, water_tile = true}} 138 | beacon.next_upgrade = nil 139 | beacon.minable = {mining_time = 0.2, result = "beacon-mk01"} 140 | beacon.icon = "__pycoalprocessinggraphics__/graphics/icons/beacon-01.png" 141 | beacon.icon_size = 64 142 | data:extend {beacon} 143 | end 144 | end 145 | 146 | data.raw.module["speed-module"].beacon_tint.primary = {0, 0.65, 1} 147 | data.raw.module["speed-module-2"].beacon_tint.primary = {0, 0.65, 1} 148 | data.raw.module["speed-module-3"].beacon_tint.primary = {0, 0.65, 1} 149 | -------------------------------------------------------------------------------- /prototypes/buildings/gas-turbine-mk01.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "gasturbinemk01", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "steel-plate", amount = 15}, 8 | {type = "item", name = "pipe", amount = 10}, 9 | {type = "item", name = "iron-plate", amount = 25}, 10 | {type = "item", name = "iron-stick", amount = 30}, 11 | {type = "item", name = "iron-gear-wheel", amount = 40} 12 | }, 13 | results = { 14 | {type = "item", name = "gasturbinemk01", amount = 1} 15 | } 16 | }:add_unlock("energy-1") 17 | 18 | ITEM { 19 | type = "item", 20 | name = "gasturbinemk01", 21 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk01.png", 22 | icon_size = 64, 23 | flags = {}, 24 | subgroup = "py-power", 25 | order = "a-d[gasturbinemk01]", 26 | place_result = "gasturbinemk01", 27 | stack_size = 10 28 | } 29 | 30 | ENTITY { 31 | type = "generator", 32 | name = "gasturbinemk01", 33 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk01.png", 34 | icon_size = 64, 35 | flags = {"placeable-neutral", "player-creation"}, 36 | minable = {mining_time = 1, result = "gasturbinemk01"}, 37 | max_health = 300, 38 | corpse = "big-remnants", 39 | effectivity = 1, 40 | fluid_usage_per_tick = 1, 41 | maximum_temperature = 1000, 42 | destroy_non_fuel_fluid = false, 43 | resistances = { 44 | { 45 | type = "fire", 46 | percent = 70 47 | } 48 | }, 49 | collision_box = {{-1.49, -1.49}, {1.49, 1.49}}, 50 | selection_box = {{-1.53, -1.53}, {1.53, 1.53}}, 51 | fluid_box = { 52 | volume = 100, 53 | pipe_covers = py.pipe_covers(false, true, true, true), 54 | production_type = "input-output", 55 | filter = "combustion-mixture1", 56 | minimum_temperature = 500.0, 57 | pipe_connections = { 58 | {flow_direction = "input-output", position = {0.00, 1.00}, direction = defines.direction.south}, 59 | {flow_direction = "input-output", position = {0.00, -1.00}, direction = defines.direction.north} 60 | } 61 | }, 62 | energy_source = { 63 | type = "electric", 64 | usage_priority = "secondary-output", 65 | emissions_per_minute = { 66 | pollution = 1 67 | }, 68 | }, 69 | horizontal_animation = { 70 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk01/gasturbinemk01_horizontal.png", 71 | width = 131, 72 | height = 288, 73 | frame_count = 25, 74 | line_length = 5, 75 | shift = {0.5, -3.0}, 76 | animation_speed = 0.8 77 | }, 78 | vertical_animation = { 79 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk01/gasturbinemk01_vertical.png", 80 | width = 128, 81 | height = 288, 82 | frame_count = 25, 83 | line_length = 5, 84 | shift = {0.5, -3.0}, 85 | animation_speed = 0.8 86 | }, 87 | smoke = { 88 | { 89 | name = "light-smoke", 90 | north_position = {-1.2, -2}, 91 | east_position = {-0.75, -2}, 92 | frequency = 5 / 32, 93 | starting_vertical_speed = 0.08, 94 | slow_down_factor = 1, 95 | starting_frame_deviation = 60 96 | }, 97 | { 98 | name = "light-smoke", 99 | north_position = {1.2, -2}, 100 | east_position = {1.2, -2}, 101 | frequency = 5 / 32, 102 | starting_vertical_speed = 0.08, 103 | slow_down_factor = 1, 104 | starting_frame_deviation = 60 105 | } 106 | }, 107 | min_perceived_performance = 0.1, 108 | performance_to_sound_speedup = 0.3, 109 | impact_category = "metal-large", 110 | working_sound = { 111 | sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk01.ogg"}, 112 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk01.ogg", volume = 0.3}, 113 | apparent_volume = 2.5 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /prototypes/buildings/gas-turbine-mk02.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "gasturbinemk02", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "advanced-circuit", amount = 20}, 8 | {type = "item", name = "pipe", amount = 20}, 9 | {type = "item", name = "steel-plate", amount = 50}, 10 | {type = "item", name = "iron-plate", amount = 30}, 11 | {type = "item", name = "iron-gear-wheel", amount = 40} 12 | }, 13 | results = { 14 | {type = "item", name = "gasturbinemk02", amount = 1} 15 | } 16 | }:add_unlock("energy-2") 17 | 18 | ITEM { 19 | type = "item", 20 | name = "gasturbinemk02", 21 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk02.png", 22 | icon_size = 64, 23 | flags = {}, 24 | subgroup = "py-power", 25 | order = "a-d[gasturbinemk02]", 26 | place_result = "gasturbinemk02", 27 | stack_size = 10 28 | } 29 | 30 | ENTITY { 31 | type = "generator", 32 | name = "gasturbinemk02", 33 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk02.png", 34 | icon_size = 64, 35 | flags = {"placeable-neutral", "player-creation"}, 36 | minable = {mining_time = 1, result = "gasturbinemk02"}, 37 | max_health = 500, 38 | corpse = "big-remnants", 39 | effectivity = 1, 40 | fluid_usage_per_tick = 1.25, 41 | maximum_temperature = 2000, 42 | destroy_non_fuel_fluid = false, 43 | resistances = { 44 | { 45 | type = "fire", 46 | percent = 70 47 | } 48 | }, 49 | collision_box = {{-3.4, -3.4}, {3.4, 3.4}}, 50 | selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, 51 | fluid_box = { 52 | volume = 100, 53 | pipe_covers = py.pipe_covers(false, true, true, true), 54 | production_type = "input-output", 55 | filter = "combustion-mixture1", 56 | minimum_temperature = 500.0, 57 | pipe_connections = { 58 | {flow_direction = "input-output", position = {3.0, 0.0}, direction = defines.direction.east}, 59 | {flow_direction = "input-output", position = {-3.0, 0.0}, direction = defines.direction.west} 60 | } 61 | }, 62 | energy_source = { 63 | type = "electric", 64 | usage_priority = "secondary-output", 65 | emissions_per_minute = { 66 | pollution = 1 67 | }, 68 | }, 69 | horizontal_animation = { 70 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk02/gas-turbine-mk02-vertical-anim.png", 71 | width = 238, 72 | height = 249, 73 | frame_count = 16, 74 | line_length = 4, 75 | shift = {0.195, -0.239} 76 | }, 77 | vertical_animation = { 78 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk02/gas-turbine-mk02-horizontal-anim.png", 79 | width = 238, 80 | height = 244, 81 | frame_count = 16, 82 | line_length = 4, 83 | shift = {0.155, -0.325} 84 | }, 85 | smoke = { 86 | { 87 | name = "light-smoke", 88 | north_position = {0.52, -3.1}, 89 | east_position = {0.52, -3.1}, 90 | frequency = 5 / 8, 91 | starting_vertical_speed = 0.08, 92 | slow_down_factor = 1, 93 | starting_frame_deviation = 60 94 | } 95 | }, 96 | min_perceived_performance = 0.1, 97 | performance_to_sound_speedup = 0.3, 98 | impact_category = "metal-large", 99 | working_sound = { 100 | sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk02.ogg"}, 101 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk02.ogg", volume = 0.3}, 102 | apparent_volume = 2.5 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /prototypes/buildings/gas-turbine-mk03.lua: -------------------------------------------------------------------------------- 1 | local pipe_pictures = 2 | function(shift_north, shift_south, shift_west, shift_east) 3 | local north, south, east, west 4 | if shift_north then 5 | north = { 6 | filename = "__pycoalprocessinggraphics__/graphics/entity/soil-extractor/long-pipe-north.png", 7 | priority = "low", 8 | width = 30, 9 | height = 44, 10 | shift = shift_north 11 | } 12 | else 13 | north = py.empty_image() 14 | end 15 | if shift_south then 16 | south = { 17 | filename = "__base__/graphics/entity/assembling-machine-3/assembling-machine-3-pipe-S.png", 18 | priority = "extra-high", 19 | width = 44, 20 | height = 31, 21 | shift = shift_south 22 | } 23 | else 24 | south = py.empty_image() 25 | end 26 | if shift_west then 27 | west = { 28 | filename = "__base__/graphics/entity/assembling-machine-3/assembling-machine-3-pipe-W.png", 29 | priority = "extra-high", 30 | width = 19, 31 | height = 37, 32 | shift = shift_west 33 | } 34 | else 35 | west = py.empty_image() 36 | end 37 | if shift_east then 38 | east = { 39 | filename = "__base__/graphics/entity/assembling-machine-3/assembling-machine-3-pipe-E.png", 40 | priority = "extra-high", 41 | width = 20, 42 | height = 38, 43 | shift = shift_east 44 | } 45 | else 46 | east = py.empty_image() 47 | end 48 | return {north = north, south = south, west = west, east = east} 49 | end 50 | 51 | RECIPE { 52 | type = "recipe", 53 | name = "gasturbinemk03", 54 | energy_required = 0.5, 55 | enabled = false, 56 | ingredients = { 57 | {type = "item", name = "processing-unit", amount = 20}, 58 | {type = "item", name = "pipe", amount = 20}, 59 | {type = "item", name = "nexelit-plate", amount = 50}, 60 | {type = "item", name = "iron-plate", amount = 70}, 61 | {type = "item", name = "gasturbinemk02", amount = 2} 62 | }, 63 | results = { 64 | {type = "item", name = "gasturbinemk03", amount = 1} 65 | } 66 | }:add_unlock("energy-3") 67 | 68 | ITEM { 69 | type = "item", 70 | name = "gasturbinemk03", 71 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk03.png", 72 | icon_size = 64, 73 | flags = {}, 74 | subgroup = "py-power", 75 | order = "a-d[gasturbinemk03]", 76 | place_result = "gasturbinemk03", 77 | stack_size = 10 78 | } 79 | 80 | ENTITY { 81 | type = "generator", 82 | name = "gasturbinemk03", 83 | icon = "__pycoalprocessinggraphics__/graphics/icons/gas-turbinemk03.png", 84 | icon_size = 64, 85 | flags = {"placeable-neutral", "player-creation"}, 86 | minable = {mining_time = 1, result = "gasturbinemk03"}, 87 | max_health = 500, 88 | corpse = "big-remnants", 89 | effectivity = 1, 90 | fluid_usage_per_tick = 1.5, 91 | maximum_temperature = 3000, 92 | destroy_non_fuel_fluid = false, 93 | resistances = { 94 | { 95 | type = "fire", 96 | percent = 70 97 | } 98 | }, 99 | collision_box = {{-4.4, -4.4}, {4.4, 4.4}}, 100 | selection_box = {{-4.5, -4.5}, {4.5, 4.5}}, 101 | fluid_box = { 102 | filter = "combustion-mixture1", 103 | minimum_temperature = 500.0, 104 | volume = 100, 105 | pipe_covers = py.pipe_covers(false, true, false, false), 106 | pipe_picture = pipe_pictures({0, 0}, {0, 0}, {0, 0}, {0, 0}), 107 | production_type = "input-output", 108 | pipe_connections = { 109 | {flow_direction = "input-output", position = {4.0, 0.0}, direction = defines.direction.east}, 110 | {flow_direction = "input-output", position = {-4.0, 0.0}, direction = defines.direction.west} 111 | } 112 | }, 113 | energy_source = { 114 | type = "electric", 115 | usage_priority = "secondary-output", 116 | emissions_per_minute = { 117 | pollution = 1 118 | }, 119 | }, 120 | horizontal_animation = { 121 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk03/gas-turbine-mk03-horizontal.png", 122 | width = 288, 123 | height = 344, 124 | frame_count = 31, 125 | animation_speed = 1 / 3, 126 | line_length = 7, 127 | shift = {-0.05, -0.84} 128 | }, 129 | vertical_animation = { 130 | filename = "__pycoalprocessinggraphics__/graphics/entity/gas-turbinemk03/gas-turbine-mk03-vertical.png", 131 | width = 288, 132 | height = 344, 133 | frame_count = 31, 134 | animation_speed = 1 / 3, 135 | line_length = 7, 136 | shift = {0.0, -0.82} 137 | }, 138 | smoke = { 139 | { 140 | name = "turbine-smoke", 141 | north_position = {0.5, 1.0}, 142 | east_position = {0.5, 1.0}, 143 | frequency = 5 / 16, 144 | starting_vertical_speed = 0.08, 145 | slow_down_factor = 1, 146 | starting_frame_deviation = 60 147 | } 148 | }, 149 | min_perceived_performance = 0.1, 150 | performance_to_sound_speedup = 0.3, 151 | impact_category = "metal-large", 152 | working_sound = { 153 | sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk03.ogg"}, 154 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/gasturbinemk03.ogg", volume = 0.3}, 155 | apparent_volume = 2.3 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /prototypes/buildings/mukmoux-pasture.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "mukmoux-pasture", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "soil", amount = 500}, 8 | {type = "item", name = "steel-plate", amount = 100}, 9 | {type = "item", name = "storage-tank", amount = 5}, 10 | {type = "item", name = "advanced-circuit", amount = 10} --bob electronic-logic-board 11 | }, 12 | results = { 13 | {type = "item", name = "mukmoux-pasture", amount = 1} 14 | } 15 | }:add_unlock("mukmoux") 16 | 17 | ITEM { 18 | type = "item", 19 | name = "mukmoux-pasture", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/mukmoux-pasture.png", 21 | icon_size = 64, 22 | flags = {}, 23 | subgroup = "coal-processing", 24 | order = "d", 25 | place_result = "mukmoux-pasture", 26 | stack_size = 10 27 | } 28 | 29 | ENTITY { 30 | type = "assembling-machine", 31 | name = "mukmoux-pasture", 32 | icon = "__pycoalprocessinggraphics__/graphics/icons/mukmoux-pasture.png", 33 | icon_size = 64, 34 | flags = {"placeable-neutral", "player-creation"}, 35 | minable = {mining_time = 0.5, result = "mukmoux-pasture"}, 36 | fast_replaceable_group = "mukmoux-pasture", 37 | max_health = 100, 38 | corpse = "big-remnants", 39 | dying_explosion = "big-explosion", 40 | collision_box = {{-4.9, -4.9}, {4.9, 4.9}}, 41 | selection_box = {{-5.0, -5.0}, {5.0, 5.0}}, 42 | module_slots = 2, 43 | allowed_effects = {"consumption", "productivity", "pollution", "speed"}, 44 | crafting_categories = {"mukmoux"}, 45 | crafting_speed = 1, 46 | energy_source = { 47 | type = "electric", 48 | usage_priority = "secondary-input", 49 | emissions_per_minute = { 50 | pollution = -5 51 | }, 52 | }, 53 | energy_usage = "50kW", 54 | graphics_set = { 55 | working_visualisations = { 56 | { 57 | north_position = {-2.96, 1.93}, 58 | west_position = {-2.96, 1.93}, 59 | south_position = {-2.96, 1.93}, 60 | east_position = {-2.96, 1.93}, 61 | animation = { 62 | filename = "__pycoalprocessinggraphics__/graphics/entity/mukmoux-pasture/mukmoux-left.png", 63 | scale = 1.2, 64 | frame_count = 158, 65 | line_length = 26, 66 | width = 76, 67 | height = 138, 68 | animation_speed = 0.5 69 | } 70 | }, 71 | { 72 | north_position = {1.78, 2.06}, 73 | west_position = {1.78, 2.06}, 74 | south_position = {1.78, 2.06}, 75 | east_position = {1.78, 2.06}, 76 | animation = { 77 | filename = "__pycoalprocessinggraphics__/graphics/entity/mukmoux-pasture/mukmoux-right.png", 78 | scale = 1.2, 79 | frame_count = 158, 80 | line_length = 14, 81 | width = 142, 82 | height = 128, 83 | animation_speed = 0.5 84 | } 85 | }, 86 | { 87 | north_position = {1.28, -2.28}, 88 | west_position = {1.28, -2.28}, 89 | south_position = {1.28, -2.28}, 90 | east_position = {1.28, -2.28}, 91 | animation = { 92 | filename = "__pycoalprocessinggraphics__/graphics/entity/mukmoux-pasture/mukmoux-top.png", 93 | scale = 1.2, 94 | frame_count = 158, 95 | line_length = 20, 96 | width = 100, 97 | height = 47, 98 | animation_speed = 0.5 99 | } 100 | } 101 | }, 102 | animation = { 103 | layers = { 104 | { 105 | filename = "__pycoalprocessinggraphics__/graphics/entity/mukmoux-pasture/mukmoux-pasture.png", 106 | width = 320, 107 | height = 363, 108 | frame_count = 1, 109 | line_length = 1, 110 | shift = {0.0, -0.5} 111 | }, 112 | { 113 | filename = "__pycoalprocessinggraphics__/graphics/entity/mukmoux-pasture/mukmoux-mask.png", 114 | width = 320, 115 | height = 363, 116 | frame_count = 1, 117 | line_length = 1, 118 | shift = {0.0, -0.5}, 119 | tint = {r = 1.0, g = 1.0, b = 0.0, a = 1.0} 120 | }, 121 | }, 122 | }, 123 | }, 124 | impact_category = "metal-large", 125 | working_sound = { 126 | sound = {filename = "__pycoalprocessinggraphics__/sounds/mukmoux-pasture.ogg", volume = 0.9}, 127 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/mukmoux-pasture.ogg", volume = 0.3}, 128 | apparent_volume = 0.45 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /prototypes/buildings/niobium-mine.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "niobium-mine", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "electric-mining-drill", amount = 5}, 8 | {type = "item", name = "soil-extractor-mk01", amount = 1}, 9 | {type = "item", name = "electronic-circuit", amount = 30}, 10 | {type = "item", name = "steel-plate", amount = 30}, 11 | {type = "item", name = "iron-gear-wheel", amount = 15} 12 | }, 13 | results = { 14 | {type = "item", name = "niobium-mine", amount = 1} 15 | } 16 | }:add_unlock("niobium") 17 | 18 | ITEM { 19 | type = "item", 20 | name = "niobium-mine", 21 | icon = "__pycoalprocessinggraphics__/graphics/icons/niobium-mine.png", 22 | icon_size = 64, 23 | flags = {}, 24 | subgroup = "coal-processing", 25 | order = "e", 26 | place_result = "niobium-mine", 27 | stack_size = 10 28 | } 29 | 30 | -- Base graphics 31 | local dry_graphics = { 32 | layers = { 33 | { 34 | filename = "__pycoalprocessinggraphics__/graphics/entity/niobium-mine/niobium-bottom.png", 35 | width = 221, 36 | height = 113, 37 | line_length = 8, 38 | frame_count = 136, 39 | animation_speed = 0.2, 40 | shift = {-0.07, 1.765} 41 | }, 42 | { 43 | filename = "__pycoalprocessinggraphics__/graphics/entity/niobium-mine/niobium-top.png", 44 | width = 221, 45 | height = 113, 46 | line_length = 8, 47 | frame_count = 136, 48 | animation_speed = 0.2, 49 | shift = {-0.07, -1.765} 50 | } 51 | } 52 | } 53 | -- Start w/ empty table 54 | local wet_graphics = {} 55 | -- Offsets here vary by direction so we use a LUT 56 | local pixel_offsets = { 57 | N = util.by_pixel(3, 0), 58 | E = util.by_pixel(3, 3), 59 | S = util.by_pixel(3, 0), 60 | W = util.by_pixel(4, 3) 61 | } 62 | -- Insert, and follow by adding in the appropriate pipe graphics 63 | for abbreviation, direction in pairs {N = "north", E = "east", S = "south", W = "west"} do 64 | wet_graphics[direction] = util.copy(dry_graphics) 65 | wet_graphics[direction].layers[3] = { 66 | priority = "extra-high", 67 | filename = "__pycoalprocessinggraphics__/graphics/entity/niobium-mine/" .. abbreviation .. ".png", 68 | line_length = 1, 69 | width = 231, 70 | height = 237, 71 | frame_count = 1, 72 | repeat_count = 136, 73 | direction_count = 1, 74 | shift = pixel_offsets[abbreviation] 75 | } 76 | end 77 | 78 | ENTITY { 79 | type = "mining-drill", 80 | name = "niobium-mine", 81 | icon = "__pycoalprocessinggraphics__/graphics/icons/niobium-mine.png", 82 | icon_size = 64, 83 | flags = {"placeable-neutral", "player-creation"}, 84 | minable = {mining_time = 0.5, result = "niobium-mine"}, 85 | fast_replaceable_group = "niobium-mine", 86 | max_health = 700, 87 | resource_categories = {"niobium"}, 88 | corpse = "big-remnants", 89 | dying_explosion = "big-explosion", 90 | collision_box = {{-3.3, -3.3}, {3.3, 3.3}}, 91 | selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, 92 | input_fluid_box = { 93 | pipe_picture = _G.assembler2pipepictures(), 94 | pipe_covers = _G.pipecoverspictures(), 95 | volume = 200, 96 | pipe_connections = { 97 | {direction = defines.direction.south, position = {-3, 3}} 98 | } 99 | }, 100 | module_slots = 4, 101 | allowed_effects = {"consumption", "speed", "productivity"}, 102 | mining_speed = 1, 103 | energy_source = { 104 | type = "burner", 105 | fuel_categories = {"drill"}, 106 | effectivity = 4, 107 | fuel_inventory_size = 1, 108 | emissions_per_minute = { 109 | pollution = 1 110 | }, 111 | smoke = { 112 | { 113 | name = "smoke", 114 | deviation = {0.1, 0.1}, 115 | frequency = 3 116 | } 117 | } 118 | }, 119 | energy_usage = "550kW", 120 | resource_searching_radius = 5.49, 121 | vector_to_place_result = {0, -3.65}, 122 | radius_visualisation_picture = { 123 | filename = "__base__/graphics/entity/electric-mining-drill/electric-mining-drill-radius-visualization.png", 124 | width = 12, 125 | height = 12 126 | }, 127 | circuit_connector = circuit_connector_definitions["niobium-mine"], 128 | circuit_wire_max_distance = _G.default_circuit_wire_max_distance, 129 | graphics_set = { 130 | animation = dry_graphics 131 | }, 132 | wet_mining_graphics_set = { 133 | animation = wet_graphics 134 | }, 135 | impact_category = "metal-large", 136 | working_sound = { 137 | sound = {filename = "__pycoalprocessinggraphics__/sounds/niobium-mine.ogg"}, 138 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/niobium-mine.ogg", volume = 0.3}, 139 | apparent_volume = 2.5 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /prototypes/buildings/solid-separator.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "solid-separator", 4 | energy_required = 0.5, 5 | enabled = false, 6 | ingredients = { 7 | {type = "item", name = "steam-engine", amount = 3}, 8 | {type = "item", name = "electronic-circuit", amount = 30}, 9 | {type = "item", name = "steel-plate", amount = 50}, 10 | {type = "item", name = "iron-plate", amount = 20}, 11 | {type = "item", name = "iron-gear-wheel", amount = 50} 12 | }, 13 | results = { 14 | {type = "item", name = "solid-separator", amount = 1} 15 | } 16 | }:add_unlock("separation") 17 | 18 | for i = 1, 4 do 19 | if not mods.pyrawores and i == 2 then return end 20 | 21 | local name = i == 1 and "solid-separator" or "solid-separator-mk0" .. i 22 | local icon = "__pycoalprocessinggraphics__/graphics/icons/" .. name .. ".png" 23 | local icon_size = 64 24 | 25 | ITEM { 26 | type = "item", 27 | name = name, 28 | icon = icon, 29 | icon_size = icon_size, 30 | flags = {}, 31 | subgroup = "py-cp-buildings-mk0" .. i, 32 | order = "x", 33 | place_result = name, 34 | stack_size = 10 35 | } 36 | 37 | ENTITY { 38 | type = "assembling-machine", 39 | name = name, 40 | icon = icon, 41 | icon_size = icon_size, 42 | flags = {"placeable-neutral", "player-creation"}, 43 | minable = {mining_time = 1, result = name}, 44 | fast_replaceable_group = "solid-separator", 45 | max_health = i * 400, 46 | corpse = "big-remnants", 47 | dying_explosion = "medium-explosion", 48 | collision_box = {{-3.4, -3.4}, {3.4, 3.4}}, 49 | selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, 50 | module_slots = i, 51 | allowed_effects = {"speed", "productivity", "consumption", "pollution", "quality"}, 52 | crafting_categories = {"solid-separator"}, 53 | crafting_speed = i, 54 | energy_source = { 55 | type = "electric", 56 | usage_priority = "secondary-input", 57 | emissions_per_minute = { 58 | pollution = 1 59 | }, 60 | }, 61 | energy_usage = (1.5 * i) .. "MW", 62 | graphics_set = { 63 | animation = { 64 | layers = { 65 | { 66 | filename = "__pycoalprocessinggraphics__/graphics/entity/solid-separator/solid-separator.png", 67 | width = 249, 68 | height = 298, 69 | frame_count = 20, 70 | line_length = 5, 71 | animation_speed = 1, 72 | shift = {0.37, -1.169}, 73 | }, 74 | { 75 | filename = "__pycoalprocessinggraphics__/graphics/entity/solid-separator/solid-separator-mask.png", 76 | width = 249, 77 | height = 298, 78 | frame_count = 20, 79 | line_length = 5, 80 | animation_speed = 1, 81 | shift = {0.37, -1.169}, 82 | tint = py.tints[i], 83 | }, 84 | } 85 | }, 86 | }, 87 | impact_category = "metal", 88 | working_sound = { 89 | sound = {filename = "__pycoalprocessinggraphics__/sounds/solid-separator.ogg"}, 90 | idle_sound = {filename = "__pycoalprocessinggraphics__/sounds/solid-separator.ogg", volume = 0.3}, 91 | apparent_volume = 2.5 92 | }, 93 | } 94 | end 95 | 96 | RECIPE { 97 | type = "recipe", 98 | name = "solid-separator-mk02", 99 | energy_required = 0.5, 100 | enabled = false, 101 | ingredients = { 102 | {type = "item", name = "solid-separator", amount = 1}, 103 | {type = "item", name = "engine-unit", amount = 6}, 104 | {type = "item", name = "nexelit-plate", amount = 10}, 105 | {type = "item", name = "plastic-bar", amount = 10}, 106 | {type = "item", name = "advanced-circuit", amount = 20} 107 | }, 108 | results = { 109 | {type = "item", name = "solid-separator-mk02", amount = 1} 110 | } 111 | } 112 | 113 | RECIPE { 114 | type = "recipe", 115 | name = "solid-separator-mk03", 116 | energy_required = 0.5, 117 | enabled = false, 118 | ingredients = { 119 | {type = "item", name = "solid-separator-mk02", amount = 1}, 120 | {type = "item", name = "electric-engine-unit", amount = 4}, 121 | {type = "item", name = "steel-plate", amount = 15}, 122 | {type = "item", name = "niobium-plate", amount = 20}, 123 | {type = "item", name = "processing-unit", amount = 5}, 124 | {type = "item", name = "niobium-pipe", amount = 15}, 125 | }, 126 | results = { 127 | {type = "item", name = "solid-separator-mk03", amount = 1} 128 | } 129 | } 130 | 131 | RECIPE { 132 | type = "recipe", 133 | name = "solid-separator-mk04", 134 | energy_required = 0.5, 135 | enabled = false, 136 | ingredients = { 137 | {type = "item", name = "solid-separator-mk03", amount = 1}, 138 | {type = "item", name = "nbfe-alloy", amount = 20}, 139 | {type = "item", name = "low-density-structure", amount = 10}, 140 | }, 141 | results = { 142 | {type = "item", name = "solid-separator-mk04", amount = 1} 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /prototypes/buildings/stack-inserter.lua: -------------------------------------------------------------------------------- 1 | if not feature_flags.space_travel then return end 2 | 3 | local MAX_BELT_STACK = 8 4 | 5 | data:extend {py.merge(data.raw.inserter["bulk-inserter"], { 6 | name = "py-stack-inserter", 7 | wait_for_full_hand = true, 8 | enter_drop_mode_if_held_stack_spoiled = true, 9 | max_belt_stack_size = MAX_BELT_STACK, 10 | grab_less_to_match_belt_stack = true, 11 | use_easter_egg = false, 12 | stack_size_bonus = (data.raw.inserter["bulk-inserter"].stack_size_bonus or 0) + 12, 13 | hand_size = 2.25, 14 | insert_position = {0, 1.7}, 15 | pickup_position = {0, -1.5}, 16 | collision_box = {{-0.15, -0.65}, {0.15, 0.65}}, 17 | selection_box = {{-0.4, -0.9}, {0.4, 0.9}}, 18 | energy_per_movement = "102.564102564kJ", 19 | energy_per_rotation = "102.564102564kJ", 20 | energy_source = { 21 | type = "electric", 22 | usage_priority = "secondary-input", 23 | drain = "800kW", 24 | }, 25 | rotation_speed = data.raw.inserter.inserter.rotation_speed * 1.7, 26 | minable = { 27 | mining_time = 0.2, 28 | result = "py-stack-inserter" 29 | }, 30 | platform_picture = {sheet = { 31 | filename = "__pycoalprocessinggraphics__/graphics/entity/stack-inserter/stack-inserter-platform.png", 32 | height = 79, 33 | priority = "extra-high", 34 | scale = 0.5, 35 | shift = {0.046875, 0.203125}, 36 | width = 105 37 | }}, 38 | hand_open_picture = { 39 | filename = "__pycoalprocessinggraphics__/graphics/entity/stack-inserter/stack-inserter-hand-open.png", 40 | height = 164, 41 | priority = "extra-high", 42 | scale = 0.5, 43 | width = 72 44 | }, 45 | hand_closed_picture = { 46 | filename = "__pycoalprocessinggraphics__/graphics/entity/stack-inserter/stack-inserter-hand-closed.png", 47 | height = 164, 48 | priority = "extra-high", 49 | scale = 0.5, 50 | width = 72 51 | }, 52 | hand_base_picture = { 53 | filename = "__pycoalprocessinggraphics__/graphics/entity/stack-inserter/stack-inserter-hand-base.png", 54 | height = 136, 55 | priority = "extra-high", 56 | scale = 0.5, 57 | width = 32 58 | }, 59 | fast_replaceable_group = "nil", 60 | next_upgrade = "nil", 61 | icon = "__pycoalprocessinggraphics__/graphics/icons/stack-inserter.png", 62 | icon_size = 64 63 | })} 64 | 65 | ITEM { 66 | icon = "__pycoalprocessinggraphics__/graphics/icons/stack-inserter.png", 67 | icon_size = 64, 68 | name = "py-stack-inserter", 69 | place_result = "py-stack-inserter", 70 | order = "h[stack-inserter]", 71 | stack_size = 50, 72 | subgroup = "inserter", 73 | type = "item" 74 | } 75 | 76 | RECIPE { 77 | type = "recipe", 78 | name = "py-stack-inserter", 79 | enabled = false, 80 | results = {{type = "item", name = "py-stack-inserter", amount = 1}}, 81 | ingredients = { 82 | {type = "item", name = "fast-inserter", amount = 3}, 83 | {type = "item", name = "electronic-circuit", amount = 5}, 84 | }, 85 | energy_required = 2, 86 | }:add_ingredient {type = "item", name = "small-parts-01", amount = 10}:add_ingredient {type = "item", name = "belt", amount = 3}:add_ingredient {type = "item", name = "engine-unit", amount = 3}:add_ingredient {type = "fluid", name = "lubricant", amount = 200}:add_ingredient {type = "item", name = "nbfe-alloy", amount = 10} 87 | -------------------------------------------------------------------------------- /prototypes/circuit-connector-definitions.lua: -------------------------------------------------------------------------------- 1 | -- Adds circuit connection definitions for PyCP entities to the pre-existing global table 2 | -- for base-game implementation details, see https://github.com/wube/factorio-data/blob/ed3d12197fbbe63fcd19c0eb23bc826cea44410f/core/lualib/circuit-connector-sprites.lua#L101 3 | -- variation counts from 0 (Python-like). 4 | 5 | circuit_connector_definitions["borax-mine-mkxx"] = circuit_connector_definitions.create_vector 6 | ( 7 | universal_connector_template, 8 | { --Directions are up, right, down, left. 9 | {variation = 26, main_offset = util.by_pixel(-40, 85), shadow_offset = util.by_pixel(-46, 97), show_shadow = false}, 10 | {variation = 26, main_offset = util.by_pixel(-40, 85), shadow_offset = util.by_pixel(-46, 97), show_shadow = false}, 11 | {variation = 26, main_offset = util.by_pixel(-40, 85), shadow_offset = util.by_pixel(-46, 97), show_shadow = false}, 12 | {variation = 26, main_offset = util.by_pixel(-40, 85), shadow_offset = util.by_pixel(-46, 97), show_shadow = false} 13 | } 14 | ) 15 | 16 | circuit_connector_definitions["niobium-mine"] = circuit_connector_definitions.create_vector 17 | ( 18 | universal_connector_template, 19 | { --Directions are up, right, down, left. 20 | {variation = 18, main_offset = util.by_pixel(-84, -5), shadow_offset = util.by_pixel(-78, 7), show_shadow = false}, 21 | {variation = 18, main_offset = util.by_pixel(-84, -5), shadow_offset = util.by_pixel(-78, 7), show_shadow = false}, 22 | {variation = 18, main_offset = util.by_pixel(-84, -5), shadow_offset = util.by_pixel(-78, 7), show_shadow = false}, 23 | {variation = 18, main_offset = util.by_pixel(-84, -5), shadow_offset = util.by_pixel(-78, 7), show_shadow = false} 24 | } 25 | ) 26 | 27 | circuit_connector_definitions["tailings-pond"] = circuit_connector_definitions.create_vector 28 | ( 29 | universal_connector_template, 30 | { --Directions are horizontal in/outputs, vertical in/outputs. 31 | --Remaining orientations are not used, but required to give the data the correct shape. 32 | {variation = 1, main_offset = {-4.25, 3.3}, shadow_offset = {-4.25, 3.3}, show_shadow = true}, 33 | {variation = 1, main_offset = {-4.25, 3.3}, shadow_offset = {-4.25, 3.3}, show_shadow = true}, 34 | {variation = 1, main_offset = {-4.25, 3.3}, shadow_offset = {-4.25, 3.3}, show_shadow = true}, 35 | {variation = 1, main_offset = {-4.25, 3.3}, shadow_offset = {-4.25, 3.3}, show_shadow = true}, 36 | } 37 | ) 38 | -------------------------------------------------------------------------------- /prototypes/custom-input.lua: -------------------------------------------------------------------------------- 1 | data:extend {{ 2 | type = "custom-input", 3 | name = "open-gui", 4 | key_sequence = "", 5 | linked_game_control = "open-gui" 6 | }} 7 | -------------------------------------------------------------------------------- /prototypes/fluids/acetylene.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "acetylene", 4 | category = "chemistry", 5 | enabled = false, 6 | energy_required = 8, 7 | ingredients = { 8 | {type = "fluid", name = "water", amount = 300}, 9 | {type = "item", name = "calcium-carbide", amount = 10} 10 | }, 11 | results = { 12 | {type = "fluid", name = "acetylene", amount = 100}, 13 | {type = "fluid", name = "slacked-lime", amount = 25} 14 | }, 15 | main_product = "acetylene" 16 | } 17 | 18 | FLUID { 19 | type = "fluid", 20 | name = "acetylene", 21 | icon = "__pycoalprocessinggraphics__/graphics/icons/acetylene.png", 22 | icon_size = 32, 23 | default_temperature = 15, 24 | base_color = {r = 0.862, g = 0.388, b = 0.713}, 25 | flow_color = {r = 1, g = 1, b = 1}, 26 | max_temperature = 100, 27 | gas_temperature = 15, 28 | subgroup = "py-syngas", 29 | order = "z-[acetylene]" 30 | } 31 | -------------------------------------------------------------------------------- /prototypes/fluids/acidgas.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "acidgas", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/acidgas.png", 5 | icon_size = 32, 6 | default_temperature = 15, 7 | heat_capacity = "1kJ", 8 | base_color = {r = 0.741, g = 0.788, b = 0.196}, 9 | flow_color = {r = 1, g = 1, b = 1}, 10 | max_temperature = 100, 11 | gas_temperature = 15 12 | } 13 | -------------------------------------------------------------------------------- /prototypes/fluids/anthraquinone.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "anthraquinone", 4 | category = "rectisol", 5 | enabled = false, 6 | energy_required = 3, 7 | ingredients = { 8 | {type = "fluid", name = "aromatics", amount = 100}, 9 | {type = "fluid", name = "steam", amount = 600}, 10 | {type = "item", name = "chromium", amount = 2} 11 | }, 12 | results = { 13 | {type = "fluid", name = "anthraquinone", amount = 50} 14 | } 15 | }:add_unlock("sulfur-processing") 16 | 17 | FLUID { 18 | type = "fluid", 19 | name = "anthraquinone", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/anthraquinone.png", 21 | icon_size = 32, 22 | default_temperature = 10, 23 | base_color = {r = 0.737, g = 0.592, b = 0.917}, 24 | flow_color = {r = 1, g = 1, b = 1}, 25 | max_temperature = 100, 26 | gas_temperature = 15, 27 | subgroup = "py-syngas", 28 | order = "z-[anthraquinone]" 29 | } 30 | -------------------------------------------------------------------------------- /prototypes/fluids/aromatics.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "aromatics2", 4 | category = "gasifier", 5 | enabled = false, 6 | energy_required = 2.0, 7 | ingredients = { 8 | {type = "fluid", name = "refsyngas", amount = 150}, 9 | {type = "fluid", name = "water", amount = 500}, --Added Bob hydrogen 10 | {type = "item", name = "organics", amount = 10} 11 | }, 12 | results = { 13 | {type = "fluid", name = "aromatics", amount = 300} 14 | } 15 | }:add_unlock("advanced-oil-processing") 16 | 17 | FLUID { 18 | type = "fluid", 19 | name = "aromatics", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/aromatics.png", 21 | icon_size = 64, 22 | default_temperature = 10, 23 | base_color = {r = 0.74, g = 0.403, b = 0.388}, 24 | flow_color = {r = 1, g = 1, b = 1}, 25 | max_temperature = 100, 26 | gas_temperature = 15, 27 | subgroup = "py-syngas", 28 | order = "z-[aromatics]" 29 | } 30 | -------------------------------------------------------------------------------- /prototypes/fluids/boric-acid.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "boric-acid", 4 | category = "gasifier", --bob electrolysis 5 | enabled = false, 6 | energy_required = 2, 7 | ingredients = { 8 | {type = "fluid", name = "diborane", amount = 100}, 9 | {type = "fluid", name = "water", amount = 500} 10 | }, 11 | results = { 12 | {type = "fluid", name = "boric-acid", amount = 500} 13 | } 14 | }:add_unlock("lab-instrument") 15 | 16 | FLUID { 17 | type = "fluid", 18 | name = "boric-acid", 19 | icon = "__pycoalprocessinggraphics__/graphics/icons/boric-acid.png", 20 | icon_size = 32, 21 | default_temperature = 10, 22 | base_color = {r = 0.662, g = 0.752, b = 0.764}, 23 | flow_color = {r = 1, g = 1, b = 1}, 24 | max_temperature = 100, 25 | gas_temperature = 15, 26 | subgroup = "py-syngas", 27 | order = "z-[boric-acid]" 28 | } 29 | -------------------------------------------------------------------------------- /prototypes/fluids/carbon-dioxide.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "carbon-dioxide", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/carbon-dioxide.png", 5 | icon_size = 32, 6 | default_temperature = 15, 7 | heat_capacity = "1kJ", 8 | base_color = {r = 0.807, g = 0.949, b = 0.941}, 9 | flow_color = {r = 1, g = 1, b = 1}, 10 | max_temperature = 100, 11 | gas_temperature = 15 12 | } 13 | -------------------------------------------------------------------------------- /prototypes/fluids/coal-gas.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "coal-gas", 4 | category = "distilator", 5 | enabled = true, 6 | energy_required = 3, 7 | ingredients = { 8 | {type = "item", name = "coal", amount = 10} 9 | }, 10 | results = { 11 | {type = "fluid", name = "coal-gas", amount = 40}, 12 | {type = "fluid", name = "tar", amount = 50}, 13 | {type = "item", name = "iron-oxide", amount = 1, probability = 0.3}, 14 | {type = "item", name = "coke", amount = 6} 15 | }, 16 | main_product = "coal-gas", 17 | icon = "__pycoalprocessinggraphics__/graphics/icons/coalgas-from-coal.png", 18 | icon_size = 32, 19 | subgroup = "py-syngas", 20 | order = "e" 21 | } 22 | 23 | RECIPE { 24 | type = "recipe", 25 | name = "coal-gas-from-wood", 26 | category = "distilator", 27 | enabled = true, 28 | energy_required = 3, 29 | ingredients = { 30 | {type = "item", name = "wood", amount = 10} 31 | }, 32 | results = { 33 | {type = "fluid", name = "coal-gas", amount = 10}, 34 | {type = "fluid", name = "tar", amount = 30}, 35 | {type = "item", name = "iron-oxide", amount = 1, probability = 0.3}, 36 | {type = "item", name = "coal", amount = 10} 37 | }, 38 | main_product = "coal-gas", 39 | icon = "__pycoalprocessinggraphics__/graphics/icons/coalgas-from-wood.png", 40 | icon_size = 32, 41 | subgroup = "py-syngas", 42 | order = "f" 43 | } 44 | 45 | RECIPE { 46 | type = "recipe", 47 | name = "coal-gas-from-coke", 48 | category = "distilator", 49 | enabled = true, 50 | energy_required = 5, 51 | ingredients = { 52 | {type = "item", name = "coke", amount = 20} 53 | }, 54 | results = { 55 | {type = "fluid", name = "coal-gas", amount = 20}, 56 | {type = "fluid", name = "tar", amount = 20}, 57 | {type = "item", name = "ash", amount = 1} 58 | }, 59 | main_product = "coal-gas", 60 | icon = "__pycoalprocessinggraphics__/graphics/icons/coalgas-from-coke.png", 61 | icon_size = 32, 62 | subgroup = "py-syngas", 63 | order = "f" 64 | } 65 | 66 | FLUID { 67 | type = "fluid", 68 | name = "coal-gas", 69 | icon = "__pycoalprocessinggraphics__/graphics/icons/coalgas.png", 70 | icon_size = 32, 71 | default_temperature = 15, 72 | heat_capacity = "1kJ", 73 | base_color = {r = 0.921, g = 0.776, b = 0.541}, 74 | flow_color = {r = 1, g = 1, b = 1}, 75 | max_temperature = 100, 76 | gas_temperature = 15, 77 | subgroup = "py-syngas", 78 | order = "a-[coal-gas]" 79 | } 80 | -------------------------------------------------------------------------------- /prototypes/fluids/coal-slurry.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "coal-slurry", 4 | category = "fluid-separator", 5 | enabled = false, 6 | energy_required = 2, 7 | ingredients = { 8 | {type = "fluid", name = "dirty-water-heavy", amount = 250} 9 | }, 10 | results = { 11 | {type = "fluid", name = "water", amount = 100}, 12 | {type = "fluid", name = "coal-slurry", amount = 150} 13 | }, 14 | main_product = "coal-slurry" 15 | }:add_unlock("fluid-separation") 16 | 17 | FLUID { 18 | type = "fluid", 19 | name = "coal-slurry", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/coal-slurry.png", 21 | icon_size = 32, 22 | default_temperature = 10, 23 | heat_capacity = "1kJ", 24 | base_color = {r = 0.247, g = 0.247, b = 0.247}, 25 | flow_color = {r = 1, g = 1, b = 1}, 26 | max_temperature = 100, 27 | gas_temperature = 15, 28 | subgroup = "py-syngas", 29 | order = "z-[coal-slurry]" 30 | } 31 | -------------------------------------------------------------------------------- /prototypes/fluids/combustion-mixture1.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "combustion-mixture1", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/combustion-mixture1.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | heat_capacity = "2kJ", 8 | base_color = {r = 0.811, g = 0.325, b = 0.0}, 9 | flow_color = {r = 1, g = 1, b = 1}, 10 | max_temperature = 3000, 11 | gas_temperature = 15, 12 | subgroup = "py-combustion", 13 | order = "z-[combustion-mixture1]", 14 | auto_barrel = false 15 | } 16 | -------------------------------------------------------------------------------- /prototypes/fluids/combustion-mixture2.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "combustion-mixture2", 4 | category = "combustion", 5 | enabled = false, 6 | energy_required = 2, 7 | ingredients = { 8 | {type = "fluid", name = "refsyngas", amount = 100}, 9 | {type = "fluid", name = "water", amount = 500}, 10 | {type = "fluid", name = "light-oil", amount = 50}, 11 | {type = "item", name = "nichrome", amount = 10} 12 | }, 13 | results = { 14 | {type = "fluid", name = "combustion-mixture2", amount = 200}, 15 | {type = "fluid", name = "water", amount = 500, temperature = 100} 16 | }, 17 | main_product = "combustion-mixture2" 18 | } 19 | 20 | FLUID { 21 | type = "fluid", 22 | name = "combustion-mixture2", 23 | icon = "__pycoalprocessinggraphics__/graphics/icons/combustion-mixture2.png", 24 | icon_size = 32, 25 | default_temperature = 15, 26 | heat_capacity = "1kJ", 27 | base_color = {r = 0.811, g = 0.325, b = 0.0}, 28 | flow_color = {r = 1, g = 1, b = 1}, 29 | max_temperature = 100, 30 | gas_temperature = 15, 31 | subgroup = "py-syngas", 32 | order = "z-[combustion-mixture2]" 33 | } 34 | -------------------------------------------------------------------------------- /prototypes/fluids/creosote.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "creosote", 4 | category = "tar", 5 | enabled = false, 6 | energy_required = 3, 7 | ingredients = { 8 | {type = "fluid", name = "tar", amount = 100} 9 | }, 10 | results = { 11 | {type = "fluid", name = "creosote", amount = 80} 12 | }, 13 | crafting_machine_tint = 14 | { 15 | primary = {r = 0.360, g = 0.250, b = 0.070}, 16 | secondary = {r = 1, g = 1, b = 1}, 17 | tertiary = {r = 0.360, g = 0.250, b = 0.070}, 18 | quaternary = {r = 0.360, g = 0.250, b = 0.070}, 19 | }, 20 | main_product = "creosote" 21 | }:add_unlock("creosote") 22 | 23 | FLUID { 24 | type = "fluid", 25 | name = "creosote", 26 | icon = "__pycoalprocessinggraphics__/graphics/icons/creosote.png", 27 | icon_size = 64, 28 | default_temperature = 10, 29 | gas_temperature = 15, 30 | heat_capacity = "1kJ", 31 | base_color = {r = 0.360, g = 0.250, b = 0.070}, 32 | flow_color = {r = 1, g = 1, b = 1}, 33 | max_temperature = 100, 34 | subgroup = "py-fluids", 35 | order = "creosote" 36 | } 37 | -------------------------------------------------------------------------------- /prototypes/fluids/diborane.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "diborane", 4 | category = "hpf", 5 | enabled = false, 6 | energy_required = 7, 7 | ingredients = { 8 | {type = "fluid", name = "water", amount = 250}, 9 | {type = "item", name = "borax", amount = 10} 10 | }, 11 | results = { 12 | {type = "fluid", name = "diborane", amount = 150} 13 | } 14 | }:add_unlock("energy-1") 15 | 16 | FLUID { 17 | type = "fluid", 18 | name = "diborane", 19 | icon = "__pycoalprocessinggraphics__/graphics/icons/diborane.png", 20 | icon_size = 32, 21 | default_temperature = 15, 22 | base_color = {r = 0.858, g = 0.929, b = 0.952}, 23 | flow_color = {r = 1, g = 1, b = 1}, 24 | max_temperature = 100, 25 | gas_temperature = 15, 26 | subgroup = "py-syngas", 27 | order = "z-[diborane]" 28 | } 29 | -------------------------------------------------------------------------------- /prototypes/fluids/diesel.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "diesel", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/diesel.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.5, g = 0.210, b = 0.023}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-syngas", 13 | order = "z-[diesel]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/dirty-water-heavy.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "dirty-water-heavy", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/dirty-water.png", 5 | icon_size = 64, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.176, g = 0.054, b = 0.054}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/fluids/dirty-water-light.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "dirty-water-light", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/dirty-water-light.png", 5 | icon_size = 64, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 108, g = 54, b = 54}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100 12 | } 13 | -------------------------------------------------------------------------------- /prototypes/fluids/flue-gas.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "flue-gas", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/flue-gas.png", 5 | icon_size = 32, 6 | default_temperature = 15, 7 | heat_capacity = "1kJ", 8 | base_color = {r = 0.839, g = 0.811, b = 0.745}, 9 | flow_color = {r = 1, g = 1, b = 1}, 10 | max_temperature = 100, 11 | gas_temperature = 15, 12 | subgroup = "py-fluids", 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/fluids/gasoline.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "gasoline", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/gasoline.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.776, g = 0.709, b = 0.043}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-syngas", 13 | order = "z-[gasoline]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/glycerol.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "glycerol", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/glycerol.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.913, g = 0.890, b = 0.6}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | order = "z-[glycerol]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/hydrogen-peroxide.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "hydrogen-peroxide", 4 | category = "carbonfilter", 5 | enabled = false, 6 | energy_required = 2.7, 7 | ingredients = { 8 | {type = "fluid", name = "anthraquinone", amount = 100}, 9 | {type = "item", name = "iron-plate", amount = 5} 10 | }, 11 | results = { 12 | {type = "fluid", name = "hydrogen-peroxide", amount = 50} 13 | } 14 | }:add_unlock("sulfur-processing") 15 | 16 | FLUID { 17 | type = "fluid", 18 | name = "hydrogen-peroxide", 19 | icon = "__pycoalprocessinggraphics__/graphics/icons/hydrogen-peroxide.png", 20 | icon_size = 32, 21 | default_temperature = 10, 22 | gas_temperature = 15, 23 | base_color = {r = 0.674, g = 1, b = 0.929}, 24 | flow_color = {r = 1, g = 1, b = 1}, 25 | max_temperature = 100, 26 | subgroup = "py-syngas", 27 | order = "z-[hydrogen-peroxide]" 28 | } 29 | -------------------------------------------------------------------------------- /prototypes/fluids/methanol.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "methanol-from-syngas", 4 | category = "methanol", 5 | enabled = false, 6 | energy_required = 2, 7 | ingredients = { 8 | {type = "fluid", name = "syngas", amount = 150}, 9 | {type = "item", name = "copper-plate", amount = 3}, 10 | {type = "item", name = "iron-plate", amount = 1} --bob zinc-plate 11 | }, 12 | results = { 13 | {type = "fluid", name = "methanol", amount = 150} 14 | }, 15 | subgroup = "py-methanol", 16 | order = "a" 17 | }:add_unlock("methanol-processing-1") 18 | 19 | RECIPE { 20 | type = "recipe", 21 | name = "oleo-methanol", 22 | category = "methanol", 23 | enabled = false, 24 | energy_required = 3, 25 | ingredients = { 26 | {type = "fluid", name = "oleochemicals", amount = 100}, 27 | {type = "item", name = "chromium", amount = 5} 28 | }, 29 | results = { 30 | {type = "fluid", name = "methanol", amount = 250}, 31 | {type = "fluid", name = "water", amount = 150} 32 | }, 33 | main_product = "methanol", 34 | icon = "__pycoalprocessinggraphics__/graphics/icons/methanol-oleochemicals.png", 35 | icon_size = 32, 36 | subgroup = "py-methanol", 37 | order = "c" 38 | }:add_unlock("methanol-processing-2") 39 | 40 | --bob-additions: methanol_from_hydrogen 41 | 42 | FLUID { 43 | type = "fluid", 44 | name = "methanol", 45 | icon = "__pycoalprocessinggraphics__/graphics/icons/methanol.png", 46 | icon_size = 32, 47 | default_temperature = 10, 48 | gas_temperature = 15, 49 | heat_capacity = "1kJ", 50 | base_color = {r = 0.231, g = 0.776, b = 0.333}, 51 | flow_color = {r = 1, g = 1, b = 1}, 52 | max_temperature = 100, 53 | subgroup = "py-fluids", 54 | } 55 | -------------------------------------------------------------------------------- /prototypes/fluids/molten-glass.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "glass", 4 | category = "glassworks", 5 | enabled = true, 6 | energy_required = 4, 7 | ingredients = { 8 | {type = "item", name = "sand", amount = 20}, 9 | }, 10 | results = { 11 | {type = "fluid", name = "molten-glass", amount = 20} 12 | }, 13 | main_product = "molten-glass", 14 | subgroup = "py-items", 15 | order = "aac" 16 | } 17 | 18 | RECIPE { 19 | type = "recipe", 20 | name = "glass-2", 21 | category = "glassworks", 22 | enabled = false, 23 | energy_required = 4, 24 | ingredients = { 25 | {type = "item", name = "powdered-quartz", amount = 2}, 26 | {type = "item", name = "pure-sand", amount = 10}, 27 | }, 28 | results = { 29 | {type = "fluid", name = "molten-glass", amount = 50} 30 | }, 31 | main_product = "molten-glass", 32 | subgroup = "py-items", 33 | order = "aac" 34 | }:add_unlock("advanced-material-processing") 35 | 36 | 37 | FLUID { 38 | type = "fluid", 39 | name = "molten-glass", 40 | icon = "__pycoalprocessinggraphics__/graphics/icons/molten-glass.png", 41 | icon_size = 64, 42 | default_temperature = 10, -- less than 15 = liquid / equal a 15 = gas 43 | base_color = {r = 0.7, g = 0.7, b = 0.7}, 44 | flow_color = {r = 1, g = 1, b = 1}, 45 | max_temperature = 100, 46 | gas_temperature = 15, 47 | subgroup = "py-items", 48 | order = "c" 49 | } 50 | -------------------------------------------------------------------------------- /prototypes/fluids/niobium-complex.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "niobium-complex", 4 | category = "chemistry", 5 | enabled = false, 6 | energy_required = 3.5, 7 | ingredients = { 8 | {type = "fluid", name = "organic-solvent", amount = 50}, 9 | {type = "fluid", name = "water", amount = 100}, 10 | {type = "item", name = "niobium-concentrate", amount = 10} 11 | }, 12 | results = { 13 | {type = "fluid", name = "niobium-complex", amount = 100} 14 | }, 15 | subgroup = "py-fluids", 16 | order = "c" 17 | }:add_unlock("niobium") 18 | 19 | FLUID { 20 | type = "fluid", 21 | name = "niobium-complex", 22 | icon = "__pycoalprocessinggraphics__/graphics/icons/niobium-complex.png", 23 | icon_size = 32, 24 | default_temperature = 10, 25 | gas_temperature = 15, 26 | heat_capacity = "1kJ", 27 | base_color = {r = 0.482, g = 0.607, b = 0.650}, 28 | flow_color = {r = 1, g = 1, b = 1}, 29 | max_temperature = 100, 30 | subgroup = "py-fluids", 31 | order = "z-[niobium-complex]" 32 | } 33 | -------------------------------------------------------------------------------- /prototypes/fluids/olefin.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "olefin", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.6, g = 0.388, b = 0.745}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-syngas", 13 | order = "z-[olefin]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/oleochemicals.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "oleochemicals", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/oleochemicals.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.870, g = 0.717, b = 0.0}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | order = "z-[oleochemicals]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/organic-solvent.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "organic-solvent", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/organic-solvent.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.172, g = 0.705, b = 0.447}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | order = "z-[organic-solvent]" 14 | } 15 | -------------------------------------------------------------------------------- /prototypes/fluids/rare-earth-mud.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "rare-earth-mud", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/rare-earth-mud.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.2, g = 0.192, b = 0.125}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/fluids/refsyngas.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "refsyngas-from-filtered-syngas", 4 | category = "carbonfilter", 5 | enabled = false, 6 | energy_required = 4, 7 | ingredients = { 8 | {type = "fluid", name = "syngas", amount = 100}, 9 | {type = "item", name = "active-carbon", amount = 1} 10 | }, 11 | results = { 12 | {type = "fluid", name = "refsyngas", amount = 70} 13 | } 14 | }:add_unlock("filtration") 15 | 16 | RECIPE { 17 | type = "recipe", 18 | name = "refsyngas-from-meth", 19 | category = "rectisol", 20 | enabled = false, 21 | energy_required = 2, 22 | ingredients = { 23 | {type = "fluid", name = "syngas", amount = 100}, 24 | {type = "fluid", name = "methanol", amount = 100} 25 | }, 26 | results = { 27 | {type = "fluid", name = "refsyngas", amount = 100}, 28 | {type = "fluid", name = "water", amount = 30}, --bob hydrogen 29 | {type = "fluid", name = "carbon-dioxide", amount = 30}, 30 | {type = "fluid", name = "acidgas", amount = 65} 31 | }, 32 | main_product = "refsyngas" 33 | }:add_unlock("methanol-processing-2") 34 | 35 | RECIPE { 36 | type = "recipe", 37 | name = "refsyngas-from-meth-canister", 38 | category = "rectisol", 39 | enabled = false, 40 | energy_required = 2, 41 | ingredients = { 42 | {type = "fluid", name = "syngas", amount = 100}, 43 | {type = "item", name = "methanol-gas-canister", amount = 1} 44 | }, 45 | results = { 46 | {type = "fluid", name = "refsyngas", amount = 100}, 47 | {type = "fluid", name = "water", amount = 30}, --bob hydrogen 48 | {type = "fluid", name = "carbon-dioxide", amount = 20}, 49 | {type = "fluid", name = "acidgas", amount = 60}, 50 | {type = "item", name = "empty-gas-canister", amount = 1, ignored_by_productivity = 1} 51 | }, 52 | main_product = "refsyngas" 53 | }:add_unlock("methanol-processing-1") 54 | 55 | FLUID { 56 | type = "fluid", 57 | name = "refsyngas", 58 | icon = "__pycoalprocessinggraphics__/graphics/icons/refsyngas.png", 59 | icon_size = 32, 60 | default_temperature = 15, 61 | heat_capacity = "1kJ", 62 | base_color = {r = 0.8, g = 0.239, b = 0.129}, 63 | flow_color = {r = 1, g = 1, b = 1}, 64 | max_temperature = 100, 65 | gas_temperature = 15, 66 | subgroup = "py-syngas", 67 | } 68 | -------------------------------------------------------------------------------- /prototypes/fluids/slacked-lime.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "slacked-lime", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/slacked-lime.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | base_color = {r = 0.772, g = 0.772, b = 0.772}, 9 | flow_color = {r = 1, g = 1, b = 1}, 10 | max_temperature = 100, 11 | subgroup = "py-fluids", 12 | order = "z-[slacked-lime]" 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/fluids/syngas.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "syngas", 4 | category = "gasifier", 5 | enabled = false, 6 | energy_required = 3, 7 | ingredients = { 8 | {type = "fluid", name = "coal-gas", amount = 50}, 9 | {type = "fluid", name = "water", amount = 100} 10 | }, 11 | results = { 12 | {type = "fluid", name = "syngas", amount = 70}, 13 | {type = "fluid", name = "tar", amount = 30}, 14 | {type = "item", name = "ash", amount = 1} 15 | }, 16 | main_product = "syngas" 17 | }:add_unlock("syngas") 18 | 19 | FLUID { 20 | type = "fluid", 21 | name = "syngas", 22 | icon = "__pycoalprocessinggraphics__/graphics/icons/syngas.png", 23 | icon_size = 32, 24 | default_temperature = 15, 25 | heat_capacity = "1kJ", 26 | base_color = {r = 0.8, g = 0.564, b = 0.129}, 27 | flow_color = {r = 1, g = 1, b = 1}, 28 | max_temperature = 100, 29 | gas_temperature = 15, 30 | subgroup = "py-syngas", 31 | order = "a-a-[syn-gas]" 32 | } 33 | -------------------------------------------------------------------------------- /prototypes/fluids/tar.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "tar", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/tar.png", 5 | icon_size = 32, 6 | default_temperature = 10, 7 | gas_temperature = 15, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.066, g = 0.164, b = 0.121}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/fluids/tpa.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "tpa", 4 | category = "rectisol", 5 | enabled = false, 6 | energy_required = 4, 7 | ingredients = { 8 | {type = "fluid", name = "aromatics", amount = 100}, 9 | {type = "fluid", name = "steam", amount = 600}, 10 | {type = "item", name = "nichrome", amount = 2} 11 | }, 12 | results = { 13 | {type = "fluid", name = "tpa", amount = 50} 14 | } 15 | }:add_unlock("kevlar") 16 | 17 | FLUID { 18 | type = "fluid", 19 | name = "tpa", 20 | icon = "__pycoalprocessinggraphics__/graphics/icons/tpa.png", 21 | icon_size = 32, 22 | default_temperature = 10, 23 | gas_temperature = 15, 24 | base_color = {r = 0.937, g = 0.803, b = 0.007}, 25 | flow_color = {r = 1, g = 1, b = 1}, 26 | max_temperature = 100, 27 | subgroup = "py-syngas", 28 | order = "z-[tpa]" 29 | } 30 | -------------------------------------------------------------------------------- /prototypes/fluids/water-saline.lua: -------------------------------------------------------------------------------- 1 | FLUID { 2 | type = "fluid", 3 | name = "water-saline", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/water-saline.png", 5 | icon_size = 64, 6 | default_temperature = 25, 7 | gas_temperature = 35, 8 | heat_capacity = "1kJ", 9 | base_color = {r = 0.9, g = 0.9, b = 1}, 10 | flow_color = {r = 1, g = 1, b = 1}, 11 | max_temperature = 100, 12 | subgroup = "py-fluids", 13 | } 14 | -------------------------------------------------------------------------------- /prototypes/item-groups.lua: -------------------------------------------------------------------------------- 1 | data:extend { 2 | { 3 | type = "item-group", 4 | name = "coal-processing", 5 | order = "t", 6 | inventory_order = "t", 7 | icon = "__pycoalprocessinggraphics__/graphics/technology/item-group.png", 8 | icon_size = 64 9 | }, 10 | --MKS-- 11 | { 12 | type = "item-subgroup", 13 | name = "py-cp-buildings-mk01", 14 | group = "coal-processing", 15 | order = "a-a" 16 | }, 17 | { 18 | type = "item-subgroup", 19 | name = "py-cp-buildings-mk02", 20 | group = "coal-processing", 21 | order = "a-b" 22 | }, 23 | { 24 | type = "item-subgroup", 25 | name = "py-cp-buildings-mk03", 26 | group = "coal-processing", 27 | order = "a-c" 28 | }, 29 | { 30 | type = "item-subgroup", 31 | name = "py-cp-buildings-mk04", 32 | group = "coal-processing", 33 | order = "a-d" 34 | }, 35 | { 36 | type = "item-subgroup", 37 | name = "py-cp-buildings-others", 38 | group = "coal-processing", 39 | order = "a-e" 40 | }, 41 | ---------------- 42 | { 43 | type = "item-subgroup", 44 | name = "coal-processing", 45 | group = "coal-processing", 46 | order = "a1" 47 | }, 48 | { 49 | type = "item-subgroup", 50 | name = "py-power", 51 | group = "coal-processing", 52 | order = "a2" 53 | }, 54 | { 55 | type = "item-subgroup", 56 | name = "py-fluid-handling", 57 | group = "coal-processing", 58 | order = "c" 59 | }, 60 | { 61 | type = "item-subgroup", 62 | name = "py-items", 63 | group = "coal-processing", 64 | order = "c-0" 65 | }, 66 | { 67 | type = "item-subgroup", 68 | name = "py-cans", 69 | group = "coal-processing", 70 | order = "c-0a" 71 | }, 72 | { 73 | type = "item-subgroup", 74 | name = "py-items-hpf", 75 | group = "coal-processing", 76 | order = "c-1" 77 | }, 78 | { 79 | type = "item-subgroup", 80 | name = "py-items-class", 81 | group = "coal-processing", 82 | order = "c-2" 83 | }, 84 | { 85 | type = "item-subgroup", 86 | name = "py-washer", 87 | group = "coal-processing", 88 | order = "c-3" 89 | }, 90 | { 91 | type = "item-subgroup", 92 | name = "py-quenching-ores", 93 | group = "coal-processing", 94 | order = "d" 95 | }, 96 | { 97 | type = "item-subgroup", 98 | name = "py-syngas", 99 | group = "coal-processing", 100 | order = "e" 101 | }, 102 | { 103 | type = "item-subgroup", 104 | name = "py-methanol", 105 | group = "coal-processing", 106 | order = "f" 107 | }, 108 | { 109 | type = "item-subgroup", 110 | name = "py-crusher", 111 | group = "coal-processing", 112 | order = "g" 113 | }, 114 | { 115 | type = "item-subgroup", 116 | name = "py-drilling", 117 | group = "coal-processing", 118 | order = "h" 119 | }, 120 | { 121 | type = "item-subgroup", 122 | name = "py-mill", 123 | group = "coal-processing", 124 | order = "i" 125 | }, 126 | { 127 | type = "item-subgroup", 128 | name = "py-filter", 129 | group = "coal-processing", 130 | order = "j" 131 | }, 132 | { 133 | type = "item-subgroup", 134 | name = "py-sulfur", 135 | group = "coal-processing", 136 | order = "k" 137 | }, 138 | { 139 | type = "item-subgroup", 140 | name = "py-extractor", 141 | group = "coal-processing", 142 | order = "l" 143 | }, 144 | { 145 | type = "item-subgroup", 146 | name = "py-combustion", 147 | group = "coal-processing", 148 | order = "m" 149 | }, 150 | { 151 | type = "item-subgroup", 152 | name = "py-fluids", 153 | group = "coal-processing", 154 | order = "z" 155 | }, 156 | { 157 | type = "item-subgroup", 158 | name = "py-unsorted", 159 | group = "coal-processing", 160 | order = "zzzz" 161 | } 162 | } 163 | 164 | data.raw["item-subgroup"]["fluid"].group = "coal-processing" 165 | data.raw["item-subgroup"]["fluid"].order = "c" 166 | data.raw.item["sulfur"].subgroup = "py-sulfur" 167 | data.raw.item["low-density-structure"].subgroup = "space-related" 168 | data.raw.item["rocket-fuel"].subgroup = "space-related" 169 | data.raw.item["nuclear-fuel"].subgroup = "space-related" 170 | data.raw.item["stone"].subgroup = "intermediate-product" 171 | data.raw.item["explosives"].subgroup = "py-items" 172 | data.raw.fluid["sulfuric-acid"].subgroup = "py-fluids" 173 | -------------------------------------------------------------------------------- /prototypes/items/canister.lua: -------------------------------------------------------------------------------- 1 | ---Make empty canister in assembly machine. 2 | RECIPE { 3 | type = "recipe", 4 | name = "empty-gas-canister", 5 | category = "crafting", 6 | enabled = false, 7 | energy_required = 1, 8 | ingredients = { 9 | {type = "item", name = "steel-plate", amount = 2}, --bob aluminium-plate 10 | {type = "item", name = "copper-plate", amount = 1} --bob brass-plate 11 | }, 12 | results = { 13 | {type = "item", name = "empty-gas-canister", amount = 1} 14 | }, 15 | icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 16 | icon_size = 32, 17 | subgroup = "py-items", 18 | order = "c [methanol]" 19 | }:add_unlock("methanol-processing-1") 20 | 21 | ITEM { 22 | type = "item", 23 | name = "empty-gas-canister", 24 | icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 25 | icon_size = 32, 26 | flags = {}, 27 | subgroup = "py-items", 28 | order = "canister-a-[empty-gas-canister]", 29 | stack_size = 20 30 | } 31 | 32 | RECIPE { 33 | type = "recipe", 34 | name = "fill-methanol-gas-canister", 35 | localised_name = {"recipe-name.fill-methanol-gas-canister"}, 36 | category = "crafting-with-fluid", --bob bob-pump 37 | enabled = false, 38 | energy_required = 0.2, 39 | ingredients = { 40 | {type = "fluid", name = "methanol", amount = 100}, 41 | {type = "item", name = "empty-gas-canister", amount = 1} 42 | }, 43 | results = { 44 | {type = "item", name = "methanol-gas-canister", amount = 1} 45 | }, 46 | icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 47 | icon_size = 32 48 | }:add_unlock("methanol-processing-1") 49 | 50 | -- empty canister 51 | --duplicate recipe for use directly in rectisol 52 | RECIPE { 53 | type = "recipe", 54 | name = "empty-methanol-gas-canister", 55 | category = "crafting-with-fluid", 56 | enabled = false, 57 | energy_required = 0.2, 58 | ingredients = { 59 | {type = "item", name = "methanol-gas-canister", amount = 1} 60 | }, 61 | results = { 62 | {type = "item", name = "empty-gas-canister", amount = 1}, 63 | {type = "fluid", name = "methanol", amount = 100} 64 | }, 65 | icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 66 | icon_size = 32, 67 | subgroup = "py-items", 68 | order = "canister-b-[empty-methanol-gas-canister]" 69 | }:add_unlock("methanol-processing-1") 70 | 71 | ITEM { 72 | type = "item", 73 | name = "methanol-gas-canister", 74 | icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 75 | icon_size = 32, 76 | flags = {}, 77 | subgroup = "py-items", 78 | order = "canister-b-[fill-methanol-gas-canister]", 79 | stack_size = 20 80 | } 81 | -------------------------------------------------------------------------------- /prototypes/logo.lua: -------------------------------------------------------------------------------- 1 | data:extend {{ 2 | type = "container", 3 | name = "py-logo-15tiles", 4 | icon = "__pycoalprocessinggraphics__/graphics/icons/py-logo-15tiles.png", 5 | icon_size = 64, 6 | flags = {"placeable-neutral", "player-creation"}, 7 | hidden = true, 8 | minable = {mining_time = 0.5}, 9 | max_health = 666, 10 | inventory_type = "with_filters_and_bar", 11 | collision_box = {{-7.5 + 0.15, -1.5 + 0.15}, {7.5 - 0.15, 1.5 - 0.15}}, 12 | selection_box = {{-7.5, -1.5}, {7.5, 1.5}}, 13 | inventory_size = 1, 14 | picture = { 15 | filename = "__pycoalprocessinggraphics__/graphics/entity/logo/py-logo.png", 16 | priority = "extra-high", 17 | width = 1000, 18 | height = 298, 19 | shift = util.by_pixel(0, 0), 20 | scale = 0.5 21 | } 22 | }} 23 | -------------------------------------------------------------------------------- /prototypes/map-gen-presets.lua: -------------------------------------------------------------------------------- 1 | local blacklist = { 2 | ["enemy-base"] = true, 3 | ["trees"] = true, 4 | } 5 | 6 | local rocks = { 7 | ["iron-rock"] = true, 8 | ["copper-rock"] = true, 9 | ["uranium-rock"] = true, 10 | ["zinc-rock"] = true, 11 | ["aluminium-rock"] = true, 12 | ["chromium-rock"] = true, 13 | ["coal-rock"] = true, 14 | ["lead-rock"] = true, 15 | ["nexelit-rock"] = true, 16 | ["nickel-rock"] = true, 17 | ["phosphate-rock-02"] = true, 18 | ["quartz-rock"] = true, 19 | ["salt-rock"] = true, 20 | ["tin-rock"] = true, 21 | ["titanium-rock"] = true, 22 | ["volcanic-pipe"] = true, 23 | ["regolites"] = true, 24 | ["rare-earth-bolide"] = true, 25 | ["phosphate-rock"] = true, 26 | ["sulfur-patch"] = true, 27 | ["geothermal-crack"] = true, 28 | -- Commented because only scales on size :shrug: 29 | -- ['bitumen-seep'] = true 30 | } 31 | --[[ if it comes up 32 | local non_rocks = { 33 | ["iron-ore"] = true, 34 | ["copper-ore"] = true, 35 | ["stone"] = true, 36 | ["uranium-ore"] = true, 37 | ["borax"] = true, 38 | ["niobium"] = true, 39 | ["molybdenum-ore"] = true, 40 | ["ore-quartz"] = true, 41 | ["raw-coal"] = true, 42 | ["ore-aluminium"] = true, 43 | ["ore-chromium"] = true, 44 | ["ore-lead"] = true, 45 | ["ore-nickel"] = true, 46 | ["ore-tin"] = true, 47 | ["ore-titanium"] = true, 48 | ["ore-zinc"] = true, 49 | ["oil-sand"] = true, 50 | ["bitumen-seep"] = true, 51 | ["ore-bioreserve"] = true, 52 | ["ree"] = true, 53 | ["antimonium"] = true, 54 | } 55 | ]] -- 56 | 57 | 58 | 59 | local mapgens = data.raw["map-gen-presets"]["default"] 60 | mapgens["py-recommended"] = { 61 | order = "h", 62 | basic_settings = { 63 | autoplace_controls = { 64 | ["enemy-base"] = { 65 | frequency = 0 66 | }, 67 | water = {frequency = 0.75, size = 0.75}, 68 | }, 69 | cliff_settings = { 70 | cliff_elevation_interval = 40 / 0.5, 71 | richness = 3 72 | }, 73 | starting_area = mods["rso-mod"] and "normal" or 4 74 | }, 75 | advanced_settings = { 76 | pollution = { 77 | enabled = false 78 | }, 79 | enemy_evolution = { 80 | time_factor = 0.00000002, 81 | destroy_factor = 0.001, 82 | pollution_factor = 0 83 | }, 84 | enemy_expansion = { 85 | enabled = true, 86 | max_expansion_distance = 2, -- Creep only 87 | min_expansion_cooldown = 60 * 60 * 60, -- 60 min 88 | max_expansion_cooldown = 60 * 60 * 180 -- 180 min 89 | }, 90 | } 91 | } 92 | 93 | local non_rock_values = { 94 | ["rich-resources"] = { 95 | richness = 2.0 96 | }, 97 | ["rail-world"] = { 98 | frequency = 0.33, 99 | size = 3.0 100 | }, 101 | ["py-recommended"] = { 102 | frequency = 0.33, 103 | richness = 4, 104 | size = 0.75 105 | }, 106 | ["ribbon-world"] = { 107 | frequency = 3.0, 108 | size = 0.5, 109 | richness = 2.0 110 | } 111 | } 112 | local rock_values = { 113 | ["rich-resources"] = { 114 | richness = 2.0 115 | }, 116 | ["rail-world"] = { 117 | frequency = 0.33, 118 | richness = 3.0 119 | }, 120 | ["py-recommended"] = { 121 | frequency = 0.33, 122 | richness = 5 123 | }, 124 | ["ribbon-world"] = { 125 | frequency = 3.0, 126 | richness = 1.0 127 | } 128 | } 129 | 130 | for name in pairs(data.raw["autoplace-control"]) do 131 | if blacklist[name] then goto continue end 132 | local is_rock = rocks[name] 133 | for preset_name, preset_data in pairs(mapgens) do 134 | local control = preset_data["basic_settings"] and preset_data["basic_settings"]["autoplace_controls"] 135 | -- If someone has already modified it, I see no reason to change it 136 | if control and not control[name] then 137 | control[name] = is_rock and rock_values[preset_name] or non_rock_values[preset_name] 138 | end 139 | end 140 | ::continue:: 141 | end 142 | -------------------------------------------------------------------------------- /prototypes/ores/borax.lua: -------------------------------------------------------------------------------- 1 | local resource_autoplace = require "resource-autoplace" 2 | 3 | data.raw.planet.nauvis.map_gen_settings.autoplace_controls["borax"] = {} 4 | data.raw.planet.nauvis.map_gen_settings.autoplace_settings.entity.settings["borax"] = {} 5 | 6 | data:extend {{ 7 | type = "autoplace-control", 8 | name = "borax", 9 | richness = true, 10 | order = "p-bor", 11 | category = "resource" 12 | }} 13 | 14 | ENTITY { 15 | type = "resource", 16 | name = "borax", 17 | category = "borax", 18 | icon = "__pycoalprocessinggraphics__/graphics/icons/raw-borax.png", 19 | icon_size = 32, 20 | flags = {"placeable-neutral"}, 21 | order = "a-b-a", 22 | map_color = {r = 0.917, g = 0.917, b = 0.917}, 23 | highlight = true, 24 | minable = { 25 | -- mining_particle = "borax-particle", 26 | mining_time = 1.5, 27 | results = { 28 | {type = "item", name = "raw-borax", amount = 1} 29 | }, 30 | fluid_amount = 25, 31 | required_fluid = "syngas" 32 | }, 33 | collision_box = {{-0.1, -0.1}, {0.1, 0.1}}, 34 | selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, 35 | tree_removal_probability = 0.7, 36 | tree_removal_max_distance = 32 * 32, 37 | autoplace = resource_autoplace.resource_autoplace_settings { 38 | name = "borax", 39 | order = "b", 40 | base_density = mods.pystellarexpedition and 10 or 4, 41 | base_spots_per_km2 = 1.25, 42 | has_starting_area_placement = false, 43 | random_spot_size_minimum = 2, 44 | random_spot_size_maximum = 4, 45 | regular_rq_factor_multiplier = 1, 46 | starting_rq_factor_multiplier = 2, 47 | candidate_spot_count = 20 48 | }, 49 | stage_counts = {20000, 13000, 10000, 5000, 3000, 1000, 500, 100}, 50 | stages = { 51 | sheet = { 52 | filename = "__pycoalprocessinggraphics__/graphics/ores/borax.png", 53 | priority = "extra-high", 54 | width = 128, 55 | height = 128, 56 | frame_count = 8, 57 | variation_count = 8, 58 | scale = 0.5 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /prototypes/ores/niobium.lua: -------------------------------------------------------------------------------- 1 | local resource_autoplace = require "resource-autoplace" 2 | 3 | data.raw.planet.nauvis.map_gen_settings.autoplace_controls["niobium"] = {} 4 | data.raw.planet.nauvis.map_gen_settings.autoplace_settings.entity.settings["niobium"] = {} 5 | 6 | data:extend {{ 7 | type = "autoplace-control", 8 | name = "niobium", 9 | richness = true, 10 | order = "p-nio", 11 | category = "resource" 12 | }} 13 | 14 | --[[TODO: GET THIS A REAL FIX 15 | data:extend{{ 16 | type = "noise-layer", 17 | name = "niobium" 18 | }} 19 | ]] -- 20 | 21 | ENTITY { 22 | type = "resource", 23 | name = "niobium", 24 | category = "niobium", 25 | icon = "__pycoalprocessinggraphics__/graphics/icons/niobium-ore.png", 26 | icon_size = 32, 27 | flags = {"placeable-neutral"}, 28 | order = "a-b-a", 29 | map_color = {r = 0.403, g = 0.6, b = 0.701}, 30 | highlight = true, 31 | minable = { 32 | -- mining_particle = "niobium-particle", 33 | mining_time = 3, 34 | results = { 35 | {type = "item", name = "niobium-ore", amount = 1} 36 | }, 37 | fluid_amount = 60, 38 | required_fluid = "refsyngas" 39 | }, 40 | collision_box = {{-0.1, -0.1}, {0.1, 0.1}}, 41 | selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, 42 | tree_removal_probability = 0.7, 43 | tree_removal_max_distance = 32 * 32, 44 | autoplace = resource_autoplace.resource_autoplace_settings 45 | { 46 | name = "niobium", 47 | order = "b", 48 | base_density = 10, 49 | base_spots_per_km2 = 1.25, 50 | has_starting_area_placement = false, 51 | random_spot_size_minimum = 2, 52 | random_spot_size_maximum = 4, 53 | regular_rq_factor_multiplier = 1, 54 | starting_rq_factor_multiplier = 2, 55 | candidate_spot_count = 20 56 | }, 57 | stage_counts = {20000, 13000, 10000, 5000, 3000, 1000, 500, 100}, 58 | stages = { 59 | sheet = { 60 | filename = "__pycoalprocessinggraphics__/graphics/ores/niobium.png", 61 | priority = "extra-high", 62 | width = 128, 63 | height = 128, 64 | frame_count = 8, 65 | variation_count = 8, 66 | scale = 0.5 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /prototypes/recipe-categories.lua: -------------------------------------------------------------------------------- 1 | data:extend { 2 | { 3 | type = "recipe-category", 4 | name = "coal-processing" 5 | }, 6 | { 7 | type = "recipe-category", 8 | name = "distilator" 9 | }, 10 | { 11 | type = "recipe-category", 12 | name = "rectisol" 13 | }, 14 | { 15 | type = "recipe-category", 16 | name = "carbonfilter" 17 | }, 18 | { 19 | type = "recipe-category", 20 | name = "gasifier" 21 | }, 22 | { 23 | type = "recipe-category", 24 | name = "tar" 25 | }, 26 | { 27 | type = "recipe-category", 28 | name = "methanol" 29 | }, 30 | { 31 | type = "recipe-category", 32 | name = "hpf" 33 | }, 34 | { 35 | type = "recipe-category", 36 | name = "quenching-tower" 37 | }, 38 | { 39 | type = "recipe-category", 40 | name = "combustion" 41 | }, 42 | { 43 | type = "recipe-category", 44 | name = "cooling" 45 | }, 46 | { 47 | type = "recipe-category", 48 | name = "evaporator" 49 | }, 50 | { 51 | type = "recipe-category", 52 | name = "desulfurization" 53 | }, 54 | { 55 | type = "recipe-category", 56 | name = "olefin" 57 | }, 58 | { 59 | type = "recipe-category", 60 | name = "soil-extraction" 61 | }, 62 | { 63 | type = "recipe-category", 64 | name = "ground-borer" 65 | }, 66 | { 67 | type = "recipe-category", 68 | name = "fts-reactor" 69 | }, 70 | { 71 | type = "recipe-category", 72 | name = "solid-separator" 73 | }, 74 | { 75 | type = "recipe-category", 76 | name = "washer" 77 | }, 78 | { 79 | type = "recipe-category", 80 | name = "classifier" 81 | }, 82 | { 83 | type = "recipe-category", 84 | name = "advanced-foundry" 85 | }, 86 | { 87 | type = "recipe-category", 88 | name = "co2" 89 | }, 90 | { 91 | type = "recipe-category", 92 | name = "fluid-separator" 93 | }, 94 | { 95 | type = "recipe-category", 96 | name = "fawogae" 97 | }, 98 | { 99 | type = "recipe-category", 100 | name = "ralesia" 101 | }, 102 | { 103 | type = "recipe-category", 104 | name = "ulric" 105 | }, 106 | { 107 | type = "recipe-category", 108 | name = "borax" 109 | }, 110 | { 111 | type = "recipe-category", 112 | name = "niobium" 113 | }, 114 | { 115 | type = "recipe-category", 116 | name = "crusher" 117 | }, 118 | { 119 | type = "recipe-category", 120 | name = "ball-mill" 121 | }, 122 | { 123 | type = "recipe-category", 124 | name = "sand-extractor" 125 | }, 126 | { 127 | type = "recipe-category", 128 | name = "mukmoux" 129 | }, 130 | { 131 | type = "recipe-category", 132 | name = "rare-earth" 133 | }, 134 | { 135 | type = "recipe-category", 136 | name = "advanced-crafting" 137 | }, 138 | { 139 | type = "recipe-category", 140 | name = "nursery" 141 | }, 142 | { 143 | type = "recipe-category", 144 | name = "wpu" 145 | }, 146 | { 147 | type = "recipe-category", 148 | name = "glassworks" 149 | }, 150 | { 151 | type = "resource-category", 152 | name = "borax" 153 | }, 154 | { 155 | type = "resource-category", 156 | name = "niobium" 157 | }, 158 | { 159 | type = "fuel-category", 160 | name = "drill" 161 | }, 162 | { 163 | type = "fuel-category", 164 | name = "jerry" 165 | }, 166 | { 167 | type = "fuel-category", 168 | name = "fuelrod" 169 | }, 170 | { 171 | type = "fuel-category", 172 | name = "biomass" 173 | }, 174 | { 175 | type = "recipe-category", 176 | name = "handcrafting" 177 | }, 178 | } 179 | -------------------------------------------------------------------------------- /prototypes/recipes/advanced-foundry-recipes.lua: -------------------------------------------------------------------------------- 1 | --NEXELIT PLATE 2 | RECIPE { 3 | type = "recipe", 4 | name = "nexelit-plate", 5 | category = "advanced-foundry", 6 | enabled = false, 7 | energy_required = 2, 8 | ingredients = { 9 | {type = "item", name = "nexelit-ore", amount = 4}, 10 | {type = "fluid", name = "petroleum-gas", amount = 100}, 11 | {type = "item", name = "limestone", amount = 2}, 12 | {type = "item", name = "sand-casting", amount = 1} 13 | }, 14 | results = { 15 | {type = "item", name = "nexelit-plate", amount = 4} 16 | }, 17 | main_product = "nexelit-plate", 18 | icon = "__pycoalprocessinggraphics__/graphics/icons/nexelit-plate.png", 19 | icon_size = 32, 20 | subgroup = "py-items", 21 | order = "a1" 22 | }:add_unlock("nexelit") 23 | 24 | --STEEL PLATE - cant change the base one,so i did that. 25 | RECIPE { 26 | type = "recipe", 27 | name = "steel-plate2", 28 | category = "advanced-foundry", 29 | enabled = false, 30 | energy_required = 2, 31 | ingredients = { 32 | {type = "item", name = "crushed-iron", amount = 15}, 33 | {type = "item", name = "coke", amount = 2}, 34 | {type = "item", name = "fuelrod-mk01", amount = 1}, 35 | {type = "item", name = "limestone", amount = 2}, 36 | {type = "item", name = "sand-casting", amount = 1} 37 | }, 38 | results = { 39 | {type = "item", name = "steel-plate", amount = 12} 40 | }, 41 | main_product = "steel-plate", 42 | icon = "__base__/graphics/icons/steel-plate.png", 43 | icon_size = 64, 44 | subgroup = "py-items", 45 | order = "a2" 46 | }:add_unlock("advanced-material-processing-2") 47 | -------------------------------------------------------------------------------- /prototypes/recipes/crusher-recipes.lua: -------------------------------------------------------------------------------- 1 | --NIOBIUM POWDER 2 | RECIPE { 3 | type = "recipe", 4 | name = "niobium-powder", 5 | category = "crusher", 6 | enabled = false, 7 | energy_required = 3.5, 8 | ingredients = { 9 | {type = "item", name = "niobium-ore", amount = 10} 10 | }, 11 | results = { 12 | {type = "item", name = "niobium-powder", amount = 5}, 13 | {type = "item", name = "stone", amount = 2} 14 | }, 15 | icon = "__pycoalprocessinggraphics__/graphics/icons/crush-niobium.png", 16 | icon_size = 32, 17 | main_product = "niobium-powder", 18 | subgroup = "py-crusher", 19 | order = "a" 20 | }:add_unlock("niobium") 21 | 22 | --IRON 23 | RECIPE { 24 | type = "recipe", 25 | name = "crushing-iron", 26 | category = "crusher", 27 | enabled = false, 28 | energy_required = 1, 29 | ingredients = { 30 | {type = "item", name = "iron-ore", amount = 5} 31 | }, 32 | results = { 33 | {type = "item", name = "crushed-iron", amount = 5}, 34 | {type = "item", name = "stone", amount = 1} 35 | }, 36 | main_product = "crushed-iron", 37 | icon = "__pycoalprocessinggraphics__/graphics/icons/crush-iron.png", 38 | icon_size = 32, 39 | subgroup = "py-crusher", 40 | order = "b" 41 | }:add_unlock("advanced-material-processing") 42 | 43 | --COPPER 44 | RECIPE { 45 | type = "recipe", 46 | name = "crushing-copper", 47 | category = "crusher", 48 | enabled = false, 49 | energy_required = 1, 50 | ingredients = { 51 | {type = "item", name = "copper-ore", amount = 5} 52 | }, 53 | results = { 54 | {type = "item", name = "crushed-copper", amount = 5}, 55 | {type = "item", name = "stone", amount = 1} 56 | }, 57 | main_product = "crushed-copper", 58 | icon = "__pycoalprocessinggraphics__/graphics/icons/crush-copper.png", 59 | icon_size = 32, 60 | subgroup = "py-crusher", 61 | order = "c" 62 | }:add_unlock("advanced-material-processing") 63 | 64 | --STONE to GRAVEL 65 | RECIPE { 66 | type = "recipe", 67 | name = "stone-to-gravel", 68 | category = "crusher", 69 | enabled = false, 70 | energy_required = 1, 71 | ingredients = { 72 | {type = "item", name = "stone", amount = 4} 73 | }, 74 | results = { 75 | {type = "item", name = "gravel", amount = 3} 76 | }, 77 | icon = "__pycoalprocessinggraphics__/graphics/icons/crush-stone.png", 78 | icon_size = 32, 79 | subgroup = "py-crusher", 80 | order = "d" 81 | }:add_unlock("crusher") 82 | 83 | --GRAVEL to SAND 84 | RECIPE { 85 | type = "recipe", 86 | name = "gravel-to-sand", 87 | category = "crusher", 88 | enabled = false, 89 | energy_required = 1, 90 | ingredients = { 91 | {type = "item", name = "gravel", amount = 4} 92 | }, 93 | results = { 94 | {type = "item", name = "sand", amount = 3} 95 | }, 96 | icon = "__pycoalprocessinggraphics__/graphics/icons/crush-gravel.png", 97 | icon_size = 32, 98 | subgroup = "py-crusher", 99 | order = "e" 100 | }:add_unlock("crusher") 101 | -------------------------------------------------------------------------------- /prototypes/recipes/filtration-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "lithium-peroxide", 4 | category = "chemistry", 5 | enabled = false, 6 | energy_required = 5, 7 | ingredients = { 8 | --{type="fluid", name="lithia-water", amount=30}, 9 | {type = "fluid", name = "water", amount = 300}, 10 | {type = "fluid", name = "hydrogen-peroxide", amount = 100} 11 | }, 12 | results = { 13 | {type = "item", name = "lithium-peroxide", amount = 5} 14 | } 15 | }:add_unlock("filtration-mk02") 16 | 17 | RECIPE { 18 | type = "recipe", 19 | name = "nexelit-cartridge", 20 | category = "crafting", 21 | enabled = false, 22 | energy_required = 4, 23 | ingredients = { 24 | {type = "item", name = "lithium-peroxide", amount = 25}, 25 | {type = "item", name = "nexelit-plate", amount = 10} 26 | }, 27 | results = { 28 | {type = "item", name = "nexelit-cartridge", amount = 1} 29 | } 30 | }:add_unlock("filtration-mk02") 31 | 32 | RECIPE { 33 | type = "recipe", 34 | name = "air-pollution", 35 | category = "co2", 36 | enabled = false, 37 | energy_required = 40, 38 | ingredients = { 39 | {type = "item", name = "nexelit-cartridge", amount = 1} 40 | }, 41 | results = { 42 | {type = "item", name = "saturated-nexelit-cartridge", amount = 1} 43 | }, 44 | main_product = "saturated-nexelit-cartridge", 45 | icon = "__pycoalprocessinggraphics__/graphics/icons/co2-absorber-icon.png", 46 | icon_size = 32, 47 | subgroup = "py-items", 48 | order = "d" 49 | }:add_unlock("filtration-mk02") 50 | 51 | RECIPE { 52 | type = "recipe", 53 | name = "co2", 54 | category = "hpf", 55 | enabled = false, 56 | energy_required = 3, 57 | ingredients = { 58 | {type = "item", name = "saturated-nexelit-cartridge", amount = 1}, 59 | {type = "fluid", name = "slacked-lime", amount = 100}, 60 | {type = "item", name = "active-carbon", amount = 2} 61 | }, 62 | results = { 63 | {type = "fluid", name = "carbon-dioxide", amount = 600}, 64 | {type = "item", name = "nexelit-cartridge", amount = 1}, 65 | {type = "item", name = "ash", amount = 10} 66 | }, 67 | main_product = "carbon-dioxide", 68 | icon = "__pycoalprocessinggraphics__/graphics/icons/co2.png", 69 | icon_size = 32, 70 | subgroup = "py-items-hpf", 71 | order = "d" 72 | }:add_unlock("filtration-mk02") 73 | 74 | RECIPE { 75 | type = "recipe", 76 | name = "saturated-nexelit-cartridge-regen", 77 | category = "crafting", 78 | enabled = false, 79 | energy_required = 3, 80 | ingredients = { 81 | {type = "item", name = "saturated-nexelit-cartridge", amount = 1}, 82 | {type = "item", name = "lithium-peroxide", amount = 25}, 83 | }, 84 | results = { 85 | {type = "item", name = "nexelit-cartridge", amount = 1} 86 | }, 87 | main_product = "nexelit-cartridge", 88 | icon = "__pycoalprocessinggraphics__/graphics/icons/nexelit-cartridge.png", 89 | icon_size = 32, 90 | subgroup = "py-items-hpf", 91 | order = "d" 92 | }:add_unlock("filtration-mk02") 93 | -------------------------------------------------------------------------------- /prototypes/recipes/fuel-canister-recipes.lua: -------------------------------------------------------------------------------- 1 | local skipped_fluids = { 2 | hydrogen = true, 3 | ["pressured-hydrogen"] = true 4 | } 5 | 6 | RECIPE { 7 | type = "recipe", 8 | name = "empty-jerry-can", 9 | category = "crafting", 10 | enabled = false, 11 | energy_required = 1, 12 | ingredients = { 13 | {type = "item", name = "steel-plate", amount = 1}, 14 | {type = "item", name = "plastic-bar", amount = 2} 15 | }, 16 | results = { 17 | {type = "item", name = "empty-fuel-canister", amount = 1} 18 | }, 19 | icon = "__pycoalprocessinggraphics__/graphics/icons/jerry-can.png", 20 | icon_size = 64, 21 | subgroup = "py-items", 22 | order = "c [methanol]" 23 | }:add_unlock("plastics") 24 | 25 | for f, fluid in pairs(data.raw.fluid) do 26 | if fluid.fuel_value and not skipped_fluids[fluid.name] and fluid.auto_barrel ~= false then 27 | local fluid_icon = table.deepcopy(fluid.icons) or {{icon = fluid.icon}} 28 | -- Apply to each layer 29 | for _, icon in pairs(fluid_icon) do 30 | icon.icon_size = icon.icon_size or fluid_icon.icon_size or fluid.icon_size or 64 31 | icon.scale = 16 / icon.icon_size -- 32 = 0.5, 64 = 0.25 32 | end 33 | 34 | local recipe_icon = { 35 | {icon = "__pycoalprocessinggraphics__/graphics/empty.png", icon_size = 32}, 36 | {icon = "__pycoalprocessinggraphics__/graphics/icons/empty-jerrycan.png", icon_size = 64, scale = 0.4, shift = {-6.4, -6.4}}, 37 | } 38 | 39 | local icons = {{icon = "__pycoalprocessinggraphics__/graphics/icons/jerry-can.png", icon_size = 64}} 40 | 41 | for _, icon in pairs(fluid_icon) do 42 | icon.shift = icon.shift or {} 43 | local x, y = icon.shift[1] or icon.shift.x or 0, icon.shift[2] or icon.shift.y or 0 44 | icon.shift = {x, y + 2} 45 | table.insert(icons, icon) 46 | local icon = table.deepcopy(icon) 47 | icon.shift = {x + 7.5, y + 7.5} 48 | table.insert(recipe_icon, icon) 49 | end 50 | 51 | ITEM { 52 | type = "item", 53 | name = fluid.name .. "-canister", 54 | localised_name = {"item-name.fill-can", fluid.localised_name or {"fluid-name." .. fluid.name}}, 55 | icons = icons, 56 | flags = {}, 57 | subgroup = "py-cans", 58 | order = "canister-b-[full-gas-canister]", 59 | fuel_value = "10MJ", 60 | fuel_category = "jerry", 61 | burnt_result = "empty-fuel-canister", 62 | stack_size = 20, 63 | ignore_for_dependencies = true, 64 | unlock_results = false 65 | } 66 | 67 | local fuel_amount = 50 68 | if string.match(fluid.fuel_value, "[kK]J") then 69 | fuel_amount = math.ceil(10 / (string.match(fluid.fuel_value, "[%d%.]+") / 1000)) 70 | elseif string.match(fluid.fuel_value, "[mM]J") then 71 | fuel_amount = math.ceil(10 / (string.match(fluid.fuel_value, "[%d%.]+"))) 72 | end 73 | 74 | RECIPE { 75 | type = "recipe", 76 | name = "fill-" .. fluid.name .. "-canister", 77 | localised_name = {"recipe-name.fill-can", fluid.localised_name or {"fluid-name." .. fluid.name}}, 78 | category = "crafting-with-fluid", 79 | enabled = false, 80 | energy_required = 0.2, 81 | ingredients = { 82 | {type = "fluid", name = fluid.name, amount = fuel_amount}, 83 | {type = "item", name = "empty-fuel-canister", amount = 1} 84 | }, 85 | results = { 86 | {type = "item", name = fluid.name .. "-canister", amount = 1} 87 | }, 88 | ignore_for_dependencies = true 89 | }:add_unlock("plastics") 90 | 91 | 92 | RECIPE { 93 | type = "recipe", 94 | name = "empty-" .. fluid.name .. "-canister", 95 | localised_name = {"recipe-name.empty-can", fluid.localised_name or {"fluid-name." .. fluid.name}}, 96 | icons = recipe_icon, 97 | category = "crafting-with-fluid", 98 | enabled = false, 99 | energy_required = 0.2, 100 | ingredients = { 101 | {type = "item", name = fluid.name .. "-canister", amount = 1} 102 | }, 103 | results = { 104 | {type = "fluid", name = fluid.name, amount = fuel_amount}, 105 | {type = "item", name = "empty-fuel-canister", amount = 1} 106 | }, 107 | ignore_for_dependencies = true, 108 | unlock_results = false, 109 | --icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", 110 | --icon_size = 32, 111 | main_product = fluid.name, 112 | subgroup = "py-items", 113 | order = "canister-b-[empty-methanol-gas-canister]" 114 | }:add_unlock("plastics") 115 | end 116 | 117 | if data.raw.recipe["empty-" .. fluid.name .. "-barrel"] ~= nil then 118 | RECIPE("empty-" .. fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} 119 | end 120 | if data.raw.recipe["fill-" .. fluid.name .. "-barrel"] ~= nil then 121 | RECIPE("fill-" .. fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} 122 | end 123 | if data.raw.item[fluid.name .. "-barrel"] ~= nil then 124 | ITEM(fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} 125 | end 126 | end 127 | -------------------------------------------------------------------------------- /prototypes/recipes/ground-borer-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "mining-nexelit", 4 | category = "ground-borer", 5 | enabled = false, 6 | energy_required = 3, 7 | ingredients = { 8 | {type = "fluid", name = "lubricant", amount = 200}, 9 | {type = "fluid", name = "coal-gas", amount = 300}, 10 | {type = "item", name = "drill-head", amount = 1} 11 | }, 12 | results = { 13 | {type = "item", name = "nexelit-ore", amount = 10} 14 | }, 15 | main_product = "nexelit-ore", 16 | icon = "__pycoalprocessinggraphics__/graphics/icons/drilling/drilling-nexelit.png", 17 | icon_size = 32, 18 | subgroup = "py-drilling", 19 | order = "a" 20 | }:add_unlock("excavation-1") 21 | 22 | RECIPE { 23 | type = "recipe", 24 | name = "mining-stone", 25 | category = "ground-borer", 26 | enabled = false, 27 | energy_required = 3, 28 | ingredients = { 29 | {type = "fluid", name = "lubricant", amount = 100}, 30 | {type = "fluid", name = "coal-gas", amount = 100}, 31 | {type = "item", name = "drill-head", amount = 1} 32 | }, 33 | results = { 34 | {type = "item", name = "stone", amount = 30} 35 | }, 36 | main_product = "stone", 37 | icon = "__pycoalprocessinggraphics__/graphics/icons/drilling/drilling-stone.png", 38 | icon_size = 32, 39 | subgroup = "py-drilling", 40 | order = "b" 41 | }:add_unlock("excavation-2") 42 | 43 | RECIPE { 44 | type = "recipe", 45 | name = "mining-borax", 46 | category = "ground-borer", 47 | enabled = false, 48 | energy_required = 3, 49 | ingredients = { 50 | {type = "fluid", name = "lubricant", amount = 100}, 51 | {type = "fluid", name = "coal-gas", amount = 100}, 52 | {type = "item", name = "drill-head", amount = 1} 53 | }, 54 | results = { 55 | {type = "item", name = "raw-borax", amount = 15} 56 | }, 57 | main_product = "raw-borax", 58 | icon = "__pycoalprocessinggraphics__/graphics/icons/drilling/drilling-borax.png", 59 | icon_size = 32, 60 | subgroup = "py-drilling", 61 | order = "b" 62 | }:add_unlock("excavation-1") 63 | 64 | RECIPE { 65 | type = "recipe", 66 | name = "mining-niobium", 67 | category = "ground-borer", 68 | enabled = false, 69 | energy_required = 3, 70 | ingredients = { 71 | {type = "fluid", name = "lubricant", amount = 100}, 72 | {type = "fluid", name = "coal-gas", amount = 100}, 73 | {type = "item", name = "drill-head", amount = 2} 74 | }, 75 | results = { 76 | {type = "item", name = "niobium-ore", amount = 15} 77 | }, 78 | main_product = "niobium-ore", 79 | icon = "__pycoalprocessinggraphics__/graphics/icons/drilling/drilling-niobium.png", 80 | icon_size = 32, 81 | subgroup = "py-drilling", 82 | order = "b" 83 | }:add_unlock("excavation-2") 84 | 85 | RECIPE { 86 | type = "recipe", 87 | name = "mining-limestone", 88 | category = "ground-borer", 89 | enabled = false, 90 | energy_required = 3, 91 | ingredients = { 92 | {type = "fluid", name = "lubricant", amount = 100}, 93 | {type = "fluid", name = "coal-gas", amount = 100}, 94 | {type = "item", name = "drill-head", amount = 1} 95 | }, 96 | results = { 97 | {type = "item", name = "limestone", amount = 20} 98 | }, 99 | main_product = "limestone", 100 | icon = "__pycoalprocessinggraphics__/graphics/icons/drilling/drilling-limestone.png", 101 | icon_size = 32, 102 | subgroup = "py-drilling", 103 | order = "c" 104 | }:add_unlock("excavation-2") 105 | -------------------------------------------------------------------------------- /prototypes/recipes/mukmoux-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "mukmoux-fat", 4 | category = "mukmoux", 5 | enabled = false, 6 | energy_required = 60, 7 | ingredients = { 8 | {type = "item", name = "fawogae", amount = 5}, 9 | {type = "item", name = "ralesia-seeds", amount = 30} 10 | }, 11 | results = { 12 | {type = "item", name = "mukmoux-fat", amount = 15} 13 | }, 14 | main_product = "mukmoux-fat" 15 | }:add_unlock("mukmoux") 16 | 17 | RECIPE { 18 | type = "recipe", 19 | name = "oleochemicals", 20 | category = "fts-reactor", 21 | enabled = false, 22 | energy_required = 10, 23 | ingredients = { 24 | {type = "item", name = "mukmoux-fat", amount = 20}, 25 | {type = "item", name = "nichrome", amount = 1}, 26 | {type = "fluid", name = "water", amount = 2000} 27 | }, 28 | results = { 29 | {type = "fluid", name = "oleochemicals", amount = 300}, 30 | {type = "fluid", name = "glycerol", amount = 150}, 31 | {type = "fluid", name = "steam", amount = 2000, temperature = 150, ignored_by_productivity = 2000} 32 | }, 33 | main_product = "oleochemicals", 34 | icon = "__pycoalprocessinggraphics__/graphics/icons/oleochemicals.png", 35 | icon_size = 32, 36 | subgroup = "py-fluid-handling", 37 | order = "c" 38 | }:add_unlock("mukmoux") 39 | 40 | RECIPE { 41 | type = "recipe", 42 | name = "dedicated-oleochemicals", 43 | category = "fts-reactor", 44 | enabled = false, 45 | energy_required = 10, 46 | ingredients = { 47 | {type = "item", name = "mukmoux-fat", amount = 20}, 48 | {type = "item", name = "chromium", amount = 2}, 49 | {type = "fluid", name = "water", amount = 2000} 50 | }, 51 | results = { 52 | {type = "fluid", name = "oleochemicals", amount = 250}, 53 | {type = "fluid", name = "steam", amount = 2000, temperature = 150, ignored_by_productivity = 2000} 54 | }, 55 | main_product = "oleochemicals", 56 | icon = "__pycoalprocessinggraphics__/graphics/icons/oleochemicals.png", 57 | icon_size = 32, 58 | subgroup = "py-fluid-handling", 59 | order = "c" 60 | }:add_unlock("mukmoux") 61 | -------------------------------------------------------------------------------- /prototypes/recipes/olefin-plant-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "aromatics", 4 | category = "olefin", 5 | enabled = false, 6 | energy_required = 2, 7 | ingredients = { 8 | {type = "item", name = "nexelit-plate", amount = 2}, 9 | {type = "fluid", name = "olefin", amount = 200}, 10 | {type = "fluid", name = "water", amount = 200, ignored_by_stats = 100} 11 | }, 12 | results = { 13 | {type = "fluid", name = "aromatics", amount = 200}, 14 | {type = "fluid", name = "water", amount = 100, ignored_by_stats = 100, ignored_by_productivity = 100} 15 | --{type="fluid", name="hydrogen", amount=10}, 16 | }, 17 | main_product = "aromatics", 18 | icon = "__pycoalprocessinggraphics__/graphics/icons/aromatics.png", 19 | icon_size = 64, 20 | subgroup = "py-fluids", 21 | order = "d3" 22 | }:add_unlock("fuel-production") 23 | 24 | RECIPE { 25 | type = "recipe", 26 | name = "olefin", 27 | category = "olefin", 28 | enabled = false, 29 | energy_required = 2, 30 | ingredients = { 31 | {type = "item", name = "nexelit-plate", amount = 2}, 32 | {type = "fluid", name = "water", amount = 400}, --bob hydrogen 33 | {type = "fluid", name = "carbon-dioxide", amount = 200} 34 | }, 35 | results = { 36 | {type = "fluid", name = "olefin", amount = 200} 37 | }, 38 | main_product = "olefin", 39 | icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", 40 | icon_size = 32, 41 | subgroup = "py-fluids", 42 | order = "d4" 43 | }:add_unlock("fuel-production") 44 | 45 | RECIPE { 46 | type = "recipe", 47 | name = "olefin-petgas", 48 | category = "fluid-separator", 49 | enabled = false, 50 | energy_required = 2.8, 51 | ingredients = { 52 | {type = "fluid", name = "olefin", amount = 300}, 53 | {type = "fluid", name = "carbon-dioxide", amount = 200} 54 | }, 55 | results = { 56 | {type = "fluid", name = "petroleum-gas", amount = 150}, 57 | {type = "fluid", name = "light-oil", amount = 150} 58 | }, 59 | main_product = "petroleum-gas", 60 | icon = "__base__/graphics/icons/fluid/petroleum-gas.png", 61 | icon_size = 64, 62 | subgroup = "py-fluids", 63 | order = "d5" 64 | }:add_unlock("fuel-production") 65 | 66 | --[[ 67 | RECIPE { 68 | type = "recipe", 69 | name = "gasoline", 70 | category = "fluid-separator", 71 | enabled = false, 72 | energy_required = 2.8, 73 | ingredients = { 74 | {type = "fluid", name = "olefin", amount = 300}, 75 | {type = "item", name = "nexelit-plate", amount = 2}, 76 | --{type="fluid", name="hydrogen", amount=20}, 77 | {type = "fluid", name = "light-oil", amount = 200} 78 | }, 79 | results = { 80 | {type = "fluid", name = "gasoline", amount = 150} 81 | }, 82 | main_product = "gasoline", 83 | icon = "__pycoalprocessinggraphics__/graphics/icons/gasoline.png", 84 | icon_size = 32, 85 | subgroup = "py-fluids", 86 | order = "d6" 87 | }--:add_unlock("fuel-production") 88 | ]] -- 89 | 90 | RECIPE { 91 | type = "recipe", 92 | name = "refolefin", 93 | category = "olefin", 94 | enabled = false, 95 | energy_required = 3, 96 | ingredients = { 97 | {type = "fluid", name = "refsyngas", amount = 250}, 98 | {type = "item", name = "nexelit-plate", amount = 3} 99 | }, 100 | results = { 101 | {type = "fluid", name = "olefin", amount = 250} 102 | }, 103 | main_product = "olefin", 104 | icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", 105 | icon_size = 32, 106 | subgroup = "py-fluids", 107 | order = "d7" 108 | }:add_unlock("fuel-production") 109 | 110 | RECIPE { 111 | type = "recipe", 112 | name = "aromaticsolefin", 113 | category = "olefin", 114 | enabled = false, 115 | energy_required = 3, 116 | ingredients = { 117 | {type = "fluid", name = "aromatics", amount = 300} 118 | }, 119 | results = { 120 | {type = "fluid", name = "olefin", amount = 250} 121 | }, 122 | main_product = "olefin", 123 | icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", 124 | icon_size = 32, 125 | subgroup = "py-fluids", 126 | order = "d8" 127 | }:add_unlock("fuel-production") 128 | 129 | RECIPE { 130 | type = "recipe", 131 | name = "olefin-lube", 132 | category = "olefin", 133 | enabled = false, 134 | energy_required = 3, 135 | ingredients = { 136 | {type = "fluid", name = "olefin", amount = 300}, 137 | {type = "fluid", name = "oleochemicals", amount = 100} 138 | }, 139 | results = { 140 | {type = "fluid", name = "lubricant", amount = 250} 141 | }, 142 | main_product = "lubricant", 143 | --icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", 144 | --icon_size = 32, 145 | }:add_unlock("lubricant") 146 | -------------------------------------------------------------------------------- /prototypes/recipes/sand-extractor-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "extract-sand", 4 | category = "sand-extractor", 5 | enabled = false, 6 | energy_required = 5, 7 | ingredients = { 8 | {type = "item", name = "iron-stick", amount = 2} 9 | }, 10 | results = { 11 | {type = "item", name = "sand", amount = 10} 12 | }, 13 | icon = "__pycoalprocessinggraphics__/graphics/icons/extraction-sand.png", 14 | icon_size = 32, 15 | main_product = "sand", 16 | subgroup = "py-extractor", 17 | order = "a" 18 | }:add_unlock("excavation-1") 19 | 20 | RECIPE { 21 | type = "recipe", 22 | name = "extract-gravel", 23 | category = "sand-extractor", 24 | enabled = false, 25 | energy_required = 5, 26 | ingredients = { 27 | {type = "item", name = "iron-stick", amount = 4} 28 | }, 29 | results = { 30 | {type = "item", name = "gravel", amount = 10} 31 | }, 32 | icon = "__pycoalprocessinggraphics__/graphics/icons/extraction-gravel.png", 33 | icon_size = 32, 34 | main_product = "gravel", 35 | subgroup = "py-extractor", 36 | order = "b" 37 | }:add_unlock("excavation-1") 38 | 39 | RECIPE { 40 | type = "recipe", 41 | name = "extract-stone", 42 | category = "sand-extractor", 43 | enabled = false, 44 | energy_required = 5, 45 | ingredients = { 46 | {type = "item", name = "iron-stick", amount = 4} 47 | }, 48 | results = { 49 | {type = "item", name = "stone", amount = 10} 50 | }, 51 | icon = "__pycoalprocessinggraphics__/graphics/icons/extraction-stone.png", 52 | icon_size = 32, 53 | main_product = "stone", 54 | subgroup = "py-extractor", 55 | order = "c" 56 | }:add_unlock("excavation-1") 57 | 58 | RECIPE { 59 | type = "recipe", 60 | name = "extract-richdust", 61 | category = "sand-extractor", 62 | enabled = false, 63 | energy_required = 10, 64 | ingredients = { 65 | {type = "item", name = "iron-stick", amount = 8} 66 | }, 67 | results = { 68 | {type = "item", name = "rich-dust", amount = 15} 69 | }, 70 | icon = "__pycoalprocessinggraphics__/graphics/icons/extraction-richdust.png", 71 | icon_size = 32, 72 | main_product = "rich-dust", 73 | subgroup = "py-extractor", 74 | order = "d" 75 | }:add_unlock("excavation-1") 76 | 77 | RECIPE { 78 | type = "recipe", 79 | name = "extract-coarse", 80 | category = "sand-extractor", 81 | enabled = false, 82 | energy_required = 7, 83 | ingredients = { 84 | {type = "item", name = "iron-stick", amount = 4} 85 | }, 86 | results = { 87 | {type = "item", name = "coarse", amount = 10} 88 | }, 89 | icon = "__pycoalprocessinggraphics__/graphics/icons/extraction-coarse.png", 90 | icon_size = 32, 91 | main_product = "coarse", 92 | subgroup = "py-extractor", 93 | order = "c" 94 | }:add_unlock("excavation-1") 95 | -------------------------------------------------------------------------------- /prototypes/recipes/seperation-recipes.lua: -------------------------------------------------------------------------------- 1 | RECIPE { 2 | type = "recipe", 3 | name = "sand-classification", 4 | category = "classifier", 5 | enabled = false, 6 | energy_required = 4, 7 | ingredients = { 8 | {type = "item", name = "sand", amount = 15} 9 | }, 10 | results = { 11 | {type = "item", name = "rich-dust", amount = 10}, 12 | {type = "item", name = "gravel", amount = 2}, 13 | {type = "item", name = "crushed-quartz", amount = 10} 14 | }, 15 | main_product = "rich-dust", 16 | icon = "__pycoalprocessinggraphics__/graphics/icons/class-pure-sand.png", 17 | icon_size = 32, 18 | subgroup = "py-items-class", 19 | order = "b" 20 | }:add_unlock("separation") 21 | 22 | RECIPE { 23 | type = "recipe", 24 | name = "coarse-classification", 25 | category = "classifier", 26 | enabled = false, 27 | energy_required = 1, 28 | ingredients = { 29 | {type = "item", name = "coarse", amount = 20} 30 | }, 31 | results = { 32 | {type = "item", name = "stone", amount = 5}, 33 | {type = "item", name = "iron-oxide", amount = 2}, 34 | {type = "item", name = "gravel", amount = 4} 35 | }, 36 | main_product = "gravel", 37 | icon = "__pycoalprocessinggraphics__/graphics/icons/class-coarse.png", 38 | icon_size = 32, 39 | subgroup = "py-items-class", 40 | order = "a" 41 | }:add_unlock("separation") 42 | 43 | RECIPE { 44 | type = "recipe", 45 | name = "tailings-classification", 46 | category = "classifier", 47 | enabled = false, 48 | energy_required = 2.5, 49 | ingredients = { 50 | {type = "item", name = "tailings-dust", amount = 15} 51 | }, 52 | results = { 53 | {type = "item", name = "coal-dust", amount = 5}, 54 | {type = "item", name = "copper-ore", amount = 1}, 55 | {type = "item", name = "iron-ore", amount = 1} 56 | }, 57 | main_product = "coal-dust", 58 | icon = "__pycoalprocessinggraphics__/graphics/icons/class-tailings.png", 59 | icon_size = 32, 60 | subgroup = "py-items-class", 61 | order = "c" 62 | }:add_unlock("separation") 63 | 64 | RECIPE { 65 | type = "recipe", 66 | name = "co2-organics", 67 | category = "hpf", 68 | enabled = false, 69 | energy_required = 2.0, 70 | ingredients = { 71 | {type = "item", name = "organics", amount = 10} 72 | }, 73 | results = { 74 | {type = "fluid", name = "carbon-dioxide", amount = 300} 75 | }, 76 | main_product = "carbon-dioxide", 77 | icon = "__pycoalprocessinggraphics__/graphics/icons/carbon-dioxide.png", 78 | icon_size = 32, 79 | subgroup = "py-items-hpf", 80 | order = "f" 81 | }:add_unlock("wood-processing-2") 82 | 83 | RECIPE { 84 | type = "recipe", 85 | name = "soil-separation", 86 | category = "solid-separator", 87 | enabled = false, 88 | energy_required = 3, 89 | ingredients = { 90 | {type = "item", name = "soil", amount = 20} 91 | }, 92 | results = { 93 | {type = "item", name = "sand", amount = 13}, 94 | {type = "item", name = "coarse", amount = 3}, 95 | {type = "item", name = "limestone", amount = 2}, 96 | {type = "item", name = "organics", amount = 3} 97 | }, 98 | main_product = "sand", 99 | icon = "__pycoalprocessinggraphics__/graphics/icons/soil-separation.png", 100 | icon_size = 32, 101 | subgroup = "py-items-class", 102 | order = "e" 103 | }:add_unlock("separation") 104 | 105 | RECIPE { 106 | type = "recipe", 107 | name = "tailings-separation", 108 | category = "solid-separator", 109 | enabled = false, 110 | energy_required = 1, 111 | ingredients = { 112 | {type = "item", name = "tailings-dust", amount = 15} 113 | }, 114 | results = { 115 | {type = "item", name = "coal-dust", amount = 5}, 116 | {type = "item", name = "rich-dust", amount = 2} 117 | }, 118 | main_product = "coal-dust", 119 | icon = "__pycoalprocessinggraphics__/graphics/icons/tailings_separation.png", 120 | icon_size = 32, 121 | subgroup = "py-items-class", 122 | order = "g" 123 | }:add_unlock("fluid-separation") 124 | 125 | RECIPE { 126 | type = "recipe", 127 | name = "creosote-to-aromatics", 128 | category = "tar", 129 | enabled = false, 130 | energy_required = 2, 131 | ingredients = { 132 | {type = "fluid", name = "creosote", amount = 150} 133 | }, 134 | results = { 135 | {type = "fluid", name = "aromatics", amount = 50} 136 | }, 137 | crafting_machine_tint = 138 | { 139 | primary = {r = 0.74, g = 0.403, b = 0.388}, 140 | secondary = {r = 1, g = 1, b = 1}, 141 | tertiary = {r = 0.360, g = 0.250, b = 0.070}, 142 | quaternary = {r = 0.360, g = 0.250, b = 0.070}, 143 | }, 144 | main_product = "aromatics", 145 | }:add_unlock("creosote") 146 | 147 | RECIPE { 148 | type = "recipe", 149 | name = "ash-separation", 150 | category = "solid-separator", 151 | enabled = false, 152 | energy_required = 1, 153 | ingredients = { 154 | {type = "item", name = "ash", amount = 10} 155 | }, 156 | results = { 157 | {type = "item", name = "coal-dust", amount = 1, probability = 0.5}, 158 | {type = "item", name = "iron-oxide", amount = 1, probability = 0.05} 159 | }, 160 | icon = "__pycoalprocessinggraphics__/graphics/icons/ash-separation.png", 161 | icon_size = 32, 162 | subgroup = "py-items-class", 163 | order = "f" 164 | }:add_unlock("separation") 165 | 166 | RECIPE { 167 | type = "recipe", 168 | name = "organics-from-dirty-water", 169 | category = "evaporator", 170 | enabled = false, 171 | energy_required = 4, 172 | ingredients = { 173 | {type = "fluid", name = "dirty-water-light", amount = 250} 174 | }, 175 | results = { 176 | {type = "item", name = "organics", amount = 1} 177 | }, 178 | subgroup = "py-items-class", 179 | order = "f" 180 | }:add_unlock("fluid-separation") 181 | -------------------------------------------------------------------------------- /prototypes/recipes/tailings-recipes.lua: -------------------------------------------------------------------------------- 1 | local tailings_copper_iron = 2 | RECIPE { 3 | type = "recipe", 4 | name = "tailings-copper-iron", 5 | localised_name = {"recipe-name.tailings-ore-extraction", {"item-name.copper-ore"}, {"item-name.iron-ore"}, {"fluid-name.tar"}}, 6 | category = "quenching-tower", 7 | enabled = false, 8 | energy_required = 2, 9 | ingredients = { 10 | {type = "fluid", name = "tar", amount = 500}, 11 | {type = "fluid", name = "water", amount = 500} 12 | }, 13 | results = { 14 | {type = "fluid", name = "dirty-water-heavy", amount = 500}, 15 | {type = "fluid", name = "flue-gas", amount = 150}, 16 | {type = "fluid", name = "water-saline", amount = 250} 17 | }, 18 | icons = { 19 | {icon = "__pycoalprocessinggraphics__/graphics/icons/dirty-water.png", icon_size = 64} 20 | }, 21 | icon_size = 64, 22 | subgroup = "py-quenching-ores", 23 | order = "tailings-a" 24 | }:add_unlock("separation") 25 | 26 | local tailings_borax_niobium = tailings_copper_iron:copy("tailings-borax-niobium"):add_unlock("fluid-separation") 27 | tailings_borax_niobium.localised_name = {"recipe-name.tailings-ore-extraction", {"item-name.raw-borax"}, {"item-name.niobium-ore"}, {"fluid-name.tar"}} 28 | tailings_borax_niobium.icons[#tailings_borax_niobium.icons + 1] = {icon = "__pycoalprocessinggraphics__/graphics/icons/ores/borax-niobium.png", icon_size = 32} 29 | tailings_borax_niobium.results[#tailings_borax_niobium.results + 1] = {type = "item", name = "raw-borax", amount = 1, probability = 0.4} 30 | tailings_borax_niobium.results[#tailings_borax_niobium.results + 1] = {type = "item", name = "niobium-ore", amount = 1, probability = 0.4} 31 | 32 | --Finally add the results to our original table (this would be so much easier when Recipe:Results is finished) 33 | tailings_copper_iron.icons[#tailings_copper_iron.icons + 1] = {icon = "__pycoalprocessinggraphics__/graphics/icons/ores/copper-iron.png", icon_size = 32} 34 | tailings_copper_iron.results[#tailings_copper_iron.results + 1] = {type = "item", name = "copper-ore", amount = 1, probability = 0.4} 35 | tailings_copper_iron.results[#tailings_copper_iron.results + 1] = {type = "item", name = "iron-ore", amount = 1, probability = 0.4} 36 | -------------------------------------------------------------------------------- /prototypes/sprites/sprites.lua: -------------------------------------------------------------------------------- 1 | data:extend {{ 2 | type = "sprite", 3 | name = "pywiki", 4 | filename = "__pycoalprocessinggraphics__/graphics/gui/py-wiki-alt.png", 5 | priority = "extra-high-no-scale", 6 | size = 64, 7 | flags = {"gui-icon"} 8 | }} 9 | 10 | data:extend {{ 11 | type = "sprite", 12 | name = "pywiki-alt", 13 | filename = "__pycoalprocessinggraphics__/graphics/gui/py-wiki.png", 14 | priority = "extra-high-no-scale", 15 | size = 128, 16 | flags = {"gui-icon"} 17 | }} 18 | 19 | if mods.pystellarexpedition then 20 | data:extend {{ 21 | type = "sprite", 22 | name = "pywiki-logos", 23 | filename = "__pycoalprocessinggraphics__/graphics/gui/logos2.png", 24 | priority = "high", 25 | width = 576, 26 | height = 432, 27 | flags = {"gui-icon"} 28 | }} 29 | else 30 | data:extend {{ 31 | type = "sprite", 32 | name = "pywiki-logos", 33 | filename = "__pycoalprocessinggraphics__/graphics/gui/logos.png", 34 | priority = "high", 35 | width = 720, 36 | height = 288, 37 | flags = {"gui-icon"} 38 | }} 39 | end 40 | 41 | data:extend { 42 | { 43 | type = "sprite", 44 | name = "up-black", 45 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/up-black.png", 46 | size = 32, 47 | flags = {"gui-icon"} 48 | }, 49 | { 50 | type = "sprite", 51 | name = "up-white", 52 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/up-white.png", 53 | size = 32, 54 | flags = {"gui-icon"} 55 | }, 56 | { 57 | type = "sprite", 58 | name = "down-black", 59 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/down-black.png", 60 | size = 32, 61 | flags = {"gui-icon"} 62 | }, 63 | { 64 | type = "sprite", 65 | name = "down-white", 66 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/down-white.png", 67 | size = 32, 68 | flags = {"gui-icon"} 69 | }, 70 | { 71 | type = "sprite", 72 | name = "white-circle", 73 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/white-circle.png", 74 | size = 32, 75 | mipmaps = 2, 76 | flags = {"gui-icon"} 77 | } 78 | } 79 | 80 | 81 | data:extend {{ 82 | type = "sprite", 83 | name = "turd", 84 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/turd.png", 85 | priority = "high", 86 | width = 40, 87 | height = 40, 88 | flags = {"gui-icon"} 89 | }} 90 | 91 | data:extend {{ 92 | type = "sprite", 93 | name = "beacon-interference", 94 | filename = "__pycoalprocessinggraphics__/graphics/icons/gui/beacon-interference.png", 95 | priority = "extra-high-no-scale", 96 | width = 64, 97 | height = 64, 98 | flags = {"icon"} 99 | }} 100 | 101 | data:extend {{ 102 | name = "slot_icon_fuel", 103 | type = "sprite", 104 | filename = "__pycoalprocessinggraphics__/graphics/gui/slot-fuel-white.png", 105 | priority = "medium", 106 | width = 64, 107 | height = 64, 108 | mipmap_count = 3, 109 | scale = 0.5, 110 | flags = {"gui-icon"} 111 | } 112 | } 113 | 114 | data:extend {{ 115 | name = "slot_icon_fuel_black", 116 | type = "sprite", 117 | filename = "__pycoalprocessinggraphics__/graphics/gui/slot-fuel-black.png", 118 | priority = "medium", 119 | width = 64, 120 | height = 64, 121 | mipmap_count = 3, 122 | scale = 0.5, 123 | flags = {"gui-icon"} 124 | }} 125 | 126 | data:extend {{ 127 | type = "sprite", 128 | name = "rename_icon_small_black", 129 | filename = "__pycoalprocessinggraphics__/graphics/gui/rename-small-black.png", 130 | priority = "high", 131 | width = 16, 132 | height = 16, 133 | flags = {"icon"} 134 | }} 135 | 136 | data:extend {{ 137 | type = "sprite", 138 | name = "rename_icon_small_white", 139 | filename = "__pycoalprocessinggraphics__/graphics/gui/rename-small-white.png", 140 | priority = "high", 141 | width = 16, 142 | height = 16, 143 | flags = {"icon"} 144 | }} 145 | -------------------------------------------------------------------------------- /prototypes/technologies/artillery-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "artillery-2", 4 | icon_size = 256, 5 | icon = "__base__/graphics/technology/artillery.png", 6 | effects = {}, 7 | prerequisites = {"artillery"}, 8 | unit = 9 | { 10 | ingredients = 11 | { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1}, 14 | {"chemical-science-pack", 1}, 15 | {"military-science-pack", 1} 16 | }, 17 | time = 30, 18 | count = 2000 19 | }, 20 | order = "d-e-f" 21 | } 22 | -------------------------------------------------------------------------------- /prototypes/technologies/biofilm.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "biofilm", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/biofilm.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1}, 14 | {"chemical-science-pack", 1}, 15 | }, 16 | time = 30 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/cargo-landing-pad-capacity.lua: -------------------------------------------------------------------------------- 1 | data:extend {{ 2 | type = "technology", 3 | name = "cargo-landing-pad-capacity", 4 | icon = data.raw.technology["rocket-silo"].icon, 5 | icon_size = data.raw.technology["rocket-silo"].icon_size, 6 | effects = { 7 | { 8 | type = "cargo-landing-pad-count", 9 | modifier = 1, 10 | icons = { 11 | { 12 | icon = data.raw.item["cargo-landing-pad"].icon, 13 | icon_size = data.raw.item["cargo-landing-pad"].icon_size, 14 | scale = 1 15 | }, 16 | { 17 | icon = "__core__/graphics/icons/technology/constants/constant-capacity.png", 18 | icon_size = 128, 19 | scale = 0.25, 20 | shift = {25, 25} 21 | } 22 | } 23 | } 24 | }, 25 | prerequisites = {"rocket-silo"}, 26 | unit = { 27 | count_formula = "2^(L-1)*2000", 28 | ingredients = mods.pyalienlife and { 29 | {"automation-science-pack"}, 30 | {"py-science-pack-1"}, 31 | {"logistic-science-pack"}, 32 | {"py-science-pack-2"}, 33 | {"chemical-science-pack"}, 34 | {"py-science-pack-3"}, 35 | } or table.deepcopy(data.raw.technology["rocket-silo"].unit.ingredients), 36 | time = 180 37 | }, 38 | max_level = "infinite" 39 | }} 40 | -------------------------------------------------------------------------------- /prototypes/technologies/chromium.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "chromium", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/chromium.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 200, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | 15 | }, 16 | time = 60 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/coal-processing-1.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "coal-processing-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/coal-processing-1.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | effects = {}, 10 | unit = { 11 | count = 30, 12 | ingredients = { 13 | {"automation-science-pack", 1} 14 | }, 15 | time = 35 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/coal-processing-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "coal-processing-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/coal-processing-2.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"coal-processing-1"}, 10 | effects = {}, 11 | unit = { 12 | count = 50, 13 | ingredients = { 14 | {"automation-science-pack", 1}, 15 | {"logistic-science-pack", 1} 16 | }, 17 | time = 35 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prototypes/technologies/coal-processing-3.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "coal-processing-3", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/coal-processing-3.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"coal-processing-2"}, 10 | effects = {}, 11 | unit = { 12 | count = 50, 13 | ingredients = { 14 | {"automation-science-pack", 1}, 15 | {"logistic-science-pack", 1}, 16 | {"chemical-science-pack", 2} 17 | }, 18 | time = 35 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /prototypes/technologies/cooling-tower-1.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "cooling-tower-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/cooling-towermk01.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"energy-1"}, 10 | effects = {}, 11 | unit = { 12 | count = 25, 13 | ingredients = { 14 | {"automation-science-pack", 2} 15 | }, 16 | time = 45 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/cooling-tower-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "cooling-tower-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/cooling-towermk02.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"cooling-tower-1", "energy-2"}, 10 | effects = {}, 11 | unit = { 12 | count = 20, 13 | ingredients = { 14 | {"automation-science-pack", 2}, 15 | {"logistic-science-pack", 1} 16 | }, 17 | time = 45 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prototypes/technologies/creosote.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "creosote", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/creosote.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | effects = {}, 8 | unit = { 9 | count = 20, 10 | ingredients = { 11 | {"automation-science-pack", 1}, 12 | }, 13 | time = 50 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /prototypes/technologies/crusher.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "crusher", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/crusher.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 25, 11 | ingredients = { 12 | {"automation-science-pack", 3}, 13 | {"logistic-science-pack", 1} 14 | }, 15 | time = 55 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/desulfurization.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "desulfurization", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/desulfurization.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 10, 11 | ingredients = { 12 | {"automation-science-pack", 2}, 13 | {"logistic-science-pack", 1}, 14 | {"chemical-science-pack", 1} 15 | }, 16 | time = 45 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/energy-1.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "energy-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/energy-1.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | effects = {}, 10 | unit = { 11 | count = 30, 12 | ingredients = { 13 | {"automation-science-pack", 1} 14 | }, 15 | time = 45 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/energy-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "energy-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/energy-2.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"energy-1"}, 10 | effects = {}, 11 | unit = { 12 | count = 100, 13 | ingredients = { 14 | {"automation-science-pack", 1}, 15 | {"logistic-science-pack", 1} 16 | }, 17 | time = 45 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prototypes/technologies/energy-3.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "energy-3", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/energy-3.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | dependencies = {"energy-2"}, 9 | --upgrade = true, 10 | effects = {}, 11 | unit = { 12 | count = 120, 13 | ingredients = { 14 | {"automation-science-pack", 3}, 15 | {"logistic-science-pack", 2}, 16 | {"chemical-science-pack", 1} 17 | }, 18 | time = 45 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /prototypes/technologies/excavation-1.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "excavation-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/excavation-1.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 45, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1}, 14 | --{"chemical-science-pack", 1} 15 | }, 16 | time = 35 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/excavation-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "excavation-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/excavation-2.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | dependencies = {"excavation-1"}, 9 | --upgrade = true, 10 | effects = {}, 11 | unit = { 12 | count = 50, 13 | ingredients = { 14 | {"automation-science-pack", 1}, 15 | {"logistic-science-pack", 1}, 16 | {"chemical-science-pack", 1} 17 | }, 18 | time = 35 19 | } 20 | } 21 | 22 | if mods["pypetroleumhandling"] then 23 | TECHNOLOGY { 24 | type = "technology", 25 | name = "excavation-3", 26 | icon = "__pycoalprocessinggraphics__/graphics/technology/excavation-3.png", 27 | icon_size = 128, 28 | order = "c-a", 29 | prerequisites = {}, 30 | dependencies = {"excavation-2"}, 31 | --upgrade = true, 32 | effects = {}, 33 | unit = { 34 | count = 50, 35 | ingredients = { 36 | {"automation-science-pack", 1}, 37 | {"logistic-science-pack", 1}, 38 | {"chemical-science-pack", 1}, 39 | {"production-science-pack", 1} 40 | }, 41 | time = 35 42 | } 43 | } 44 | end 45 | -------------------------------------------------------------------------------- /prototypes/technologies/filtration.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "filtration", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/filtration-mk01.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 40, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | }, 15 | time = 55 16 | } 17 | } 18 | 19 | TECHNOLOGY { 20 | type = "technology", 21 | name = "filtration-mk02", 22 | icon = "__pycoalprocessinggraphics__/graphics/technology/filtration-mk02.png", 23 | icon_size = 128, 24 | order = "c-b", 25 | prerequisites = {}, 26 | dependencies = {"filtration"}, 27 | effects = {}, 28 | unit = { 29 | count = 40, 30 | ingredients = { 31 | {"automation-science-pack", 1}, 32 | {"logistic-science-pack", 1}, 33 | {"chemical-science-pack", 1} 34 | }, 35 | time = 60 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /prototypes/technologies/fine-electronics.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "fine-electronics", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/fine-electronics.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 30, 11 | ingredients = { 12 | {"automation-science-pack", 2}, 13 | {"logistic-science-pack", 1} 14 | }, 15 | time = 55 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/fluid-processing-machines.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "fluid-processing-machines-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/fluid-processing-machines.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | }, 14 | time = 30 15 | } 16 | } 17 | 18 | if mods["pypetroleumhandling"] then 19 | TECHNOLOGY { 20 | type = "technology", 21 | name = "fluid-processing-machines-2", 22 | icon = "__pycoalprocessinggraphics__/graphics/technology/fluid-processing-machines-2.png", 23 | icon_size = 128, 24 | order = "c-a", 25 | prerequisites = {}, 26 | dependencies = {"fluid-processing-machines-1"}, 27 | effects = {}, 28 | unit = { 29 | count = 50, 30 | ingredients = { 31 | {"automation-science-pack", 1}, 32 | {"logistic-science-pack", 1} 33 | }, 34 | time = 30 35 | } 36 | } 37 | end 38 | -------------------------------------------------------------------------------- /prototypes/technologies/fluid-separation.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "fluid-separation", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/fluid-separation.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 35, 11 | ingredients = { 12 | {"automation-science-pack", 2}, 13 | {"logistic-science-pack", 2} 14 | }, 15 | time = 55 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/fuel-production.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "fuel-production", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/fuel-production-mk01.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 100, 11 | ingredients = { 12 | {"automation-science-pack", 3}, 13 | {"logistic-science-pack", 2}, 14 | {"chemical-science-pack", 1} 15 | }, 16 | time = 50 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/hidden-mining-fluid-autounlock.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "hidden-mining-fluid-autounlock", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/kevlar.png", 5 | icon_size = 128, 6 | hidden = true, 7 | prerequisites = {}, 8 | effects = {{ 9 | type = "mining-with-fluid", 10 | modifier = true 11 | }}, 12 | unit = { 13 | count = 50, 14 | ingredients = {}, 15 | time = 30 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/kevlar.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "kevlar", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/kevlar.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | }, 15 | time = 30 16 | } 17 | } 18 | 19 | if mods["pypetroleumhandling"] then 20 | TECHNOLOGY { 21 | type = "technology", 22 | name = "kevlar-mk02", 23 | icon = "__pycoalprocessinggraphics__/graphics/technology/kevlar-2.png", 24 | icon_size = 128, 25 | order = "c-a", 26 | prerequisites = {}, 27 | dependencies = {"kevlar"}, 28 | effects = {}, 29 | unit = { 30 | count = 50, 31 | ingredients = { 32 | {"automation-science-pack", 1}, 33 | {"logistic-science-pack", 1}, 34 | {"chemical-science-pack", 1} 35 | }, 36 | time = 30 37 | } 38 | } 39 | end 40 | -------------------------------------------------------------------------------- /prototypes/technologies/lab-instrument.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "lab-instrument", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/lab-instrument.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 100, 11 | ingredients = { 12 | {"automation-science-pack", 1} 13 | }, 14 | time = 55 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/methanol-processing-1.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "methanol-processing-1", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/methanol-processing-1.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | --upgrade = true, 9 | effects = {}, 10 | unit = { 11 | count = 100, 12 | ingredients = { 13 | {"automation-science-pack", 1}, 14 | {"logistic-science-pack", 1} 15 | }, 16 | time = 30 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/methanol-processing-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "methanol-processing-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/methanol-processing-2.png", 5 | icon_size = 128, 6 | order = "c-b", 7 | prerequisites = {}, 8 | dependencies = {"methanol-processing-1"}, 9 | --upgrade = true, 10 | effects = {}, 11 | unit = { 12 | count = 150, 13 | ingredients = { 14 | {"automation-science-pack", 2}, 15 | {"logistic-science-pack", 2}, 16 | {"chemical-science-pack", 1} 17 | }, 18 | time = 35 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /prototypes/technologies/mukmoux.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "mukmoux", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/mukmoux.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 100, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | }, 15 | time = 55 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/nexelit.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "nexelit", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/nexelit.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 200, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | 15 | }, 16 | time = 60 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/niobium.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "niobium", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/niobium.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 200, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1} 14 | 15 | }, 16 | time = 60 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototypes/technologies/organic-solvent.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "organic-solvent", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/organic-solvent.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1}, 14 | }, 15 | time = 30 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/technologies/pyrrhic.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "pyrrhic", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/pyrrhic.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 10000, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | {"logistic-science-pack", 1}, 14 | {"military-science-pack", 1}, 15 | {"chemical-science-pack", 1}, 16 | {"production-science-pack", 1}, 17 | {"utility-science-pack", 1}, 18 | {"space-science-pack", 1}, 19 | }, 20 | time = 600 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /prototypes/technologies/ralesia.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "ralesia", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/ralesia.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 100, 11 | ingredients = { 12 | {"automation-science-pack", 1} 13 | }, 14 | time = 55 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/separation.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "separation", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/separation.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 35, 11 | ingredients = { 12 | {"automation-science-pack", 2} 13 | }, 14 | time = 55 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/stacking-belts.lua: -------------------------------------------------------------------------------- 1 | if not feature_flags.space_travel then return end 2 | 3 | local MAX_BELT_STACK = data.raw.inserter["py-stack-inserter"].max_belt_stack_size 4 | 5 | data.raw["utility-constants"].default.max_belt_stack_size = MAX_BELT_STACK 6 | 7 | for _, stackable_prototype in pairs {"loader-1x1", "loader", "inserter"} do 8 | for _, stackable in pairs(data.raw[stackable_prototype]) do 9 | stackable.max_belt_stack_size = stackable.max_belt_stack_size or 1 10 | if stackable.max_belt_stack_size ~= 1 then 11 | stackable.max_belt_stack_size = MAX_BELT_STACK 12 | end 13 | end 14 | end 15 | 16 | for _, miner in pairs(data.raw["mining-drill"]) do 17 | miner.drops_full_belt_stacks = true 18 | end 19 | 20 | local science_packs_that_unlock_belt_stacking = { 21 | ["logistic-science-pack"] = "logistic-science-pack", 22 | ["py-science-pack-mk02"] = "py-science-pack-2", 23 | ["chemical-science-pack"] = "chemical-science-pack", 24 | ["py-science-pack-mk03"] = "py-science-pack-3", 25 | ["production-science-pack"] = "production-science-pack", 26 | ["py-science-pack-mk04"] = "py-science-pack-4", 27 | ["utility-science-pack"] = "utility-science-pack", 28 | } 29 | 30 | local i = 1 31 | for science, pack in pairs(science_packs_that_unlock_belt_stacking) do 32 | if not data.raw.technology[science] then goto continue end 33 | 34 | if i > 1 then 35 | prerequisites = {science, "py-transport-belt-capacity-" .. (i - 1)} 36 | else 37 | prerequisites = {"fast-inserter"} 38 | end 39 | 40 | local tech = { 41 | type = "technology", 42 | name = "py-transport-belt-capacity-" .. i, 43 | localised_name = {"technology-name.transport-belt-capacity"}, 44 | localised_description = {"technology-description.belt-capacity"}, 45 | icons = util.technology_icon_constant_stack_size("__pycoalprocessinggraphics__/graphics/technology/transport-belt-capacity.png"), 46 | effects = {{ 47 | type = "belt-stack-size-bonus", 48 | modifier = 1 49 | }}, 50 | prerequisites = prerequisites, 51 | unit = { 52 | count = 2000, 53 | ingredients = { 54 | {pack, 1} 55 | }, 56 | time = 60 57 | }, 58 | upgrade = true 59 | } 60 | 61 | if i == 1 then 62 | table.insert(tech.effects, { 63 | type = "unlock-recipe", 64 | recipe = "py-stack-inserter" 65 | }) 66 | end 67 | 68 | data:extend {tech} 69 | i = i + 1 70 | 71 | ::continue:: 72 | end 73 | -------------------------------------------------------------------------------- /prototypes/technologies/syngas.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "syngas", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/syngas.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | }, 14 | time = 30 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/tar-processing.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "tar-processing", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/tar.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 50, 11 | ingredients = { 12 | {"automation-science-pack", 1}, 13 | }, 14 | time = 30 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/ulric.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "ulric", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/ulric.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | prerequisites = {}, 8 | effects = {}, 9 | unit = { 10 | count = 100, 11 | ingredients = { 12 | {"automation-science-pack", 1} 13 | }, 14 | time = 55 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prototypes/technologies/wood-processing-2.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "wood-processing-2", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/wood-processing-2.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | dependencies = {"wood-processing"}, 10 | effects = {}, 11 | unit = { 12 | count = 30, 13 | ingredients = { 14 | {"automation-science-pack", 1}, 15 | {"logistic-science-pack", 1} 16 | }, 17 | time = 45 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prototypes/technologies/wood-processing.lua: -------------------------------------------------------------------------------- 1 | TECHNOLOGY { 2 | type = "technology", 3 | name = "wood-processing", 4 | icon = "__pycoalprocessinggraphics__/graphics/technology/wood-processing.png", 5 | icon_size = 128, 6 | order = "c-a", 7 | --upgrade = true, 8 | prerequisites = {}, 9 | effects = {}, 10 | unit = { 11 | count = 30, 12 | ingredients = { 13 | {"automation-science-pack", 1} 14 | }, 15 | time = 45 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototypes/tiles/polluted-ground.lua: -------------------------------------------------------------------------------- 1 | local sand_vehicle_speed_modifier = _G.sand_vehicle_speed_modifier 2 | 3 | local sand_sounds = sound_variations("__base__/sound/walking/sand", 9, 0.8, volume_multiplier("main-menu", 2.9)) 4 | 5 | local variants = { 6 | main = { 7 | { 8 | picture = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground1.png", 9 | count = 16, 10 | size = 1 11 | }, 12 | { 13 | picture = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground2.png", 14 | count = 16, 15 | size = 2, 16 | probability = 0.39, 17 | weights = {0.025, 0.010, 0.013, 0.025, 0.025, 0.100, 0.100, 0.005, 0.010, 0.010, 0.005, 0.005, 0.001, 0.015, 0.020, 0.020} 18 | }, 19 | { 20 | picture = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground4.png", 21 | count = 16, 22 | line_length = 11, 23 | size = 4, 24 | probability = 1, 25 | weights = {0.090, 0.025, 0.125, 0.005, 0.010, 0.100, 0.100, 0.010, 0.020, 0.020, 0.010, 0.100, 0.025, 0.100, 0.100, 0.100} 26 | } 27 | }, 28 | transition = { 29 | mask_layout = { 30 | inner_corner = { 31 | spritesheet = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground-inner-corner.png", 32 | count = 8 33 | }, 34 | outer_corner = { 35 | spritesheet = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground-outer-corner.png", 36 | count = 8 37 | }, 38 | side = { 39 | spritesheet = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground-side.png", 40 | count = 8 41 | }, 42 | o_transition = { 43 | spritesheet = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground-o.png", 44 | count = 4 45 | }, 46 | u_transition = { 47 | spritesheet = "__pycoalprocessinggraphics__/graphics/tiles/polluted-ground/polluted-ground-u.png", 48 | count = 8 49 | }, 50 | } 51 | } 52 | } 53 | 54 | data:extend {{ 55 | type = "tile", 56 | name = "polluted-ground", 57 | collision_mask = {layers = { 58 | ground_tile = true 59 | }}, 60 | walking_speed_modifier = .50, 61 | autoplace = nil, 62 | layer = 35, 63 | layer_group = "ground-artificial", 64 | variants = variants, 65 | walking_sound = sand_sounds, 66 | map_color = defines.color.brown, 67 | absorptions_per_second = {pollution = 0.0002}, 68 | vehicle_friction_modifier = sand_vehicle_speed_modifier, 69 | transitions = data.raw.tile["dirt-4"].transitions, 70 | transitions_between_transitions = data.raw.tile["dirt-4"].transitions_between_transitions, 71 | }} 72 | 73 | data:extend {{ 74 | type = "tile", 75 | name = "polluted-ground-burnt", 76 | collision_mask = {layers = { 77 | ground_tile = true 78 | }}, 79 | walking_speed_modifier = .50, 80 | autoplace = nil, 81 | layer = 36, 82 | layer_group = "ground-artificial", 83 | tint = {0.25, 0.25, 0.25, 0.25}, 84 | variants = variants, 85 | walking_sound = sand_sounds, 86 | map_color = defines.color.brown, 87 | absorptions_per_second = {pollution = 0.0002}, 88 | vehicle_friction_modifier = sand_vehicle_speed_modifier, 89 | transitions = data.raw.tile["dirt-4"].transitions, 90 | transitions_between_transitions = data.raw.tile["dirt-4"].transitions_between_transitions, 91 | }} 92 | 93 | data:extend {{ 94 | type = "tree", 95 | name = "ninja-tree", 96 | hidden = true, 97 | icon = "__pycoalprocessinggraphics__/graphics/empty.png", 98 | icon_size = 1, 99 | flags = {"placeable-neutral", "placeable-off-grid", "breaths-air", "not-blueprintable", "not-deconstructable"}, 100 | selectable_in_game = false, 101 | emissions_per_second = {pollution = 0.0001 * 16}, -- *16 since they're now in a 4x4 grid 102 | max_health = 5000, 103 | collision_box = {{0, 0}, {0, 0}}, 104 | selection_box = {{0, 0}, {0, 0}}, 105 | collision_mask = {layers = {}}, 106 | subgroup = "trees", 107 | order = "a[tree]-b[dead-tree]", 108 | impact_category = "wood", 109 | pictures = { 110 | --dry-hairy-tree 111 | { 112 | filename = "__pycoalprocessinggraphics__/graphics/empty.png", 113 | width = 1, 114 | height = 1, 115 | } 116 | } 117 | }} 118 | -------------------------------------------------------------------------------- /prototypes/updates/base-oil.lua: -------------------------------------------------------------------------------- 1 | if data.raw.resource["crude-oil"] then 2 | data.raw.resource["crude-oil"].infinite = false 3 | end 4 | 5 | RECIPE("basic-oil-processing"):remove_unlock("oil-processing"):set_fields {hidden = true} 6 | 7 | RECIPE("advanced-oil-processing"):remove_unlock("advanced-oil-processing"):set_fields {hidden = true} 8 | 9 | RECIPE("heavy-oil-cracking"):remove_unlock("advanced-oil-processing"):set_fields {hidden = true} 10 | 11 | RECIPE("light-oil-cracking"):remove_unlock("advanced-oil-processing"):set_fields {hidden = true} 12 | 13 | RECIPE("coal-liquefaction"):remove_unlock("coal-liquefaction"):set_fields {hidden = true} 14 | 15 | TECHNOLOGY("oil-processing"):set("research_trigger", nil) 16 | 17 | TECHNOLOGY("flammables"):set_fields {enabled = false}:set_fields {hidden = true} 18 | 19 | TECHNOLOGY("coal-liquefaction"):set_fields {enabled = false}:set_fields {hidden = true} 20 | 21 | TECHNOLOGY("lubricant"):remove_pack("chemical-science-pack"):remove_prereq("advanced-oil-processing") 22 | 23 | TECHNOLOGY("advanced-oil-processing"):add_pack("production-science-pack") 24 | 25 | RECIPE("oil-refinery"):remove_unlock("oil-processing"):add_unlock("plastics") 26 | 27 | RECIPE("plastic-bar"):remove_unlock("plastics"):set_fields {hidden = true} 28 | 29 | --moving solid fuels 30 | RECIPE("solid-fuel-from-petroleum-gas"):remove_unlock("oil-processing"):set_fields {hidden = true} 31 | 32 | RECIPE("solid-fuel-from-heavy-oil"):remove_unlock("advanced-oil-processing"):set_fields {hidden = true} 33 | 34 | RECIPE("solid-fuel-from-light-oil"):remove_unlock("advanced-oil-processing"):set_fields {hidden = true} 35 | 36 | RECIPE("sulfur"):remove_unlock("sulfur-processing"):set_fields {hidden = true} 37 | 38 | ITEM("solid-fuel"):set_fields {hidden = true} 39 | 40 | if not (mods["pyhightech"] or mods["pypetroleumhandling"] or mods["pyrawores"]) then 41 | TECHNOLOGY("sulfur-processing"):add_pack("chemical-science-pack") 42 | TECHNOLOGY("battery"):add_pack("chemical-science-pack") 43 | TECHNOLOGY("battery-equipment"):add_pack("chemical-science-pack") 44 | TECHNOLOGY("electric-energy-accumulators"):add_pack("chemical-science-pack") 45 | TECHNOLOGY("explosives"):add_pack("chemical-science-pack") 46 | TECHNOLOGY("fluid-separation"):add_pack("chemical-science-pack") 47 | TECHNOLOGY("cliff-explosives"):add_pack("chemical-science-pack") 48 | TECHNOLOGY("land-mine"):add_pack("chemical-science-pack") 49 | TECHNOLOGY("rocketry"):add_pack("chemical-science-pack") 50 | end 51 | -------------------------------------------------------------------------------- /prototypes/updates/pyindustry-updates.lua: -------------------------------------------------------------------------------- 1 | ITEM { 2 | name = "py-logo-15tiles", 3 | type = "item", 4 | stack_size = 10, 5 | icon = "__pycoalprocessinggraphics__/graphics/icons/py-logo-15tiles.png", 6 | icon_size = 64, 7 | place_result = "py-logo-15tiles", 8 | flags = {}, 9 | subgroup = "py-walls", 10 | order = "zz" 11 | } 12 | 13 | RECIPE { 14 | type = "recipe", 15 | name = "py-logo-15tiles", 16 | energy_required = 0.5, 17 | enabled = false, 18 | ingredients = { 19 | {type = "item", name = "py-iron-oxide", amount = 45}, 20 | {type = "item", name = "iron-chest", amount = 1}, 21 | }, 22 | category = "crafting-with-fluid", 23 | results = { 24 | {type = "item", name = "py-logo-15tiles", amount = 1} 25 | } 26 | }:add_unlock("py-asphalt-mk03"):add_ingredient {type = "fluid", name = "flue-gas", amount = 200}:add_ingredient {type = "item", name = "small-parts-01", amount = 10} 27 | 28 | data.raw["container"]["py-logo-15tiles"].minable.result = "py-logo-15tiles" 29 | RECIPE("niobium-pipe"):remove_unlock("py-storage-tanks"):add_unlock("niobium") 30 | RECIPE("niobium-pipe-to-ground"):remove_unlock("py-storage-tanks"):add_unlock("niobium") 31 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # ![pYCoalHeader](http://i.imgur.com/StlIACh.jpg "pY Coal Processing") 2 | 3 | ## Coal finally has more uses 4 | 5 | Adds in several processes to break and improve coal to make it more valuable and useful in your factory. 6 | 7 | Many new recipes, buildings, and ingredients. Power generators have differing effecienies and pollution depending on their tier and fuel type used. Huge storage ponds to store dirty water, but beware these things are prone to leaks causing massive ground pollution. 8 | 9 | Available on the mod portal at 10 | 11 | ----- 12 | 13 | ## Support for other mods 14 | 15 | * Built in Support for bobsmods 16 | * Better Support for Angels mods coming soon 17 | * Recipe tweaks to various mods 18 | 19 | ## Technologies 20 | 21 | ![pYcoalTechs](http://i.imgur.com/ls3FQ8G.jpg "Technologies") 22 | 23 | ## Bug Reports and Feedback 24 | 25 | Please use a dedicated repository [pybugreports](https://github.com/pyanodon/pybugreports) for bug reports and feedback. 26 | 27 | ## Contributing 28 | 29 | When making a Pull Request, please also update `changelog.txt` with the summary of your changes. 30 | If there is no upcoming version in the file, then the format is as follows: 31 | ``` 32 | --------------------------------------------------------------------------------------------------- 33 | Version: a.b.c 34 | Date: ??? 35 | Changes: 36 | - The summary of your changes 37 | --------------------------------------------------------------------------------------------------- 38 | ``` 39 | 40 | ### License 41 | 42 | * CC BY-NC-ND 4.0 43 | 44 | This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. To view a copy of this license, visit 45 | -------------------------------------------------------------------------------- /scripts/generator-equipment-autofill.lua: -------------------------------------------------------------------------------- 1 | local SHORTCUT = "py-toggle-equipment-fuel-manager" 2 | 3 | local function restock_generator_equipment(player) 4 | if not player.character then return end 5 | if not player.is_shortcut_toggled(SHORTCUT) then return end 6 | 7 | local grid = player.character.grid 8 | if not grid then return end 9 | local inventory = player.get_main_inventory() 10 | if not inventory then return end 11 | 12 | for _, equipment in pairs(grid.equipment) do 13 | if equipment.type ~= "generator-equipment" then goto continue end 14 | if equipment.prototype.hidden then goto continue end 15 | local burner = equipment.burner 16 | if not burner then goto continue end 17 | local burner_inventory, burnt_result_inventory = burner.inventory, burner.burnt_result_inventory 18 | if not burner_inventory then goto continue end 19 | 20 | if burnt_result_inventory then 21 | for i = 1, #burnt_result_inventory do 22 | local stack = burnt_result_inventory[i] 23 | if stack.valid_for_read then 24 | stack.count = stack.count - inventory.insert(stack) 25 | end 26 | end 27 | end 28 | 29 | if burner_inventory.is_empty() then 30 | local fuel_categories = burner.fuel_categories 31 | for i = 1, math.max(100, #inventory) do 32 | local stack = inventory[i] 33 | if stack.valid_for_read and fuel_categories[stack.prototype.fuel_category] then 34 | local inserted_count = burner_inventory.insert(stack) 35 | if inserted_count ~= 0 then 36 | stack.count = stack.count - inserted_count 37 | goto added_fuel 38 | end 39 | end 40 | end 41 | 42 | -- https://github.com/pyanodon/pybugreports/issues/877 43 | pcall( 44 | player.add_custom_alert, 45 | player.character, 46 | {type = "virtual", name = "no-fuel"}, 47 | {"alerts.equipment-out-of-fuel", equipment.prototype.take_result.name, equipment.prototype.localised_name}, 48 | false 49 | ) 50 | 51 | ::added_fuel:: 52 | end 53 | 54 | ::continue:: 55 | end 56 | end 57 | 58 | py.register_on_nth_tick(251, "generator-equipment-autofill", "pycp", function() 59 | if not script.active_mods["pyindustry"] then return end 60 | for _, player in pairs(game.connected_players) do 61 | restock_generator_equipment(player) 62 | end 63 | end) 64 | 65 | py.on_event(defines.events.on_lua_shortcut, function(event) 66 | if event.prototype_name ~= SHORTCUT then return end 67 | local player = game.get_player(event.player_index) 68 | 69 | player.set_shortcut_toggled(SHORTCUT, not player.is_shortcut_toggled(SHORTCUT)) 70 | end) 71 | -------------------------------------------------------------------------------- /scripts/wiki/text-pages.lua: -------------------------------------------------------------------------------- 1 | py.on_event(py.events.on_init(), function() 2 | for _, player in pairs(game.players) do 3 | Wiki.create_pywiki_button(player) 4 | end 5 | storage.wiki_pages = {} 6 | storage.currently_opened_wiki_page = {} 7 | storage.wiki_page_search_query = {} 8 | 9 | remote.call("pywiki", "add_page", { 10 | name = "statistics", 11 | remote = {"create_statistics_page", "create_statistics_page"} 12 | }) 13 | 14 | remote.call("pywiki", "add_page", { 15 | name = "fluid-index", 16 | remote = {"pywiki_spreadsheets", "create_fluid_page"}, 17 | searchable = {"pywiki_spreadsheets", "on_search"} 18 | }) 19 | 20 | remote.call("pywiki", "add_page", { 21 | name = "item-index", 22 | remote = {"pywiki_spreadsheets", "create_solid_fuel_page"}, 23 | searchable = {"pywiki_spreadsheets", "on_search"} 24 | }) 25 | 26 | if script.active_mods["pyalternativeenergy"] and script.feature_flags.spoiling and settings.startup["py-enable-decay"].value then 27 | remote.call("pywiki", "add_page", { 28 | name = "decay", 29 | remote = {"pywiki_spreadsheets", "create_decay_page"}, 30 | searchable = {"pywiki_spreadsheets", "on_search"} 31 | }) 32 | end 33 | 34 | remote.call("pywiki", "add_section", "coalprocessing") 35 | 36 | remote.call("pywiki", "add_page", { 37 | name = "ash", 38 | section = "coalprocessing", 39 | text_only = true 40 | }) 41 | 42 | remote.call("pywiki", "add_page", { 43 | name = "mechanical-inserter", 44 | section = "coalprocessing", 45 | text_only = true 46 | }) 47 | 48 | remote.call("pywiki", "add_page", { 49 | name = "tailings-pond", 50 | section = "coalprocessing", 51 | text_only = true 52 | }) 53 | 54 | remote.call("pywiki", "add_page", { 55 | name = "beacon", 56 | section = "coalprocessing", 57 | text_only = true 58 | }) 59 | 60 | if not script.active_mods["pyalternativeenergy"] then 61 | remote.call("pywiki", "add_page", { 62 | name = "combustion-mixture", 63 | section = "coalprocessing", 64 | text_only = true 65 | }) 66 | end 67 | end) 68 | -------------------------------------------------------------------------------- /settings.lua: -------------------------------------------------------------------------------- 1 | data:extend { 2 | { 3 | type = "int-setting", 4 | name = "rpm_entity", -- requester paste multiplier for entities 5 | order = "aa", 6 | setting_type = "startup", 7 | minimum_value = 1, 8 | maximum_value = 100, 9 | default_value = 30 10 | }, 11 | { 12 | type = "int-setting", 13 | name = "rpm_items", -- requester paste multiplier for items 14 | order = "ab", 15 | setting_type = "startup", 16 | minimum_value = 1, 17 | maximum_value = 100, 18 | default_value = 30 19 | }, 20 | { 21 | type = "int-setting", 22 | name = "overload", -- overload multiplyer for crafting machine ingredient limits 23 | order = "ac", 24 | setting_type = "startup", 25 | minimum_value = 0, 26 | maximum_value = 100, 27 | default_value = 0 28 | }, 29 | { 30 | type = "bool-setting", 31 | name = "future-beacons", 32 | order = "ad", 33 | setting_type = "startup", 34 | default_value = true, 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyanodon/pycoalprocessing/1c998789e3bcb507ed512af86edfd44b7361011d/thumbnail.png --------------------------------------------------------------------------------