From 864f7ffa282c305e199ca024d7dfcdfe4408f657 Mon Sep 17 00:00:00 2001 From: Lemon <55360995+lemonlambda@users.noreply.github.com> Date: Mon, 28 Jul 2025 12:08:58 -0400 Subject: [PATCH 01/28] Minimum temperature on cooling steam (#403) --- prototypes/recipes/recipes.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prototypes/recipes/recipes.lua b/prototypes/recipes/recipes.lua index 7ab33a184..a8e815d98 100644 --- a/prototypes/recipes/recipes.lua +++ b/prototypes/recipes/recipes.lua @@ -159,7 +159,7 @@ RECIPE { enabled = false, energy_required = 2, ingredients = { - {type = "fluid", name = "steam", amount = 400} + {type = "fluid", name = "steam", amount = 400, minimum_temperature = 100} }, results = { {type = "fluid", name = "water", amount = 400, temperature = 100} @@ -178,7 +178,7 @@ RECIPE { enabled = false, energy_required = 2, ingredients = { - {type = "fluid", name = "steam", amount = 400} + {type = "fluid", name = "steam", amount = 400, minimum_temperature = 200} }, results = { {type = "fluid", name = "water", amount = 400, temperature = 200} From 965f278f37b4c0dd5af869ec6855afa08a7cca82 Mon Sep 17 00:00:00 2001 From: oorzkws <65210810+oorzkws@users.noreply.github.com> Date: Tue, 26 Aug 2025 15:32:32 -0600 Subject: [PATCH 02/28] Remove 'future beacons' setting The future is now!* ("now" refers to release of stellar expedition) --- locale/de/locale.cfg | 2 -- locale/en/locale.cfg | 2 -- locale/fr/locale.cfg | 2 -- locale/ru/locale.cfg | 2 -- locale/uk/locale.cfg | 2 -- prototypes/buildings/beacon.lua | 2 +- scripts/beacons.lua | 18 +++++------------- settings.lua | 7 ------- 8 files changed, 6 insertions(+), 31 deletions(-) diff --git a/locale/de/locale.cfg b/locale/de/locale.cfg index b78bb7f37..da9294500 100644 --- a/locale/de/locale.cfg +++ b/locale/de/locale.cfg @@ -821,12 +821,10 @@ now-i-am-become-death=Produziere verbrauchten Reaktorbrennstoff. [mod-setting-name] rpm_entity=Anforderungsmultiplikator für Entitäten rpm_items=Anforderungsmultiplikator für Gegenstände -future-beacons=Neue beacons [mod-setting-description] rpm_entity=Anpassung der Anzahl der angeforderten Gegenstände beim Kopieren/Einfügen eines Rezepts für Entitäten rpm_items=Anpassung der Anzahl der angeforderten Gegenstände beim Kopieren/Einfügen eines Rezepts für Gegenstände -future-beacons=Beacons wurden angepasst für neue den kommenden py mod (Py Stellar Expedition).\nMit dieser Einstellung können Sie jedoch die neu ausbalancierten Baken jetzt haben.\nÄnderungen\nBeacons (nicht diet beacons) haben 0.2*am*fm Übertragungseffizienz stattdessen of 0.5*am*fm.\nBeacons können nur 5 statt 25 Entitäten beeinflussen. [gui-game-finished] victory=Victory! Glückwunsch, du hast die Pyanodon's mods geschaft. diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index ca2f82978..1006d3064 100644 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -811,13 +811,11 @@ now-i-am-become-death=Produce spent reactor fuel. rpm_entity=Requester paste multiplier for enitities rpm_items=Requester paste multiplier for items overload=Crafting machine overfill multiplier -future-beacons=Future beacons [mod-setting-description] rpm_entity=adjust the number of items requested when copy/pasting a recipe for enitities rpm_items=adjust the number of items requested when copy/pasting a recipe for items overload=adjusts the number of items inserted into a crafting machine over the required number to fill a recipe. default value use the following formula (1.166 / (energy_required / the assembler's crafting_speed), rounded up, and clamped to be between2 and 100). -future-beacons=Beacons have been rebalanced for the upcoming py mod (Py Stellar Expedition).\nHowever with this setting you can have the rebalanced beacons now.\nChanges:\nBeacons (not diet beacons) have 0.2*am*fm transmission efficiency instead of 0.5*am*fm.\nBeacons can only effect 5 entities instead of 25. [gui-game-finished] victory=Victory! Congratulations, you have beaten Pyanodon's mods. diff --git a/locale/fr/locale.cfg b/locale/fr/locale.cfg index f14f095ef..c1057cd2c 100644 --- a/locale/fr/locale.cfg +++ b/locale/fr/locale.cfg @@ -821,12 +821,10 @@ now-i-am-become-death=Produit du combustible usé de réacteur. [mod-setting-name] rpm_entity=Paramètre du nombre d'objets demandé pour une entité quand une recette est copiée rpm_items=Paramètre du nombres d'objets demandé pour les objets quand une recette est copiée -future-beacons=Les balises du future [mod-setting-description] rpm_entity=Ajuste le nombres d'objets demandé pour une entité quand une recette est copiée rpm_items=Ajuste le nombres d'objets demandé pour les objets quand une recette est copiée -future-beacons=Les balises seront réajustées dans le futur mod Py (Py Expédition stellaire). Mais avec ce paramètre vous pouvez déjà utilisée les futures balises. \nChangement: \nLes balises (pas les balises légères) ont une efficacité de transmission d'effet de 0.2*AM*FM au lieu de 0.5*AM*FM.\nLes balises ne peuvent affecter que 5 entités au lieu de 25. [gui-game-finished] victory=Victoire! Félicitations, vous avez battu les mods de Pyanodon! diff --git a/locale/ru/locale.cfg b/locale/ru/locale.cfg index 63f1ce04b..0354cc4cc 100644 --- a/locale/ru/locale.cfg +++ b/locale/ru/locale.cfg @@ -805,13 +805,11 @@ now-i-am-become-death=Произведите отработанное реакт rpm_entity=Множитель вставки запроса для сущностей rpm_items=Множитель вставки запроса для элементов overload=Множитель переполнения сборочных машин -future-beacons=Будущие маяки [mod-setting-description] rpm_entity=Настроить количество элементов, запрашиваемых при копировании/вставке рецепта для сущностей. rpm_items=Настроить количество элементов, запрашиваемых при копировании/вставке рецепта для элементов. overload=Настройте количество предметов, вставляемых в сборочную машину, больше необходимого количества для рецепта. По умолчанию используется формула: 1,166 / (требуемая энергия / скорость сборщика), округлено и ограничено значениями от 2 до 100. -future-beacons=Маяки были перебалансированы для грядущего мода py (Py Stellar Expedition).\nНо с помощью этой настройки вы можете использовать перебалансированные маяки уже сейчас.\nИзменения:\nМаяки (не диетические маяки) имеют эффективность передачи 0.2*am*fm вместо 0.5*am*fm.\nМаяки могут действовать только на 5 сущностей вместо 25. [gui-game-finished] victory=Победа! Поздравляем, вы победили моды Pyanodon. diff --git a/locale/uk/locale.cfg b/locale/uk/locale.cfg index f68437890..8dc9b431f 100644 --- a/locale/uk/locale.cfg +++ b/locale/uk/locale.cfg @@ -785,13 +785,11 @@ now-i-am-become-death=Створіть відпрацьоване паливо rpm_entity=Налаштувати кількість елементів, що запитуються при копіюванні/вставці рецепту сутностей rpm_items=Налаштувати кількість елементів, що запитуються при копіюванні/вставці рецепту предметів overload=Множник переповнення збиральних автоматів. -future-beacons=Наступна версія маяків [mod-setting-description] rpm_entity=налаштувати кількість запитуваних елементів під час копіювання/вставлення рецепту для сутностей rpm_items=налаштувати кількість елементів, які запитуються під час копіювання/вставлення рецепту для предмета overload=регулює кількість предметів, що вставляються в машину для виготовлення, понад необхідну кількість для заповнення рецепту. значення за замовчуванням використовуйте таку формулу (1,166 / (необхідна енергія/ швидкість створення), округлене в більшу сторону та обмежене значенням від 2 до 100). -future-beacons=Маяки було перебалансовано для майбутньої модифікації py (Py Зоряна Експедиція).\nОднак із цим параметром ви можете отримати перебалансовані маяки вже зараз.\nЗміни:\nМаяки (не примітивні маяки) мають ефективність передачі 0,2*am*fm замість 0,5* am*fm.\nМаяки можуть впливати лише на 5 сутностей замість 25. [gui-game-finished] victory=Перемога! Вітаємо, ви подолали моди Pyanodon. diff --git a/prototypes/buildings/beacon.lua b/prototypes/buildings/beacon.lua index 38268923d..899789b9e 100644 --- a/prototypes/buildings/beacon.lua +++ b/prototypes/buildings/beacon.lua @@ -124,7 +124,7 @@ for i, setting in pairs(beacon_settings) do local beacon = table.deepcopy(data.raw.beacon.beacon) local am, fm = setting.am, setting.fm beacon.name = beacon_names[i] - beacon.distribution_effectivity = settings.startup["future-beacons"].value and (0.2 * am * fm) or (0.5 * am * fm) + beacon.distribution_effectivity = 0.2 * am * fm beacon.energy_usage = 1000 * am * (fm ^ 3) .. "kW" beacon.supply_area_distance = 64 - 16 * (am - 1) if beacon.supply_area_distance < 2 then beacon.supply_area_distance = 2 end diff --git a/scripts/beacons.lua b/scripts/beacons.lua index dbbce9024..85445d277 100644 --- a/scripts/beacons.lua +++ b/scripts/beacons.lua @@ -109,20 +109,12 @@ local function beacon_check(reciver) local am = beacon.name:match("%d+") --[[@as string]] local fm = beacon.name:match("%d+$") --[[@as string]] local total = am .. fm - if settings.startup["future-beacons"].value then - if effected_am[am] or effected_fm[fm] then - disable_entity(reciver) - return - end - effected_am[am] = true - effected_fm[fm] = true - else - if effected_total[total] then - disable_entity(reciver) - return - end - effected_total[total] = true + if effected_am[am] or effected_fm[fm] then + disable_entity(reciver) + return end + effected_am[am] = true + effected_fm[fm] = true end end enable_entity(reciver) diff --git a/settings.lua b/settings.lua index 1fddadeba..060625936 100644 --- a/settings.lua +++ b/settings.lua @@ -25,12 +25,5 @@ data:extend { minimum_value = 0, maximum_value = 100, default_value = 0 - }, - { - type = "bool-setting", - name = "future-beacons", - order = "ad", - setting_type = "startup", - default_value = true, } } From 2818f3bb5bc3a0ad963426b2d0ff19d12344867b Mon Sep 17 00:00:00 2001 From: oorzkws <65210810+oorzkws@users.noreply.github.com> Date: Fri, 29 Aug 2025 13:16:40 -0600 Subject: [PATCH 03/28] update version to prevent portal overwrite alpha testers will need to manually switch off this version for play without stellar expedition --- info.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/info.json b/info.json index b9f56779c..e2cac0377 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "pycoalprocessing", - "version": "3.0.42", + "version": "3.0.999", "factorio_version": "2.0", "title": "Pyanodons Coal Processing", "author": "Pyanodon, Nexela, Kingarthur, notnotmelon, Mootykins, ShadowGlass, Archezekiel, Quintuple, przemo1232", From 9190b0f5889e19dcdadc0c555a9fdec8d8d3bf8a Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 14:49:25 -0700 Subject: [PATCH 04/28] programmable inserter things --- control.lua | 1 + data.lua | 3 + locale/en/tips.cfg | 20 +- prototypes/util.lua | 27 ++ scripts/programmable-inserter.lua | 406 ++++++++++++++++++++++++++++++ 5 files changed, 456 insertions(+), 1 deletion(-) create mode 100644 prototypes/util.lua create mode 100644 scripts/programmable-inserter.lua diff --git a/control.lua b/control.lua index f26292fe1..fe21557de 100644 --- a/control.lua +++ b/control.lua @@ -9,6 +9,7 @@ require "scripts.tailings-pond" require "scripts.beacons" require "scripts.milestones" require "scripts.generator-equipment-autofill" +require "scripts.programmable-inserter" py.on_event(py.events.on_init(), function() for _, interface in pairs {"silo_script", "better-victory-screen"} do diff --git a/data.lua b/data.lua index 0daee7c06..60a8f0a24 100644 --- a/data.lua +++ b/data.lua @@ -168,6 +168,9 @@ require "prototypes/menu-simulations" -- sprites require "prototypes/sprites/sprites" +-- util entities +require "prototypes/util" + data.raw["utility-constants"].default.main_menu_background_image_location = "__pycoalprocessinggraphics__/graphics/pycp-wall.jpg" -- adding fuel value to liquids diff --git a/locale/en/tips.cfg b/locale/en/tips.cfg index 71d4e590b..d4d2ea307 100644 --- a/locale/en/tips.cfg +++ b/locale/en/tips.cfg @@ -57,4 +57,22 @@ unlocked-at=Unlocked at burnt-result=Burnt result color=Color decay-time=Decay time -decay-result=Decay results \ No newline at end of file +decay-result=Decay results + +[tooltip] +show-inserter-settings=Show inserter target and source settings +inserter-settings-title=Targets +unavailable-insert-target=[color=red]__1__[/color] +inserter-drop-target-tooltip=Inventory to drop items into +inserter-pickup-target-tooltip=Inventory to pickup items from + +[inventory-target] +default=Default +input=Input +output=Output +fuel=Fuel +burnt_result=Burnt result +modules=Modules +trash=Trash +cargo=Cargo +dump=Dump \ No newline at end of file diff --git a/prototypes/util.lua b/prototypes/util.lua new file mode 100644 index 000000000..ae7183e38 --- /dev/null +++ b/prototypes/util.lua @@ -0,0 +1,27 @@ +-- for all of those internal entities that dont really fit anywhere else + +data:extend{ + { + type = "proxy-container", + name = "py-dynamic-inserter-target", + icon = util.empty_icon().icon, + draw_inventory_content = false, + collision_mask = {layers = {}}, + selection_box = {{-0.3, -0.3}, {0.3, 0.3}}, + flags = { + "not-rotatable", + "placeable-neutral", + "placeable-off-grid", + "not-repairable", + "not-on-map", + "not-deconstructable", + "not-blueprintable", + "hide-alt-info", + "not-upgradable" + }, + allow_copy_paste = false, + selectable_in_game = false, + hidden = true, + hidden_in_factoriopedia = true + } +} \ No newline at end of file diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua new file mode 100644 index 000000000..9528b08da --- /dev/null +++ b/scripts/programmable-inserter.lua @@ -0,0 +1,406 @@ +-- save a list of all valid targets, valid inventories for that target, and associated locale key for that inventory +local proxy_targets = { + ["furnace"] = { + input = defines.inventory.crafter_input, + output = defines.inventory.crafter_output, + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.crafter_modules, + trash = defines.inventory.crafter_trash, + }, + ["assembling-machine"] = { + input = defines.inventory.crafter_input, + output = defines.inventory.crafter_output, + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.crafter_modules, + trash = defines.inventory.crafter_trash, + dump = defines.inventory.assembling_machine_dump, + }, + ["lab"] = { + input = defines.inventory.lab_input, + trash = defines.inventory.lab_trash, + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.lab_modules, + }, + ["mining-drill"] = { + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.mining_drill_modules, + }, + ["rocket-silo"] = { + input = defines.inventory.crafter_input, + output = defines.inventory.crafter_output, + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.crafter_modules, + trash = defines.inventory.rocket_silo_trash, + cargo = defines.inventory.rocket_silo_rocket, + }, + ["default"] = { + input = defines.inventory.crafter_input, + output = defines.inventory.crafter_output, + fuel = defines.inventory.fuel, + burnt_result = defines.inventory.burnt_result, + modules = defines.inventory.crafter_modules, + trash = defines.inventory.crafter_trash, + dump = defines.inventory.assembling_machine_dump, + cargo = defines.inventory.rocket_silo_rocket, + } +} + +local proxy_pointers = { + [defines.inventory.assembling_machine_dump] = "dump", + [defines.inventory.burnt_result] = "burnt_result", + [defines.inventory.crafter_input] = "input", + [defines.inventory.crafter_modules] = "modules", + [defines.inventory.crafter_output] = "output", + [defines.inventory.crafter_trash] = "trash", + [defines.inventory.fuel] = "fuel", + [defines.inventory.lab_input] = "input", + [defines.inventory.lab_modules] = "modules", + [defines.inventory.lab_trash] = "trash", + [defines.inventory.mining_drill_modules] = "modules", + [defines.inventory.rocket_silo_rocket] = "cargo", + [defines.inventory.rocket_silo_trash] = "trash", +} + +local selection_indices ={ + input = { + default = 1, + input = 2, + fuel = 3, + modules = 4, + cargo = 5 + }, + output = { + default = 1, + output = 2, + burnt_result = 3, + modules = 4, + trash = 5, + dump = 6 + } +} + +local function valid(metadata_index) + metadata = storage.programmable_inserters[metadata_index] + -- if not valid, then remove entities (will most always be inserters being invalid) + if not metadata then return true end + if not metadata.inserter.valid or (metadata.pickup_target and not metadata.pickup_target.valid) or (metadata.drop_target and not metadata.drop_target.valid) then + if metadata.inserter.valid then metadata.inserter.destroy() end + if metadata.pickup_target and metadata.pickup_target.valid then + storage.programmable_inserters[metadata.pickup_target.unit_number] = nil + metadata.pickup_target.destroy() + end + if metadata.drop_target and metadata.drop_target.valid then + storage.programmable_inserters[metadata.drop_target.unit_number] = nil + metadata.drop_target.destroy() + end + storage.programmable_inserters[metadata_index] = nil + return false + end + return true +end + +py.on_event(py.events.on_init(), function (event) + storage.programmable_inserters = storage.programmable_inserters or {} + for index in pairs(storage.programmable_inserters) do + valid(index) + end +end) + +local function update_targets(inserter) + if not inserter or not valid(inserter.unit_number) or not storage.programmable_inserters[inserter.unit_number] then return end + local metadata = storage.programmable_inserters[inserter.unit_number] + for index, entity in pairs{ + drop_target = metadata.drop_target, + pickup_target = metadata.pickup_target, + } do + -- move proxy to new target position + entity.teleport(inserter[index:sub(1, -7) .. "position"]) + + local target + for _, p_target in pairs(entity.surface.find_entities_filtered{ + position = entity.position, + type = { + "furnace", + "assembling-machine", + "lab", + "mining-drill", + "rocket-silo" + } + }) do + -- make sure we dont select things that we aren't supposed to see, only target things we need + if not p_target.prototype.hidden and proxy_targets[p_target.type][metadata[index .. "_inventory"]] then + target = p_target + break + end + end + + + if target then + -- set new target and proper inventory target index + entity.proxy_target_entity = target + entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] + -- else -- either no target exists or target inventory is not valid for that entity + -- inserter[index] = nil -- make inserter act normal + -- entity.proxy_target_entity = nil -- remove entity reference from proxy + -- entity.proxy_target_inventory = proxy_targets.default[metadata[index .. "_inventory"]] -- save the desired type for later + end + end +end + +local function update_gui(entity, player_index, opened) + if not entity or (entity.type == "entity-ghost" and entity.ghost_type or entity.type) ~= "inserter" then return end + if not valid(entity.unit_number) then return end + local player = game.get_player(player_index) + + + local metadata = storage.programmable_inserters[entity.unit_number] or {} + local drop_target = metadata.drop_target and (proxy_targets[(metadata.drop_target.proxy_target_entity or {}).type or ""] or {}) and metadata.drop_target.proxy_target_entity or entity.drop_target + local pickup_target = metadata.pickup_target and (proxy_targets[(metadata.pickup_target.proxy_target_entity or {}).type or ""] or {}) and metadata.pickup_target.proxy_target_entity or entity.pickup_target + + if player.gui.relative["programmable-inserter-gui"] then + player.gui.relative["programmable-inserter-gui"].destroy() + end + + local window = player.gui.relative.add{ + type = "frame", + name = "programmable-inserter-gui", + style = "invisible_frame", + anchor = { + gui = defines.relative_gui_type.inserter_gui, + position = defines.relative_gui_position.right + } + } + + -- add 'settings' button + local mini_window = window.add{ + type = "frame", + name = "mini-frame" + } + mini_window.style.top_padding = 5 + mini_window.style.bottom_padding = 5 + mini_window.style.left_padding = 5 + mini_window.style.right_padding = 5 + mini_window.visible = not opened + mini_window.add{ + type = "sprite-button", + name = "show-inserter-settings", + style = "close_button", + sprite = "utility/tip_icon", + tooltip = {"tooltip.show-inserter-settings"} + } + + -- add main settings window + local main_frame = window.add{ + type = "frame", + name = "main-frame", + direction = "vertical" + } + main_frame.visible = opened + main_frame.add{ + type = "flow", + name = "titlebar", + direction = "horizontal" + }.add{ + type = "label", + style = "frame_title", + caption = {"tooltip.inserter-settings-title"} + } + local header = main_frame.titlebar.add{ + type = "empty-widget", + style = "draggable_space_header" + } + header.style.horizontally_stretchable = true + header.style.natural_height = 24 + header.style.height = 24 + header.style.right_margin = 5 + main_frame.titlebar.add{ + type = "sprite-button", + name = "hide-inserter-settings", + style = "close_button", + sprite = "utility/close", + } + + main_frame = main_frame.add{ + type = "frame", + style = "inside_shallow_frame_with_padding_and_vertical_spacing", + direction = "vertical" + } + main_frame.add{ + type = "drop-down", + name = "drop_target", + items = { + {"", {"inventory-target.default"}}, + {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, + {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, + {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {(proxy_targets[(drop_target or {}).type] or {}).cargo and "" or "tooltip.unavailable-insert-target", {"inventory-target.cargo"}} + }, + tooltip = {"tooltip.inserter-drop-target-tooltip"}, + selected_index = selection_indices.input[metadata.drop_target_inventory] or 1 + } + main_frame.add{ + type = "drop-down", + name = "pickup_target", + items = { + {"", {"inventory-target.default"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} + }, + tooltip = {"tooltip.inserter-pickup-target-tooltip"}, + selected_index = selection_indices.output[metadata.pickup_target_inventory] or 1 + } +end + +py.on_event(py.events.on_gui_opened(), function (event) + if game.get_player(event.player_index).opened and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end + update_gui(event.entity, event.player_index, false) +end) + +py.on_event(defines.events.on_gui_closed, function (event) + if game.get_player(event.player_index).gui.relative["programmable-inserter-gui"] then + game.get_player(event.player_index).gui.relative["programmable-inserter-gui"].destroy() + end +end) + +py.on_event(defines.events.on_gui_selection_state_changed, function (event) + local element = event.element + if not element or element.get_mod() ~= "pycoalprocessing" or element.type ~= "drop-down" then return end + + local player = game.get_player(event.player_index) + local inserter = player.opened + if not inserter then return end + + local selection = element.items[element.selected_index][2][1]:sub(18) + + if inserter.type == "entity-ghost" then + -- tags = inserter.tags or {} + -- tags["py-dynamic-inserter"] = tags["py-dynamic-inserter"] or {} + -- tags["py-dynamic-inserter"][element.name] = selection + -- inserter.tags = tags + else + local metadata = storage.programmable_inserters[inserter.unit_number] or { inserter = inserter } + -- "default" logic + if element.selected_index == 1 then + -- delete proxy container and remove it's reference + metadata[element.name].destroy() + metadata[element.name] = nil + metadata[element.name .. "_inventory"] = nil + -- remove from storage if neither exists + if not metadata.drop_target and not metadata.pickup_target then + storage.programmable_inserters[inserter.unit_number] = nil + end + else + -- save the target inventory + metadata[element.name .. "_inventory"] = selection + -- create proxy container if required + metadata[element.name] = metadata[element.name] or inserter.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = inserter.force, + position = inserter[element.name:sub(1, -7) .. "position"] + } + + storage.programmable_inserters[inserter.unit_number] = metadata + update_targets(inserter) + end + end + + update_gui(inserter, event.player_index, true) +end) + +py.on_event(py.events.on_gui_click(), function (event) + local button = event.element + if not button or button.get_mod() ~= "pycoalprocessing" then return end + + if button.name == "show-inserter-settings" then + local base = button.parent.parent + button.parent.visible = false + base["main-frame"].visible = true + elseif button.name == "hide-inserter-settings" then + local base = button.parent.parent.parent + button.parent.parent.visible = false + base["mini-frame"].visible = true + end +end) + +py.on_event(py.events.on_built(), function (event) + if event.entity.surface.get_property("gravity") == 0 then return end + if event.entity.type == "inserter" and event.tags and event.tags["py-dynamic-inserter"] then + -- create relevant entities + elseif proxy_targets[event.entity.type] then + -- connect proxies to newly created entity + local target = event.entity + for _, proxy in pairs(target.surface.find_entities_filtered{ + area = target.bounding_box, + name = "py-dynamic-inserter-target" + }) do + proxy.proxy_target_entity = target + proxy.proxy_target_inventory = proxy_targets[target.type][proxy_pointers[proxy.proxy_target_inventory]] + end + end +end) + +py.on_event(py.events.on_destroyed(), function (event) + if event.entity.type ~= "inserter" then return end + + for _, entity in pairs(storage[event.entity.unit_number] or {}) do + if entity.type == "proxy-container" then entity.destroy() end + end + storage[event.entity.unit_number] = nil +end) + +script.on_event(defines.events.on_player_rotated_entity, function (event) + update_targets(event.entity) +end) + +--[[ + +script.on_event(defines.events.on_entity_settings_pasted, function (event) + local source = event.source + local destination = event.destination + local data = {} -- store the data in an ambiguous table, save as tags or in storage depending on the destination + -- both things must be inserters + if (source.type == "entity-ghost" and source.ghost_type or source.type) ~= "inserter" or (destination.type == "entity-ghost" and destination.ghost_type or destination.type) ~= "inserter" then return end + + if source.type == "entity-ghost" then + data = (source.tags or {})["py-dynamic-inserter"] or {} + else + + end + +end) + +script.on_event(defines.events.on_player_setup_blueprint, function (event) + +end) + +script.on_event(defines.events.on_player_configured_blueprint, function (event) + +end) + +if script.active_mods["quick-adjustable-inserters"] then + ---@param event EventData.on_qai_inserter_vectors_changed + script.on_event(defines.events.on_qai_inserter_vectors_changed, function(event) + update_targets(event.inserter) + end) + + ---@param event EventData.on_qai_inserter_adjustment_finished + script.on_event(defines.events.on_qai_inserter_adjustment_finished, function(event) + update_targets(event.inserter) + end) +end + +if script.active_mods["bobinserters"] then + script.on_event(defines.events.on_bobs_inserter_adjusted, function (event) + update_targets(event.entity) + end) +end + +]] \ No newline at end of file From a488f396df679e817c1ad1ddb0f524665c5f7446 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 15:31:24 -0700 Subject: [PATCH 05/28] fix overridding other events --- scripts/programmable-inserter.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 9528b08da..d4471ad8f 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -356,13 +356,11 @@ py.on_event(py.events.on_destroyed(), function (event) storage[event.entity.unit_number] = nil end) -script.on_event(defines.events.on_player_rotated_entity, function (event) +py.on_event(defines.events.on_player_rotated_entity, function (event) update_targets(event.entity) end) ---[[ - -script.on_event(defines.events.on_entity_settings_pasted, function (event) +py.on_event(defines.events.on_entity_settings_pasted, function (event) local source = event.source local destination = event.destination local data = {} -- store the data in an ambiguous table, save as tags or in storage depending on the destination From 985478d8742ee2645142363607b4eb99e15e9fb0 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 15:34:39 -0700 Subject: [PATCH 06/28] fix crash too --- scripts/programmable-inserter.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index d4471ad8f..323f19ad7 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -360,6 +360,8 @@ py.on_event(defines.events.on_player_rotated_entity, function (event) update_targets(event.entity) end) +--[[ + py.on_event(defines.events.on_entity_settings_pasted, function (event) local source = event.source local destination = event.destination From f0fada0e5a9fe60d2328a9b07f6a832f99944c88 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 15:38:24 -0700 Subject: [PATCH 07/28] fix crash when opening another gui type --- scripts/programmable-inserter.lua | 52 +++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 323f19ad7..704126b40 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -157,10 +157,22 @@ local function update_gui(entity, player_index, opened) if not valid(entity.unit_number) then return end local player = game.get_player(player_index) + local in_space = entity.surface.get_property("gravity") == 0 + local tags = (entity.tags or {})["py-dynamic-inserter"] + local useful_data = { + drop_target_inventory = nil, + pickup_target_inventory = nil, + } local metadata = storage.programmable_inserters[entity.unit_number] or {} local drop_target = metadata.drop_target and (proxy_targets[(metadata.drop_target.proxy_target_entity or {}).type or ""] or {}) and metadata.drop_target.proxy_target_entity or entity.drop_target + if not drop_target and entity.type == "entity-ghost" then + -- check for other ghost or normal entities + end local pickup_target = metadata.pickup_target and (proxy_targets[(metadata.pickup_target.proxy_target_entity or {}).type or ""] or {}) and metadata.pickup_target.proxy_target_entity or entity.pickup_target + if not pickup_target and entity.type == "entity-ghost" then + -- check for other ghost or normal entities + end if player.gui.relative["programmable-inserter-gui"] then player.gui.relative["programmable-inserter-gui"].destroy() @@ -241,7 +253,7 @@ local function update_gui(entity, player_index, opened) {(proxy_targets[(drop_target or {}).type] or {}).cargo and "" or "tooltip.unavailable-insert-target", {"inventory-target.cargo"}} }, tooltip = {"tooltip.inserter-drop-target-tooltip"}, - selected_index = selection_indices.input[metadata.drop_target_inventory] or 1 + selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 } main_frame.add{ type = "drop-down", @@ -255,12 +267,12 @@ local function update_gui(entity, player_index, opened) {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} }, tooltip = {"tooltip.inserter-pickup-target-tooltip"}, - selected_index = selection_indices.output[metadata.pickup_target_inventory] or 1 + selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 } end py.on_event(py.events.on_gui_opened(), function (event) - if game.get_player(event.player_index).opened and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end + if game.get_player(event.player_index).opened_gui_type == "entity" and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end update_gui(event.entity, event.player_index, false) end) @@ -281,10 +293,11 @@ py.on_event(defines.events.on_gui_selection_state_changed, function (event) local selection = element.items[element.selected_index][2][1]:sub(18) if inserter.type == "entity-ghost" then - -- tags = inserter.tags or {} - -- tags["py-dynamic-inserter"] = tags["py-dynamic-inserter"] or {} - -- tags["py-dynamic-inserter"][element.name] = selection - -- inserter.tags = tags + local tags = inserter.tags or {} + tags["py-dynamic-inserter"] = tags["py-dynamic-inserter"] or {} + tags["py-dynamic-inserter"][element.name .. "_inventory"] = element.selected_index ~= 1 and selection or nil + if not tags["py-dynamic-inserter"].drop_target_inventory and not tags["py-dynamic-inserter"].pickup_target_inventory then tags["py-dynamic-inserter"] = nil end + inserter.tags = tags else local metadata = storage.programmable_inserters[inserter.unit_number] or { inserter = inserter } -- "default" logic @@ -377,12 +390,25 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) end) -script.on_event(defines.events.on_player_setup_blueprint, function (event) - -end) - -script.on_event(defines.events.on_player_configured_blueprint, function (event) - +py.on_event(defines.events.on_player_setup_blueprint, function (event) + local blueprint = game.get_player(event.player_index).blueprint_to_setup + -- if normally invalid + if not blueprint or not blueprint.valid_for_read then blueprint = game.get_player(event.player_index).cursor_stack end + -- if non existant, cancel + if not blueprint then return end + local entities = blueprint and blueprint.get_blueprint_entities() + if not entities then return; end + -- update entities + for i, entity in pairs(entities) do + -- if fake underground, remove from blueprint + if xutil.is_type.psuedo(entity) then + entities[i] = nil + -- if psuedo pipe to ground, replace with normal variant + elseif xutil.is_pipe(entity) then + entity.name = xutil.get_type.base(entity) + end + end + blueprint.set_blueprint_entities(entities) end) if script.active_mods["quick-adjustable-inserters"] then From 7e3fcd4f92aafb0a74a34f5d59fc06d01f650c1a Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 15:44:09 -0700 Subject: [PATCH 08/28] fix not actually targeting anything :P --- scripts/programmable-inserter.lua | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 704126b40..0b10b534d 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -144,10 +144,6 @@ local function update_targets(inserter) -- set new target and proper inventory target index entity.proxy_target_entity = target entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] - -- else -- either no target exists or target inventory is not valid for that entity - -- inserter[index] = nil -- make inserter act normal - -- entity.proxy_target_entity = nil -- remove entity reference from proxy - -- entity.proxy_target_inventory = proxy_targets.default[metadata[index .. "_inventory"]] -- save the desired type for later end end end @@ -306,6 +302,8 @@ py.on_event(defines.events.on_gui_selection_state_changed, function (event) metadata[element.name].destroy() metadata[element.name] = nil metadata[element.name .. "_inventory"] = nil + -- set target entity + inserter[element.name] = nil -- remove from storage if neither exists if not metadata.drop_target and not metadata.pickup_target then storage.programmable_inserters[inserter.unit_number] = nil @@ -319,6 +317,8 @@ py.on_event(defines.events.on_gui_selection_state_changed, function (event) force = inserter.force, position = inserter[element.name:sub(1, -7) .. "position"] } + -- set target entity + inserter[element.name] = metadata[element.name] storage.programmable_inserters[inserter.unit_number] = metadata update_targets(inserter) @@ -397,16 +397,10 @@ py.on_event(defines.events.on_player_setup_blueprint, function (event) -- if non existant, cancel if not blueprint then return end local entities = blueprint and blueprint.get_blueprint_entities() - if not entities then return; end + if not entities then return end -- update entities for i, entity in pairs(entities) do - -- if fake underground, remove from blueprint - if xutil.is_type.psuedo(entity) then - entities[i] = nil - -- if psuedo pipe to ground, replace with normal variant - elseif xutil.is_pipe(entity) then - entity.name = xutil.get_type.base(entity) - end + -- add tags and remove proxy inventories as necessary end blueprint.set_blueprint_entities(entities) end) @@ -429,4 +423,4 @@ if script.active_mods["bobinserters"] then end) end -]] \ No newline at end of file +--]] \ No newline at end of file From 6f3abc7078497c5a1b71ddb17fb4cff18bfd12b2 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Sep 2025 16:27:58 -0700 Subject: [PATCH 09/28] fix entities not being properly removed --- scripts/programmable-inserter.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 0b10b534d..43346ce11 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -363,8 +363,8 @@ end) py.on_event(py.events.on_destroyed(), function (event) if event.entity.type ~= "inserter" then return end - for _, entity in pairs(storage[event.entity.unit_number] or {}) do - if entity.type == "proxy-container" then entity.destroy() end + for _, entity in pairs(storage.programmable_inserters[event.entity.unit_number] or {}) do + if entity.type == "proxy-container" and entity.valid then entity.destroy() end end storage[event.entity.unit_number] = nil end) From 33826772e6b244cd0428fd6eaad85cf1f51f9ca1 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Wed, 3 Sep 2025 20:58:49 -0700 Subject: [PATCH 10/28] fix inserters being programmable in space --- scripts/programmable-inserter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 43346ce11..5c9d67d15 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -268,7 +268,7 @@ local function update_gui(entity, player_index, opened) end py.on_event(py.events.on_gui_opened(), function (event) - if game.get_player(event.player_index).opened_gui_type == "entity" and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end + if game.get_player(event.player_index).opened_gui_type == defines.gui_type.entity and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end update_gui(event.entity, event.player_index, false) end) From 1a2e9aac4893e1b17affcd304ce58caa16ddc67d Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Wed, 3 Sep 2025 23:51:40 -0700 Subject: [PATCH 11/28] blueprint support, ghost support, modded inserter support but you shouldnt be using them anyways --- scripts/programmable-inserter.lua | 104 +++++++++++++++++++++++++++--- 1 file changed, 95 insertions(+), 9 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 5c9d67d15..d862276d8 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -99,6 +99,7 @@ local function valid(metadata_index) metadata.drop_target.destroy() end storage.programmable_inserters[metadata_index] = nil + game.print("detected invalid programmable inserter data!") return false end return true @@ -347,6 +348,18 @@ py.on_event(py.events.on_built(), function (event) if event.entity.surface.get_property("gravity") == 0 then return end if event.entity.type == "inserter" and event.tags and event.tags["py-dynamic-inserter"] then -- create relevant entities + local metadata = event.tags["py-dynamic-inserter"] + metadata.inserter = event.entity + for index, value in pairs(metadata) do + if index:sub(-9) == "inventory" then + metadata[index:sub(1,-11)] = event.entity.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = event.entity.force, + position = event.entity[index:sub(1,-17) .. "position"] + } + end + end + update_targets(event.entity) elseif proxy_targets[event.entity.type] then -- connect proxies to newly created entity local target = event.entity @@ -373,19 +386,79 @@ py.on_event(defines.events.on_player_rotated_entity, function (event) update_targets(event.entity) end) ---[[ - py.on_event(defines.events.on_entity_settings_pasted, function (event) local source = event.source local destination = event.destination - local data = {} -- store the data in an ambiguous table, save as tags or in storage depending on the destination + local data -- store the data in an ambiguous table, save as tags or in storage depending on the destination -- both things must be inserters if (source.type == "entity-ghost" and source.ghost_type or source.type) ~= "inserter" or (destination.type == "entity-ghost" and destination.ghost_type or destination.type) ~= "inserter" then return end if source.type == "entity-ghost" then data = (source.tags or {})["py-dynamic-inserter"] or {} - else + elseif storage.programmable_inserters[source.unit_number] then + data = { + drop_target_inventory = storage.programmable_inserters[source.unit_number].drop_target_inventory, + pickup_target_inventory = storage.programmable_inserters[source.unit_number].pickup_target_inventory + } + end + if destination.type == "entity-ghost" then + local tags = (destination.tags or {}) or {} + tags["py-dynamic-inserter"] = data + destination.tags = tags + else + if not data and storage.programmable_inserters[destination.unit_number] then + -- remove old references + local metadata = storage.programmable_inserters[destination.unit_number] + if metadata.drop_target then metadata.drop_target.destroy() end + if metadata.pickup_target then metadata.pickup_target.destroy() end + storage.programmable_inserters[destination.unit_number] = nil + elseif data and storage.programmable_inserters[destination.unit_number] then + -- just update things + local metadata = storage.programmable_inserters[destination.unit_number] + metadata.drop_target_inventory = data.drop_target_inventory + if not metadata.drop_target and metadata.drop_target_inventory then + metadata.drop_target = destination.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = destination.force, + position = destination.drop_position + } + elseif metadata.drop_target and not metadata.drop_target_inventory then + metadata.drop_target.destroy() + metadata.drop_target = nil + end + metadata.pickup_target_inventory = data.pickup_target_inventory + if not metadata.pickup_target and metadata.pickup_target_inventory then + metadata.pickup_target = destination.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = destination.force, + position = destination.pickup_position + } + elseif metadata.pickup_target and not metadata.pickup_target_inventory then + metadata.pickup_target.destroy() + metadata.pickup_target = nil + end + update_targets(destination) + elseif data then + -- add all the things + storage.programmable_inserters[destination.unit_number] = { + inserter = destination, + drop_target = data.drop_target_inventory and destination.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = destination.force, + position = destination.drop_position + } or nil, + drop_target_inventory = data.drop_target_inventory, + pickup_target = data.pickup_target_inventory and destination.surface.create_entity{ + name = "py-dynamic-inserter-target", + force = destination.force, + position = destination.pickup_position + } or nil, + pickup_target_inventory = data.pickup_target_inventory + } + storage.programmable_inserters[destination.unit_number].pickup_target_inventory = data.pickup_target_inventory + update_targets(destination) + end end end) @@ -396,11 +469,26 @@ py.on_event(defines.events.on_player_setup_blueprint, function (event) if not blueprint or not blueprint.valid_for_read then blueprint = game.get_player(event.player_index).cursor_stack end -- if non existant, cancel if not blueprint then return end - local entities = blueprint and blueprint.get_blueprint_entities() + local entities = blueprint.get_blueprint_entities() if not entities then return end -- update entities - for i, entity in pairs(entities) do + local mapping -- we might need it, might not + for index, entity in pairs(entities) do -- add tags and remove proxy inventories as necessary + if prototypes.entity[entity.name].type == "inserter" then + mapping = mapping or event.mapping.get() + local tags = entity.tags or {} + if mapping[index].type == "entity-ghost" then + tags["py-dynamic-inserter"] = (mapping[index].tags or {})["py-dynamic-inserter"] + elseif storage.programmable_inserters[mapping[index].unit_number] then + -- we only need to add data if data is in storage + tags["py-dynamic-inserter"] = { + drop_target_inventory = storage.programmable_inserters[mapping[index].unit_number].drop_target_inventory, + pickup_target_inventory = storage.programmable_inserters[mapping[index].unit_number].pickup_target_inventory + } + end + entity.tags = tags + end end blueprint.set_blueprint_entities(entities) end) @@ -421,6 +509,4 @@ if script.active_mods["bobinserters"] then script.on_event(defines.events.on_bobs_inserter_adjusted, function (event) update_targets(event.entity) end) -end - ---]] \ No newline at end of file +end \ No newline at end of file From f6b9cdc251d5ae99d628d67b575ecefe0cff5b2f Mon Sep 17 00:00:00 2001 From: Zachary Picco Date: Fri, 5 Sep 2025 10:49:03 -0500 Subject: [PATCH 12/28] Added sanity checks for bobs inserter compatability. (#454) --- scripts/programmable-inserter.lua | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index d862276d8..8bedefd68 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -494,18 +494,22 @@ py.on_event(defines.events.on_player_setup_blueprint, function (event) end) if script.active_mods["quick-adjustable-inserters"] then - ---@param event EventData.on_qai_inserter_vectors_changed - script.on_event(defines.events.on_qai_inserter_vectors_changed, function(event) - update_targets(event.inserter) - end) + if defines.events.on_qai_inserter_vectors_changed then + ---@param event EventData.on_qai_inserter_vectors_changed + script.on_event(defines.events.on_qai_inserter_vectors_changed, function(event) + update_targets(event.inserter) + end) + end - ---@param event EventData.on_qai_inserter_adjustment_finished - script.on_event(defines.events.on_qai_inserter_adjustment_finished, function(event) - update_targets(event.inserter) - end) + if defines.events.on_qai_inserter_adjustment_finished then + ---@param event EventData.on_qai_inserter_adjustment_finished + script.on_event(defines.events.on_qai_inserter_adjustment_finished, function(event) + update_targets(event.inserter) + end) + end end -if script.active_mods["bobinserters"] then +if script.active_mods["bobinserters"] and defines.events.on_bobs_inserter_adjusted then script.on_event(defines.events.on_bobs_inserter_adjusted, function (event) update_targets(event.entity) end) From 1cf86cd591c64383c67d8fb8be1f5e98a1dea136 Mon Sep 17 00:00:00 2001 From: Zachary Picco Date: Fri, 5 Sep 2025 10:54:36 -0500 Subject: [PATCH 13/28] Fixed crash when closing pycodex. (#455) --- scripts/programmable-inserter.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 8bedefd68..f7dc9ab56 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -331,7 +331,8 @@ end) py.on_event(py.events.on_gui_click(), function (event) local button = event.element - if not button or button.get_mod() ~= "pycoalprocessing" then return end + if not button or not button.valid then return end + if button.get_mod() ~= "pycoalprocessing" then return end if button.name == "show-inserter-settings" then local base = button.parent.parent From 4b687bd2ebceb663c903f51ed047f1ae6120d6b1 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Mon, 8 Sep 2025 23:44:17 -0700 Subject: [PATCH 14/28] remove rocket silo references and add support for space capsules/space in general --- scripts/programmable-inserter.lua | 34 +++++++++++-------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index f7dc9ab56..1bdbf4958 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -29,14 +29,9 @@ local proxy_targets = { burnt_result = defines.inventory.burnt_result, modules = defines.inventory.mining_drill_modules, }, - ["rocket-silo"] = { - input = defines.inventory.crafter_input, - output = defines.inventory.crafter_output, - fuel = defines.inventory.fuel, - burnt_result = defines.inventory.burnt_result, - modules = defines.inventory.crafter_modules, - trash = defines.inventory.rocket_silo_trash, - cargo = defines.inventory.rocket_silo_rocket, + ["car"] = { + input = defines.inventory.car_trunk, + fuel = defines.inventory.fuel }, ["default"] = { input = defines.inventory.crafter_input, @@ -45,8 +40,7 @@ local proxy_targets = { burnt_result = defines.inventory.burnt_result, modules = defines.inventory.crafter_modules, trash = defines.inventory.crafter_trash, - dump = defines.inventory.assembling_machine_dump, - cargo = defines.inventory.rocket_silo_rocket, + dump = defines.inventory.assembling_machine_dump } } @@ -61,9 +55,7 @@ local proxy_pointers = { [defines.inventory.lab_input] = "input", [defines.inventory.lab_modules] = "modules", [defines.inventory.lab_trash] = "trash", - [defines.inventory.mining_drill_modules] = "modules", - [defines.inventory.rocket_silo_rocket] = "cargo", - [defines.inventory.rocket_silo_trash] = "trash", + [defines.inventory.mining_drill_modules] = "modules" } local selection_indices ={ @@ -71,8 +63,7 @@ local selection_indices ={ default = 1, input = 2, fuel = 3, - modules = 4, - cargo = 5 + modules = 4 }, output = { default = 1, @@ -130,11 +121,11 @@ local function update_targets(inserter) "assembling-machine", "lab", "mining-drill", - "rocket-silo" + "car" } }) do -- make sure we dont select things that we aren't supposed to see, only target things we need - if not p_target.prototype.hidden and proxy_targets[p_target.type][metadata[index .. "_inventory"]] then + if (p_target.type ~= "car" or p_target.name == "space-pod") and not p_target.prototype.hidden and proxy_targets[p_target.type][metadata[index .. "_inventory"]] then target = p_target break end @@ -154,7 +145,6 @@ local function update_gui(entity, player_index, opened) if not valid(entity.unit_number) then return end local player = game.get_player(player_index) - local in_space = entity.surface.get_property("gravity") == 0 local tags = (entity.tags or {})["py-dynamic-inserter"] local useful_data = { drop_target_inventory = nil, @@ -247,7 +237,6 @@ local function update_gui(entity, player_index, opened) {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, - {(proxy_targets[(drop_target or {}).type] or {}).cargo and "" or "tooltip.unavailable-insert-target", {"inventory-target.cargo"}} }, tooltip = {"tooltip.inserter-drop-target-tooltip"}, selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 @@ -268,8 +257,10 @@ local function update_gui(entity, player_index, opened) } end +-- TODO fix upgrade events breaking it + py.on_event(py.events.on_gui_opened(), function (event) - if game.get_player(event.player_index).opened_gui_type == defines.gui_type.entity and game.get_player(event.player_index).opened.surface.get_property("gravity") == 0 then return end + if game.get_player(event.player_index).opened_gui_type ~= defines.gui_type.entity then return end update_gui(event.entity, event.player_index, false) end) @@ -346,7 +337,6 @@ py.on_event(py.events.on_gui_click(), function (event) end) py.on_event(py.events.on_built(), function (event) - if event.entity.surface.get_property("gravity") == 0 then return end if event.entity.type == "inserter" and event.tags and event.tags["py-dynamic-inserter"] then -- create relevant entities local metadata = event.tags["py-dynamic-inserter"] @@ -361,7 +351,7 @@ py.on_event(py.events.on_built(), function (event) end end update_targets(event.entity) - elseif proxy_targets[event.entity.type] then + elseif (event.entity.type ~= "car" or event.entity.name == "space-pod") and proxy_targets[event.entity.type] then -- connect proxies to newly created entity local target = event.entity for _, proxy in pairs(target.surface.find_entities_filtered{ From f3a43dfa381ca28c3d99a42b2901041f68c3ab7b Mon Sep 17 00:00:00 2001 From: Lynnatic Date: Mon, 15 Sep 2025 03:42:52 +0200 Subject: [PATCH 15/28] Change order for muddy-sludge to set it as the default recipe (#460) * Change order for muddy-sludge to set it as the default recipe Currently "soil-washing" is used as the default recipe when selecting the "muddy-sludge" signal for some reason. * Update recipe icon for muddy-sludge Adds ingredients in the upper left and right corners of the icon to differentiate it from the fluid itself --- changelog.txt | 6 ++++++ data-updates.lua | 3 +++ prototypes/recipes/recipes.lua | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 9f7b08e0b..a4443f1ea 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,10 @@ --------------------------------------------------------------------------------------------------- +Version: a.b.c +Date: ??? + Changes: + - Change order for muddy-sludge to set it as the default recipe. Resolves https://github.com/pyanodon/pybugreports/issues/1193 + - Update recipe icon for muddy-sludge. +--------------------------------------------------------------------------------------------------- Version: 3.0.42 Date: 2025-08-23 Changes: diff --git a/data-updates.lua b/data-updates.lua index d135e514c..80f47a833 100644 --- a/data-updates.lua +++ b/data-updates.lua @@ -51,6 +51,9 @@ end data.raw["item-subgroup"]["science-pack"].group = "production" data.raw["item-subgroup"]["science-pack"].order = "y" +-- has to be added here due to fluid/recipe load order shenanigans +data.raw.recipe["muddy-sludge"].icons = py.composite_icon("muddy-sludge", "water", "soil") + --gather recipes for module changes local recipes_list = { diff --git a/prototypes/recipes/recipes.lua b/prototypes/recipes/recipes.lua index a8e815d98..9efa9ac04 100644 --- a/prototypes/recipes/recipes.lua +++ b/prototypes/recipes/recipes.lua @@ -75,7 +75,7 @@ RECIPE { }, -- main_product = "sand", subgroup = "py-washer", - order = "z" + order = "a", } RECIPE { From 258281e8531d20df1e9c2e6def8b232e62d3ada1 Mon Sep 17 00:00:00 2001 From: Zachary Picco Date: Sun, 14 Sep 2025 21:25:36 -0500 Subject: [PATCH 16/28] Rebase master (#461) * Many typos fixed and some new translations in DE locale (#441) Many typos fixed and some new translations. Thanks CarstenG! * Fix infinite? migration with very large amounts of hidden spoiling items (#443) Eating all your CPU trying to make a spreadsheet of all the spoilage possibilities that Dancing Miku provides * Improved generator autofill to evenly distribute stacks of fuels. (#439) * Added Dutch locale (#444) * Added Dutch locale * Update changelog.txt * German (`de`) translation of codex (#442) Thanks to CarstenG * Tint empty methanol canisters to be darker than filled methanol canisters (#458). Resolves pyanodon/pybugreports#1204 The icons for empty and filled methanol canisters currently look exactly the same and can't be told apart. * rich text toggle (#459) added an optional field to specify the rich_text_setting on codex pages. If not specified the default is highlight Co-authored-by: Zachary Picco * Add keyboard shortcuts for TURD codex page and Caravan manager (#453) * Add open_wiki_to_page remote * Add codex button tooltip * Autotech 2.0 (#457) * Adapt codebase to style required by autotech 2.0 * Migrate tech names of pyAL science packs. * Removed recipe.autotech_is_not_primary_recipe Replaced with `recipe.results[n].autotech_ignore` * Regenerate cache files. * Remove ignore_for_dependencies flag. * Regenerate cache files. * Tuned down the exponential ramping on worker robot speed from 2^N to 1.5^N. * Rename autotech_ignore -> autotech_is_not_primary_source * Typo * Regenerate cache files. --------- Co-authored-by: Carsten Gerlach Co-authored-by: oorzkws <65210810+oorzkws@users.noreply.github.com> Co-authored-by: Craig Johnston Co-authored-by: QatSquirrel <79841562+QatSquirrel@users.noreply.github.com> Co-authored-by: Lynnatic Co-authored-by: Alyssa Doubrovsky <60121943+adoubrovsky@users.noreply.github.com> Co-authored-by: William --- cached-configs/pycoalprocessing.lua | 476 +++++----- changelog.txt | 27 +- data-updates.lua | 3 +- info.json | 2 +- locale/de/locale.cfg | 65 +- locale/de/tips.cfg | 60 ++ locale/en/tips.cfg | 4 + locale/nl/locale.cfg | 854 ++++++++++++++++++ locale/nl/tips.cfg | 60 ++ prototypes/buildings/diet-beacon.lua | 6 +- prototypes/fluids/refsyngas.lua | 4 +- prototypes/items/canister.lua | 21 +- .../recipes/coal-processing-recipes.lua | 4 +- prototypes/recipes/fuel-canister-recipes.lua | 18 +- prototypes/recipes/olefin-plant-recipes.lua | 2 +- prototypes/recipes/seperation-recipes.lua | 2 +- prototypes/technologies/coal-processing-2.lua | 3 +- prototypes/technologies/coal-processing-3.lua | 3 +- prototypes/technologies/cooling-tower-1.lua | 3 +- prototypes/technologies/cooling-tower-2.lua | 3 +- prototypes/technologies/energy-2.lua | 3 +- prototypes/technologies/energy-3.lua | 3 +- prototypes/technologies/excavation-2.lua | 6 +- prototypes/technologies/filtration.lua | 3 +- .../fluid-processing-machines.lua | 3 +- prototypes/technologies/fluid-separation.lua | 2 +- prototypes/technologies/kevlar.lua | 3 +- .../technologies/methanol-processing-2.lua | 3 +- prototypes/technologies/niobium.lua | 2 +- prototypes/technologies/organic-solvent.lua | 2 +- prototypes/technologies/stacking-belts.lua | 6 +- prototypes/technologies/wood-processing-2.lua | 3 +- prototypes/updates/base-updates.lua | 29 +- scripts/generator-equipment-autofill.lua | 109 ++- scripts/wiki/spreadsheet-pages.lua | 3 +- scripts/wiki/wiki.lua | 21 +- 36 files changed, 1435 insertions(+), 386 deletions(-) create mode 100644 locale/de/tips.cfg create mode 100644 locale/nl/locale.cfg create mode 100644 locale/nl/tips.cfg diff --git a/cached-configs/pycoalprocessing.lua b/cached-configs/pycoalprocessing.lua index 8b2e041fe..5f118348d 100644 --- a/cached-configs/pycoalprocessing.lua +++ b/cached-configs/pycoalprocessing.lua @@ -1,244 +1,232 @@ -science_pack_order("automation-science-pack", "001-000028") -science_pack_order("logistic-science-pack", "002-000065") -science_pack_order("military-science-pack", "003-000072") -science_pack_order("chemical-science-pack", "003-000110") -science_pack_order("utility-science-pack", "005-000140") -science_pack_order("production-science-pack", "004-000133") -science_pack_order("space-science-pack", "006-000154") -fix_tech("physical-projectile-damage-1", {order = "000007", prerequisites = {"military"}, unit = {count = 250, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("physical-projectile-damage-2", {order = "000008", prerequisites = {"physical-projectile-damage-1", "logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("weapon-shooting-speed-1", {order = "000007", prerequisites = {"military"}, unit = {count = 250, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("weapon-shooting-speed-2", {order = "000008", prerequisites = {"weapon-shooting-speed-1", "logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("stronger-explosives-1", {order = "000009", prerequisites = {"military-2"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("physical-projectile-damage-3", {order = "000010", prerequisites = {"physical-projectile-damage-2", "military-science-pack"}, unit = {count = 50, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("physical-projectile-damage-4", {order = "000011", prerequisites = {"physical-projectile-damage-3"}, unit = {count = 80, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("physical-projectile-damage-5", {order = "000014", prerequisites = {"physical-projectile-damage-4", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("physical-projectile-damage-6", {order = "000021", prerequisites = {"physical-projectile-damage-5", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("physical-projectile-damage-7", {order = "000024", prerequisites = {"physical-projectile-damage-6", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"military-science-pack", 6}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"production-science-pack", 3}}, time = 1200}}) -fix_tech("stronger-explosives-2", {order = "000010", prerequisites = {"stronger-explosives-1", "military-science-pack"}, unit = {count = 50, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("stronger-explosives-3", {order = "000014", prerequisites = {"stronger-explosives-2", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("stronger-explosives-4", {order = "000021", prerequisites = {"stronger-explosives-3", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("stronger-explosives-5", {order = "000022", prerequisites = {"stronger-explosives-4"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("stronger-explosives-6", {order = "000023", prerequisites = {"stronger-explosives-5"}, unit = {count = 1400, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("stronger-explosives-7", {order = "000024", prerequisites = {"stronger-explosives-6", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"military-science-pack", 6}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"production-science-pack", 3}}, time = 1200}}) -fix_tech("refined-flammables-1", {order = "000011", prerequisites = {"flamethrower"}, unit = {count = 80, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("refined-flammables-2", {order = "000012", prerequisites = {"refined-flammables-1"}, unit = {count = 130, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("refined-flammables-3", {order = "000014", prerequisites = {"refined-flammables-2", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("refined-flammables-4", {order = "000021", prerequisites = {"refined-flammables-3", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("refined-flammables-5", {order = "000022", prerequisites = {"refined-flammables-4"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("refined-flammables-6", {order = "000023", prerequisites = {"refined-flammables-5"}, unit = {count = 1400, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("refined-flammables-7", {order = "000024", prerequisites = {"refined-flammables-6", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"military-science-pack", 6}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"production-science-pack", 3}}, time = 1200}}) -fix_tech("energy-weapons-damage-1", {order = "000014", prerequisites = {"military-science-pack", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("energy-weapons-damage-2", {order = "000015", prerequisites = {"energy-weapons-damage-1"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("energy-weapons-damage-3", {order = "000016", prerequisites = {"energy-weapons-damage-2"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("energy-weapons-damage-4", {order = "000017", prerequisites = {"energy-weapons-damage-3"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("energy-weapons-damage-5", {order = "000021", prerequisites = {"energy-weapons-damage-4", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("energy-weapons-damage-6", {order = "000022", prerequisites = {"energy-weapons-damage-5"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("energy-weapons-damage-7", {order = "000024", prerequisites = {"energy-weapons-damage-6", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"military-science-pack", 6}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"production-science-pack", 3}}, time = 1200}}) -fix_tech("weapon-shooting-speed-3", {order = "000010", prerequisites = {"weapon-shooting-speed-2", "military-science-pack"}, unit = {count = 50, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("weapon-shooting-speed-4", {order = "000011", prerequisites = {"weapon-shooting-speed-3"}, unit = {count = 80, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("weapon-shooting-speed-5", {order = "000014", prerequisites = {"weapon-shooting-speed-4", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("weapon-shooting-speed-6", {order = "000021", prerequisites = {"weapon-shooting-speed-5", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("laser-shooting-speed-1", {order = "000014", prerequisites = {"military-science-pack", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("laser-shooting-speed-2", {order = "000015", prerequisites = {"laser-shooting-speed-1"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("laser-shooting-speed-3", {order = "000016", prerequisites = {"laser-shooting-speed-2"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("laser-shooting-speed-4", {order = "000017", prerequisites = {"laser-shooting-speed-3"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("laser-shooting-speed-5", {order = "000021", prerequisites = {"laser-shooting-speed-4", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("laser-shooting-speed-6", {order = "000022", prerequisites = {"laser-shooting-speed-5"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("laser-shooting-speed-7", {order = "000023", prerequisites = {"laser-shooting-speed-6"}, unit = {count = 1400, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("artillery-shell-range-1", {order = "000019", prerequisites = {"artillery"}, unit = {count = 4500, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("artillery-shell-speed-1", {order = "000019", prerequisites = {"artillery"}, unit = {ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("follower-robot-count-1", {order = "000011", prerequisites = {"defender"}, unit = {count = 80, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("follower-robot-count-2", {order = "000012", prerequisites = {"follower-robot-count-1"}, unit = {count = 130, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("follower-robot-count-3", {order = "000014", prerequisites = {"follower-robot-count-2", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("follower-robot-count-4", {order = "000015", prerequisites = {"follower-robot-count-3"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("follower-robot-count-5", {order = "000021", prerequisites = {"follower-robot-count-4", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("follower-robot-count-6", {order = "000022", prerequisites = {"follower-robot-count-5"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("follower-robot-count-7", {order = "000024", prerequisites = {"follower-robot-count-6", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"military-science-pack", 6}, {"production-science-pack", 3}, {"utility-science-pack", 2}, {"space-science-pack", 1}}, time = 1200}}) -fix_tech("bulk-inserter", {order = "000013", prerequisites = {"logistics-2"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("inserter-capacity-bonus-1", {order = "000014", prerequisites = {"bulk-inserter"}, unit = {count = 1750, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("inserter-capacity-bonus-2", {order = "000015", prerequisites = {"inserter-capacity-bonus-1"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("inserter-capacity-bonus-3", {order = "000016", prerequisites = {"inserter-capacity-bonus-2", "chemical-science-pack"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("inserter-capacity-bonus-4", {order = "000019", prerequisites = {"inserter-capacity-bonus-3", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("inserter-capacity-bonus-5", {order = "000020", prerequisites = {"inserter-capacity-bonus-4"}, unit = {count = 1500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("inserter-capacity-bonus-6", {order = "000021", prerequisites = {"inserter-capacity-bonus-5"}, unit = {count = 2500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("inserter-capacity-bonus-7", {order = "000022", prerequisites = {"inserter-capacity-bonus-6", "utility-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("automation", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("automation-2", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("logistic-science-pack", {order = "000007", prerequisites = {"lab-instrument", "ulric"}, unit = {count = 250, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("steel-processing", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("steel-axe", {order = "000003", prerequisites = {"steel-processing"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("military", {order = "000006", prerequisites = {"fluid-processing-machines-1"}, unit = {count = 150, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("military-2", {order = "000008", prerequisites = {"military", "logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("fast-inserter", {order = "000003", prerequisites = {"automation"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("logistics", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("railway", {order = "000013", prerequisites = {"logistics-2"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("automated-rail-transportation", {order = "000014", prerequisites = {"railway"}, unit = {count = 1750, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("rail-signals", {order = "000015", prerequisites = {"automated-rail-transportation"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("automobilism", {order = "000004", prerequisites = {"engine"}, unit = {count = 55, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("optics", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("solar-energy", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("heavy-armor", {order = "000007", prerequisites = {"military"}, unit = {count = 250, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("gun-turret", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("research-speed-1", {order = "000009", prerequisites = {"automation-2"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("research-speed-2", {order = "000010", prerequisites = {"research-speed-1"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("electric-energy-distribution-1", {order = "000012", prerequisites = {"niobium"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("advanced-material-processing", {order = "000010", prerequisites = {"concrete", "crusher", "filtration"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("concrete", {order = "000008", prerequisites = {"logistic-science-pack", "separation"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("engine", {order = "000003", prerequisites = {"automation", "steel-processing"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("landfill", {order = "000005", prerequisites = {"separation"}, unit = {count = 90, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("logistics-2", {order = "000012", prerequisites = {"logistics", "niobium", "lubricant"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("toolbelt", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("stone-wall", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("gate", {order = "000003", prerequisites = {"stone-wall", "steel-processing"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("chemical-science-pack", {order = "000013", prerequisites = {"advanced-circuit", "fine-electronics", "nexelit"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("military-science-pack", {order = "000009", prerequisites = {"military-2", "stone-wall"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("production-science-pack", {order = "000018", prerequisites = {"energy-3", "filtration-mk02", "speed-module-2", "efficiency-module-2", "uranium-processing", "electric-engine"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("utility-science-pack", {order = "000020", prerequisites = {"kovarex-enrichment-process", "automation-3", "destroyer", "fusion-reactor-equipment"}, unit = {count = 1500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}, {"military-science-pack", 2}}, time = 300}}) -fix_tech("space-science-pack", {order = "000023", prerequisites = {"rocket-silo", "solar-energy", "electric-energy-accumulators"}, unit = {count = 1400, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("military-3", {order = "000014", prerequisites = {"military-science-pack", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("military-4", {order = "000021", prerequisites = {"military-3", "utility-science-pack", "explosives"}, unit = {count = 2500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"military-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("uranium-ammo", {order = "000018", prerequisites = {"uranium-processing", "tank"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("atomic-bomb", {order = "000022", prerequisites = {"military-4", "rocket-control-unit", "rocketry"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("automation-3", {order = "000019", prerequisites = {"production-science-pack", "bulk-inserter"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("explosives", {order = "000016", prerequisites = {"sulfur-processing", "mukmoux"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("cliff-explosives", {order = "000017", prerequisites = {"explosives", "military-2"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("land-mine", {order = "000017", prerequisites = {"explosives", "military-science-pack"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("flamethrower", {order = "000010", prerequisites = {"military-science-pack", "coal-processing-2", "filtration"}, unit = {count = 50, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("advanced-circuit", {order = "000009", prerequisites = {"plastics", "fast-inserter"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("processing-unit", {order = "000016", prerequisites = {"sulfur-processing"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("fluid-wagon", {order = "000014", prerequisites = {"railway"}, unit = {count = 1750, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("braking-force-1", {order = "000014", prerequisites = {"railway", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("braking-force-2", {order = "000015", prerequisites = {"braking-force-1"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("braking-force-3", {order = "000019", prerequisites = {"braking-force-2", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("braking-force-4", {order = "000020", prerequisites = {"braking-force-3"}, unit = {count = 1500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("braking-force-5", {order = "000021", prerequisites = {"braking-force-4"}, unit = {count = 2500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("braking-force-6", {order = "000022", prerequisites = {"braking-force-5", "utility-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("braking-force-7", {order = "000023", prerequisites = {"braking-force-6"}, unit = {count = 1400, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("tank", {order = "000017", prerequisites = {"military-science-pack", "explosives"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("logistics-3", {order = "000019", prerequisites = {"production-science-pack", "logistics-2"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("rocketry", {order = "000017", prerequisites = {"explosives", "military-science-pack"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("explosive-rocketry", {order = "000018", prerequisites = {"rocketry", "military-3"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("modular-armor", {order = "000010", prerequisites = {"heavy-armor", "advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("power-armor", {order = "000017", prerequisites = {"modular-armor", "electric-engine", "processing-unit"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("power-armor-mk2", {order = "000022", prerequisites = {"military-4"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"military-science-pack", 3}, {"utility-science-pack", 1}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("laser-turret", {order = "000017", prerequisites = {"military-science-pack", "battery"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("robotics", {order = "000017", prerequisites = {"electric-engine", "battery"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("rocket-fuel", {order = "000016", prerequisites = {"military-science-pack", "sulfur-processing"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("low-density-structure", {order = "000014", prerequisites = {"advanced-material-processing", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("rocket-control-unit", {order = "000021", prerequisites = {"utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"military-science-pack", 3}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("rocket-silo", {order = "000022", prerequisites = {"speed-module-3", "productivity-module-3", "rocket-control-unit"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("research-speed-3", {order = "000014", prerequisites = {"research-speed-2", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("research-speed-4", {order = "000015", prerequisites = {"research-speed-3"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("research-speed-5", {order = "000019", prerequisites = {"research-speed-4", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("research-speed-6", {order = "000021", prerequisites = {"research-speed-5", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("electric-energy-distribution-2", {order = "000014", prerequisites = {"electric-energy-distribution-1", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("electric-energy-accumulators", {order = "000017", prerequisites = {"electric-energy-distribution-1", "battery"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("advanced-material-processing-2", {order = "000014", prerequisites = {"advanced-material-processing", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("effect-transmission", {order = "000019", prerequisites = {"production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("lubricant", {order = "000011", prerequisites = {"mukmoux", "filtration"}, unit = {count = 400, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("electric-engine", {order = "000014", prerequisites = {"lubricant", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("battery", {order = "000016", prerequisites = {"sulfur-processing"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("construction-robotics", {order = "000018", prerequisites = {"robotics"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("logistic-robotics", {order = "000018", prerequisites = {"robotics"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("logistic-system", {order = "000021", prerequisites = {"logistic-robotics", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"military-science-pack", 3}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("worker-robots-speed-1", {order = "000018", prerequisites = {"robotics"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("worker-robots-speed-2", {order = "000019", prerequisites = {"worker-robots-speed-1"}, unit = {count = 4500, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("worker-robots-speed-3", {order = "000020", prerequisites = {"worker-robots-speed-2", "production-science-pack"}, unit = {count = 1500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("worker-robots-speed-4", {order = "000021", prerequisites = {"worker-robots-speed-3"}, unit = {count = 2500, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("worker-robots-speed-5", {order = "000022", prerequisites = {"worker-robots-speed-4", "utility-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("worker-robots-speed-6", {order = "000024", prerequisites = {"worker-robots-speed-5", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"production-science-pack", 3}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"military-science-pack", 6}}, time = 1200}}) -fix_tech("worker-robots-storage-1", {order = "000018", prerequisites = {"robotics"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("worker-robots-storage-2", {order = "000019", prerequisites = {"worker-robots-storage-1", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("worker-robots-storage-3", {order = "000021", prerequisites = {"worker-robots-storage-2", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("energy-shield-equipment", {order = "000012", prerequisites = {"solar-panel-equipment", "military-science-pack"}, unit = {count = 130, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("night-vision-equipment", {order = "000012", prerequisites = {"solar-panel-equipment"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("belt-immunity-equipment", {order = "000012", prerequisites = {"solar-panel-equipment"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("energy-shield-mk2-equipment", {order = "000018", prerequisites = {"energy-shield-equipment", "military-3", "low-density-structure", "power-armor"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("battery-equipment", {order = "000017", prerequisites = {"battery", "solar-panel-equipment"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("battery-mk2-equipment", {order = "000018", prerequisites = {"battery-equipment", "low-density-structure", "power-armor"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("solar-panel-equipment", {order = "000011", prerequisites = {"modular-armor", "solar-energy"}, unit = {count = 400, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("personal-laser-defense-equipment", {order = "000018", prerequisites = {"laser-turret", "military-3", "low-density-structure", "power-armor", "solar-panel-equipment"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("discharge-defense-equipment", {order = "000018", prerequisites = {"laser-turret", "military-3", "power-armor", "solar-panel-equipment"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("fusion-reactor-equipment", {order = "000019", prerequisites = {"power-armor", "military-science-pack", "production-science-pack", "low-density-structure"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"military-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("exoskeleton-equipment", {order = "000017", prerequisites = {"processing-unit", "electric-engine", "solar-panel-equipment"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("personal-roboport-equipment", {order = "000019", prerequisites = {"construction-robotics", "solar-panel-equipment"}, unit = {count = 4500, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("personal-roboport-mk2-equipment", {order = "000021", prerequisites = {"personal-roboport-equipment", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"utility-science-pack", 1}, {"military-science-pack", 3}, {"production-science-pack", 2}}, time = 600}}) -fix_tech("fluid-handling", {order = "000003", prerequisites = {"steel-processing"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("oil-processing", {order = "000014", prerequisites = {"chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("advanced-oil-processing", {order = "000019", prerequisites = {"production-science-pack", "wood-processing"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("sulfur-processing", {order = "000015", prerequisites = {"oil-processing"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("plastics", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("speed-module", {order = "000010", prerequisites = {"advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("speed-module-2", {order = "000017", prerequisites = {"speed-module", "processing-unit"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("speed-module-3", {order = "000019", prerequisites = {"production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("productivity-module", {order = "000010", prerequisites = {"advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("productivity-module-2", {order = "000017", prerequisites = {"productivity-module", "processing-unit"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("productivity-module-3", {order = "000019", prerequisites = {"productivity-module-2", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("efficiency-module", {order = "000010", prerequisites = {"advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("efficiency-module-2", {order = "000017", prerequisites = {"efficiency-module", "processing-unit"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("efficiency-module-3", {order = "000019", prerequisites = {"production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("defender", {order = "000010", prerequisites = {"military-science-pack"}, unit = {count = 50, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}}, time = 90}}) -fix_tech("distractor", {order = "000014", prerequisites = {"chemical-science-pack", "defender"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("destroyer", {order = "000019", prerequisites = {"distractor", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"military-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("uranium-processing", {order = "000016", prerequisites = {"concrete", "sulfur-processing"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("nuclear-power", {order = "000017", prerequisites = {"uranium-processing"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("kovarex-enrichment-process", {order = "000019", prerequisites = {"rocket-fuel", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}, {"military-science-pack", 2}}, time = 300}}) -fix_tech("nuclear-fuel-reprocessing", {order = "000019", prerequisites = {"nuclear-power", "production-science-pack"}, unit = {count = 900, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("mining-productivity-1", {order = "000010", prerequisites = {"advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("mining-productivity-2", {order = "000014", prerequisites = {"mining-productivity-1", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("mining-productivity-3", {order = "000021", prerequisites = {"mining-productivity-2", "utility-science-pack"}, unit = {count = 550, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}, {"military-science-pack", 3}}, time = 600}}) -fix_tech("mining-productivity-4", {order = "000024", prerequisites = {"mining-productivity-3", "space-science-pack"}, unit = {ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"chemical-science-pack", 6}, {"production-science-pack", 3}, {"utility-science-pack", 2}, {"space-science-pack", 1}, {"military-science-pack", 6}}, time = 1200}}) -fix_tech("artillery", {order = "000018", prerequisites = {"tank"}, unit = {count = 2750, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("spidertron", {order = "000022", prerequisites = {"military-4", "exoskeleton-equipment", "rocketry", "rocket-control-unit", "efficiency-module-3"}, unit = {count = 900, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("circuit-network", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("coal-processing-1", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("coal-processing-2", {order = "000009", prerequisites = {"chromium", "methanol-processing-1"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("coal-processing-3", {order = "000014", prerequisites = {"chemical-science-pack", "wood-processing", "mukmoux"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("syngas", {order = "000004", prerequisites = {"tar-processing"}, unit = {count = 55, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("tar-processing", {order = "000003", prerequisites = {"steel-processing"}, unit = {count = 33, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("energy-1", {order = "000005", prerequisites = {"syngas", "coal-processing-1"}, unit = {count = 90, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("energy-2", {order = "000010", prerequisites = {"coal-processing-2", "advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("energy-3", {order = "000017", prerequisites = {"energy-2", "desulfurization", "mukmoux", "processing-unit"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("methanol-processing-1", {order = "000008", prerequisites = {"logistic-science-pack", "engine"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("methanol-processing-2", {order = "000014", prerequisites = {"chemical-science-pack", "mukmoux"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("cooling-tower-1", {order = "000006", prerequisites = {"energy-1"}, unit = {count = 150, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("cooling-tower-2", {order = "000011", prerequisites = {"cooling-tower-1", "energy-2"}, unit = {count = 400, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("excavation-1", {order = "000012", prerequisites = {"lubricant", "niobium"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("excavation-2", {order = "000014", prerequisites = {"excavation-1", "chemical-science-pack"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("biofilm", {order = "000014", prerequisites = {"chemical-science-pack", "wood-processing"}, unit = {count = 360, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("filtration", {order = "000009", prerequisites = {"separation", "automation-2"}, unit = {count = 140, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("filtration-mk02", {order = "000016", prerequisites = {"sulfur-processing"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("desulfurization", {order = "000015", prerequisites = {"oil-processing"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("crusher", {order = "000008", prerequisites = {"logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("separation", {order = "000004", prerequisites = {"coal-processing-1", "engine"}, unit = {count = 55, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("fluid-separation", {order = "000016", prerequisites = {"sulfur-processing", "mukmoux"}, unit = {count = 1000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("fuel-production", {order = "000017", prerequisites = {"cooling-tower-1", "lubricant", "fluid-separation"}, unit = {count = 1600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) -fix_tech("fine-electronics", {order = "000012", prerequisites = {"fluid-processing-machines-1", "niobium", "kevlar", "plastics"}, unit = {count = 650, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("fluid-processing-machines-1", {order = "000005", prerequisites = {"separation"}, unit = {count = 90, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("ralesia", {order = "000005", prerequisites = {"creosote", "optics"}, unit = {count = 90, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("ulric", {order = "000006", prerequisites = {"ralesia", "automation", "fluid-handling"}, unit = {count = 150, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("wood-processing", {order = "000002", prerequisites = {}, unit = {count = 20, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("wood-processing-2", {order = "000008", prerequisites = {"wood-processing", "logistic-science-pack"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("lab-instrument", {order = "000006", prerequisites = {"energy-1"}, unit = {count = 150, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("niobium", {order = "000011", prerequisites = {"crusher", "organic-solvent"}, unit = {count = 400, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("nexelit", {order = "000010", prerequisites = {"fluid-processing-machines-1", "coal-processing-2"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("chromium", {order = "000008", prerequisites = {"logistic-science-pack", "separation"}, unit = {count = 80, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("organic-solvent", {order = "000010", prerequisites = {"coal-processing-2", "filtration"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("mukmoux", {order = "000010", prerequisites = {"coal-processing-2", "advanced-circuit"}, unit = {count = 225, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("kevlar", {order = "000011", prerequisites = {"organic-solvent"}, unit = {count = 400, ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 1}}, time = 60}}) -fix_tech("creosote", {order = "000004", prerequisites = {"tar-processing"}, unit = {count = 55, ingredients = {{"automation-science-pack", 1}}, time = 30}}) -fix_tech("pyrrhic", {order = "000024", prerequisites = {"space-science-pack"}, unit = {count = 3000, ingredients = {{"automation-science-pack", 20}, {"logistic-science-pack", 10}, {"military-science-pack", 6}, {"chemical-science-pack", 6}, {"production-science-pack", 3}, {"utility-science-pack", 2}, {"space-science-pack", 1}}, time = 1200}}) -fix_tech("artillery-2", {order = "000019", prerequisites = {"artillery", "railway", "processing-unit"}, unit = {count = 4500, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("artillery-shell-range-2", {order = "000020", prerequisites = {"artillery-shell-range-1"}, unit = {count = 7500, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}, {"military-science-pack", 1}}, time = 120}}) -fix_tech("artillery-shell-range-3", {order = "000021", prerequisites = {"artillery-shell-range-2"}, unit = {count = 12000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("artillery-shell-range-4", {order = "000022", prerequisites = {"artillery-shell-range-3"}, unit = {count = 20000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("artillery-shell-range-5", {order = "000023", prerequisites = {"artillery-shell-range-4"}, unit = {count = 33000, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"military-science-pack", 1}, {"chemical-science-pack", 1}}, time = 90}}) -fix_tech("artillery-shell-range-6", {order = "000024", prerequisites = {"artillery-shell-range-5", "production-science-pack"}, unit = {count = 11000, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"military-science-pack", 2}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("artillery-shell-range-7", {order = "000025", prerequisites = {"artillery-shell-range-6"}, unit = {count = 20000, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"military-science-pack", 2}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("artillery-shell-range-8", {order = "000026", prerequisites = {"artillery-shell-range-7"}, unit = {count = 30000, ingredients = {{"automation-science-pack", 6}, {"logistic-science-pack", 3}, {"military-science-pack", 2}, {"chemical-science-pack", 2}, {"production-science-pack", 1}}, time = 300}}) -fix_tech("artillery-shell-range-9", {order = "000027", prerequisites = {"artillery-shell-range-8", "utility-science-pack"}, unit = {count = 11000, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("artillery-shell-range-10", {order = "000028", prerequisites = {"artillery-shell-range-9"}, unit = {count = 17500, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("artillery-shell-range-11", {order = "000029", prerequisites = {"artillery-shell-range-10"}, unit = {count = 30000, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("artillery-shell-range-12", {order = "000030", prerequisites = {"artillery-shell-range-11"}, unit = {count = 50000, ingredients = {{"automation-science-pack", 10}, {"logistic-science-pack", 6}, {"military-science-pack", 3}, {"chemical-science-pack", 3}, {"production-science-pack", 2}, {"utility-science-pack", 1}}, time = 600}}) -fix_tech("diet-beacon", {order = "000015", prerequisites = {"speed-module", "productivity-module", "efficiency-module", "electric-engine"}, unit = {count = 600, ingredients = {{"automation-science-pack", 3}, {"logistic-science-pack", 2}, {"chemical-science-pack", 1}}, time = 120}}) +return [[ +AHsAWwAiAGEAZAB2AGEAbgBjAGUAZAAtAGMAaQByAGMAdQBpAHQAIgBdAD0AewBjAG8AdQBuAHQAPQA1ADUAMAAsAGUAcwBzAGUB +GgBpAGEAbAA9AHQAcgB1AGUALABpAG4AZwByAQkAaQEkAHQAcwEVAHsAIgBsAG8AZwBpAHMAdABpAGMALQBzAQwBJAEIAC0AcABh +AGMAawAiACwAMQB9ACwBOQBhAHUAdABvAG0AYQFAAG8AbgFDAUUBBwBlAUgBSgFMAU4AfQFQAG8AcgBkAGUAcgA9AQIBVABvAHQA +ZQBjAGgALQBbADABdQAwADcAMgBdAXMBAwEFAV4BCgEMAQ4BEAB0AF0BTQBwATIBMgBxARAAcwERASEBFQAiAHAAbABhAT8BQQBz +AU0AIgBmAZIAdAAtAS8BIwByAW8AcgAiAVABQABtAGUAPQAzADABUAEBAXwBBgEIAX8BVgBiAS8BWAFmAZUBFAEWARgBGgGmAacB +IAEiATUBJgEoAZgAbAEjAS4BMAEyAGQBNAEaATcAewE5ATsBPQGTAUIBRAHHAUcBSQFLAU0BTwFRAWwBVQFXAVkBWwHQAUYBXwHT +AWIBTwFlAWcBaQFrAVMBVQFvAXEBcwF2ADAANQA2AXoAWwGrAX4BCwGvAbEBVQByAHMBhAAsAYYBaQBlAYkBPgGMAckAIgGAAQ8B +EQAtAG4AZQB0AHcBZgFMAaIAaQGkAaYBqAAsAaoBBAGsAQkALQHaAWkBvgFIAHIAbwEIASIBLwBnARMBFQEXARkBGwA0AR4BuwEj +ASUBJwEpASsBLQIhAcUBxwE2ATgBOgE8AT4BQAHPAV0B0gFhAdUBUAFSAW0B2gBpAVoBXAHRAd8CPQFjAeMBaAFqAdgBbgFwAXIB +dAF2ADUAOAHwAfIBrQIYAVgCGgEnAhwCHgEhAYsBMAH6AfwBiAGKAgEBjgBmAGkAbAEqAVgCQwBuAZYAYwErAHMAaAFpAm4BWgJv +AgkAZQGhACwBowGlAacBqQECAhUB8wIZAHICGwGGAl0CIAEwAC0AMgIjAbYCJgA9ADEANAF1AioBvQItAcABwgIxATMBNQHJATkB +cQBlAG0BQQJbAd0BXgFgAdQBYwHXAcwCOAFBAkUB3gKjAeECPwJNAkICRAKhAjwCpAHiACwBZgJLAeYBbQHpAlABdgAxADAAOQJV +AoACVwKCAoQCHQIfAl8AZwKJAmEBhwH+AmQBbwICApwCngBjAqACOwJHAqQCfwF9AsMCWQKDAlsChQLHAiECeQJ7AhECfgJWAhcA +bwJoAlwC3wEwAosCJQG4ADIANwIpAl4CkwG/AScClgHEApgByAI1AoUAZAB1AGMB2wKqAqIB4AI+AdcC0QKfAGwDAAKzAq0CpgI3 +Ac4DCALWAwoCQAHZAmsCsQLVAqwCPgJKAeUCTQK7AesBdQAxADgB7wF7AsIC5gLoAt4CXgIhAssB/QH/AYsCzwGOAvsC/QL/ArID +DwGWAgsAbwEKAyUChwIiAg4CEAA2AhIAYQGeAmgAbAFpAHkCJAG3ARsAMgEeAR8C8gIsAvQBwQIwAvcBxgKZAjUDBQLTAwcDMQMW +AqUBywMMAjkDDgNXAdYDEQFWAxMB3AMVAwIDWAAiAp4AbAERAz4AeQNcA2QCtQK3AxkB5wJOAeoCUQAwADEANgAxAlUDPwBsA0EA +cgB5AygCYwIAAywBOQB0AQYBYgAiAHIBAwM+AuECDwJ8AhIBqgN6A3wDawKKAbUC7QNGAvADSQG8A0sAPQKVA04BMQL4AjQBygID +AnIC0gLUAkYDXQKuAqcDDQNWA20CrgNxArADYgOmA6wB1wNnA2kDfQNsAkgDbgHkAkwDcQMbA3QAMQA3ADQDeQFAA3sDQgLKAYUC +zAMqAmUBUgOQA0IDiwIQAn0CEwECA8wDtgJxAGUDewAtA4gBMAFfADEC7ANFAD0C7wLxA5kBQAKUAvUDnQIyA1EDoQNTA6UCqwOy +A1kBzQNbA6sDuAOtAkEDYQO3ArQCrgO0A4QD1ANjA/IDGAO7AroCTwMcA3UBeAPCA0ADxQPVA9cD2QBnA9sDfwLNA4EBjQPLA8MD +kQPOA40C5APTA2sECAMHBAoBXwOTA0QCjQAzAacDmAIrA+MDTAL2A54DUAL5A+kDowMGA/YDEAI2A+8CqQPxA/cB1wOuA/UEMgQu +A/kDagQtAxcCtgO6ArkB6AQBA74AOQF5AXsEFwFDAnIECQEGBAsDxgH7A8gCzgQQA9IEEgQHBEgEGgRKA9sEFALjA9EDPgRSA9QE +VAPYBFYALQAzA90CjQKQApEDSgQkA5sD5QHDBCcCMwKaA6ICnQQsBDcDAwPuAqgCOgOxA/IENAP0AzAD/AQzATkEOQP7BHcD9wP+ +BD8DcgK8Ax0AOQA3BAUDxARdA9YEVQPaBGEEDQPJA4IEUQQGBIwESQSPAooDOgQVBFoERgQZBF8EjwA0BGMBuAIoBGYD4gG+BGkD +TQRrA+cEKQKbBCsDVAQ7A2UDqQPwBHwELgQ1BHsEgQQ4AmgDtQQYBLQEPANvA/8EQANzAXYAMgN1BIoDkQRHBI0EnwRLA8EDxwMp +BE8CAgRbBJUEGAReBBsEYQRYA9ADjwRcBNMEyQTVADUEogEbA0gEIgLzBKgEJgSrA6AErQRwBK8EcgSxA1oEMQS9A2UEtgJsBLAD +XgNmBLoD+gS8BLgEvgQ+AxoEQQTDBMQExgRTBNwEYAA1BJEEzwGOBNEEiwTbBJcEywTXA44ElAUJBMgFCwFfADYE3wEcA0gCkgOa +A5wEqgOfBG4DLgL+BPIE6wT0A+oDVQTvBPQEsgTuBPkE8AR6BSAFJQP4BPYEOgUhAWQEPQK4BPwEwgF1ADIAMwN4BEUE2gURBI4E +SwHvBM0DgAMrBFAFCATHBJ4E3QGWBR4EtwPsAj0EmgA9AzwEFgU8BUcEYAA3BRUANgUXBGcEpwUaApcEKATnAY8CHQL8BR8DFAUp +BSIErgPrAwEEeAR0A6oFLQR5AxIFSwVoBH0E9QNoBPcE8wUyBL8EhAO9BMMANAU6AfEEnQTUBVQFBQQPBNAFfgUCBI8FFAVOBVAE +nAVSBX8EjwA4BRUANwF2BRgEaAVbA08EbQL6BWADLwUsBWQCrgUjBXUDCwQwBHYFTAVxBPEFYwWiBLkFcwUwBS0EgwU1BIYAMAAy +AigFAASWBT4BXwJUBUEEDgVDBYMFiwWFBEsFVQWIBQ4FRQUBBRIALQA5BRUAOAWRBVkD5ASpBVwFlgOhAVQE9gT4BaYEcwVfAzUF +mQWlBXAELgWdBTEFnwR1BZ4DXwOvBd0FcgS7BXUFqwO8BP0FNwA0AyAFfQW6BcICwAW2BJIFRAWEBcIFjgAsACIFzgVzBdAF1wRY +BYkE2QTSBT0EygPbADAFFQA5BccEpgXJBOUFHAI1BfYBEQX4AwkF0gVKBZoF0QNlBdkFbAVqBLMFmwVtA2AFbwYNA2UEfwYMAzIC +SQUzA3AEAAU2Ba4ANASJBTsF/QVTBI8CvgWBBbgFBwXxBbMFwwX6Bb8GMAX/AC0AMQPcA5QD3gK+BgQEIwVaBGoFywPoATkGCgB0 +Bh4DpwHXBg8F1gYbBWUE6QVnBksDqATtBaEF+QUqBW4GEAZTBPQGHQXjBiEEwASFBAIFrwJUBigFEAYqBEsGOAYtA8oFDwVGBYwG +ZAYBBb4FUQYpBmoD2wQdAowBuAY4Bj0E4wWUBGwGQgX1A8MGCwXgBkkDsAYRBkwDpAUkBhcGFQUoBoED8wZVBkoGHwZYBS8EgAaI +BeQGIwWtBa8CwAZhBmkFuwZxBmYEkwXABbIGNgY4BjMGbgZiBnAGNwRiBjoCJgBfAGYBZgBtAHUBkQFrACgAMQTEAXUAKQAgACsA +IAAyAF4ATAAqBjwGAQWSBj8FygWVBnoAcwHTAV8F2gZDBnwGRQZ+BZgFYgaABlcFnAVmBoQGiAXbBWsGhQKvBDYGFAXhBXQFMQaR +BMEGkwEeBbEFCgYxADEAMwaaBfAF6wbhAooF9ALGAGsCCQFDAmgAbwagBYoGbwTJBsIAZQIXBjkEHgEaBqgGqgasAGEGrgPgADAG +swa1BrsAKwAzAF4AKABMBjcAKQa6AXYBTQXIBCUD5gYIBCoGTQbQBs0G0gYWBtEF3gbWBtQGWQbaBlsFeAXmBAMG4waWBcEDVQBw +BvUBCgN4Be4FBgQRBNIFDQLkAdkCqQBiAa8FFQSkBOIFGQZABsAErAZ7Bc8GyQXUBssF4AYTBtQFJwZSBk8GGAXfBsUG2AWpBZsG +2wZdA3QAMgYsAXsHMAFCBzIAbQBiBuQCAgZEBkYDZAOHAh4G6wEqAHkG8AGqBHoCFwOIAugCagBuBsIBZgOEAdsFFQO/A+EGPgYG +BxAFXQRuBaQGzAdFBoYHRAaMBXYE+wXlBiQG4gciAfEHYwEKB2UDBwdnB2kBngNhB1cBjgeEAHcAYQdgBU4ExAFQB3UG+AEbAboH +DgIuASwFGwdzAjUHdQZaBXcFrAQCA3UFBAF7BSsBWgeKATkD1gFwASoBWgGUBFgHkQRaB6UBWwZyA5UD3wNHBr0CLQEqB5kGQQc6 +B0MF4AedBx0Hnwd9Ba0AMAKQAlUHsQRMAmIFtwZnB70EcgVOBNgG1QL/BqUHlAPfA5cHtwEoB7kHcgXMATkGfwdABs8F4AfMBtcH +vwWqBx4HoAO+ADcGlQeBBooBWwbjByoFggMtBsoGGgYfACIAYgasAGsBmwdoAWkBnwdhB9AGVgYNAbUHlwfYB+QHwgehBa4Hxgfq +BC0HpwAiAT8AZQBhAG0BSABvAHcCcwUyA64AbwGwA2gAcwBtB9MCKAfWBOQH2QZ6B+IHSwgCBpIHoQAyBEQH6QFWCBUEuggYCAkB +JAE9AggHrgISAGIBWAGfA0MGcwEbB24HNgRoCAEHuwVeB0EHGAQvBdwHSAggBpAIIgbcBAIGsAfoCDIAdAg0CAkAcwasAGYAdQBy +AukDJgLrB84FDghKCDQALQQOAHABpAEaBRUGsQg5Br4GBwebBxIGgwffBlEHvgfHB8AHfAgjA74ANQeACFgDxQhbCF0BgwftBi4B +OQhxA30BlgBzAG8BkQhSAUkCCAMHCHMBNQcuA9EIeQNrAG0AawAyCFoB/whcCIQGpgLuBVgGBQcPB5oH2gRvCGYHSAfgBtQIQwbN +B0wFeQMdBZAB8AiHAhgIigiMARAIjgEaCAkIowiDCF4F9ABwCBABaQAtAz4AbQFmAZYBOwB3AC0BaAdoBn0BPwErAv4IUQJ4CFYC +fgBiA9YBmgIPBqsAbgZ9CKwBEgiQCDcGPAgcBngE5gRuCJoIPwicBk8IngcgAr8DwQFzCMQCaQGbAG0IyAjKCI0IdAhNCH0DPgFg +CIEIpgBpCKgBEgjCACwBsABvAmcAbAgZCDYCjgRlCNAHOAZ5BzoIPgcVB3gIaQgHCGsFNAgDA74DvwiiAkMI8gBtCAkI/AYbACID +NAM2AsYIVAM5AnoDjARZAQEAYgOIAGsCIQAtBqkBDgRXCM0CjgfVB5cI0QcRBOgImAbXCNQI/Qf8BosDpwjYB34AMwejAFsJFwBh +CRkCiAkcAUcHKQRNBM4H7gE5B4wHjgJuB94HzQkTA88IVwkYCRoJNgQcCF8Gdgc3Br8I+gg9CUAJJwhoCEIIagfjB8EIbQK9Ae4I +oglFCTUBZgFHAXkIdgZnCTIJNALJCUcGNwiFCRYJWgljCVwBXwfSCPUG/wj4CUwI0gWXBz4H8QZHCSUEcQlQBaAI/wYZB/0Hegkt +Ba0DHgAwCVkJMwlGCWoEkAlfBJMH3ATrB/MJaAkbCYUEmQlCAaUF+wmLCYMJWwkdAC0EoQkfBCAEpQdwCJQIPAUdB/AJfAl1CJcJ +dwdCCVEH4QlTCCEJVQhGBEIJMAlhCYQJlgTMCTkFQglgCYwJZARiBm0Ihgm1CYUE3gkfBGUIYQdxCJUGegmJBtcJCwd6BxYGhwkp +CNYJfQhFB00EwwF1CYIJYgmNCZYFBAmHBFAJrgmVAUcEoQm4CWcJlAlpCZYFFAm9CJIJnAgdCcEHOgdZBz0FYQl0A+0JowTqCXgI +QQmnCQAG1wccCVQIbAmrBMMAMQhJCboJ3wiqCfoBRwTeBfQJ5wlBAuIJkgnXCd4BRwVVCR8E4QlvCGMIlgoBBtcJwwbUCcUJogko +B3cJKgd2CcYEfgaOB1oD/QnMCJ8FrgGnCdAJrwoHCfwJ3QnSAUcFhwmQBU8IVwf1B/cBnQf6CR8CjwmbBOMIOwc5BV4KFAoYChYH +3QcTB54J9QnNAx0HxAiiCiwBnAf5AWkJCglPBPkI7gEBAtMAcgBnAG8ALQGRAG4BxgKIAUkBfwBhAdMGCwTfBvoAcgarBq0AIgAo +BOEHAQa2BwYHCAAxBwoIYAcNCJMJ5AmeBgkGxwobBXEKEAg/ChIJ6wo3CaIJygmiCfMJqQo9Ch4IJQZgAFsKSwpNCk8BBgpSAskK +VAELClYBSgYLCAkG6gbsAYsBOwf7CnICPQowCM8IAAIvCeUKNgmmCJsJqAhECaoKPgF1ADkFfAqQAUsICQJnAggIWgNBAv4CHQjJ +AGMBlQX0AuUBfwENAgUBEgX0AggAeAPWAREIhQFxAh0CngB1CPQHtAglADUIHAo0CU0I0wqYCNUKmgidCh0I2QbeAXMKuQFWAGkK +vAgJCnQHWwEjAUkDiAdsCkkCAwqwAYICBwIJAgsAcgFMCR8KvwoLCB4HvArFCckKxwjXCskGJAfEBekCBArbAggCCgIMCtEK5gYN +CtgAYwNoAGYAZghaAHgBkABvAYsAdgEhCUkKMglLCgwGegqhBC4K0gVpCjkJAQYiCfYDHQAzB+gK9wBpCvkK+wr9Cv8BIQgsCvwB +OwsXCqwHSQO2CY8C4gfPARcCWwNoAYkAZQGYBssFFQmaCb8JnQo1CZ8JcwmhCesLBwXSCwkFowroCcsKnAoeCfgK7QBvCyQAaQsm +CygB2wgJCq4ALQLnAwcDNwLICo8LPQtHCRADOAllCuEAMgrBCpUKawOhCnYDrAl+B6EGsAHwCyMLTAKGAsgGNwtDCzcDFgeQBQ4L +XAhTC04HswPeBKQLUge6Cy4CNQs1BLULYgtXCuoHwwA1CxELSwtnC18JXgmyB8oEkwjyAmoHbAX0Cs0KuwBtCWYCAwt4C0gJGgls +B7QKMQssCmoLbghlCaQIPwtwBdILVgocCzkHIAY4CTALZguJAogH7At8Be8C0ApHBhEDZgB1AGsItAB1AHgDMwBvAzULeQLgCO4B +FwEHATIBbwfTCuIKlAttCsMLbwr0CjgLlgSCC3QHoQA0B4ALsQJ2AW8K8wl5CYoK1AM+A2ELhguxCL0F1QFbAh0HMgI5AbQLtQni +BncI+QlxC5EJ7QmlC8cJ8Al7CSsLcwuYB34ANgs8B2gHuQc/C9EBbgGUCooIFQvqCqsLzAusA2gCiAFVCBEIUgb3CPUGdQrjCpYH +dAtyC5cKegjZBTkLWwvxCRoL9AixCTgHyQuhAY4BJAFpAGcDawPcC2QCfgEXCH0MBAiwCFILaQKNBgMLjgkjCGQI/glSCfEKeQkC +CVYBdgA4C3cMEwvzDBUHyAROCTsAIgwLCkwDkgJ0DCYCyQwFC/YKuAEyCv4CTggaCsALtwrkBV4LvQKtC1gDdAWuC5sMNgh8C8UJ +1QICA/oLrghVCikHrwJvAHUD1QFqCW0Htgw7C/sLugvdCpkMHwqbC/8K6wA0Cn0MTgxQC8YJ7wpICikD0AFoAGYBJAK4CPULawxU +C1QMHQveB0cJ8goaCjwMIQsOAXUANgeADGYMaApFDEcBjgp4BdEI7gFoCL0AbwB5AeUI9QsrC2wMPAsvCekLMQsKCzME7AxXCsYM +WQkpDH4KyAviCX8AOQjbAFsMgQerDIQAcggJBlkEoQX0AcYIvQFKAfcG8AyBCE8IUQBpAHoDYQfTC40MiAxVC9oGTgo4C5QGVAvf +ChcJLAu/CQQKfQyoAGwIUAKDDKwLQgx8CXYL2wx/DGQFDgNQAZoIxAFKAVoHbQkhCmkMGwiWDI4FJgu7CnUL/Qu+DJYIRwNHAfAM +yQAtDMsLsQgsCqcBKgKpCC0BLwJ4BfQLJwJnAjsIiAXUA0EIewcmAhcItAL8DO4K2AyjAXEDPgRLDHkH+AjqCOwIXwvWCwQMiQNS +C6MJKQy1BPQMPgXSDJQK6QzZA74FVwzcAT4M9wpMAV8M+gEjDPwI5AzDAToBkgixAHQIUQuzBUkMKAizCLUF9AZZBGIF9Ah8CH4I +6APWDRUIhAyAAjgDiAL+AWYMrgj3DGwLkAzEDLMKEwzVCesNBwYcDHILDAZcCzoLWgFzDKMCag0vDJ4NFwyOACIM+gJLC4YM6Qeq +AC0HhgKeAiAMzQrhDM8J4wzRCcIJoAvgDI0NAwoVDQUGiQy3DHMLDQqdAx4HgA1MAv4NTgPZCBgBPgGLB6YNFwpwBfkJ2wwsCvkB +QQHRDOwM8wJ4CR8MGQywDG0IQAbTDJENXw09Bx8K6wA4Cn0M6Q1zAUYNdQasAGUICQYPAHYGfQzyDYkNSw1yDOsCGAztCUgK4QlK +CDoLUw00CewNNgpzDTgLCg06A7kMdA1iBiYB8A2FDZMNjwNBDCkJOgh3BdMC6gLJARkKtwzoDZINdA2UDXYNkQzqDbUNqQlrCF8N +VAvXCXAJJAXTDIsNWQVxDNMGUAyQCucMkg0KDFsJfwwkDaYNtA2HDbYNiQmGC6AHKw3CC88EOw1wB6kKqAzkAggMLgiyAGMBDwpc +AbIB+AsCC44KwgvZDTUHFA1cDZ8LNg3KCzgNzAhHADUIJg3bDOMBQgwtDA0N4A3iBvwB9wH5DRcIhwGWDfUCgw33Dd4N+Q1CAoMH +9AL/DA8MxwJ+DgIN3QwMA2sOBwBpDgkE8gv3B7QNeQ0zC7kDoQ1dB0YHGgxaDaMKHgAwADgJMA4ODgQOEAi5DS0OEwXOAkQMBwwq +Da0IyQgpCrwNSwziDgMIWg4FDhEOKQ4UAkQMFwZ0DTIM0AvYDcENxgnHB3kM1g3vDLkNCwK9DiINpg40Dg8N3w4SDjoHsgpGCjsJ +ig4lDjYOJw5PDisBWw4LCyEFDg5VDOUILwowDj4J4w3oDkENWwy0De0LcQ5GC+EN8QkECYEBcw5eATAM5g5SCSYFKQE6AHUJFwKf +CF4K2A5VAp4IyQKIAGQCgwN7CF8LUQkiDkAMHAsLCfQOIAjZCkAObw5MAUIOfQkaDoADQAthDmoFTQxMAhIOAgesCqsLtQ6ECmkO +ZA6HDaEHew6KCusAMA1kDjQOmg3+DdUMKw0HDBAD0Q34DA4Fjw3nDZoOGgcZCeoL/g6jB8MAMg2EDjcLYA0XAHMAeQEwAZICdALd +C00LXw5bCRQHrwEBDq8CiQWPB28KMw6zDekNfAcXDckNfw6JDWEOIQA4DfQOvAt7DAgN1gtECu4NsguHDsQLXgkaBugDZgIJAGgB +Bgh9DEoCyQ7HCUMODQ68C4sD3ghgDXoNmw5CDG4MWA7VDCAO1wuZDF0Npg7xDYsOxQkaDbEKsg1IASEMqQzAC8sNIgumC6gLqgzo +DtsNSw68AnEBNABsAQoIywdtCpMOPw3ADocOHA61DIwFcQ0JDfAOuAehBEMO/w4nDxMD1g8WCOMBNQjlDScIgA0pDxcNIg08BL0O +ew8SAGgPFAEKCIkIiw8XCuEM/wWTDoYM0g5mDTcNyAoVDqEDsw8zDvsNPguZDHcPJg3fDygPFQikDzsPKwipDW0NHwpbDSECNgi4 +CLoDKwQYC+cNGwEyAZYNIw4BDzYPOA0qDnoODAEgDnECCAfTB5YOng7QDcEOoQxAAewDHg7/CC4Nig6+AW8NKQudCRIC4g7JDCwA +eALTAQUOCg8YCwMPPw8bCJYPHQ6ID0kNgQfDADkF6QBlD4AAYQ+CDhUK0Q53DgMBBg8FDjABsA4yDnsPkQ+TDjsHbQ5iDb8LBQj7 +D0INng9EC7wM1ww/DLoCvQT/Dm8PngP1DtwOLgZnD5APgQP1A9wLgg+mDpYOXA4NAHgK/gbrA0EBVQFbDzwLtQ2YCGINAQyyDesO +Zw+oDkUO+g4fDvwHfgA0DJkPkA+/B6kPwg9mCHUOqg2tD3sALQ8EDgEOjg42D3YIewjmCH8BBg8wD1MI7Q9oDsoLGgr+AGkLAAPY +B10CCQh6Dz0PhQ/HDLEN6ghnD8wNOQ+qDQgPSA/PD0oL4w30D+wLFw/wAUsP8gN+DRcKiwdfD2EMcgm3D2gPkAsWD+4EEAuMDb4D +mg6fD0EOUwnuDX0O1AxwD4sH5Q+tD48QAxASDqkO3QwrCE4MvghRDuwPYQ8MARgLqgrYAZgBPwotCkQBoAmZDrILuA7RD3EPrAK9 +BekQMAjGB/gBngx7D9oPtA6nCqoBlQ6tC38K1gJsD2wPbQ5jD28PHA5oC5UP/AYgDkgCUggmEEgHiQ0XB50O5gvJEEkMzRAvAmgL +gATyCIkFrgzODs4QFhBOEBgOdAuTEFAMthAdD/8PjAhHCiABcxBXAv8QYw+yDawGZxAnDL8QKhBfCqUOmRBFBgIP9Qe4EGgGeg+J +EDkQVAF1Ax8B8AqkAV8QfwvrDRcG6wB2CH4Blg+aCs8LhQiuAZEBzgsdAGYAbAEQCQ8O5AKIAVcBcQzmAHMJZRBfDVEL0AgMDUQP +2A29EGYNmRA3DcENbgoVDvcO0gnID0UQUgaNBagGjwyVDmwCvQ4jEIsNagTyATIMpQFmD9gPAQswDcQDhgivC/UIsg9XAaAF9Ai3 +CLkBJA9cAUMPXgjAEAwQugpuAg0KKQWJEJwIDQ7oAh0L9QfTAR0MGg9AEIUQbA0GELgFLhDZDWAQAAfDC+QQiwGRAaQAdABoEOEQ +QRAlDa0LnA8CAogO5g8hC2MPaBDeCOAAYQBiA0EByQe0DGsPGg+kCpcP+g2gEOoPcgF2ADYMmREBAVcRBAsYDRcLRhB8D+oBlxCd +AGkBCg7pClEL8gIiEDUO9Q60D4oQbxAfAr0H6BCcEJ4ALREfAGQRIQhND3kLXQ2vCDACfhErER0O7AJYEKMCCBClDhYD3gWQESQQ +OBEOEDoFNwYnAFsRNxCfDa8ROg83ETwOvRBCBJMQXAvLDq0BARFIAUMAZQrVC8sKMBAVD4YRCgRuELQQhhFDEIgG4gV8EVURUQzC +EU8EUBB6ECkPexArC6cQLQuGEVUHjQpNAm0RWhCuD/YNew9GDvgRJwkDAr0AMxESERwBChFyDWwRaAICCT0Hjw6XETYIfQi3CLEL +6QGaA5ULTxDjEXYJwA17EWAOlQ8gD/4QvA8jDEEANxFkEYoMKBGNAfQCJhFOEPgGZw1JCBIRGgapA3sRnwvtEY4DRQ7MCR8RWxF3 +DZsRlQ/ODJMRmA3LEZoB7AA3EDwRnhDMEaARjxB3CbMLfhG9EYwRrBGhARoQphGoEcQIUhG/Ea4O8gKNDK8OhQ+HCwYPugVxEbQQ +bhG2EOwNgBEoA3UOpRCLEcsP8AvSEccBmgufEaQEkw1HEakRixHMEcYRwBFwEeARzRGiCZgMORCCCy0RJQoOBtQQsgo4EV8Q6A1e +EdgKFRD+DmsRuQU3DkoQcxHvEewRrgmxEeYEUBH3C6QR6RGrEeIRjxAOCgMFDhIOEb4SBxGiCbwHlApaDeMGrhDkBwAGtAAgBrsA +KgcHCZcAKQpoDVUQ5gc6BsIBSgbEBtcSDAkpEfkJohH7EQwN7hG1Ef8Rtw8iD9AGkwAzEUYSFRHFEhARrgnUEYQBjhIrAUcJihI+ +EesSQBHxB/sIUA96DVgRdA/FEfQLjxElEjMMYg1+Ef4SORDuDfIREgEsC10NwwBuCqMRgBFWEVgLgQ52DngC0w9nD7wALABnAlkP +bBDlEdMHOhCHEL0J9wHwEmwMRhJDATkBPwFaAV8HjQ6CDSURMhEZD30FDgBnARkNTg0cAgkOgwv6EXgRYRJzCj8SdRKFD18Lsw6U +EjYDMhFTACICcg+SA2sNIBA0DK4DPBFBD3ASjBICAXUAMwXpEpgAdhKaEM4MnwoaETUD0Q83AGQIugIYAS8JRhJiA3EBGQE7AdQL +UBKKDZsSchKiA3UMmRKuErAOkAk1ErQBbRK2B10SkxJYEP8SggJ+CkMQQAhSAtMKVwbIBzIAbgxPEZAL+BGxEZMRsxH8Dh0Otg3F +EdUPqxFiBTgB8BLNAZ8KhhLRA2sS0xLVDi0QeASTB/QAbAf2EuQRpxJqAQES8RLPCocBDBLSAVoS1Q48A0YPxhLZESUR1w4eCSkN +xhEPA3UAMwp9EvUS5gqIEvkS1BClEcELfQRQEwkS0BMLEugS+hE9C4YTEhL3Bn0S6RClEc8IkRJSDVYPpRAZC9wSVhAcEwIRuBI6 +DfIH6BMZEucM3hMWDdQSCgICEywTFBMuEw0OzArYEzMS+BMVEzYR8gltEtgR9Q7REjELMhLfCzQS2w8eEMkE+hKiA78RRhM5ExsT +LxIJD7MJiBJPBLAAIhNNEwwS1RISCRQJkhNWEzsS1RIZDIYEIRK6ESUTQg1aEyMQaxI0DmkSlA5HEo0J+AeAE1wTNRNeCAkTbxMc +CZcH+xNzEy8J4AgaEv4TQBCxE1MHSBJVEBsQtxGWEuATbAA5EwgQPxLlExMTOhNwEKUFQBJ4E1UTiAixE4oTThM2BN4NcBN3EzYK +CBHzEm8RXQpsBzwHSBNkEt4TZg0EE0YRJhHZBeIR2xF8EgMTKxOREvYTLRN0BIkNFxIvCQwTmBLVCigSEwFQEJEIfgfTEz8HmA/I +EXoTJhLdE4QSvQLwAfATugM+CAkBZhJsCqoBQwh9CwAIrQ7nEPQO6hEzCRERyRLzACIAawBvAQUBMgB4DjYOAwBoCHQLeRCtEDYT +vw3XBz8TfxNEDI8TJROCE2oJ6xIADrcTKQRCDm4AWxPZE9sPkBPeAUET4AE1C3kQxxJfE1QQCgkbEl0H+wGRAGIKLQe5CHQPhBKf +DqASoRPxAewAMwgmFAQUBgErDRYTjw7LDu4BpQevEPIAcA6cFAoIlhK8FA0B7AfoFBoSyBMnEpURiAPRClAPOQzmDeYTYg7RE4AO +0xPsEskT7hI4E2sTSgfFAXMUKRKxAggLGRARCwALHRPvAdQI7hQpCPIBKAj1EUAR0hOdC1UUDBJaDEEAMgXpFEMOkw6+EVcLygrX +FCcQmQyFCr4TexJTFC4T6QzUE2gQURODE0kUIBK+FCINGQ1FE48OAArYFFcIUgJxC6wBQAKIBvQG9g+hEyASKQlOE6MN7BRfEG0U +JQp3FDQSARRjAr4UEBRmBEcUbgkaFHEHKA5zC5IGUwseENoLhhRrFIML6hRwDPABChL8CSARkhN8DocULxC2D6kUYQ07EdoO1hRM +D60UgQGdFI8UbwLJFIYNqxHCBFAUjhRtFJAUphSSE9YJFAfPFKsAaBSEFJEHJwTWDZcUdBJwFHYQahOkFHkQ6RScELkTqBSfEHAD +vhI8AfAUsxS1FK4UtxHlE1EUqhSCFKwUpQFDFK8LIBSxBQ4UyRStFNMUtxM9Cr4PPhGyElQUXQ3HE+sUmxPtCwoUQBPDFH8CUxTI +FNAUtBTZFKcTUBLsFM8UoxTRFIUUrxNZDu8UKBTsFMoU2gIXE18RBxTeEv8O0ROzCjgToQXYFOEOQwl6FDIU5hR9E/AUoBIDEUYU +2BTSFKcSQhMxAY4VAwNXDRgU8xTtFRIUrwnaENwU1xT6FO4UrxN5CPUKChRIE+UVFwnrFQUF0hSZDkQP+xTBEOsUwxAeE6oFrgWv +FOsVGhT7FKcTjhUVAcsVIRUcFLcTlhUfAn4VERT1FLcTmhUlFQAUlwoNCm0J6A3YE+gUdw/LFOMPzRUKEZcUnhUzDCIKHwyZFUQU +tgIXE7ETjxVbFMsCFxO3E1oVIBSjEpESiBS5E5wT5RUtFQkUexQzFVYRexVYADEKywBbFI4VZw/ZFTwH8wgzA80PMhVwDW8RGhSO +CBEKVgFaEKUAZAgNAGEGZBRzFWoP9w2cD8oPQxVSFS8U5RVVFTIVcQx1BjwVNwixFYIIrwdoCLkVhwZkFIgMxRSKFOcUjRSCFZoV +hBWdAVcESxSUCDgULQ5lFVAVjxOBFOQVVAWnFZQRmRR/B08VmAhSFaYVnBWGFakEHArRFaUIDBWbFYUVngRXFGoVwRWDFbwVxRS4 +ElEViw17FWwMHhWSFbQG2RTEEdwG4hRPFcgVwxWoFYgJaxXAFKMVuxXEFb4TNxWAFdkVpxW9FdwTdQ/0Fc4O9hUHE8AUMRVuFQsV +fhMoFQ4HohUQFeUVyhXiFPAUqQICFYEVwhXmFcsU9wSbAQEV/RXJFeEV6BT+C2oVSRRbDcEVKQsKFSsGEhXtELUVLhENFTAPRxXy +ElkUxQnOCTAWBBXaFecESxUUFM4HWBVMCYoWHBX/FfkUAxX3FgYFPwUVFSYRCRUoFiMKDxN+CcQWERMBE8IP/RYXFDUUYwglB4AW +JRX4FegVOxYhAY4WPRYqAV8VQRO4FPkV3xX+Fj4FvApZCRwSHApeEh4KYQa3EiQANwcKBrsSJw+jE+USRRItBtQWDQpvFjIKERY0 +E6UReRSLEO0WGQU3EqQVuQAtFeAV2wW8CE0GwxNUFkMWbQUTFAMIaBGNB60V6hWtFJgWYhS/Ef0V8AzYE2wANhUQFnYRrBCPE48W +dwvvFGoQUAowEp4OGRFCFTATBQ6lFoMTaAgJBqwOAwi2EQMUEgq8CIQKrQexEqwWAwlRAHkICwuFCeEUuhRJBsYTnxYxEMgMuBND +Fa8PpxWQFhQV0hY3FbUV8xZnBa4CjxTIFqEWoxaVFjAOdQe9FogQRhVCACwHQxEGDvMOnRIoFLsL/BaQEUQQiRa5BaAQJBZBE0cW +rA+7DsgU1wZREw4PhBXrEwAWYxRLFrYCvxYbFtcUqBMQFfwPlg55D5kCQw+bEJcWEhbBE9cWxBXMEz4UlhYLDocWDwaCFIkUeBaw +EjUVsxRiFfQDHgV8Fu4UzRTxAgIWDxbrFeMWRxagD1oQ0wi8ENYPYA5hElIQFxHUFq4LChY1Dx8U6Bb8ADAUTwgQENIIuwbIC84I +vwEyFaANnQJIAtgCFg85AtsCxRCgD3wU1gFQEJ0SZw+YB9MOGA9uELAQTxZ9EtwXFBb7Ft4GAxTIFuUSaBV4FtELpRFuC6kLhhDz +ER8O6w/cET4CjQu2FzET5RcTE0gQUxKNB8QRRhdDE9MRORLrFfsWQhBsERsRLBEuESEPYw/iCtgXUgBuF0UQ+wLJFasPog0AFYwV +0AxvFn8XFRa2BjgF6RdgF2IXKBbiDAkP+AmKBqsXQBAuD2gGHQyuAr4UHQgfFt0R3A6lE/MGHRJhESwP3BCiEUwBIRSwAhAPfgZZ +FJQXSRBNFzIPiBbcFssQiAfEBXwXjgxhFbEVGAYdF0IQDRWKF34TIhS9FvcXmxWRFvoUnRa0FhgV1gHtAfANIxcgFY4HWxWjF18M +chTcDvMTvRcPBzoW9AbOFxER1heUFrIXqBXUFVcVlgA3Cn0MoBP9FU4E7w9/FD0LARV9BeIWAQoqAn4VowmZEEwOzxeSEOcXNBbS +FmYXgQA1DJkU5xKqEOwQWw/CEnwBJwBsF54OfgqECaANjQbIF0cBuBO9EyERCxb4E2kXpw2iFGMOIheYErIKUxfpBn0XVRbjBQcD +IgqvAYEKtxezF+cCXAyLF+oMLxcNFtoUXBe8CwgXvhfzDqIUfxa4AXMSwhfoCzAYBxdzDdYNRxgUGAUFmRgXFBcJFQT1GAQNjAZ9 +Ex4CJxYKF+8EbhZeBC4XugMEFnwX8RRgF78UwhfBFZUKnQdPF8UX+BgVGAYYJBa8FqkOdRgbGCMGyBTVAzsFDhg/F/oGyBe1BqcW +Tgb8Eh0DSBZSA0gSIwBMACAALQAgADMSJhZ6CJYWWwXgGCoGDhZgCnEYLhelFrEYDxYWF6kWORX0BTgYNxgiGEYDaxX6F/0SeRZw +F3YYOBgcBR8YFxfPCZINqQjnEpsOzRPkFYwXTBbTFoATxBdRDO0YeBKpEFkX/wELCtoO4RKmEqgItAGgCO4NuxbFAo0X7hR1CsQX +2BOmFrUXgRfEF60NlRbQFwEX/gLZAhcO4A/pEmoXdw8NE7wW8Re4F/AYYBb5F2sXNxeBADgHgBikEC0LQxiGGKEOwxPUC2gIhQq0 +CrYBGxVIGHsRlBgOGKwXThK9FoIB8Bi6BXMJCguIF2MOzAX0EVUXhwFKF4kTFwrYCMkAZwBoAZoNjQ1rD8MP6BbZGFcX1xgvFHoW +NhjCF/UAOQeAGNMY1QAtGNcE8gjLDy0I5w8vCIIY2gjuEJUKvBimGL4S2hiVFB8V9AF3DJkY8QkJERcKTAEGBDETzhacAgMCcAJy +GI0RGhLUCvcIDAhSEk0EGhFXF2MT4xjcF7kYXRMDGF8UMBWyGMEX9Bb8Cp8YxQL9A0EI5xkMA9gZDhcoF8cT5w80FsIBARkIGR4I +fwwVFCwWjhWuF6MVURiqF/IZGBgQFvwBHRkcGQkY7AwVFpUD2RCWEoEXKgPRERgSdhkFAuALUAw6F0oYfBjAGOAZGRbeBbABcxlC +AVgZRAJgDRcMtRdZETgXWwuvERoRGBFsF9MY9BElFmQNXRaRGTcZTwMkF2MTyQLoGUMCGgxLAuIB1gEBE8oY/wHPGQEIXgoJGKcQ +hArlGPYXgBU0FxcKfRlvE8wNJhPPFz0YnQKbGMkXchhCFgIBjwFpCHwAbgskFIINExCNGNoWeRUnF2gZFRSaFVMZNBhjGDMVthb8 +EREB8AcmAfgBWhmMFKMZjhDGGVQUghV3DR4QzBh5ENAXGQ9bFwoIvg9fDOcWZQ0kCAoP5A0oGO4IpxQICtgZnhmKAlsL6QivAZ4Q +rA1TFvEYKA0CGAwTRRl4F5UTbBPFAXMZuxmgBBoL7Rm/AZoY6g1GFYQPXhDCFoUL7w0lGbUY7RCsGboZiRnOEeEAbxnRD1EZwROb +GREFXhhbA2UYLBd1EBoZFhmWGUsVMRmZGJcVNAdPEUYZzRmLGc8HMhnjDzoZpBOPGekZiBmfGfgZ4RnjDxcNcABwAGgWogQsAoUA +ageqAmgNEhXLF+wINxaNFi4VjBj3Ft4RfhmdGggBiwSvGgsaDQ2qFh4EDA0XF50SlhoHGgkaHAIdGgwFHxofFcsXjwxTGhQYvxnI +GDEZNRoXCn0aJRobDuMaKQPDGg8V4hMPF3QWEhNUGjYaChooGh4aOxXoGB8HzxpBGicAbxo5Gg4WcxbvFP8YCg3BGH0F4BWjGOEY ++AM8GhkaJho4GkQaThcAF1YKGRY4B1saSRpbGioaRRWqC4YaYwtdGkwaKxYnGXQaURczGN4UwBoyGZgHShg0DiEANgfoGmkCXBpr +GmYBXxhsGj4aehodGmUaXRpoGhoaQhpLGlwaIAAtFggR0BdmEVwVaxmUFhMYqxnwGnQQuxnzFVgCvxn2GoYaShp8Gk4WIBmCFY0a +QBqbGmQaOhpOFR4T1xqBGkMagxqKFSQaUBpvFUsYPQg/GesaoQiZGUoXNhfAGnUZmha2BMQIJhqpGogaqxXLFkAaoBn/Gr4anRqK +FkYVZAJ+GsUaiRXLFUcDlRIbGEsWUBhNEiAWUwcIFlUHCwF1FlgXZw17GFkHSBnpBPQasxdpDvkYYhpgGGQUfhhmCS8aWRo3Gmoa +zBXiFV4VeRrdF8kayxrAFeIVYxhDAVABkAGZAZQR8xehGKkZ7hemGTQWkQ0NGcwQmQvTGWcYtwtJGboPVhiMGS0ZSBXPGpEVbRnw +EwUCjweAEMsIsRKbEMcRSg/eDOgP4A5fGbEYdwhSGHkbChmpEM4PUQc0GCcYkxOeBfcVTRklFmEZxhPqGTIYMBrkFmUTqRVYB08F +fBsWGyEbJQ86GDwbKwoCGskD0Q/cD94RdRleGAsZMBWwGv8YYRsBEUQGsBn2GMoPBAhNDwgZPxT4AQEVKxmRGw4V7BsvFF4acRZ+ +GxIbTBGcGZ0ZEwMJCAkZKRkKCA8L9Q9jDicZsw2nDboNlRjLCAoUrw27G28QdBBiAGsQZBscB6oONRseGmgYag3SDO4RsBl1F9YZ +dxtcFzUXTRlMGK4T8xhADYgDQRizGJ8YAAqxG3wYFg2OG24XjxRaGKgRXhsQFdEYDxsTBegbYRuSBsgbcho9DdYbQgjJDwUbiht+ +CMERGhunG3IYJQfUG4ET5RrhG5kXahteEWINgxueGDoboBtuGl4YbRPmGOAbvQ/uG5MNdhcFG0AAcAB5AHIAcg83AGMQ4xRaGcQD +oRrxFl0WvRqyG2IR+huyGuMZlxrlGfIXqhn0Au8ZnRvGG8gBQQvsEAYBmgqNBu8JuAOIFYYMUQq+FscX1RPlGhYXgRcXAfAb5xPI +EFkP/A6tEYYNMRamF0sathuGGjMV1gn4G/EAYQJoB40QCBVfFuEZhgRZA4gRBQEmE7wbRRKgGckSvQAyB+gcCQEhASYJCgxEAk4W +mABtAHAWnwOHCycM5gEKERMRAxEFEtYHtBiSFskMVhuEF9kHSBpVG4cZegA3B4ABMhCMHCAQ8hEUHCMX/Bo+EQEQ4BksCtgcMRwf +CRscNBwiF4oUlBcwFsgWpxo/G5ob1xs0FdUZegA4DJkcPQIIHDMIDRw1HEIKihweHFAcPxxSHEEY0REaHE8CFxwhERUTHRegGZIb +DxtaFOIbMRjfGrcYMhq5GpcMdQK/HBIcVhxeHEAcYBMwFz4NRxxdHFERAhxzHAcHzxx3HFgceRwjGEgEoxsoHCcFzRvREjAb0xIy +G9USVxxJHCwb/Rn0DowAWxx9HF8cgBs9CLwXyRySHHIcIxh1BQ4cmBxZHHMajAG4Fi0cRRYvGrEchxarCjobRxavHGcachszHI0T +BQglCCYcnRx/F4oanxpfHB0cMhx+HFMQpRqnG0ABARyyHLoALRqtA94SHhnnGCkchgoVG7EcZRUIHEgalBvYHGsb2hs2BCAb8Rxw +HHgcwBrCHLYcvxxaGosH+xzZHHMazgNFGtAKXQAoBVcGshrUCmMALRrXFlccxQI1G88IPxrfAq4cyRypFxIb+xh+FdMczxhlGrsL +wRzTHLgckxeKGu8XPhzdHCMFFA0lGG8ZJhcGHB0BSQENAxYSuRxjErsZeRqYF6wBcwEyHQkP5QqiG/QUYRKWATIBIwM+AeoUpxoR +AbkarxjdHKsbXRxpHI4amAA1BXwdGhkKHR0Urxw3Dt4Hxxx7HJwBIR0rAXIUpxSUEQgcoxlJGjEbmxbMADURRh0qHRwdNRTUHFUd +GwEOHUIUtxpHHTIdRR0sFMwcYhovG1kc8he9HTsbSxFiAXcc0x1LHUcCFxu7Gj4cdh0zHUEU/BSTC4YdQB1GHWAV6QyuHCYcRhri +HIsbtBNsFTYdEh1eHWQU7x1EHTQdZRfPHHwdcB1MFP0ZEB0NE2MciBatHVEYDR1THWwTSg7ZHVcddBUTGSQbvh1jHXkBChy8GvcD +0R2LHVkBChzCBGQcgxxGHO8GSB1+E2UdgBnHHCkYlgo4HK4RRAdPHDAdeB2SHMEclRccHJcdpR1lGsgdjxbAFc0c6w/JD/kdnhvu +FTQVcx0pGdgYnBy2DgAbeA3cDgQXXhxcD/EBmhkMEGUcDRZ7HMoV7hkXHM0cShfCDWIOuhvxHcIUAQPWG1EQKAh/GQ8XzRvZEsoZ +QBy+HdEb5BsnFw4ZdhnoHMcVBB2aE6IdnBswG0kakx0lGpUUjBpWGrsNQByRHd0G7h2oHe0bvxgXG6wM7xS3HfgdvQ32DlYN3wFK +DfsBkQ39D+MNJw6vAZYb8hkGFkcQCgN9HbAdfBtGFvYZMR3pGTMdyx2hEWIANByxHcIDfRQ8CxsQIwGWHDkQ9BD2HgkZQBFmEEoM +ahlHF5Eb7R0PHG0S4gFzHiQRgxV5G3sWnQfqGLYXVBwcDSYI5x4GGUYa/RiUHbQeKgqdB8QIJh43CFIOrxeaHhILhh5CGbYZ5Qj1 +HEQWWR06Hj0cDxf1ADgRRh5IGdwZ0xOPGyAQzRsMGdoeBQ43HkcdBQT5B/8ZSBCICr8B8BztBdcb4QdeBu0KjgUyAQEUpw27GHoe +OxwoHSMbhRz1GK0cLgfoHm4NlRuNFyQYhxgBGKId2xtwHfoblBsNHigZkx3IHEcbsx0lG5wJMB55G8IbogwrG6QO4R6NDZAK2B6T +DaobrQluGS4W8x3lFQYehxpTGzUVlh5SHmUbcRu6HYkXNgm4BsIRHQf5Cqkbyxv5FYwdmAfbHpwVLByKE8Ed6xzOGpYc0Ax1CCUF +6R6pAksHqxJgEAkd8gqODbMNuQ3RHfsPfw/VD8ECRA8xB1wb4gh6DXAICwgNG2cCcx5hHoUXlgTFHi0Bbx7SGzkHpx5sCAoSgABh +CrUCixmSF5YJBR7ZBvUDBx7hD3cTjwgLEk4XKAGhAn4e7RsIGUUUHB6aFB4ePg4hHVYe5x7uDa8UJBY2EpYSegqlEn0X5R0MG1gZ +Xx74CNkGZR7ZEnsWaxfkHv4epxQnHm0evwQLHkMQIhQ+HCQD3gmaHbEdyRnvHoodPQeADIID2h8VF8sRPRffBeIdMR7xHxMIsRAQ +HhwfFx03GcMbKQ4bHPQaVBUMGH8X9QN3HmUfKh8jHy0cVBoiHzUDhh8hHxQLFR88HFsT1x9BHysfFheKG60R0R1PFOAenh8zHCsf +Px52GpgThh85CqkfQh8sD+0fFx1bGBkT6R7fH1cfSB8kG8MbVB9fAVofWB9JHLsd3x0hCeYd4wmiHPEeEBtIGZUbAB4UH1Id7hHc +BMQfIB86H0MfWheKGn8N1hn/H0cfOx98HGEe0B96H1kLHBzbCgkbzB8xFqgbPhaqE/4VTx3nG1secxwqDHEaYRUNGrsVuB7ZH2Af +gh+IHLUbvB+BH3sfiB2OCZEFDh+hH4cQIxzBFiwdlhykH44R+B6yFhAfTx2CHrYdzBp2ByAFOB5BH4YfaB2nD3gfnB+iH6kdrR+l +Hykfvh+oHxcc3xhJBvsc4hzkEh8GtRrVHOgWVgcMHxsbcBIsGFofbRUqH7AW9RWhF6QeRhxoG/wd7BfaGfQeFx9WH2YfYR9EHOgR +MR/EH7sdAx/TEkYdBhy9CAobUhlcG/gdxhBpH3Acqh/cHKwdVBNsHwoAWxFqHdYZIw1GE0QI7g6/DsEYkByCHnEUSh5QGPgdbh/9 +DsASbB26G7wMSRFsDq0DhABuAGseDR9NHg8f2h4RH3IbSh90H5cfNhb8BXsB8CAVAGseGx+DENga5hbUH2QgEhkPESMe9hd/IAoW +3g+uAFsgLSAAHuwSgCATFCcBVQh9CN0YvBvqHiceTRowHk8aMhaRD9IgJAvxID4eRSAdFEEPaBaWAUEXfB/0IDEgRRbMHNIBcyBP +AGMKigEnHBQAYRwcCFEY/wq8CLII4AbvG1cdORxkH5IcZh/4HSQf3h63He0cLRVyGlggVxk9IGEcUgBvCAkgJQGWIF8IySBhIDoT +1yB6GT4YFB1OHoUgZx/2HPMfsxv8GxMG4gHwIH8gYRgUF68TVAvDC7MbqSB+IHMIDh/yAHsMVBFiFA8giyCVDuwZPCBgCA4ggQ0l +H/EZDx7eGFsJvRuWHeEMihfIGy4gaBzLHokgbB+1GroV1gA5B+gYKggJDJsCHQydAZYT9QM+E/cBJBPfE+ELSB4eEMECRBDDEKse +zAedHJsBUA2NDUQINQe0HMQeDhwOGnMfHB1/IIUWXxynH1EgIAQuHrAf7BZcH7YGJAU4B+ggzQH3HAQa8B5fDMYZbAJ+FbsUpBVF +FHIWjB9rDD0fCArrGukBcyDsFPQVXBSHHz4Q2RwcIPcVGyDuHWEeOiDSGnAflB2fHPgXgQsQAfAg/hU5HUMZVBdYIQsVIh1IC4Yh +EBU/HVod3x/SHp8fliAqICEW3gA2CCYhFCEAHHQaoBpVCQ0WSiDtIPkfYxmHISAhKByBBOAfMByEINUgHh+0HhUXTwihIPYhJiD4 +FWEdjQgJISshOgTWCtghPR2sIIIgQh1QINcdgSBEHK0fdSBvFZYe2ABbIUEdiCABGy8hJRXJISchPh+kGCAhTxUjH2of0iDdH28g +Gx9xGpIeEyEzIUodJh66G/AhNyFUITkdZRzXG7wZ/yFZFUAH+wkOECofBSBmHQ4gMheBIIog9gusEUkJER8PE0gSliFyD9waLSBB +GtsY9SFIH/oSvQA0B+ghgRjKHo8NrRlVIYwe7yFAAgwSPwFuEKUdHgz+Hq4ghCFfH/cgTCFiIIgbTAA2Cn0K3gbrEkkhlh1lHS4M +KxbAIRMhlCGmATYdZRePHWgakB+yIYcdgxR/EbshCiGtGeEhrx02ITwhuhGNIZcdLSGsCt8hlSG8FPYhWyEDCJYhXhchHVIhtSFj +INsF0hzvHK8VcyG5IcQhriHBFMwd9BNUIaQhxSHYAhccBwmSIdwh1x1lIS0BHB+LITAbvyCxHWoetSCxHI0B1yHSHaIcESHVIaUh +uyHeITsNFyHiIfUddSFxIb8RrCH2H4kRkSGaDZshXR/YF7sgriExHeoh7SFkHK8UNyFOIf0L0iH/H58aPiH5IcAh5CH8IdYh+hU6 +Fk0fyQb9Cl4fywphADEALgA1HOcANh/QGtkf0h5mChUiBCDZFjMhtCEFFmQhNBKiBa8MmSIUIf4hayG+IhgiFRUTDO8f1Bs/HY8B +ASI1IhAQ1QFmGkYhmSDxG5giLiBqHnQf4CBwIYsiDyGnEnoDiBWfHsEL0getIZMiOSI2IlEV6CGxIS8cRiHLF7AghiHOIaAbtSI0 +Ik8hvAH3IlsephdNCQ0iZiGXImgViQ1wIkEiUCJvDbwWpSJHGyoclh+vIiwgrSFGHZ0iLxDqH98eoBg1A3Yh8yHdIkMiUhXdE7If +1hciInIiZyJEGmcGbQB9 +]] diff --git a/changelog.txt b/changelog.txt index a4443f1ea..227243b86 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,17 +1,40 @@ --------------------------------------------------------------------------------------------------- -Version: a.b.c +Version: 4.0.0 Date: ??? Changes: - Change order for muddy-sludge to set it as the default recipe. Resolves https://github.com/pyanodon/pybugreports/issues/1193 - Update recipe icon for muddy-sludge. --------------------------------------------------------------------------------------------------- +Version: 3.0.43 +Date: ??? + Changes: + - Remade tech tree with autotech 2.0. Science pack cost comparasion: + - automation: n/a -> trigger + - py1: 100 -> 100 + - logi: 360 -> 300 + - py2: 1300 -> 800 + - chem: 2000 -> 1400 + - py3: 2250 -> 1750 + - prod: 1750 -> 2250 + - py4: 2250 -> 3000 + - utility: 1500 -> 3300 + - space: 1000 -> 3600 + - phyrric: 3000 -> 8000 + - Tuned down the exponential ramping on worker robot speed from 2^N to 1.5^N. + - Many typos fixed and some new translations in DE locale including the py codex. + - Fix lockup trying to calculate spoilage possibilities of hidden items. + - Improved generator autofill to evenly distribute stacks of fuels. Resolves https://github.com/pyanodon/pybugreports/issues/1085 + - Added Dutch locale + - Allowed codex pages to use a rich text setting other than highlight + - Tint empty methanol canisters to be darker than filled methanol canisters. Resolves https://github.com/pyanodon/pybugreports/issues/1204 +--------------------------------------------------------------------------------------------------- Version: 3.0.42 Date: 2025-08-23 Changes: - Alt+click the codex button to go directly to the T.U.R.D. page. - Alt+shift+click the codex button to go directly to the caravan manager. - - Fixed typo in DE locale - Fixed load issue with JA language active + - Fixed typo in DE locale --------------------------------------------------------------------------------------------------- Version: 3.0.41 Date: 2025-08-19 diff --git a/data-updates.lua b/data-updates.lua index 80f47a833..5bcffd441 100644 --- a/data-updates.lua +++ b/data-updates.lua @@ -188,10 +188,9 @@ local recipes_list = "tpa", "wood-to-coal", "zinc-chloride", + "niobium-plate" } -table.insert(recipes_list, "niobium-plate") - --adding to module limitation list py.allow_productivity(recipes_list) diff --git a/info.json b/info.json index e2cac0377..d10307884 100644 --- a/info.json +++ b/info.json @@ -1,6 +1,6 @@ { "name": "pycoalprocessing", - "version": "3.0.999", + "version": "4.0.0", "factorio_version": "2.0", "title": "Pyanodons Coal Processing", "author": "Pyanodon, Nexela, Kingarthur, notnotmelon, Mootykins, ShadowGlass, Archezekiel, Quintuple, przemo1232", diff --git a/locale/de/locale.cfg b/locale/de/locale.cfg index da9294500..6154578fe 100644 --- a/locale/de/locale.cfg +++ b/locale/de/locale.cfg @@ -1,20 +1,20 @@ [ore-name] -borax=Borax Kristalle -niob=Niob Erz +borax=Borax-Kristalle +niob=Nioberz [autoplace-control-names] -niobium=Niob -borax=Borax Kristalle +niobium=[img=entity.niobium] Niob +borax=[img=entity.borax] Borax-Kristalle [item-group-name] -coal-processing=Kohle Verarbeitung +coal-processing=Kohle-Verarbeitung [fuel-category-name] drill-head=Bohrkopf drill=Bohrköpfe jerry=Kanister fuelrod=Brennstab -biomass=Biomass +biomass=Biomasse [technology-name] coal-processing=Kohle Verarbeitung @@ -293,8 +293,8 @@ borax-washing=Der zweite Schritt von der Boraxverarbeitung. ralesia=Spezielle Alienpflanze. niobium-ore=Bohr den Planet aus! niobium-powder=Das Niob zerkleinern. -niobium-dust=Die zerkleinerten Niob Stücke noch feiner zerkleinern. -niobium-concentrate=Der letzte Schritt der Niob Verarbeitung. +niobium-dust=Die zerkleinerten Niobstücke noch feiner zerkleinern. +niobium-concentrate=Der letzte Schritt der Niobverarbeitung. mukmoux-fat=Die armen Alientiere... oleochemicals=Flüssige Energie! rare-earth-powder=Die Seltenen Erden müssen vor der Verarbeitung zerkleinert werden. @@ -320,7 +320,7 @@ log6=Mehr geht nicht! [item-name] coke=Koks -iron-oxide=Eisen Oxid +iron-oxide=Eisenoxid ash=Asche py-asphalt=Asphalt py-limestone=Kalk @@ -355,7 +355,7 @@ fawogae=Fawogae fawogae-substrate=Fawogae Substrat flask=Glassbehältnisse bonemeal=Knochenmehl -raw-borax=Borax Kristalle +raw-borax=Borax-Kristalle borax=Borax ralesia=Ralesia rich-clay=Reichhaltiger Lehm @@ -366,18 +366,18 @@ equipment-chassi=Basiskomponenten für Laborequipment lab-instrument=Labor Equipment lens=Optisches Set boron-trioxide=Bortrioxid -ralesia-seeds=Ralesia Samen -niobium-ore=Niob erz -niobium-powder=Niob pulver -niobium-dust=Niob staub -niobium-concentrate=Niob Konzentrat +ralesia-seeds=Ralesia-Samen +niobium-ore=Nioberz +niobium-powder=Niobpulver +niobium-dust=Niobstaub +niobium-concentrate=Niobkonzentrat mukmoux-fat=Schmalz niobium-oxide=Nioboxid -niobium-plate=Niob platte +niobium-plate=Niobplatte rare-earth-ore=Seltene Erden rare-earth-powder=Pulverisierte Seltene Erden -rare-earth-dust=Seltene Erden Staub -glass-core=Glas Kern +rare-earth-dust=Seltene-Erden-Staub +glass-core=Glaskern cladding=Ummantelung cladded-core=Ummantelter Kern kevlar=Kevlar @@ -459,7 +459,7 @@ niobium-powder=Der erste Schritt in der Niobproduktion. niobium-dust=Der zweite Schritt in der Niobproduktion. niobium-concentrate=Der dritte Schritt in der Niobproduktion. mukmoux-fat=Eine glänzende schmalzige Masse. -niobium-oxide=Niob Oxid... +niobium-oxide=Nioboxid... niobium-plate=Niob in Plattenform. rare-earth-ore=Noch seltener als auf der Erde... rare-earth-powder=Der erste Schritt in der SE produktion. @@ -494,6 +494,7 @@ refsyngas=Raffiniertes Synthesegas acidgas=Säuregas carbon-dioxide=Kohlenstoffdioxid methanol=Methanol +muddy-sludge=Trüber Schlamm dirty-water=Erzschlacke flue-gas=Kamin Gas combustion-mixture1=Brennbares Gemisch @@ -511,12 +512,15 @@ boric-acid=Borsäure oleochemicals=Oleochemikalien glycerol=Glycerol organic-solvent=Organische Lösungsmittel -niobium-complex=Niob Komplexe +niobium-complex=Niobkomplexe rare-earth-mud=Seltene Erden Schlämme tpa=TPA - Terephthaloylclorid acetylene=Ethin molten-glass=Geschmolzenes Glas +[fluid-description] +tar=Grünes Gold. + [entity-name] distilator=Destruktiver Destillationsapperat MK01 distilator-mk02=Destruktiver Destillationsapperat MK02 @@ -545,7 +549,7 @@ methanol-reactor=Methanol Reaktor MK01 methanol-reactor-mk02=Methanol Reaktor MK02 methanol-reactor-mk03=Methanol Reaktor MK03 methanol-reactor-mk04=Methanol Reaktor MK04 -tailings-pond=Erzschlacke Becken +tailings-pond=Erzschlackebecken tailings-pond-spinner=Erzschlackebecken Rotierer tailings-pond-sprite=Erzschlackebecken sprite sheet quenching-tower=Löschturm MK01 @@ -609,15 +613,15 @@ fawogae-plantation-mk02=Fawogae Plantage MK02 fawogae-plantation-mk03=Fawogae Plantage MK03 fawogae-plantation-mk04=Fawogae Plantage MK04 ulric-corral=Ulric Pferch -borax-mine=Kristall Mine MK01 -borax-mine-mk02=Kristall Mine MK02 -borax-mine-mk03=Kristall Mine MK03 -borax-mine-mk04=Kristall Mine MK04 +borax-mine=Kristallmine MK01 +borax-mine-mk02=Kristallmine MK02 +borax-mine-mk03=Kristallmine MK03 +borax-mine-mk04=Kristallmine MK04 ralesia-plantation=Ralesia Plantage MK01 ralesia-plantation-mk02=Ralesia Plantage MK02 ralesia-plantation-mk03=Ralesia Plantage MK03 ralesia-plantation-mk04=Ralesia Plantage MK04 -niobium-mine=Niob Mine +niobium-mine=Niobmine jaw-crusher=Backenbrecher MK01 jaw-crusher-mk02=Backenbrecher MK02 jaw-crusher-mk03=Backenbrecher MK03 @@ -645,7 +649,7 @@ wpu-mk02=Holzverarbeitungseinheit MK02 wpu-mk03=Holzverarbeitungseinheit MK03 wpu-mk04=Holzverarbeitungseinheit MK04 borax=Borax Reservoir -niobium=Niob Erz +niobium=Nioberz glassworks-mk01=Glassschmelze MK 01 glassworks-mk02=Glassschmelze MK 02 glassworks-mk03=Glassschmelze MK 03 @@ -841,3 +845,10 @@ py-recommended=Dies sind die empfohlenen Einstellungen für das Spielen von Pyan [tooltip-category] shot=Bearbeitbar + +[messages] +welcome=Willkommen bei Pyanodon! Vergiss nicht, dir den Pyanodon-Kodex (Button oben links) anzusehen, um mehr über das Spiel zu erfahren. +warning-no-preset=Es sieht so aus, als würdest du die Voreinstellung '__1__' für die Kartenerstellung nicht verwenden. Die anfänglichen Ressourcenfelder können schnell erschöpft sein, aber ansonsten ist das Spiel gut spielbar. +warning-biters=Es sieht so aus, als hättest du die Beißer aktiviert. Pyanodon ist noch nicht mit den Beißern ausbalanciert, daher wird empfohlen, sie zu deaktivieren. +warning-quality=Die Qualitäts-Mod wurde aktiviert. Diese wird nur insoweit unterstützt, als dass sie geladen wird und du sie nutzen kannst. Sie ist jedoch absolut unausgewogen, daher wird es nicht empfohlen, Py mit aktivierter Mod zu spielen. Insbesondere der Wiederverwerter ist komisch unausgewogen und sollte niemals verwendet werden. +warning-recipe-book=Du scheinst weder FNEI noch Recipe Book installiert zu haben. Diese Alternativen zur integrierten Factoriopedia funktionieren viel besser mit Überarbeitungs-Mods wie Pyanodon, da Factoriopedia dir immer alle möglichen Rezepte anzeigt, auch wenn es sich um Rezepte aus dem fortgeschrittenen Spielverlauf handelt, die du noch lange nicht freischalten kannst. diff --git a/locale/de/tips.cfg b/locale/de/tips.cfg new file mode 100644 index 000000000..aa7fedaf1 --- /dev/null +++ b/locale/de/tips.cfg @@ -0,0 +1,60 @@ +[pywiki-sections] +title=Pyanodon-Kodex +title-2=Pyanodon-Kodex ➤ __1__ +statistics=[item=iron-gear-wheel] Startseite +fluid-index=[fluid=coal-gas] Fluid-Index +item-index=[item=coke] Werte für Festbrennstoffe +coalprocessing=Kohleverarbeitung +ash=[item=ash] Asche +mechanical-inserter=[item=burner-inserter] Greifarme +tailings-pond=[item=tailings-pond] Erzschlackebecken +combustion-mixture=[fluid=combustion-mixture1] Brennbares Gemisch +beacon=[item=beacon] AM:FM-Effektverteiler +decay=[item=biocrud] Verfall + +rawores=Roherze +big-mines=[item=ore-lead] Große Minen + +[pywiki-descriptions] +ash=Die meisten anorganischen Brennstoffe wie [item=coal] produzieren bei der Verbrennung [item=ash], ähnlich wie [item=uranium-fuel-cell] bei der Verbrennung [item=depleted-uranium-fuel-cell] produziert. \n\nDas Aschemanagement ist ein zentraler Bestandteil des frühen Spielverlaufs, da die Asche letztendlich die Maschinen blockiert, wenn sie nicht aus dem Ausgabeschacht entfernt wird. [item=burner-inserter] kann mit einem Filter ausgestattet werden, der die Asche automatisch entfernt. [entity=solid-separator] kann dabei helfen, Teile der Asche zu Erzen aufzubereiten. +mechanical-inserter=Der befeuerte Greifarm ist jetzt ein [item=burner-inserter]. Anders als im Basisspiel muss er nicht mit Brennstoff versorgt werden.\n\nErforderlicher Brennstoff:\n [entity=burner-inserter]: Kostenlos\n [entity=inserter]: 16,9 kW\n [entity=long-handed-inserter]: 20,11 kW\n [entity=fast-inserter]: 46,7 kW\n [entity=bulk-inserter]: 169 kW\n [entity=py-stack-inserter]: 1,6 MW\n\nGeschwindigkeiten der Greifarme: (Kiste zu Kiste)\n [entity=burner-inserter]: 0,78 Armdrehungen/s\n [entity=inserter]: 1,2 Armdrehungen/s\n [entity=long-handed-inserter]: 1,2 Armdrehungen/s\n [entity=fast-inserter]: 2,31 Armdrehungen/s\n [entity=bulk-inserter]: 2,31 Armdrehungen/s\n [entity=py-stack-inserter]: 1,8 Armdrehungen/s\n\nAnzahl der Filterplätze:\n [entity=burner-inserter]: 1\n [entity=inserter]: 2\n [entity=long-handed-inserter]: 3\n [entity=fast-inserter]: 4\n [entity=bulk-inserter]: 5\n [entity=py-stack-inserter]: 5\n\nBesonderheiten:\n [entity=long-handed-inserter]: Erreicht zwei Felder statt nur eines.\n [entity=bulk-inserter]: Profitiert von [technology=inserter-capacity-bonus-1].\n [entity=py-stack-inserter]: Profitiert von [technology=inserter-capacity-bonus-1]. Stapelt Gegenstände auf dem Band bis zu einer Höhe von acht. +tailings-pond=Das [entity=tailings-pond] ist ein riesiger Fluidspeicher im Freien, der bis zu 1.000.000 Fluideinheiten aufnehmen kann. Er verfügt über unterschiedliche Mechanismen, je nachdem, ob du Gas oder Flüssigkeit einfüllst. Gase wie [fluid=coal-gas] werden in die Atmosphäre abgelassen. Dadurch wird das Gas zerstört und es entstehen Tonnen von Umweltverschmutzung. 100 Einheiten eines beliebigen Gases verursachen 15 Einheiten Umweltverschmutzung.\n\nBestimmte Gase verursachen keine Umweltverschmutzung:\n [fluid=oxygen]\n [fluid=hydrogen]\n [fluid=nitrogen]\n [fluid=purest-nitrogen-gas]\n [fluid=pressured-air]\n [fluid=hot-air]\n [fluid=vacuum]\n\nFlüssigkeiten wie [fluid=tar] werden im Speicher gelagert, bis das Becken zu 100 % gefüllt ist. Sobald der Speicher diesen Schwellenwert erreicht, läuft er über, wodurch die Flüssigkeit zerstört wird und in dem betroffenen Gebiet Ringe aus leicht entzündlichen Verschmutzungsfeldern entstehen.\n\nAlle Flüssigkeiten, deren Name "Wasser" enthält, sickern stattdessen ins Grundwasser und verursachen keine Verschmutzungsfelder. [fluid=muddy-sludge] erzeugt ebenfalls keine Verschmutzungsfelder. Der Umrechnungsfaktor beträgt 500 Einheiten Flüssigkeit pro Verschmutzungsfeld. Die Verschmutzungsfelder können zum Auffüllen von Seen verwendet werden.\n\nDu kannst Flüssigkeiten aus dem Speicher entfernen, indem du eine [entity=pump] direkt an einen der Ausgänge anschließt. Mit [item=red-wire] und [item=green-wire] kannst du den Inhalt des Speichers auslesen. +beacon=Die [entity=beacon-AM1-FM1] und [entity=diet-beacon-AM1-FM1] verwenden Funksignale, um Moduleffekte an nahegelegene Montagemaschinen zu übertragen. Jeder Effektverteiler verfügt über eine AM- und eine FM-Frequenz, die den Wirkungsradius, die Übertragungseffizienz und den Stromverbrauch bestimmen.\nDie AM- und FM-Frequenzregler reichen von 1 bis 5.\n\n [entity=diet-beacon-AM1-FM1]\nWirkungsradius:\n - AM1: 32\n - AM2: 24\n - AM3: 16\n - AM4: 8\n - AM5: 2\nÜbertragungseffizienz: 0,1 * AM * FM\nStromverbrauch: AM * (FM ^ 3) / 2 MW\n\n[entity=beacon-AM1-FM1]\nWirkungsradius:\n - AM1: 64\n - AM2: 48\n - AM3: 32\n - AM4: 16\n - AM5: 2\nÜbertragungseffizienz: 0,2 * AM * FM\nStromverbrauch: AM * (FM ^ 3) MW\n\nDer Standardeffektverteiler 1AM 1FM hat einen weiten Bereich mit geringem Stromverbrauch.\nWenn eine Maschine widersprüchliche Signale auf der AM- oder FM-Frequenz empfängt, kommt es zu Interferenzen zwischen den Wellenlängen, wodurch die Maschine überlastet wird.\nEffektverteiler akzeptieren keine Produktivitätsmodule wie [item=productivity-module-3]. +combustion-mixture=Du kannst [fluid=combustion-mixture1] in [entity=gasturbinemk01] verbrennen, um Strom zu erzeugen. Höhere Temperaturen der Flüssigkeit bedeuten, dass die Turbine mit einem höheren Wirkungsgrad arbeitet und somit mehr Strom erzeugt. [entity=gasturbinemk01] hat eine Begrenzung hinsichtlich der Temperatur, die sie aufnehmen kann: Wenn du eine höhere Temperatur als diese Grenze zuführst, wird sie auf diese Temperatur begrenzt, sodass du die zugeführte Energie verschwendest. Turbinen höherer Stufen haben höhere Grenzen. +big-mines=Bei den meisten Erzen werden sowohl Standard-Erzvorkommen wie [entity=ore-lead] als auch große Felsen wie [entity=lead-rock] generiert. Letztere sind so groß, dass du eine große Mine wie [entity=lead-mine] bauen musst. Diese großen Minen benötigen abgefüllte Kraftstoffe, die in einem [item=empty-fuel-canister] aufbewahrt werden. Die meisten Minen werden mit [technology=big-mines] freigeschaltet. Die früheste verfügbare große Mine ist die [entity=salt-mine] bei [technology=energy-1]. + +[pywiki-statistics] +info=Willkommen beim Pyanodon-Kodex. Dieses Buch enthält hilfreiche Informationen für deinen Erfolg mit pY-Mods. +info-2=Bestimmte Seiten sind interaktiv und können die Effizienz deiner Fabrik beeinflussen. +info-3=[font=default-semibold][color=255,230,192]Tritt dem offiziellen pY-Discord bei: [/color][/font] +info-4=[font=default-semibold][color=255,230,192]Unterstütze Pyanodon: [/color][/font] +info-5=[font=default-semibold][color=255,230,192]Fehlerberichte & Balancevorschläge: [/color][/font] +playtime=[font=default-semibold][color=255,230,192]Spielzeit: [/color][/font]__1__:__2__:__3__ +time-of-day=[font=default-semibold][color=255,230,192]Tageszeit: [/color][/font]__1__:__2__ __3__ +mods-installed=[font=default-semibold][color=255,230,192]Installierte Mods: [/color][/font]__1__ +buildings-placed=[font=default-semibold][color=255,230,192]Platzierte Gebäude: [/color][/font]__1__ +recipes-unlocked=[font=default-semibold][color=255,230,192]Freigeschaltete Rezepte: [/color][/font]__1__ +science-produced=[font=default-semibold][color=255,230,192]Produzierte Wissenschaft: [/color][/font]__1__ +creatures-slaughtered=[font=default-semibold][color=255,230,192]Geschlachtete Tiere: [/color][/font]__1__ +items-produced=[font=default-semibold][color=255,230,192]Hergestellte Gegenstände: [/color][/font]__1__ +items-consumed=[font=default-semibold][color=255,230,192]Verbrauchte Gegenstände: [/color][/font]__1__ +fluids-produced=[font=default-semibold][color=255,230,192]Produzierte Flüssigkeiten: [/color][/font]__1__ +fluids-consumed=[font=default-semibold][color=255,230,192]Verbrauchte Flüssigkeiten: [/color][/font]__1__ +pollution=[font=default-semibold][color=255,230,192]Produzierte Umweltverschmutzung: [/color][/font]__1__ +rockets-launched=[font=default-semibold][color=255,230,192]Gestartete Raketen: [/color][/font]__1__ +trains=[font=default-semibold][color=255,230,192]Züge: [/color][/font]__1__ +caravans=[font=default-semibold][color=255,230,192]Karawanen: [/color][/font]__1__ +tech-tree-completion=[font=default-semibold][color=255,230,192]Vollendung des Technologiebaums: [/color][/font]__1__% +kills=[font=default-semibold][color=255,230,192]Tötungen: [/color][/font]__1__ +losses=[font=default-semibold][color=255,230,192]Niderlagen: [/color][/font]__1__ + +[pywiki-spreadsheets] +localised-name=Name +voidable=Vernichtung in +fuel-category=Treibstoffkategorie +fuel-value=Brennwert +unlocked-at=Freischaltung bei +burnt-result=Verbrennungsrückstand +color=Farbe +decay-time=Verfallszeit +decay-result=Verfallsprodukt \ No newline at end of file diff --git a/locale/en/tips.cfg b/locale/en/tips.cfg index d4d2ea307..be78feedd 100644 --- a/locale/en/tips.cfg +++ b/locale/en/tips.cfg @@ -1,3 +1,7 @@ +[pywiki] +button-tooltip=Pyanodon codex +button-tooltip-alienlife-shortcuts=• __CONTROL_STYLE_BEGIN__Alt+Click__CONTROL_STYLE_END__ or __CONTROL__py_toggle_turd_gui__ to directly open the T.U.R.D. page.\n• __CONTROL_STYLE_BEGIN__Shift+Alt+Click__CONTROL_STYLE_END__ or __CONTROL__py_toggle_caravan_manager_gui__ to directly open the Caravan manager. + [pywiki-sections] title=Pyanodon codex title-2=Pyanodon codex ➤ __1__ diff --git a/locale/nl/locale.cfg b/locale/nl/locale.cfg new file mode 100644 index 000000000..bf7d08dd4 --- /dev/null +++ b/locale/nl/locale.cfg @@ -0,0 +1,854 @@ +[shortcut-name] +py-toggle-equipment-fuel-manager=Schakel brandstofbeheerder aan/uit + +[shortcut-description] +py-toggle-equipment-fuel-manager=Regelt of de generatoren in persoonlijke uitrustig rasters automatisch worden bijgetankt en of lege brandstofvakjes worden geleegd. + +[ore-name] +borax=Ruwe borax +niobium=Niobiumerts + +[autoplace-control-names] +niobium=[img=entity.niobium] Niobium +borax=[img=entity.borax] Ruwe borax + +[item-group-name] +coal-processing=Py Steenkoolverwerking + +[fuel-category-name] +drill-head=Boorkop +drill=Boorkoppen +jerry=Brandstoftank +fuelrod=Brandstofstaaf +biomass=Biomassa + +[technology-name] +automation=Montage +cargo-landing-pad-capacity=Vrachtlandingsplatform capaciteit +transport-belt-capacity=Transportband capaciteit +coal-processing=Steenkool verwerking +methanol-processing=Methanol verwerking +cooling-tower=Koeltoren +energy=Energieopwekking +desulfurization=Ontzwaveling +excavation=Uitgraving +separation=Scheiden +fluid-processing-machines=Indamping +fluid-separation=Geavanceerd Scheiden +fuel-production=Koolwaterstoffen kraken en hervormen +rare-earth=Zeldzame aardmetalen ontdekking +fine-electronics=Verfijnde electronica +crusher=Maalmolen +filtration=Filtratie +ralesia=Ralesia +ulric=Ulric +mukmoux=Mukmoux +wood-processing=Houtverwerking +oil-processing=Oliewinning +organic-solvent=Organisch oplosmiddel +niobium=Niobium +chromium=Chroom +nexelit=Nexelit +kevlar=Kevlar - Fase 1 +kevlar-mk02=Kevlar - Fase 2 +filtration-mk02=Filtratie - Fase 2 +creosote=Creosoot +lab-instrument=Laboratorium uitrusting +syngas=Syngas +tar-processing=Teerverwerking +diet-beacon=Dieetbaken +biofilm=Biofilm + +pyrrhic=Pyrrhische overwinning + +[mod-name] +pyalienlife=Pyanodons Buitenaards Leven +pyalienlifegraphics=Pyanodons Buitenaards Leven Graphics 1 +pyalienlifegraphics2=Pyanodons Buitenaards Leven Graphics 2 +pyalienlifegraphics3=Pyanodons Buitenaards Levens Graphics 3 +pypostprocessing=Pyanodons Nabewerking +pycoalprocessing=Pyanodons Steenkoolverwerking +pycoalprocessinggraphics=Pyanodons Steenkoolverwerking Graphics +pyfusionenergy=Pyanodons Fusie-energie +pyfusionenergygraphics=Pyanodons Fusie-energie Graphics +pyhightech=Pyanodons Hightech +pyhightechgraphics=Pyanodons Hightech Graphics +pyindustry=Pyanodons Industrie +pyrawores=Pyanodons Ruwe Ertsen +pyraworesgraphics=Pyanodons Ruwe Ertsen Graphics +pypetroleumhandling=Pyanodons Petroleumverwerking +pypetroleumhandlinggraphics=Pyanodons Petroleumverwerking Graphics +pyalternativeenergy=Pyanodons Alternatieve Energie +pyalternativeenergygraphics=Pyanodons Alternatieve Energie Graphics +pystellarexpedition=Pyanodons Stellaire Expeditie +pystellarexpeditiongraphics=Pyanodons Stellaire Expeditie Graphics +pyaliens=Pyanodons Aliens +pyaliensgraphics=Pyanodons Aliens Graphics + +[technology-description] +rocket-silo=Staat het toe om raketten in de ruimte te lanceren en om gewichteloze experimenten uit te voeren. +automation=Brandstofverbrandende montagemachines voor geautomatiseerde massaproductie. +automation-2=Geautomatiseerde fabrieken die zware machines kunnen monteren. +automation-3=Meest geavanceerde brandstofverbrandende, geautomatiseerde machines. +cargo-landing-pad-capacity=Geavanceerde raketbesturingssystemen staan precieze tracering van het vrachtslandingsplatform toe. Elk niveau staat het plaatsen van een extra vrachtslandingsplatform toe. +coal-processing=Maakt het mogelijk om steenkool te verbranden en om bijproducten van steenkool te destilleren. +methanol-processing=Methanolverwerking. +cooling-tower=Nieuwe koelgebouwen voor gesloten stoom-water cyclussen. +desulfurization=Verwerk zuur gas om zwafel te onttrekken. +energy=Voeg eenvoudige energie generatie toe. +excavation=Winning van veelvoorkomende oppervlaktematerialen zonder de benodigdheid van een grondstofveld. +separation=Classificatie van grootschalige, verpoederde materialen op gewicht en magnetisme. +fluid-separation=Bedenk vloeistofclassificatiemachines ontworpen om verscheidene oliën en suspensie te verwerken tot hun bestandsdelen. +fuel-production=Kraak en raffineer koolwaterstoffen tot hoogrendementsbrandstof en alkenen. +fuel-production-mk02=Geavanceerde koolwaterstofkraken en hervormen om de laatste druppel brandstof van deze planeet te vergaren. +rare-earth=Ontdek de Zeldzame aardelementen. Ze zijn zeldzaam op aarde, maar hier niet. Tijd voor massaproductie! +fine-electronics=Omdat hightech spullen nodig zijn op deze planeet. +crusher=Staat betere opbrengst toe door ertsen voor te bewerken. +kevlar-mk02=Kevlar harder. +syngas=Ontgrendel een multifuctionele brandstof met hoog octaangehalte van lichtgas. Of is het gewoon nepgas? +pyrrhic=Onderzoek deze technologie om het spel te winnen\n\n"Heb je het gedaan?"\n"Ja."\n"Wat heeft het gekost?"\n"...Alles." +belt-capacity=Verhoogt de hoogte van gelaagde stapels van voorwerpen op transportbanden. + +[modifier-description] +belt-stack-size-bonus=Transportband capaciteit: +__1__ +cargo-landing-pad-count=vrachtslandingsplatform per oppervlak: +__1__ + +[recipe-name] +fractional-distillation=Destillatie +coal-gas=Lichtgas uit steenkool +coal-gas-from-wood=Lichtgas uit hout +syngas=Syngas uit lichtgas +syngas2=Syngas met gebruik van zuurstof +refsyngas-from-filtered-syngas=Geraffineerd syngas met gebruik van gefilterd syngas +refsyngas-from-meth=Geraffineerd syngas uit methanol +refsyngas-from-meth-canister=Geraffineerd syngas uit methanoltanks +zinc-chloride=Zinkchloride +methanol-from-syngas=Methanol uit syngas +methanol-from-hydrogen=Methanol uit waterstof +combustion-mixture1=verbrandingsmengsel +tar-carbon=Koolstof uit teer +cooling-water=Water afkoelen +salt-ex=Zoutwinning +extract-sulfur=Onttrek zwafel uit zuur gas +wood-to-coal=__1__ naar __2__ +heavy-oil_from_coal-gas=Zet lichtgas om in zware stookolie +light-oil_from_syngas=Zet syngas om in lichte stookolie +petgas_from_refsyngas=Zet geraffineerd syngas om in petroleumgas +diesel=Diesel uit methanol +richdust_separation=Scheiding van residustof +soil_separation=Scheiding van aarde +sand-washing=Zand wassen +pure-sand_classification=Zand classificering +coarse-classification=Grove fractie classificering +tar-oil=Zet teer om in ruwe olie +sulfuric_petgas=Zet zuur gas om in zwafelzuur +sand-casting=Zandgieten +nexelit-plate=Nexelit plaat +air-pollution=Filter luchtvervuiling +nexelit-cartridge=Nexelit absorptiepatroon +co2=Extraheer CO2 uit nexelit absorptiepatroon +saturated-nexelit-cartridge-regen=Nexelit absorptiepatroon regeneratie +coal-slurry=Steenkool-watersuspensie +olefin-petgas=Splits alkenen op in lichte brandstoffen +borax-washing=Borax wassen +ralesia-plantation-mk01=Ralesia plantage +ralesia-seeds=Onttrek ralesiazaden +niobium-powder=Maal niobiumerts +niobium-dust=Fijnmalen van niobiumerst +mukmoux-fat=Extraheer vet uit mukmouxes +oleochemicals=Verwerk buitenaards dierenvet +co2-organics=Onttrek CO2 uit organische stoffen +rare-earth-powder=Maal zeldzame aardertsen +rare-earth-dust=Fijnmalen van zelfzame aardertsen +rare-earth-beneficiation=Zeldzame aardelementen veredeling +aromatic-organic=Aromaten uit planten +nbfe-coating=Bedek de vezel met ijzer-niobiumlegering +petgas-methanol=Reageer en splits deze brandstoffen +refolefin=Zet geraffineerd syngas om in alkenen +oleo-heavy=Splits zware stookolie van uit oleochemische producten +bone-solvent=Filter beendermeelmengsel om organisch oplosmiddel te onttrekken +dirty_acid=Filter residuen om zuur gas te onttrekken +filtration-media=Maak filtermedia +filtration-dirty-water=Industrieel water recycelen +olefin-filtration=Filter methanol uit alkenen +coalgas-syngas=Primitieve filtratie van lichtgas +oleochemicals-crude-oil=Zet oleochemische producten om in ruwe olie +coal-dust=Maal steenkool tot steenkoolstof +sand-brick=Maak bakstenen van zand en rijke klei +tailings-classification=Scheiding van residuen +coal-briquette=Comprimeer briketten van steenkool +lube-glycerol=Maak smeermiddel uit glycerol +explosive-glycerol=Maak explosieven uit glycerol +resin-glycerol=Maak hars uit glycerol +remud-dirty-water=Zeldzame aardmineralen uit vervuild water +rich-re=Rijke stof uit zelfzame aarden-modder +crushed-iron=Maal ijzer +crushed-copper=Maal koper +heavyoil-to-coal-gas=Zet zware stookolie om in lichtgas +lightoil-to-syngas=Zet lichte stookolie om in syngas +petgas-to-refsyngas=Zet petroleumgas om in geraffineerd syngas +sulfur-crudeoil=Onttrek zwafel uit ruwe olie +sulfur-heavyoil=Onttrek zwafel uit zware stookolie +sulfur-lightoil=Onttrek zwafel uit lichte stookolie +sulfur-petgas=Onttrek zwafel uit petroleumgas +organics-from-wood=Zet hout om in organische stoffen +creosote-to-aromatics=Verwerk creosoot om aromaten te onttrekken +aromatics-to-lubricant=Produceer smeermiddel uit aromaten +nas-battery=Batterijen met NaS +coke-coal=Zet steenkool om in cokes +stone-distilation=Destructieve destillatie van steen +steel-plate2=Geavanceerde staalgieten +glycerol-hydrogen=Extraheer lichtere gassen uit glycerol +oleo-solidfuel=Zet oleochemische producten om in vaste brandstof +glycerol-syngas=Zet glycerol om in syngas +extract-sand=Onttrek zand +extract-gravel=Onttrek grind +extract-stone=Onttrek steen +extract-richdust=Onttrek rijke stof +extract-coarse=Onttrek grove fractie +ash-separation=As scheiding +py-sodium-hydroxide=Natriumhydroxide +coaldust-carbon=Maak koolstof uit steenkoolstof +fill-methanol-gas-canister=Vul methanoltank +empty-methanol-gas-canister=Leeg methanoltank +tailings-ore-extraction=__1__ en __2__ uit __3__ +tailings-gem-ore=Edelstenen uit teer +mining-nexelit=Nexelit ontginnen +acetylene-combustion=Ethyn naar verbrandingsmengsel (__1__°C) +supercritical-combustion=Steenkoolbriketten naar verbrandingsmengsel (__1__°C) +ultrasupercritical-combustion=Steenkoolbriketten naar verbrandingsmengsel (__1__°C) +coalgas-combustion=Lichtgas naar verbrandingsmengsel (__1__°C) +coalslurry-combustion=Steenkool-watersuspensie naar verbrandingsmengsel (__1__°C) +diborane-combustion=Dioboraan naar verbrandingsmengsel (__1__°C) +diesel-combustion=Zet diesel om in verbrandingsmengsel (__1__°C) +gasoline-combustion=Benzine verbrandingsmengsel (__1__°C) +heavy-oil-combustion=Zware stookolie naar verbrandingsmengsel (__1__°C) +light-oil-combustion=Lichte stookolie naar verbrandingsmengsel (__1__°C) +methanol-combustion=Methanol naar verbrandingsmengsel (__1__°C) +olefin-combustion=Alkenen naar verbrandingsmengsel (__1__°C) +combustion-olefin=Alkenen naar verbrandingsmengsel (__1__°C) +petgas-combustion=Petroleumgas naar verbrandingsmengsel (__1__°C) +refsyngas-combustion=Geraffineerd syngas naar verbrandingsmengsel (__1__°C) +syngas-combustion=Syngas naar verbrandingsmengsel (__1__°C) + +fluegas-filtration=Filter rookgas +coaldust-ash=Verbrand steenkoolgas +heavy-oleo=Zet oleochemische producten om in zware stookolie + +fill-can=Vul __1__tank +empty-can=Vul __1__tank + +[recipe-description] +wood-to-coal=Zet __1__ om in __2__. +anthraquinone=Driewegkatalysering van aromaten tot antrachinon. +hydrogen-peroxide=Driewegkatalysering van antrachinon tot waterstofperoxide. +lithium-peroxide=Productie van lithiumperoxide. +air-pollution=Filter luchtvervuiling. +slacked-lime=Een mengsel van kalk and water. +co2=Transformeer opgehoopte luchtvervuiling op het absorptiepatroon tot pure CO2. +lime=De hele dag stenen koken. +fuelrod-mk01=Brandstof met veel potentie om in geavanceerde gebouwen te gebruiken. +coal-slurry=Een vieze en slechte brandstof, maar het werkt! +olefin-petgas=In het geval je te weinig olie hebt. +gasoline=Hoog explosieve brandstof. +combustion-olefin=God zegene alkenen. +fawogae=Onschuldige buitenaardse moerasschimmel. +fawogae-substrate=Eenvoudige verwerking van de fawogeschimmel. +flask=Houders voor laboratoriumgebruik. +ulric-corral-mk01=Tamme, prachtige buitenaardse dieren. +bonemeal=De cyclus van het leven. +raw-borax=Eerste voorwerp van de boraxproductielijn. +borax-washing=Tweede stap van de boraxproductielijn. +ralesia=Speciale buitenaardse plant. +niobium-ore=Boor die planeet! +niobium-powder=Breek niobiumerts. +niobium-dust=Fijnmalen van niobiumerts. +niobium-concentrate=Derde stap van de boraxproductielijn. +mukmoux-fat=Arme buitenaardse dieren. +oleochemicals=Geconcentreerde energie. +rare-earth-powder=Breek zelfzame aardertsen. +rare-earth-dust=Fijnmalen van zelfzame aardertsen. +rare-earth-beneficiation=Zeldzame aardelementen veredelen. +aromatic-organic=Onttrek aromaten uit buitenaardse planten. +glass-core=Maak een kern van optische vezel. +nibfe-alloy=Zeer sterke legering. +optical-fiber=Voor hightech toepassingen. +copper-coating=Meer stevigheid voor vezels. +remud-dirty-water=Sommig afval kan nuttig zijn. +rich-re=Herwin wat rijke stof uit die modder. +creosote-to-aromatics=Goedkope manier om aromaten te krijgen. +aromatics-to-lubricant=Olievrij smeermiddel. +coke-coal=Gemodificeerd proces om bijproducten te storten en overgebleven cokes te herwinnen. +stone-distilation=Een minder effectieve manier om koolwaterstoffen te krijgen door kleine hoeveelheden plantmaterie die slechts in gedeeltelijk fossiele brandstoffen veranderd zijn af te breken. +rocket-silo=Staat het toe om raketten in de ruimte te lanceren en om gewichteloze experimenten uit te voeren. +log1=Laat de zon zijn werk doen. +log2=Water helpt. +log3=Goed gebruik voor as. +log4=Verhoog je productie met CO2. +log5=CO2 en rijk water? Geweldig! +log6=Maximale productie capaciteit. + +[item-name] +#incorrect basegame translations +heavy-oil=Zware stookolie +light-oil=Lichte stookolie +#py +barrel=Leeg vat +coke=Cokes +iron-oxide=Ijzeroxide +ash=As +py-asphalt=Asfalt +py-limestone=Kalksteentegel +py-coal-tile=Steenkooltegel +active-carbon=Actieve kool +zinc-chloride=Zinkchloride +salt=Natriumchloride +treated-wood=Behandeld hout +tailings-dust=Residustof +nichrome=Nichroom +chromium=Chroom +soil=Aarde +drill-head=Boorkop +nexelit-ore=Ruwe nexelit +sand=Zand +limestone=Kalksteen +organics=Organische stoffen +coarse=Grove fractie +rich-dust=Rijke stof +coal-dust=Steenkoolstof +pure-sand=Zuiver zand +gravel=Grind +chromite-sand=Chroomzand +sand-casting=Gegoten zand +nexelit-plate=Nexelit plaat +lithium-peroxide=Lithiumperoxide +nexelit-cartridge=Verrijkt nexelit absorptiepatroon +saturated-nexelit-cartridge=Verzadigd nexelit absorptiepatroon +lime=Kalk +fuelrod-mk01=Brandstofstaaf +fawogae=Fawogae +fawogae-substrate=Fawogaesubstraat +flask=Glaswerk +bonemeal=Beendermeel +raw-borax=Ruwe borax +borax=Borax +ralesia=Ralesia +rich-clay=Rijke klei +ground-sample01=Grondmonster +bio-sample01=Biologisch monster +alien-sample01=Buitenaards monster +equipment-chassi=Uitrusting chassis +lab-instrument=Laboratoriumapparaten +lens=Optisch pakket +boron-trioxide=Boortrioxide +ralesia-seeds=Ralesiazaden +niobium-ore=Niobiumerts +niobium-powder=Niobiumpoeder +niobium-dust=Niobiumstof +niobium-concentrate=Niobiumconcentraat +mukmoux-fat=Reuzel +niobium-oxide=Niobiumoxide +niobium-plate=Niobium plaat +rare-earth-ore=Zeldzame aarderts +rare-earth-powder=Zeldzame-aardertspoeder +rare-earth-dust=Zeldzame-aardertsstof +glass-core=Glazen kern +cladding=Bekleding +cladded-core=Beklede kern +kevlar=Kevlar +ppd=p-Fenyleendiamine (PPD) +kevlar-coating=Kevlar bedekking +nbfe-alloy=Ijzer-niobiumlegering +nbfe-coating=Ijzer-niobiumbedekking +copper-coating=Koperbedekking +optical-fiber=Optische vezel +biofilm=Biofilm +filtration-media=Filtermedia +coal-briquette=Steenkoolbrikketen +calcium-carbide=Calciumcarbide +crushed-iron=Gemalen ijzer +crushed-copper=Gemalen koper +log=Boomstam +crushed-quartz=Gemalen kwarts +powdered-quartz=Kwarts poeder + +empty-gas-canister=Lege gastank +methanol-gas-canister=Gevulde methanoltank + +fill-can=__1__tank +empty-fuel-canister=Lege brandstoftank + +gunpowder=Buskruit + +[item-description] +coke=Verbeterde steenkoolbrandstof. +iron-oxide=Afvalproduct dat nuttig kan zijn. +ash=Restant van industriële processen. +py-asphalt=Goed voor laarzen. +py-coal-tile=Donker en mysterieus... +active-carbon=Het beste filtermateriaal. +zinc-chloride=Nuttig voor textielverwerking, metallurgische flux and chemische synthese. +salt=NaCl. +treated-wood=Beter dan ruw hout. +nichrome=Nuttige katalysator. +chromium=Goeie katalystor. +soil=Rijk en onderbenut. +drill-head=Reserveonderdelen van zware machines. +nexelit-ore=We hebben lichtjaren gereisd voor dit metaal. +sand=Kleinste onderdeel van een rotsige planeet. +limestone=Veelvoorkomende steen hier. +organics=Koolstof-gebaseerde dingen. +coarse=Ook wel natte aarde genoemd. +rich-dust=Verwerkte stof die rijk is aan zeldzame aardmineralen. +coal-dust=Alles zal gebruikt worden. Kan ook verbrand worden! +pure-sand=Gewassen zand voor verfijnde productie. +sand-casting=Om perfect gevormde platen te maken. +nexelit-plate=Er wordt gezegd dat deze plaat kan coderen. +raw-borax=Wit, kristallijn mineraal. +borax=Niet alleen om slijm mee te maken. +rich-clay=Zeldzame aardelementen zijn geïnfuseerd in deze klei. +ground-sample01=Een mengsel van de primaire grondmonster van deze planeet. +bio-sample01=Een samenstelling van biologisch materiaal van rondom de basis. +alien-sample01=Het resultaat van uitvoerig onderzoek van dit buitenaardse ecosysteem. +equipment-chassi=Constructie die klaar is om gemonteerd te worden. +lab-instrument=We kunnen geen onderzoek doen zonder dit. +lens=Verfijnde boriumsilicate lens. +ralesia-seeds=Deze zaden kunnen uit zichzelf exploderen. +empty-gas-canister=Een lege tank om gassen in op te slaan. +tailings-dust=Ingedampt vervuild water. +gravel=Gemiddelde rotsen. +lithium-peroxide=Hoogst CO2-absorberend materiaal. +nexelit-cartridge=Lithium-nexelit binding om atmosferische CO2 absorptie te maximaliseren. +saturated-nexelit-cartridge=Gebruikte absorptiepatronen die klaar zijn om CO2 te onttrekken. +lime=Restanten van het koken van kalksteen. +fuelrod-mk01=Klaar om te verbranden. +fawogae=Best veelvoorkomende schimmel. +flask=Fragiel en duur. +bonemeal=Rijk aan voedingsstoffen. +ralesia=Buitenaardse plant die in waterstofatmonsferen groeit. +niobium-ore=Zeer nuttig metaal voor geavanceerde technologiën. +niobium-powder=Eerste stap in niobiumproductie. +niobium-dust=Tweede stap in niobiumproductie. +niobium-concentrate=Derde stap in niobiumproductie. +mukmoux-fat=Reuze, hoog geconcentreerd vet. +niobium-oxide=Niobiumoxide. +niobium-plate=Nuttig, geavanaceerd materiaal. +rare-earth-ore=Nog zeldzamer dan op aarde. +rare-earth-powder=Eerste stap in zeldzame-aardelementproductie. +rare-earth-dust=Tweede stap in zeldzame-aardelementproductie +glass-core=Hoofdgedeelte van een optische vezel. +cladding=IOF bekleding voor een optische vezel. +cladded-core=Nu reflexief! +kevlar=Kan een kogel stoppen. +kevlar-coating=Kevlar bekleding voor een optische vezel. +nbfe-alloy=Zeer sterke legering. +nbfe-coating=Sterke bekleding voor vezel. +optical-fiber=Hoge snelheid datavervoer. +copper-coating=Meer stevigheid voor de vezel. +biofilm=Goeie plek voor organisch filteren. +filtration-media=Goede filtratie module. +syngas-distilation=Syngas destillatie. +oleochemicals-distilation=Oleochemische destillatie. +oleo-methanol=Zet oleochemicalische producten om in methanol. +tar-gasification=Gasificatie van teer. +dirty-reaction=Onttrek alles uit residuen. +tar-oil=Langzame omzetting van teer tot ruwe olie. +coal-briquette=Geweldige, geweldige brandstof, maar verschikkelijke vervuiling. +calcium-carbide=Wordt meestal gebruikt om ethyn te produceren. +chromite-sand=Verfijnde metalen korrels rijk aan chroom en ijzeroxiden, met een kenmerkende, donkere glans. +boron-trioxide=Transform normaal zand in speciaal glas. +crushed-quartz=Net niet zand, net niet erts. +empty-fuel-canister=Gevuld met olieproducten om brandstofenergie op te slaan. +gunpowder=Explosief poeder bestaand uit koolstof, zwafel en pekel. +methanol-gas-canister=De simpelste alcohol, nu draagbaar. +powdered-quartz=Kristallijne structuur gereduceerd tot microscopische fragmenten. +ppd=Zorgt voor betere een pantser dan haarverf. + +[fluid-name] +coal-gas=Lichtgas +tar=Teer +syngas=Syngas +creosote=Creosoot +refsyngas=Geraffineerd syngas +acidgas=Zuur gas +carbon-dioxide=Koolstofdioxide +methanol=Methanol +muddy-sludge=Modderige slib +tailings=Residuen +flue-gas=Rookgas +combustion-mixture1=Verbrandingsmengsel +water-saline=Zout water +olefin=Alkenen +diesel=Diesel +gasoline=Benzine +aromatics=Aromaten +anthraquinone=Antrachinon +hydrogen-peroxide=Waterstofperoxide +slacked-lime=Gebluste kalk +coal-slurry=Steenkool-watersuspensie +diborane=Diboraan +boric-acid=Boorzuur +oleochemicals=Oleochemische producten +glycerol=Glycerol +organic-solvent=Organisch oplosmiddel +niobium-complex=Niobiumcomplex +rare-earth-mud=Zeldzame-aardmetalenmodder +tpa=Tereftaloylchloride (TCl) +acetylene=Ethyn +molten-glass=Gesmolten glas + +[fluid-description] +tar=Groen goud. +creosote=Standaard houtverduurzamer. +tailings=Zelfs dit giftige mijnbouwafval heeft zijn nut. +water-saline=Gedestilleerde ingenieurstranen. +tpa=Chemische grondstof voor Kevlar. +acetylene=Brands hevig, voorzichtig behandelen. + +[entity-name] +py-stack-inserter=Stapel robotarm +distilator=Destructieve-destillatiekolom MK 01 +distilator-mk02=Destructieve-destillatiekolom MK 02 +distilator-mk03=Destructieve-destillatiekolom MK 03 +distilator-mk04=Destructieve-destillatiekolom MK 04 +gasifier=Vergasser MK 01 +gasifier-mk02=Vergasser MK 02 +gasifier-mk03=Vergasser MK 03 +gasifier-mk04=Vergasser MK 04 +tar-processing-unit=Teerverwerkingsinstallatie MK 01 +tar-processing-unit-mk02=Teerverwerkingsinstallatie MK 02 +tar-processing-unit-mk03=Teerverwerkingsinstallatie MK 03 +tar-processing-unit-mk04=Teerverwerkingsinstallatie MK 04 +gasturbinemk01=Verbrandingsturbine MK 01 +gasturbinemk02=Verbrandingsturbine MK 02 +gasturbinemk03=Verbrandingsturbine MK 03 +carbon-filter=Filter MK 01 +carbon-filter-mk02=Filter MK 02 +carbon-filter-mk03=Filter MK 03 +carbon-filter-mk04=Filter MK 04 +rectisol=Rectisol MK 01 +rectisol-mk02=Rectisol MK 02 +rectisol-mk03=Rectisol MK 03 +rectisol-mk04=Rectisol MK 04 +methanol-reactor=Methanolreactor MK 01 +methanol-reactor-mk02=Methanolreactor MK 02 +methanol-reactor-mk03=Methanolreactor MK 03 +methanol-reactor-mk04=Methanolreactor MK 04 +tailings-pond=Residubekken +tailings-pond-spinner=Residubekkencentrifuge +tailings-pond-sprite=Residubekken sprite-sheet +quenching-tower=Blustoren MK 01 +quenching-tower-mk02=Blustoren MK 02 +quenching-tower-mk03=Blustoren MK 03 +quenching-tower-mk04=Blustoren MK 04 +hpf=Hogedrukoven MK 01 +hpf-mk02=Hogedrukoven MK 02 +hpf-mk03=Hogedrukoven MK 03 +hpf-mk04=Hogedrukoven MK 04 +power-house=Ketelhuis MK 01 +power-house-mk02=Ketelhuis MK 02 +power-house-mk03=Ketelhuis MK 03 +power-house-mk04=Ketelhuis MK 04 +cooling-tower-mk01=Koeltoren MK 01 +cooling-tower-mk02=Koeltoren MK 02 +evaporator=Verdamper MK 01 +evaporator-mk02=Verdamper MK 02 +evaporator-mk03=Verdamper MK 03 +evaporator-mk04=Verdamper MK 04 +desulfurizator-unit=Ontzwavelingsinstallatie MK 01 +desulfurizator-unit-mk02=Ontzwavelingsinstallatie MK 02 +desulfurizator-unit-mk03=Ontzwavelingsinstallatie MK 03 +desulfurizator-unit-mk04=Ontzwavelingsinstallatie MK 04 +olefin-plant=Alkeenfabriek MK 01 +olefin-plant-mk02=Alkeenfabriek MK 02 +olefin-plant-mk03=Alkeenfabriek MK 03 +olefin-plant-mk04=Alkeenfabriek MK 04 +soil-extractor-mk01=Grondextractor MK 01 +soil-extractor-mk02=Grondextractor MK 02 +soil-extractor-mk03=Grondextractor MK 03 +soil-extractor-mk04=Grondextractor MK 04 +ground-borer=Grondboor MK 01 +ground-borer-mk02=Grondboor MK 02 +ground-borer-mk03=Grondboor MK 03 +ground-borer-mk04=Grondboor MK 04 +fts-reactor=FTS-reactor MK 01 +fts-reactor-mk02=FTS-reactor MK 02 +fts-reactor-mk03=FTS-reactor MK 03 +fts-reactor-mk04=FTS-reator MK 04 +solid-separator=Vaste-stofseparator MK 01 +solid-separator-mk02=Vaste-stofseparator MK 02 +solid-separator-mk03=Vaste-stofseparator MK 03 +solid-separator-mk04=Vaste-stofseparator MK 04 +washer=Wasser MK 01 +washer-mk02=Wasser MK 02 +washer-mk03=Wasser MK 03 +washer-mk04=Wasser MK 04 +classifier=Classificator MK 01 +classifier-mk02=Classificator MK 02 +classifier-mk03=Classificator MK 03 +classifier-mk04=Classificator MK 04 +advanced-foundry-mk01=Geavanceerde gieterij MK 01 +advanced-foundry-mk02=Geavanceerde gieterij MK 02 +advanced-foundry-mk03=Geavanceerde gieterij MK 03 +advanced-foundry-mk04=Geavanceerde gieterij MK 04 +co2-e=CO2-opnemer +fluid-separator=Vloeistofseparator MK 01 +fluid-separator-mk02=Vloeistofseparator MK 02 +fluid-separator-mk03=Vloeistofseparator MK 03 +fluid-separator-mk04=Vloeistofseparator MK 04 +fawogae-plantation-mk01=Fawogaeplantage MK 01 +fawogae-plantation-mk02=Fawogaeplantage MK 02 +fawogae-plantation-mk03=Fawogaeplantage MK 03 +fawogae-plantation-mk04=Fawogaeplantage MK 04 +ulric-corral-mk01=Ulric veekraal +borax-mine=Kristalmijn MK 01 +borax-mine-mk02=Kristalmijn MK 02 +borax-mine-mk03=Kristalmijn MK 03 +borax-mine-mk04=Kristalmijn MK 04 +ralesia-plantation-mk01=Ralesiaplantage MK 01 +ralesia-plantation-mk02=Ralesiaplantage MK 02 +ralesia-plantation-mk03=Ralesiaplantage MK 03 +ralesia-plantation-mk04=Ralesiaplantage MK 04 +niobium-mine=Niobiummijn +jaw-crusher=Kaakbreker MK 01 +jaw-crusher-mk02=Kaakbreker MK 02 +jaw-crusher-mk03=Kaakbreker MK 03 +jaw-crusher-mk04=Kaakbreker MK 04 +ball-mill-mk01=Kogelmolen MK 01 +ball-mill-mk02=Kogelmolen MK 02 +ball-mill-mk03=Kogelmolen MK 03 +ball-mill-mk04=Kogelmolen MK 04 +mukmoux-pasture=Mukmouxweiland +rare-earth-extractor=Zeldzame-aardextractor +automated-factory-mk01=Geautomatiseerde fabriek MK 01 +automated-factory-mk02=Geautomatiseerde fabriek MK 02 +automated-factory-mk03=Geautomatiseerde fabriek MK 03 +automated-factory-mk04=Geautomatiseerde fabriek MK 04 +sand-extractor=Zandextractor MK 01 +sand-extractor-mk02=Zandextractor MK 02 +sand-extractor-mk03=Zandextractor MK 03 +sand-extractor-mk04=Zandextractor MK 04 +botanical-nursery=Botanische kwekerij MK 01 +botanical-nursery-mk02=Botanische kwekerij MK 02 +botanical-nursery-mk03=Botanische kwekerij MK 03 +botanical-nursery-mk04=Botanische kwekerij MK 04 +wpu-mk01=Houtverwerkingsinstallatie MK 01 +wpu-mk02=Houtverwerkingsinstallatie MK 02 +wpu-mk03=Houtverwerkingsinstallatie MK 03 +wpu-mk04=Houtverwerkingsinstallatie MK 04 +borax=Ruwe borax +niobium=Niobiumerts +glassworks-mk01=Glasfabriek MK 01 +glassworks-mk02=Glasfabriek MK 02 +glassworks-mk03=Glasfabriek MK 03 +glassworks-mk04=Glasfabriek MK 04 +chemical-plant-mk01=Chemicaliënfabriek MK 01 +chemical-plant-mk02=Chemicaliënfabriek MK 02 +chemical-plant-mk03=Chemicaliënfabriek MK 03 +chemical-plant-mk04=Chemicaliënfabriek MK 04 +burner-inserter=Mechanische robotarm +assembling-machine-1=Verbrandingsmontagemachine MK 01 +assembling-machine-2=Verbrandingsmontagemachine MK 02 +assembling-machine-3=Verbrandingsmontagemachine MK 03 +new-beacon=Baken AM:__1__ FM:__2__ +new-beacon-mk01=Dieetbaken AM:__1__ FM:__2__ +py-logo-15tiles=Logo + +[entity-description] +tailings-pond=Een residubekken slaat vloeistoffen op en creëert veel vervuiling door gas te ontluchten. Je hebt misschien een pomp nodig om de vloeistoffen eruit te halen. +distilator=Ontbindt onverwerkte materialen door ze tot hoge temperaturen te verhitten. +distilator-mk02=Ontbindt onverwerkte materialen door ze tot hoge temperaturen te verhitten. +distilator-mk03=Ontbindt onverwerkte materialen door ze tot hoge temperaturen te verhitten. +distilator-mk04=Ontbindt onverwerkte materialen door ze tot hoge temperaturen te verhitten. +gasifier=Een gebouw dat op organische of fossiele brandstoffen gebaseerde, koolstofhoudende materialen om zet in gassen. +gasifier-mk02=Een gebouw dat op organische of fossiele brandstoffen gebaseerde, koolstofhoudende materialen om zet in gassen. +gasifier-mk03=Een gebouw dat op organische of fossiele brandstoffen gebaseerde, koolstofhoudende materialen om zet in gassen. +gasifier-mk04=Een gebouw dat op organische of fossiele brandstoffen gebaseerde, koolstofhoudende materialen om zet in gassen. +tar-processing-unit=Ontleedt teer en bijbehorende stoffen tot meer waardevolle producten. +tar-processing-unit-mk02=Ontleedt teer en bijbehorende stoffen tot meer waardevolle producten. +tar-processing-unit-mk03=Ontleedt teer en bijbehorende stoffen tot meer waardevolle producten. +tar-processing-unit-mk04=Ontleedt teer en bijbehorende stoffen tot meer waardevolle producten. +gasturbinemk01=Genereert stroom voor een lage prijs, maar met veel vervuiling. +carbon-filter=Verwijdert onzuiverheden en levert een meer geraffineerd product. +carbon-filter-mk02=Verwijdert onzuiverheden en levert een meer geraffineerd product. +carbon-filter-mk03=Verwijdert onzuiverheden en levert een meer geraffineerd product. +carbon-filter-mk04=Verwijdert onzuiverheden en levert een meer geraffineerd product. +rectisol=Een proces dat een oplosmiddel gebruikt om zure gassen te scheiden van waardevolle voedingsgasstromen. +rectisol-mk02=Een proces dat een oplosmiddel gebruikt om zure gassen te scheiden van waardevolle voedingsgasstromen. +rectisol-mk03=Een proces dat een oplosmiddel gebruikt om zure gassen te scheiden van waardevolle voedingsgasstromen. +rectisol-mk04=Een proces dat een oplosmiddel gebruikt om zure gassen te scheiden van waardevolle voedingsgasstromen. +methanol-reactor=Zet syngas of ruwe materialen om in methanol. +methanol-reactor-mk02=Zet syngas of ruwe materialen om in methanol. +methanol-reactor-mk03=Zet syngas of ruwe materialen om in methanol. +methanol-reactor-mk04=Zet syngas of ruwe materialen om in methanol. +quenching-tower=Temperatuurregeling and gasconditionering doormiddel van verdampingskoeling, condensatie en warmteoverdracht. +quenching-tower-mk02=Temperatuurregeling and gasconditionering doormiddel van verdampingskoeling, condensatie en warmteoverdracht. +quenching-tower-mk03=Temperatuurregeling and gasconditionering doormiddel van verdampingskoeling, condensatie en warmteoverdracht. +quenching-tower-mk04=Temperatuurregeling and gasconditionering doormiddel van verdampingskoeling, condensatie en warmteoverdracht. +hpf=Kook en verbrand ingredienten in een gesloten kamer met inert gas. +hpf-mk02=Kook en verbrand ingredienten in een gesloten kamer met inert gas. +hpf-mk03=Kook en verbrand ingredienten in een gesloten kamer met inert gas. +hpf-mk04=Kook en verbrand ingredienten in een gesloten kamer met inert gas. +power-house=Meng brandstof met oxidanten om verbrandingsmengsel te creëren. +power-house-mk02=Meng brandstof met oxidanten om verbrandingsmengsel te creëren. +power-house-mk03=Meng brandstof met oxidanten om verbrandingsmengsel te creëren. +power-house-mk04=Meng brandstof met oxidanten om verbrandingsmengsel te creëren. +cooling-tower-mk01=Koel vloeistoffen voor gesloten kringen. Voor gebruik in ketelhuizen, FTS-reactoren ect. +cooling-tower-mk02=Koel vloeistoffen voor gesloten kringen. Voor gebruik in ketelhuizen, FTS-reactoren ect. +gasturbinemk02=Verbrand beter, genereert meer stroom, en vervuilt minder. +evaporator=Droog vloeistoffen om vaste stoffen te verzamelen. +evaporator-mk02=Droog vloeistoffen om vaste stoffen te verzamelen. +evaporator-mk03=Droog vloeistoffen om vaste stoffen te verzamelen. +evaporator-mk04=Droog vloeistoffen om vaste stoffen te verzamelen. +desulfurizator-unit=Verwerk zuur gas om zwafel te onttrekken. +desulfurizator-unit-mk02=Verwerk zuur gas om zwafel te onttrekken. +desulfurizator-unit-mk03=Verwerk zuur gas om zwafel te onttrekken. +desulfurizator-unit-mk04=Verwerk zuur gas om zwafel te onttrekken. +olefin-unit=Een speciaal gebouw om brandstof en op olie gebaseerde ingredienten om te zetten en produceren. +olefin-plant-mk02=Een speciaal gebouw om brandstof en op olie gebaseerde ingredienten om te zetten en produceren. +olefin-plant-mk03=Een speciaal gebouw om brandstof en op olie gebaseerde ingredienten om te zetten en produceren. +olefin-plant-mk04=Een speciaal gebouw om brandstof en op olie gebaseerde ingredienten om te zetten en produceren. +ground-borer=Enorme graafmachine. +ground-borer-mk02=Enorme graafmachine. +ground-borer-mk03=Enorme graafmachine. +ground-borer-mk04=Enorme graafmachine. +solid-separator=Een gebouw dat een mengsel van vaste stoffen op kan splitsen. +solid-separator-mk02=Een gebouw dat een mengsel van vaste stoffen op kan splitsen. +solid-separator-mk03=Een gebouw dat een mengsel van vaste stoffen op kan splitsen. +solid-separator-mk04=Een gebouw dat een mengsel van vaste stoffen op kan splitsen. +washer=Reinig ruwe ingredienten voor een betere opbrengst. +washer-mk02=Reinig ruwe ingredienten voor een betere opbrengst. +washer-mk03=Reinig ruwe ingredienten voor een betere opbrengst. +washer-mk04=Reinig ruwe ingredienten voor een betere opbrengst. +classifier=Selecteer deeltjes op een zeer delicate manier. +classifier-mk02=Selecteer deeltjes op een zeer delicate manier. +classifier-mk03=Selecteer deeltjes op een zeer delicate manier. +classifier-mk04=Selecteer deeltjes op een zeer delicate manier. +co2_absorber=Zet luchtvervuiling om in CO2. +advanced-foundry-mk01=Geavanceerde smelterij. +advanced-foundry-mk02=Geavanceerde smelterij. +advanced-foundry-mk03=Geavanceerde smelterij. +advanced-foundry-mk04=Geavanceerde smelterij. +fluid-separator=Een gebouw dat vloeistoffen kan splitsen. +fluid-separator-mk02=Een gebouw dat vloeistoffen kan splitsen. +fluid-separator-mk03=Een gebouw dat vloeistoffen kan splitsen. +fluid-separator-mk04=Een gebouw dat vloeistoffen kan splitsen. +fawogae-plantation-mk01=Groei de nuttige fawogae. +fawogae-plantation-mk02=Groei de nuttige fawogae. +fawogae-plantation-mk03=Groei de nuttige fawogae. +fawogae-plantation-mk04=Groei de nuttige fawogae. +ulric-corral-mk01=Een goeie plek om ulrics groot te brengen. +borax-mine=Onttrek ondergrondse, gekristalliseerde mineralen. +borax-mine-mk02=Onttrek ondergrondse, gekristalliseerde mineralen. +borax-mine-mk03=Onttrek ondergrondse, gekristalliseerde mineralen. +borax-mine-mk04=Onttrek ondergrondse, gekristalliseerde mineralen. +ralesia-plantation-mk01=Een gebouw gemaakt om ralesias in een waterstofatmosfeer te groeien. +ralesia-plantation-mk02=Een gebouw gemaakt om ralesias in een waterstofatmosfeer te groeien. +ralesia-plantation-mk03=Een gebouw gemaakt om ralesias in een waterstofatmosfeer te groeien. +ralesia-plantation-mk04=Een gebouw gemaakt om ralesias in een waterstofatmosfeer te groeien. +niobium-mine=Onttrek nionium ondergronds uit harde rotsen. +jaw-crusher=Gebruikt drukkracht om deeltjes te breken. +jaw-crusher-mk02=Gebruikt drukkracht om deeltjes te breken. +jaw-crusher-mk03=Gebruikt drukkracht om deeltjes te breken. +jaw-crusher-mk04=Gebruikt drukkracht om deeltjes te breken. +ball-mill-mk01=Produceer verfijnde stof uit ruwe materialen. +ball-mill-mk02=Produceer verfijnde stof uit ruwe materialen. +ball-mill-mk03=Produceer verfijnde stof uit ruwe materialen. +ball-mill-mk04=Produceer verfijnde stof uit ruwe materialen. +mukmoux-pasture=Een kalme plek om Mukmouxes groot te brengen, aardige beestjes. +rare-earth-extractor=Waardevolle minertalen die wachten om gedelft te worden. +automated-factory-mk01=Een grote fabriek die complexere producten kan maken. +automated-factory-mk02=Een grote fabriek die complexere producten kan maken. +automated-factory-mk03=Een grote fabriek die complexere producten kan maken. +automated-factory-mk04=Een grote fabriek die complexere producten kan maken. +sand-extractor=Oppervlakextractorgebouw. +sand-extractor-mk02=Oppervlakextractorgebouw. +sand-extractor-mk03=Oppervlakextractorgebouw. +sand-extractor-mk04=Oppervlakextractorgebouw. +botanical-nursery=Een plek om buitenaards leven te groeien dat fotosynthese gebruikt. +botanical-nursery-mk02=Een plek om buitenaards leven te groeien dat fotosynthese gebruikt. +botanical-nursery-mk03=Een plek om buitenaards leven te groeien dat fotosynthese gebruikt. +botanical-nursery-mk04=Een plek om buitenaards leven te groeien dat fotosynthese gebruikt. +wpu-mk01=Verander deze boomstammen in iets nuttigs. +wpu-mk02=Verander deze boomstammen in iets nuttigs. +wpu-mk03=Verander deze boomstammen in iets nuttigs. +wpu-mk04=Verander deze boomstammen in iets nuttigs. +niobium=Waardevol metaal. +glassworks-mk01=Een gebouw dat houders en vellen van glas produceert. Werkt met elke vloeistof met een brandstofwaarde. +glassworks-mk02=Een gebouw dat houders en vellen van glas produceert. Werkt met elke vloeistof met een brandstofwaarde. +glassworks-mk03=Een gebouw dat houders en vellen van glas produceert. Werkt met elke vloeistof met een brandstofwaarde. +glassworks-mk04=Een gebouw dat houders en vellen van glas produceert. Werkt met elke vloeistof met een brandstofwaarde. +co2-absorber=Koolstofafvang voor de gewetensvolle kolonisator. + +[achievement-name] +pyrrhic-victory=Pyrrhische overwinning +empire-of-dirt=Imperium van aarde +dust-to-dust=Stof naar stof +what-do-you-mean-i-didnt-win-the-game=Hoe bedoel je dat ik het spel niet gewonnen heb? +training-regimen=Trainingsschema +animal-labor=Dierlijke arbeid +is-it-a-bird=Ethisch ontwikkelen +as-per-my-last-email=Conform mijn laatste e-mail +cthulhu-fhtagn=Je goet het goed-er +no-ulterior-motives-behind-this-acronym=Geen achterliggende motieven bij dit acroniem +polished-turd=Volmaakte D.R.O.L. +taste-the-rainbow=Proef de regenboog +now-i-am-become-death=Nu ben ik de dood geworden +roids-1=De eerste stap + +[achievement-description] +pyrrhic-victory=Een overwinning die zo'n verwoestende tol op de overwinnaar heeft dat die net zo moeilijk te verslaan is. +empire-of-dirt=Produceer 1 miljoen aarde. +dust-to-dust=Produceer 1 miljoen as. +what-do-you-mean-i-didnt-win-the-game=Lancheer een tholinscapsule de ruimte in. +training-regimen=Produceer 1TJ in een urr met auoggeneratoren. +animal-labor=Plaats een caravan. +is-it-a-bird=Plaats een luchtcaravan. +as-per-my-last-email=Plaats een nucleaire caravan. Weet je zeker dat dit een goed idee is? +cthulhu-fhtagn=Laat een voorwerp bezorgen door een ocula. Schending van auteursrecht? Waar heb je het over? Ik heb nog nooit Terraria™ in mijn leven gespeeld. +no-ulterior-motives-behind-this-acronym=Ontgrendel je eerste D.R.O.L. verbetering. (Doordachte Revolutionaire Onderzoeks Loop) +polished-turd=Ontgrendel ALLE D.R.O.L.L.E.N.! (Drastische Radicale Opgroei van Lucratieve Leerzame en Experimentele Navorsing) +taste-the-rainbow=Produceer plutonium-238. +now-i-am-become-death=Produceer gebruikte reactorbrandstof. + +[mod-setting-name] +rpm_entity=Plak aanvraagsfactor voor entiteiten +rpm_items=Plak aanvraagsfactor voor voorwerpen +overload=Vervaardigingsmachine overvulfactor +future-beacons=Toekomstige bakens + +[mod-setting-description] +rpm_entity=past aan hoeveel voorwerpen aangevraagd worden wanneer een recept voor entiteiten gekopieerd/geplakt wordt. +rpm_items=past aan hoeveel voorwerpen aangevraagd worden wanneer een recept voor voorwerpen gekopieerd/geplakt wordt. +overload=past aan hoeveel voorwerpen er meer ingevoegd worden in een vervaardigingsmachine dan de benodigde hoeveelheid om aan een recept te voldoen. Standaardwaarde gebruikt de volgende formule (1.166 / (energie_benodigd / de montagemachines vervaardigingssnelheid), omhoog afgerond, en gekadert tussen 2 en 100). +future-beacons=Bakens zijn afgestemd op de opkomende py mod (Py Stellaire Expeditie).\nMet deze instelling kan je echter de afgestemde bakens nu al hebben.\nVeranderingen:\nBakens (niet dieetbakens) hebben 0.2*am*fm uitzendefficiëntie in plaats van 0.5*am*fm\nBakens kunnen enkel 5 entiteiten beïnvloeden in plaats van 25. + +[gui-game-finished] +victory=Winst! Gefeliciteerd, je hebt Pyanodon's mods overwonnen. + +[tile-name] +polluted-ground=Vervuilde grond +polluted-ground-burnt=Verbrande vervuilde grond + +[map-gen-preset-name] +py-recommended=Pyanodon aanbevolen + +[map-gen-preset-description] +py-recommended=Dit zijn de aabevolen instellingen om Pyanodon mods mee te spelen als Resource Spawner Overhaul niet actief is. Grondstoffvelden zijn net iets kleiner, zeer uiteenliggend, en veel rijker aan grondstoffen.\nVijanden en vervuiling zijn uitgeschakeld. Kliffen en water zijn een klein beetje verminderd. +default=[color=red]Deze optie is niet aanbevolen voor Pyanodon mods, overweeg om de [/color]Pyanodon aanbevolen[color=red] optie van de keuzelijst hier boven te kiezen.[/color] + +[tooltip-category] +shot=Eetbaar + +[messages] +welcome=Welkom bij Pyanodon! Onthoud om de Pyanodon Codex (knop linksboven) te bekijken voor meer details over het spel. +warning-no-preset=Het ziet er naar uit dat je niet de '__1__' mapgeneratieoptie gebruikt. De aanvankelijke grondstofvelden kunnen snel op raken, maar voor de rest is het speelbaar. +warning-biters=Het ziet er naar uit dat je bijters aan hebt staan. Pyanodon is nog niet met bijters afgestemd, er wordt aangeraden ze uit te zetten. +warning-quality=De kwaliteitmod staat aan. Dit wordt alleen ondersteun in zoverre dat het laadt en je het kan gebruiken. Het is echter compleet onafgestemd, dus het wordt niet aangeraden om Py met het te spelen. De recycler in het bijzonder is komisch onafgestemd en zou nooit gebruikt moeten worden. +warning-recipe-book=Je lijkt noch FNEI noch Recipe Book geïnstalleerd te hebben. Deze alternatieven op de ingebouwde Factoriopedia werken veel beter met revisiemods zoals Pyanodon, omdat Factoriopedia altijd alle mogelijke recepten laat zien, zelfs de recepten die je nog lang niet ontgrendeld hebt. + +[entity-status] +beacon-interference=Baken interferentie + +[alerts] +equipment-out-of-fuel=Uitrustig heeft geen brandstof meer [img=item.__1__] __2__ diff --git a/locale/nl/tips.cfg b/locale/nl/tips.cfg new file mode 100644 index 000000000..9135e0e58 --- /dev/null +++ b/locale/nl/tips.cfg @@ -0,0 +1,60 @@ +[pywiki-sections] +title=Pyanodon codex +title-2=Pyanodon codex ➤ __1__ +statistics=[item=iron-gear-wheel] Thuispagina +fluid-index=[fluid=coal-gas] Vloeistoflijst +item-index=[item=coke] Vaste-brandstofwaarden +coalprocessing=Steenkoolverwerking +ash=[item=ash] As +mechanical-inserter=[item=burner-inserter] Robotarmen +tailings-pond=[item=tailings-pond] Residubekken +combustion-mixture=[fluid=combustion-mixture1] Verbrandingsmengsel +beacon=[item=beacon] AM:FM Bakens +decay=[item=biocrud] Rot + +rawores=Ruwe ertsen +big-mines=[item=ore-lead] Grote mijnen + +[pywiki-descriptions] +ash=De meeste anorganische brandstoffen zoals [item=coal] produceren nu [item=ash] wanneer ze verbranden, net zoals [item=uranium-fuel-cell] [item=depleted-uranium-fuel-cell] produceert wanneer die verbruikt wordt.\nAs beheren is een centraal onderdeel in het begin van het spel, omdat het uiteindelijk machines vast laat lopen als het niet verwijderd wordt uit het uitvoervakje. [item=burner-inserter] kan een filter hebben om automatisch as te verwijderen. [entity=solid-separator] kan helpen om wat as te hergebruiken tot ertsen. +mechanical-inserter=De verbrandingsrobotarm is nu een [item=burner-inserter]. In tegenstelling tot het basisspel heeft het geen brandstof nodig/\n\nBenodigde brandstof:\n [entity=burner-inserter]: Gratis\n [entity=inserter]: 16.9 kW\n [entity=long-handed-inserter]: 20.11 kW\n [entity=fast-inserter]: 46.7 kW\n [entity=bulk-inserter]: 169 kW\n [entity=py-stack-inserter]: 1.6 MW\n\nRobotarmsnelheden: (kist-naar-kist)\n [entity=burner-inserter]: 0.78 armcyclus/s\n [entity=inserter]: 1.2 armcyclus/s\n [entity=long-handed-inserter]: 1.2 armcyclus/s\n [entity=fast-inserter]: 2.31 armcyclus/s\n [entity=bulk-inserter]: 2.31 armcyclus/s\n [entity=py-stack-inserter]: 1.8 armcyclus/s\n\nHoeveelheid filtervakken:\n [entity=burner-inserter]: 1\n [entity=inserter]: 2\n [entity=long-handed-inserter]: 3\n [entity=fast-inserter]: 4\n [entity=bulk-inserter]: 5\n [entity=py-stack-inserter]: 5\n\nSpeciaal:\n [entity=long-handed-inserter]: Rijkt twee tegels in plaats van één.\n [entity=bulk-inserter]: Baat van [technology=inserter-capacity-bonus-1].\n [entity=py-stack-inserter]: Baat van [technology=inserter-capacity-bonus-1]. Stapelt tot wel 8 voorwerpen op een transportbelt. +tailings-pond=Het [entity=tailings-pond] is een enorm openlucht vloeistofopslagoplossing dat wel 1,000,000 eenheden vloeistof op kan slaan. Het heeft verschillende mechanismen afhankelijk van of je er een gas of vloeistof in stopt.\n\nGassen zoals [fluid=coal-gas] worden de atmosfeer in ontlucht. Dit vernietigt gas en creëert veel vervuiling. 100 eenheden van elk gas creëren 15 eenheden vervuiling.\n\nBepaalde gassen creëren geen vervuiling:\n [fluid=oxygen]\n [fluid=hydrogen]\n [fluid=nitrogen]\n [fluid=purest-nitrogen-gas]\n [fluid=pressured-air]\n [fluid=hot-air]\n [fluid=vacuum]\n\nVloeistoffen zoals [fluid=tar] worden in het bekken opgeslagen totdat het residubekken 100% vol zit. Wanneer het deze drempelwaarde bereikt, zal het bekken overstromen. De vloeistof wordt vernietigd en er ontstaan ringen van zeer ontvlambare vervuilde tegels in het getroffen gebied.\n\nElke vloeistof met "water" in de naam sijpelt in plaats daarvan het grondwater in en zal geen vervuiling produceren. [fluid=muddy-sludge] zal ook geen vervuilde tegels produceren. De omrekeningsfactor is 500 eenheden vloeistof per vervuilde tegel. De vervuilde tegels kunnen gebruikt worden om meren mee te vullen\n\nJe kan vloeistoffen uit het bekken halen door een [entity=pump] direct aan een uitvoervakje te verbinden. [item=red-wire] en [item=green-wire] kunnen gebruikt worden om de inhoud van het bekken te lezen. +beacon=Het [entity=beacon-AM1-FM1] en [entity=diet-beacon-AM1-FM1] gebruiken radiosignalen om module-effecten te uit te zenden naar omliggende montagemachines. Elk baken heeft een AM en een FM frequentie die de effectradius, uitzendingsefficiëntie en energiegebruik bepaalt.\nDe AM en FM frequentieschuifbalk gaat van 1-5.\n\n[entity=diet-beacon-AM1-FM1]\nEffectradius:\n - AM1: 32\n - AM2: 24\n - AM3: 16\n - AM4: 8\n - AM5: 2\nUitzetefficiëntie: 0.1 * AM * FM\nEnergiegebruik: AM * (FM ^ 3) / 2 MW\n\n[entity=beacon-AM1-FM1]\nEffectradius:\n - AM1: 64\n - AM2: 48\n - AM3: 32\n - AM4: 16\n - AM5: 2\nUitzetefficiëntie: 0.2 * AM * FM\nEnergiegebruik: AM * (FM ^ 3) MW\n\nHet standaard 1AM 1FM baken heeft een grote zone en gebruikt weinig energie.\nAls een machine tegenstrijdige signalen op de AM of FM frequentie krijgt, zullen de golflengtes interferen en de machine overbelasten.\Bakens accepteren geen productiviteitsmodules zoals [item=productivity-module-3]. +combustion-mixture=Je kan [fluid=combustion-mixture1] in een [entity=gasturbinemk01] verbranden voor elektriciteit. Hogere temperaturen van de vloeistof laten de turbine op een hogere efficiëntie werken, wat meer stroom genereert. [entity=gasturbinemk01] heeft een limiet op de temperatuur die het kan accepeteren: als je het meer geeft dan de maximumtemperatuur, wordt de temperatuur beperkt tot de maximumtemperatuur, waardoor je je invoer verspilt. Turbines met een hoger niveau hebben hogere limieten. +big-mines=Voor het meeste erts worden zowel standaardgrondstofvelden zoals [entity=ore-lead] als grote rotsen zoals [entity=lead-rock] gegenereerd. De laatste zijn zo groot, dat je een grote mijn moet bouwen zoals [entity=lead-mine]. Deze grote mijnen vereisen brandstoftanks in een [item=empty-fuel-canister].\n\nDe meeste mijnen worden ontgrendeld met [technology=big-mines].\nDe vroegst beschikbare grote mijn is de [entity=salt-mine] in [technology=energy-1]. + +[pywiki-statistics] +info=Welkom in de Pyanodon Codex. Dit book bevat nuttige informatie voor je slagen in pY mods. +info-2=Bepaalde pagina's zijn interactief en kunnen de efficiëntie in je fabriek beïnvloeden. +info-3=[font=default-semibold][color=255,230,192]Sluit je aan bij de officiële pY Discord: [/color][/font] +info-4=[font=default-semibold][color=255,230,192]Ondersteun Pyanodon: [/color][/font] +info-5=[font=default-semibold][color=255,230,192]Bugmeldingen & afstemmingssuggesties: [/color][/font] +playtime=[font=default-semibold][color=255,230,192]Speeltijd: [/color][/font]__1__:__2__:__3__ +time-of-day=[font=default-semibold][color=255,230,192]Tijd: [/color][/font]__1__:__2__ __3__ +mods-installed=[font=default-semibold][color=255,230,192]Geïnstalleerde mods: [/color][/font]__1__ +buildings-placed=[font=default-semibold][color=255,230,192]Gebouwen geplaatst: [/color][/font]__1__ +recipes-unlocked=[font=default-semibold][color=255,230,192]Recepten ontgrendeld: [/color][/font]__1__ +science-produced=[font=default-semibold][color=255,230,192]Wetenschapspakketten geproduceerd: [/color][/font]__1__ +creatures-slaughtered=[font=default-semibold][color=255,230,192]Wezens geslacht: [/color][/font]__1__ +items-produced=[font=default-semibold][color=255,230,192]Voorwerpen geproduceerd: [/color][/font]__1__ +items-consumed=[font=default-semibold][color=255,230,192]Voorwerpen geconsumeerd: [/color][/font]__1__ +fluids-produced=[font=default-semibold][color=255,230,192]Vloeistoffen geproduceerd: [/color][/font]__1__ +fluids-consumed=[font=default-semibold][color=255,230,192]Vloeistoffen geconsumeerd: [/color][/font]__1__ +pollution=[font=default-semibold][color=255,230,192]Vervuiling geproduceerd: [/color][/font]__1__ +rockets-launched=[font=default-semibold][color=255,230,192]Raketten gelanceerd: [/color][/font]__1__ +trains=[font=default-semibold][color=255,230,192]Treinen: [/color][/font]__1__ +caravans=[font=default-semibold][color=255,230,192]Caravans: [/color][/font]__1__ +tech-tree-completion=[font=default-semibold][color=255,230,192]Technologieboom voltooiing: [/color][/font]__1__% +kills=[font=default-semibold][color=255,230,192]Doden: [/color][/font]__1__ +losses=[font=default-semibold][color=255,230,192]Verliezen: [/color][/font]__1__ + +[pywiki-spreadsheets] +localised-name=Naam +voidable=Vernietigbaar in +fuel-category=Brandstofcategorie +fuel-value=Brandstofwaarde +unlocked-at=Ontgrendeld op +burnt-result=Verbrand resultaat +color=Kleur +decay-time=Vergatijd +decay-result=Vergaresultaat \ No newline at end of file diff --git a/prototypes/buildings/diet-beacon.lua b/prototypes/buildings/diet-beacon.lua index 6a265e0e8..36e06d25d 100644 --- a/prototypes/buildings/diet-beacon.lua +++ b/prototypes/buildings/diet-beacon.lua @@ -10,9 +10,9 @@ TECHNOLOGY { unit = { count = 2100, ingredients = { - {type = "item", name = "automation-science-pack", amount = 6}, - {type = "item", name = "logistic-science-pack", amount = 2}, - {type = "item", name = "chemical-science-pack", amount = 1} + {"automation-science-pack", 6}, + {"logistic-science-pack", 2}, + {"chemical-science-pack", 1} }, time = 90, }, diff --git a/prototypes/fluids/refsyngas.lua b/prototypes/fluids/refsyngas.lua index f2a8f9b64..b28fd1f54 100644 --- a/prototypes/fluids/refsyngas.lua +++ b/prototypes/fluids/refsyngas.lua @@ -10,7 +10,7 @@ RECIPE { }, results = { {type = "fluid", name = "refsyngas", amount = 70} - } + }, }:add_unlock("filtration") RECIPE { @@ -43,7 +43,7 @@ RECIPE { {type = "item", name = "methanol-gas-canister", amount = 1} }, results = { - {type = "fluid", name = "refsyngas", amount = 100}, + {type = "fluid", name = "refsyngas", amount = 100, autotech_is_not_primary_source = true}, {type = "fluid", name = "water", amount = 30}, --bob hydrogen {type = "fluid", name = "carbon-dioxide", amount = 20}, {type = "fluid", name = "acidgas", amount = 60}, diff --git a/prototypes/items/canister.lua b/prototypes/items/canister.lua index 963bee145..1c2b22f01 100644 --- a/prototypes/items/canister.lua +++ b/prototypes/items/canister.lua @@ -12,8 +12,11 @@ RECIPE { results = { {type = "item", name = "empty-gas-canister", amount = 1} }, - icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", - icon_size = 32, + icons = {{ + icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", + icon_size = 32, + tint = {r = 0.5, g = 0.5, b = 0.5} + }}, subgroup = "py-items", order = "c [methanol]" }:add_unlock("methanol-processing-1") @@ -21,8 +24,11 @@ RECIPE { ITEM { type = "item", name = "empty-gas-canister", - icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", - icon_size = 32, + icons = {{ + icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", + icon_size = 32, + tint = {r = 0.5, g = 0.5, b = 0.5} + }}, flags = {}, subgroup = "py-items", order = "canister-a-[empty-gas-canister]", @@ -62,8 +68,11 @@ RECIPE { {type = "item", name = "empty-gas-canister", amount = 1}, {type = "fluid", name = "methanol", amount = 100} }, - icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", - icon_size = 32, + icons = {{ + icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", + icon_size = 32, + tint = {r = 0.5, g = 0.5, b = 0.5} + }}, subgroup = "py-items", order = "canister-b-[empty-methanol-gas-canister]" }:add_unlock("methanol-processing-1") diff --git a/prototypes/recipes/coal-processing-recipes.lua b/prototypes/recipes/coal-processing-recipes.lua index a0cd5e797..4540ba8d1 100644 --- a/prototypes/recipes/coal-processing-recipes.lua +++ b/prototypes/recipes/coal-processing-recipes.lua @@ -290,7 +290,7 @@ RECIPE { }, results = { {type = "fluid", name = "flue-gas", amount = 500}, - {type = "fluid", name = "carbon-dioxide", amount = 100}, + {type = "fluid", name = "carbon-dioxide", amount = 100, autotech_is_not_primary_source = not not mods.pyalienlife}, {type = "fluid", name = "aromatics", amount = 100}, {type = "item", name = "rich-clay", amount = 1} }, @@ -298,7 +298,7 @@ RECIPE { icon = "__pycoalprocessinggraphics__/graphics/icons/tar-distilation.png", icon_size = 32, subgroup = "py-items", - order = "t" + order = "t", }:add_unlock("tar-processing") RECIPE { diff --git a/prototypes/recipes/fuel-canister-recipes.lua b/prototypes/recipes/fuel-canister-recipes.lua index 03f37cf23..ee4baa1d0 100644 --- a/prototypes/recipes/fuel-canister-recipes.lua +++ b/prototypes/recipes/fuel-canister-recipes.lua @@ -60,7 +60,7 @@ for f, fluid in pairs(data.raw.fluid) do fuel_category = "jerry", burnt_result = "empty-fuel-canister", stack_size = 20, - ignore_for_dependencies = true, + autotech_ignore = true, unlock_results = false } @@ -85,7 +85,7 @@ for f, fluid in pairs(data.raw.fluid) do results = { {type = "item", name = fluid.name .. "-canister", amount = 1} }, - ignore_for_dependencies = true + autotech_ignore = true }:add_unlock("plastics") @@ -104,23 +104,11 @@ for f, fluid in pairs(data.raw.fluid) do {type = "fluid", name = fluid.name, amount = fuel_amount}, {type = "item", name = "empty-fuel-canister", amount = 1} }, - ignore_for_dependencies = true, + autotech_ignore = true, unlock_results = false, - --icon = "__pycoalprocessinggraphics__/graphics/icons/canister.png", - --icon_size = 32, main_product = fluid.name, subgroup = "py-items", order = "canister-b-[empty-methanol-gas-canister]" }:add_unlock("plastics") end - - if data.raw.recipe["empty-" .. fluid.name .. "-barrel"] ~= nil then - RECIPE("empty-" .. fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} - end - if data.raw.recipe[fluid.name .. "-barrel"] ~= nil then - RECIPE(fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} - end - if data.raw.item[fluid.name .. "-barrel"] ~= nil then - ITEM(fluid.name .. "-barrel"):set_fields {ignore_for_dependencies = true} - end end diff --git a/prototypes/recipes/olefin-plant-recipes.lua b/prototypes/recipes/olefin-plant-recipes.lua index cee94989d..a9b81ea25 100644 --- a/prototypes/recipes/olefin-plant-recipes.lua +++ b/prototypes/recipes/olefin-plant-recipes.lua @@ -33,7 +33,7 @@ RECIPE { {type = "fluid", name = "carbon-dioxide", amount = 200} }, results = { - {type = "fluid", name = "olefin", amount = 200} + {type = "fluid", name = "olefin", amount = 200, autotech_is_not_primary_source = true} }, main_product = "olefin", icon = "__pycoalprocessinggraphics__/graphics/icons/olefin.png", diff --git a/prototypes/recipes/seperation-recipes.lua b/prototypes/recipes/seperation-recipes.lua index 1ea92490d..7d0eb2658 100644 --- a/prototypes/recipes/seperation-recipes.lua +++ b/prototypes/recipes/seperation-recipes.lua @@ -16,7 +16,7 @@ RECIPE { icon = "__pycoalprocessinggraphics__/graphics/icons/class-pure-sand.png", icon_size = 32, subgroup = "py-items-class", - order = "b" + order = "b", }:add_unlock("separation") RECIPE { diff --git a/prototypes/technologies/coal-processing-2.lua b/prototypes/technologies/coal-processing-2.lua index 46e7c44c1..5f683a567 100644 --- a/prototypes/technologies/coal-processing-2.lua +++ b/prototypes/technologies/coal-processing-2.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"coal-processing-1"}, + prerequisites = {"coal-processing-1"}, effects = {}, unit = { count = 50, diff --git a/prototypes/technologies/coal-processing-3.lua b/prototypes/technologies/coal-processing-3.lua index e3b0561b2..efcfd9b1e 100644 --- a/prototypes/technologies/coal-processing-3.lua +++ b/prototypes/technologies/coal-processing-3.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"coal-processing-2"}, + prerequisites = {"coal-processing-2"}, effects = {}, unit = { count = 50, diff --git a/prototypes/technologies/cooling-tower-1.lua b/prototypes/technologies/cooling-tower-1.lua index 847721724..5c5c81d31 100644 --- a/prototypes/technologies/cooling-tower-1.lua +++ b/prototypes/technologies/cooling-tower-1.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"energy-1"}, + prerequisites = {"energy-1"}, effects = {}, unit = { count = 25, diff --git a/prototypes/technologies/cooling-tower-2.lua b/prototypes/technologies/cooling-tower-2.lua index 3894ce70c..9c51531a4 100644 --- a/prototypes/technologies/cooling-tower-2.lua +++ b/prototypes/technologies/cooling-tower-2.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"cooling-tower-1", "energy-2"}, + prerequisites = {"cooling-tower-1", "energy-2"}, effects = {}, unit = { count = 20, diff --git a/prototypes/technologies/energy-2.lua b/prototypes/technologies/energy-2.lua index ac38d70f1..81fdfe60e 100644 --- a/prototypes/technologies/energy-2.lua +++ b/prototypes/technologies/energy-2.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"energy-1"}, + prerequisites = {"energy-1"}, effects = {}, unit = { count = 100, diff --git a/prototypes/technologies/energy-3.lua b/prototypes/technologies/energy-3.lua index 62cec3ba5..3870ae822 100644 --- a/prototypes/technologies/energy-3.lua +++ b/prototypes/technologies/energy-3.lua @@ -4,8 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/energy-3.png", icon_size = 128, order = "c-a", - prerequisites = {}, - dependencies = {"energy-2"}, + prerequisites = {"energy-2"}, --upgrade = true, effects = {}, unit = { diff --git a/prototypes/technologies/excavation-2.lua b/prototypes/technologies/excavation-2.lua index 73dd0d471..99dfd1d16 100644 --- a/prototypes/technologies/excavation-2.lua +++ b/prototypes/technologies/excavation-2.lua @@ -4,8 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/excavation-2.png", icon_size = 128, order = "c-a", - prerequisites = {}, - dependencies = {"excavation-1"}, + prerequisites = {"excavation-1"}, --upgrade = true, effects = {}, unit = { @@ -26,8 +25,7 @@ if mods["pypetroleumhandling"] then icon = "__pycoalprocessinggraphics__/graphics/technology/excavation-3.png", icon_size = 128, order = "c-a", - prerequisites = {}, - dependencies = {"excavation-2"}, + prerequisites = {"excavation-2"}, --upgrade = true, effects = {}, unit = { diff --git a/prototypes/technologies/filtration.lua b/prototypes/technologies/filtration.lua index 3905e3915..32602adff 100644 --- a/prototypes/technologies/filtration.lua +++ b/prototypes/technologies/filtration.lua @@ -22,8 +22,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/filtration-mk02.png", icon_size = 128, order = "c-b", - prerequisites = {}, - dependencies = {"filtration"}, + prerequisites = {"filtration"}, effects = {}, unit = { count = 40, diff --git a/prototypes/technologies/fluid-processing-machines.lua b/prototypes/technologies/fluid-processing-machines.lua index 13242024a..3e561957a 100644 --- a/prototypes/technologies/fluid-processing-machines.lua +++ b/prototypes/technologies/fluid-processing-machines.lua @@ -22,8 +22,7 @@ if mods["pypetroleumhandling"] then icon = "__pycoalprocessinggraphics__/graphics/technology/fluid-processing-machines-2.png", icon_size = 128, order = "c-a", - prerequisites = {}, - dependencies = {"fluid-processing-machines-1"}, + prerequisites = {"fluid-processing-machines-1"}, effects = {}, unit = { count = 50, diff --git a/prototypes/technologies/fluid-separation.lua b/prototypes/technologies/fluid-separation.lua index db6bb8df8..1ad66b0dc 100644 --- a/prototypes/technologies/fluid-separation.lua +++ b/prototypes/technologies/fluid-separation.lua @@ -4,7 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/fluid-separation.png", icon_size = 128, order = "c-a", - prerequisites = {}, + prerequisites = {"organic-solvent"}, effects = {}, unit = { count = 35, diff --git a/prototypes/technologies/kevlar.lua b/prototypes/technologies/kevlar.lua index 4f3d8e16e..ef46355fb 100644 --- a/prototypes/technologies/kevlar.lua +++ b/prototypes/technologies/kevlar.lua @@ -23,8 +23,7 @@ if mods["pypetroleumhandling"] then icon = "__pycoalprocessinggraphics__/graphics/technology/kevlar-2.png", icon_size = 128, order = "c-a", - prerequisites = {}, - dependencies = {"kevlar"}, + prerequisites = {"kevlar"}, effects = {}, unit = { count = 50, diff --git a/prototypes/technologies/methanol-processing-2.lua b/prototypes/technologies/methanol-processing-2.lua index 94a63af52..3c9e03f12 100644 --- a/prototypes/technologies/methanol-processing-2.lua +++ b/prototypes/technologies/methanol-processing-2.lua @@ -4,8 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/methanol-processing-2.png", icon_size = 128, order = "c-b", - prerequisites = {}, - dependencies = {"methanol-processing-1"}, + prerequisites = {"methanol-processing-1"}, --upgrade = true, effects = {}, unit = { diff --git a/prototypes/technologies/niobium.lua b/prototypes/technologies/niobium.lua index 074216d76..c58470d13 100644 --- a/prototypes/technologies/niobium.lua +++ b/prototypes/technologies/niobium.lua @@ -4,7 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/niobium.png", icon_size = 128, order = "c-a", - prerequisites = {}, + prerequisites = {"organic-solvent"}, effects = {}, unit = { count = 200, diff --git a/prototypes/technologies/organic-solvent.lua b/prototypes/technologies/organic-solvent.lua index 7ab025073..efe7ff5f1 100644 --- a/prototypes/technologies/organic-solvent.lua +++ b/prototypes/technologies/organic-solvent.lua @@ -4,7 +4,7 @@ TECHNOLOGY { icon = "__pycoalprocessinggraphics__/graphics/technology/organic-solvent.png", icon_size = 128, order = "c-a", - prerequisites = {}, + prerequisites = {"coal-processing-2"}, effects = {}, unit = { count = 50, diff --git a/prototypes/technologies/stacking-belts.lua b/prototypes/technologies/stacking-belts.lua index 8ec443d18..10a3daef6 100644 --- a/prototypes/technologies/stacking-belts.lua +++ b/prototypes/technologies/stacking-belts.lua @@ -19,11 +19,11 @@ end local science_packs_that_unlock_belt_stacking = { ["logistic-science-pack"] = "logistic-science-pack", - ["py-science-pack-mk02"] = "py-science-pack-2", + ["py-science-pack-2"] = "py-science-pack-2", ["chemical-science-pack"] = "chemical-science-pack", - ["py-science-pack-mk03"] = "py-science-pack-3", + ["py-science-pack-3"] = "py-science-pack-3", ["production-science-pack"] = "production-science-pack", - ["py-science-pack-mk04"] = "py-science-pack-4", + ["py-science-pack-4"] = "py-science-pack-4", ["utility-science-pack"] = "utility-science-pack", } diff --git a/prototypes/technologies/wood-processing-2.lua b/prototypes/technologies/wood-processing-2.lua index f576d8fc6..e8612873e 100644 --- a/prototypes/technologies/wood-processing-2.lua +++ b/prototypes/technologies/wood-processing-2.lua @@ -5,8 +5,7 @@ TECHNOLOGY { icon_size = 128, order = "c-a", --upgrade = true, - prerequisites = {}, - dependencies = {"wood-processing"}, + prerequisites = {"wood-processing"}, effects = {}, unit = { count = 30, diff --git a/prototypes/updates/base-updates.lua b/prototypes/updates/base-updates.lua index 8e54f76b6..e945f0292 100644 --- a/prototypes/updates/base-updates.lua +++ b/prototypes/updates/base-updates.lua @@ -4,12 +4,12 @@ RECIPE("refined-concrete"):multiply_ingredient_amount("concrete", 0.25) -- https://github.com/pyanodon/pybugreports/issues/701 -- https://github.com/pyanodon/pybugreports/issues/713 -TECHNOLOGY("fission-reactor-equipment"):remove_pack("utility-science-pack"):add_pack("production-science-pack") +TECHNOLOGY("fission-reactor-equipment"):remove_pack("utility-science-pack"):add_pack("production-science-pack"):remove_prereq("utility-science-pack") -- (( TECHNOLOGY ))-- TECHNOLOGY("utility-science-pack"):add_pack("production-science-pack"):add_pack("military-science-pack") TECHNOLOGY("destroyer"):remove_pack("utility-science-pack"):add_pack("production-science-pack") -TECHNOLOGY("military-4"):remove_pack("utility-science-pack") +TECHNOLOGY("military-4"):remove_pack("utility-science-pack"):remove_prereq("utility-science-pack") --TODO:update fusion equipment/ fission equipment TECHNOLOGY("rocket-fuel"):add_pack("military-science-pack"):remove_prereq("advanced-oil-processing"):remove_prereq("flammables") TECHNOLOGY("kovarex-enrichment-process"):add_pack("military-science-pack") @@ -53,7 +53,7 @@ TECHNOLOGY("rocket-silo"):add_pack("military-science-pack") TECHNOLOGY("research-speed-6"):add_pack("military-science-pack") TECHNOLOGY("logistic-system"):add_pack("military-science-pack"):add_pack("production-science-pack") TECHNOLOGY("worker-robots-speed-5"):add_pack("military-science-pack") -TECHNOLOGY("worker-robots-speed-6"):add_pack("military-science-pack") +TECHNOLOGY("worker-robots-speed-6"):add_pack("military-science-pack").unit.count_formula = "1.5^(L-6)*1000" TECHNOLOGY("worker-robots-storage-3"):add_pack("military-science-pack") TECHNOLOGY("personal-roboport-mk2-equipment"):add_pack("military-science-pack"):add_pack("production-science-pack") TECHNOLOGY("mining-productivity-3"):add_pack("military-science-pack") @@ -92,7 +92,7 @@ data.raw.technology["uranium-ammo"].unit.ingredients = { } data.raw.technology["uranium-ammo"].prerequisites = {"military-2", "uranium-processing"} -TECHNOLOGY("concrete"):remove_prereq("automation-2") +TECHNOLOGY("concrete"):remove_prereq("automation-2"):remove_prereq("advanced-material-processing") -- Remove empty vanilla techs TECHNOLOGY("automation-2"):set_fields {prerequisites = {}} TECHNOLOGY("laser"):set_fields {enabled = false, hidden = true} @@ -103,17 +103,17 @@ TECHNOLOGY("productivity-module"):set_fields {prerequisites = {}} TECHNOLOGY("efficiency-module"):set_fields {prerequisites = {}} -- (( TECHNOLOGY DEPENDENCIES ))-- ---TECHNOLOGY('steel-axe'):set_fields{dependencies = {'steel-processing'}} -TECHNOLOGY("fast-inserter"):set_fields {dependencies = {"automation"}}:set_fields {prerequisites = {}} -TECHNOLOGY("military-2"):set_fields {dependencies = {"military"}} +--TECHNOLOGY('steel-axe'):set_fields{prerequisites = {'steel-processing'}} +TECHNOLOGY("fast-inserter"):set_fields {prerequisites = {"automation"}}:set_fields {prerequisites = {}} +TECHNOLOGY("military-2"):set_fields {prerequisites = {"military"}} TECHNOLOGY("gate"):set_fields {prerequisites = {"stone-wall"}}:remove_pack("logistic-science-pack") TECHNOLOGY("automobilism"):remove_pack("logistic-science-pack"):set_fields {prerequisites = {}} TECHNOLOGY("engine"):remove_pack("logistic-science-pack"):set_fields {prerequisites = {}} -TECHNOLOGY("heavy-armor"):set_fields {dependencies = {"military"}} -TECHNOLOGY("modular-armor"):set_fields {dependencies = {"heavy-armor"}} -TECHNOLOGY("power-armor"):set_fields {dependencies = {"modular-armor"}} -TECHNOLOGY("power-armor-mk2"):set_fields {dependencies = {"power-armor"}} -TECHNOLOGY("electric-energy-accumulators"):set_fields {dependencies = {"electric-energy-distribution-1"}} +TECHNOLOGY("heavy-armor"):set_fields {prerequisites = {"military"}} +TECHNOLOGY("modular-armor"):set_fields {prerequisites = {"heavy-armor"}} +TECHNOLOGY("power-armor"):set_fields {prerequisites = {"modular-armor"}} +TECHNOLOGY("power-armor-mk2"):set_fields {prerequisites = {"power-armor"}} +TECHNOLOGY("electric-energy-accumulators"):set_fields {prerequisites = {"electric-energy-distribution-1"}} TECHNOLOGY("logistic-science-pack"):set_fields {prerequisites = {}} TECHNOLOGY("chemical-science-pack"):set_fields {prerequisites = {}} @@ -378,7 +378,10 @@ data.raw["utility-constants"]["default"].max_fluid_flow = math.max(data.raw["uti data.raw["technology"]["efficiency-module"].prerequisites = {mods.pyalternativeenergy and "machine-components-mk02" or "productivity-module"} data.raw["technology"]["bulk-inserter"].prerequisites = {mods.pyhightech and "basic-electronics" or "chemical-science-pack"} if data.raw["technology"]["bulk-inserter-2"] then data.raw["technology"]["bulk-inserter-2"].prerequisites = {"bulk-inserter"} end -if mods["pypetroleumhandling"] then data.raw.technology["oil-gathering"] = nil end +if mods["pypetroleumhandling"] then + data.raw.technology["oil-gathering"] = nil + data.raw.technology["oil-processing"]:remove_prereq("oil-gathering") +end RECIPE("grenade"):replace_ingredient("coal", "gunpowder") diff --git a/scripts/generator-equipment-autofill.lua b/scripts/generator-equipment-autofill.lua index 560aeffd9..787ac6012 100644 --- a/scripts/generator-equipment-autofill.lua +++ b/scripts/generator-equipment-autofill.lua @@ -8,53 +8,104 @@ local function restock_generator_equipment(player) if not grid then return end local inventory = player.get_main_inventory() if not inventory then return end + local burners = {} + local burner_count = 0 for _, equipment in pairs(grid.equipment) do - if equipment.type ~= "generator-equipment" then goto continue end - if equipment.prototype.hidden then goto continue end - local burner = equipment.burner - if not burner then goto continue end - local burner_inventory, burnt_result_inventory = burner.inventory, burner.burnt_result_inventory - if not burner_inventory then goto continue end + -- This code scoped under a "do-end" so that the goto continue statement can jump to a location where there are no localy scoped variables defined (Lua limitation) + do + if equipment.type ~= "generator-equipment" then goto continue end + if equipment.prototype.hidden then goto continue end + local burner = equipment.burner + if not burner then goto continue end + local burner_inventory, burnt_result_inventory = burner.inventory, burner.burnt_result_inventory + if not burner_inventory then goto continue end - if burnt_result_inventory then - for i = 1, #burnt_result_inventory do - local stack = burnt_result_inventory[i] - if stack.valid_for_read then - stack.count = stack.count - inventory.insert(stack) + if burnt_result_inventory then + for i = 1, #burnt_result_inventory do + local stack = burnt_result_inventory[i] + if stack.valid_for_read then + stack.count = stack.count - inventory.insert(stack) + end end end + + if not burner_inventory.is_full() then + -- Save for adding fuel + burner_count = burner_count + 1 + burners[burner_count] = { + equipment = equipment, + burner_inventory = burner_inventory, + fuel_categories = burner.fuel_categories, + } + end end + ::continue:: + end - -- add fuel if not full - if not burner_inventory.is_full() then - for _, item_stack in pairs(inventory.get_contents()) do - if burner.fuel_categories[prototypes.item[item_stack.name].fuel_category] then - local inserted_count = burner_inventory.insert(item_stack) + -- add fuel if not full + if burner_count > 0 then + local burner_index_offset = 0 + for _, item_stack in pairs(inventory.get_contents()) do + ::again:: + local inserted_some = false + for i = 1, burner_count do + local index = ((i + burner_index_offset - 1) % (burner_count)) + 1 + local burner_data = burners[index] + if burner_data.fuel_categories[prototypes.item[item_stack.name].fuel_category] then + local item_stack_size = prototypes.item[item_stack.name].stack_size + local inserted_count = burner_data.burner_inventory.insert{ + name = item_stack.name, + quality = item_stack.quality, + count = math.min(item_stack.count, item_stack_size) + } if inserted_count ~= 0 then -- if items were inserted then remove them from the player's inventory inventory.remove{ name = item_stack.name, quality = item_stack.quality, count = inserted_count } - end -- if now full, end early - if burner_inventory.is_full() then break end + -- Manually adjust item stack for iteration + item_stack.count = item_stack.count - inserted_count + inserted_some = true + end + -- if now full, remove the burner data from the list by swapping with last item + if burner_data.burner_inventory.is_full() then + burners[index] = burners[burner_count] + burners[burner_count] = nil + burner_count = burner_count - 1 + end + -- if all burners are full, end inventory iteration early + if burner_count == 0 then break end + -- If none left in the stack, move onto next inventory item, otherwise try the next burner + if item_stack.count == 0 then + --Update the index offset so the next burner is checked first when we loop again with the next inventory item + burner_index_offset = index + break + end end end - if burner_inventory.is_empty() then - -- https://github.com/pyanodon/pybugreports/issues/877 - pcall( - player.add_custom_alert, - player.character, - {type = "virtual", name = "no-fuel"}, - {"alerts.equipment-out-of-fuel", equipment.prototype.take_result.name, equipment.prototype.localised_name}, - false - ) - end + -- if all burners are full, end inventory iteration early + if burner_count == 0 then break end + + -- We inserted soe of the items, but there's more we could insert. Try again + if inserted_some and item_stack.count ~= 0 then goto again end end + end - ::continue:: + -- Check remaining unfilled burners to see if any are empty + for _, burner_data in pairs(burners) do + if burner_data.burner_inventory.is_empty() then + -- https://github.com/pyanodon/pybugreports/issues/877 + pcall( + player.add_custom_alert, + player.character, + {type = "virtual", name = "no-fuel"}, + {"alerts.equipment-out-of-fuel", burner_data.equipment.prototype.take_result.name, burner_data.equipment.prototype.localised_name}, + false + ) + end end end diff --git a/scripts/wiki/spreadsheet-pages.lua b/scripts/wiki/spreadsheet-pages.lua index 9c80407b5..fb8d3b09b 100644 --- a/scripts/wiki/spreadsheet-pages.lua +++ b/scripts/wiki/spreadsheet-pages.lua @@ -420,6 +420,8 @@ local function generate_decay_spreadsheet_data(required_science) for name, item in pairs(prototypes.item) do local decay_ticks = item.get_spoil_ticks() if decay_ticks == 0 then goto continue end + -- TODO: Figure out why this is so damn slow. Dancing miku will consistently freeze migrations without this check. + if item.hidden then goto continue end @@ -456,7 +458,6 @@ end py.on_event(py.events.on_init(), function() local required_science = calculate_required_science() - generate_fluid_spreadsheet_data(required_science) generate_soild_fuel_spreadsheet_data(required_science) generate_decay_spreadsheet_data(required_science) diff --git a/scripts/wiki/wiki.lua b/scripts/wiki/wiki.lua index 3688866db..5a2b41343 100644 --- a/scripts/wiki/wiki.lua +++ b/scripts/wiki/wiki.lua @@ -6,7 +6,11 @@ local mod_gui = require "mod-gui" function Wiki.create_pywiki_button(player) local flow = mod_gui.get_button_flow(player) if flow.py_open_wiki then return end - flow.add {type = "sprite-button", name = "py_open_wiki", sprite = "pywiki"} + local button = flow.add {type = "sprite-button", name = "py_open_wiki", sprite = "pywiki"} + button.tooltip = {"", "[font=default-bold][color=255, 230, 192]", {"pywiki.button-tooltip"}, "[/color][/font]"} + if script.active_mods.pyalienlife then + button.tooltip = {"", button.tooltip, "\n", {"pywiki.button-tooltip-alienlife-shortcuts"}} + end end Wiki.events.on_player_created = function(event) @@ -144,13 +148,14 @@ gui_events[defines.events.on_gui_click]["py_open_wiki"] = function(event) if Wiki.get_wiki_gui(player) then Wiki.close_wiki(player) else - Wiki.open_wiki(player) if event.alt then if event.shift then - Wiki.open_page(player, find_page_index("caravan-manager")) + Wiki.open_wiki_to_page(player, "caravan-manager") else - Wiki.open_page(player, find_page_index("turd")) + Wiki.open_wiki_to_page(player, "turd") end + else + Wiki.open_wiki(player) end end end @@ -178,6 +183,11 @@ function Wiki.add_section(name) } end +function Wiki.open_wiki_to_page(player, page_name) + Wiki.open_wiki(player) + Wiki.open_page(player, find_page_index(page_name)) +end + function Wiki.open_page(player, index) local main_frame = Wiki.get_wiki_gui(player) if not main_frame then return end @@ -218,7 +228,7 @@ function Wiki.open_page(player, index) if page_data.text_only then local label = contents.add {type = "label", caption = {"pywiki-descriptions." .. page_data.name}, style = "label_with_left_padding", ignored_by_interaction = false} label.style.single_line = false - label.style.rich_text_setting = defines.rich_text_setting.highlight + label.style.rich_text_setting = page_data.rich_text_setting or defines.rich_text_setting.highlight elseif page_data.remote then remote.call(page_data.remote[1], page_data.remote[2], contents, player) end @@ -251,6 +261,7 @@ remote.add_interface("pywiki", { add_page = Wiki.add_page, add_section = Wiki.add_section, open_page = Wiki.open_page, + open_wiki_to_page = Wiki.open_wiki_to_page, get_wiki_gui = Wiki.get_wiki_gui, get_pages = Wiki.get_pages, get_page_contents = Wiki.get_page_contents, From 25ca60434602318b2d9036780016a2dd7cc6e403 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Sun, 14 Sep 2025 21:19:44 -0700 Subject: [PATCH 17/28] just hide the gui dont destroy it --- scripts/programmable-inserter.lua | 227 ++++++++++++++++-------------- 1 file changed, 121 insertions(+), 106 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 1bdbf4958..d42f69fe3 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -81,14 +81,8 @@ local function valid(metadata_index) if not metadata then return true end if not metadata.inserter.valid or (metadata.pickup_target and not metadata.pickup_target.valid) or (metadata.drop_target and not metadata.drop_target.valid) then if metadata.inserter.valid then metadata.inserter.destroy() end - if metadata.pickup_target and metadata.pickup_target.valid then - storage.programmable_inserters[metadata.pickup_target.unit_number] = nil - metadata.pickup_target.destroy() - end - if metadata.drop_target and metadata.drop_target.valid then - storage.programmable_inserters[metadata.drop_target.unit_number] = nil - metadata.drop_target.destroy() - end + if metadata.pickup_target and metadata.pickup_target.valid then metadata.pickup_target.destroy() end + if metadata.drop_target and metadata.drop_target.valid then metadata.drop_target.destroy() end storage.programmable_inserters[metadata_index] = nil game.print("detected invalid programmable inserter data!") return false @@ -131,7 +125,6 @@ local function update_targets(inserter) end end - if target then -- set new target and proper inventory target index entity.proxy_target_entity = target @@ -140,16 +133,12 @@ local function update_targets(inserter) end end -local function update_gui(entity, player_index, opened) +local function update_gui(entity, player_index) if not entity or (entity.type == "entity-ghost" and entity.ghost_type or entity.type) ~= "inserter" then return end if not valid(entity.unit_number) then return end local player = game.get_player(player_index) local tags = (entity.tags or {})["py-dynamic-inserter"] - local useful_data = { - drop_target_inventory = nil, - pickup_target_inventory = nil, - } local metadata = storage.programmable_inserters[entity.unit_number] or {} local drop_target = metadata.drop_target and (proxy_targets[(metadata.drop_target.proxy_target_entity or {}).type or ""] or {}) and metadata.drop_target.proxy_target_entity or entity.drop_target @@ -161,112 +150,136 @@ local function update_gui(entity, player_index, opened) -- check for other ghost or normal entities end - if player.gui.relative["programmable-inserter-gui"] then - player.gui.relative["programmable-inserter-gui"].destroy() - end - - local window = player.gui.relative.add{ - type = "frame", - name = "programmable-inserter-gui", - style = "invisible_frame", - anchor = { - gui = defines.relative_gui_type.inserter_gui, - position = defines.relative_gui_position.right + local relative = player.gui.relative + + if not relative["programmable-inserter-gui"] then + -- recreate main gui + local window = player.gui.relative.add{ + type = "frame", + name = "programmable-inserter-gui", + style = "invisible_frame", + anchor = { + gui = defines.relative_gui_type.inserter_gui, + position = defines.relative_gui_position.right + } } - } - -- add 'settings' button - local mini_window = window.add{ - type = "frame", - name = "mini-frame" - } - mini_window.style.top_padding = 5 - mini_window.style.bottom_padding = 5 - mini_window.style.left_padding = 5 - mini_window.style.right_padding = 5 - mini_window.visible = not opened - mini_window.add{ - type = "sprite-button", - name = "show-inserter-settings", - style = "close_button", - sprite = "utility/tip_icon", - tooltip = {"tooltip.show-inserter-settings"} - } - - -- add main settings window - local main_frame = window.add{ - type = "frame", - name = "main-frame", - direction = "vertical" - } - main_frame.visible = opened - main_frame.add{ - type = "flow", - name = "titlebar", - direction = "horizontal" - }.add{ - type = "label", - style = "frame_title", - caption = {"tooltip.inserter-settings-title"} - } - local header = main_frame.titlebar.add{ - type = "empty-widget", - style = "draggable_space_header" - } - header.style.horizontally_stretchable = true - header.style.natural_height = 24 - header.style.height = 24 - header.style.right_margin = 5 - main_frame.titlebar.add{ + -- add 'settings' button + local mini_window = window.add{ + type = "frame", + name = "mini-frame" + } + mini_window.style.top_padding = 5 + mini_window.style.bottom_padding = 5 + mini_window.style.left_padding = 5 + mini_window.style.right_padding = 5 + mini_window.add{ type = "sprite-button", - name = "hide-inserter-settings", + name = "show-inserter-settings", style = "close_button", - sprite = "utility/close", - } - - main_frame = main_frame.add{ - type = "frame", - style = "inside_shallow_frame_with_padding_and_vertical_spacing", - direction = "vertical" - } - main_frame.add{ - type = "drop-down", - name = "drop_target", - items = { + sprite = "utility/tip_icon", + tooltip = {"tooltip.show-inserter-settings"} + } + + -- add main settings window + local main_frame = window.add{ + type = "frame", + name = "main-frame", + direction = "vertical" + } + main_frame.visible = false + main_frame.add{ + type = "flow", + name = "titlebar", + direction = "horizontal" + }.add{ + type = "label", + style = "frame_title", + caption = {"tooltip.inserter-settings-title"} + } + local header = main_frame.titlebar.add{ + type = "empty-widget", + style = "draggable_space_header" + } + header.style.horizontally_stretchable = true + header.style.natural_height = 24 + header.style.height = 24 + header.style.right_margin = 5 + main_frame.titlebar.add{ + type = "sprite-button", + name = "hide-inserter-settings", + style = "close_button", + sprite = "utility/close", + } + + main_frame = main_frame.add{ + type = "frame", + name = "sub-frame", + style = "inside_shallow_frame_with_padding_and_vertical_spacing", + direction = "vertical" + } + + -- update checkboxes + main_frame.add{ + type = "drop-down", + name = "drop_target", + items = { + {"", {"inventory-target.default"}}, + {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, + {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, + {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + }, + tooltip = {"tooltip.inserter-drop-target-tooltip"}, + selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 + } + main_frame.add{ + type = "drop-down", + name = "pickup_target", + items = { + {"", {"inventory-target.default"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} + }, + tooltip = {"tooltip.inserter-pickup-target-tooltip"}, + selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 + } + else + relative["programmable-inserter-gui"].visible = true + local sub_frame = relative["programmable-inserter-gui"]["main-frame"]["sub-frame"] + + -- update checkboxes + sub_frame.drop_target.items = { {"", {"inventory-target.default"}}, {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, - }, - tooltip = {"tooltip.inserter-drop-target-tooltip"}, - selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 - } - main_frame.add{ - type = "drop-down", - name = "pickup_target", - items = { - {"", {"inventory-target.default"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} - }, - tooltip = {"tooltip.inserter-pickup-target-tooltip"}, - selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 - } + } + sub_frame.drop_target.selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 + sub_frame.pickup_target.items = { + {"", {"inventory-target.default"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, + {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} + } + sub_frame.pickup_target.selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 + end end -- TODO fix upgrade events breaking it py.on_event(py.events.on_gui_opened(), function (event) if game.get_player(event.player_index).opened_gui_type ~= defines.gui_type.entity then return end - update_gui(event.entity, event.player_index, false) + update_gui(event.entity, event.player_index) end) py.on_event(defines.events.on_gui_closed, function (event) - if game.get_player(event.player_index).gui.relative["programmable-inserter-gui"] then - game.get_player(event.player_index).gui.relative["programmable-inserter-gui"].destroy() + if game.get_player(event.player_index).gui.relative["programmable-inserter-gui"] and game.get_player(event.player_index).gui.relative["programmable-inserter-gui"].visible then + game.get_player(event.player_index).gui.relative["programmable-inserter-gui"].visible = false end end) @@ -317,7 +330,7 @@ py.on_event(defines.events.on_gui_selection_state_changed, function (event) end end - update_gui(inserter, event.player_index, true) + update_gui(inserter, event.player_index) end) py.on_event(py.events.on_gui_click(), function (event) @@ -350,6 +363,8 @@ py.on_event(py.events.on_built(), function (event) } end end + -- save data to storage + storage.programmable_inserters[event.entity.unit_number] = metadata update_targets(event.entity) elseif (event.entity.type ~= "car" or event.entity.name == "space-pod") and proxy_targets[event.entity.type] then -- connect proxies to newly created entity @@ -359,6 +374,7 @@ py.on_event(py.events.on_built(), function (event) name = "py-dynamic-inserter-target" }) do proxy.proxy_target_entity = target + -- TODO fix somehow proxy.proxy_target_inventory = proxy_targets[target.type][proxy_pointers[proxy.proxy_target_inventory]] end end @@ -384,6 +400,7 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) -- both things must be inserters if (source.type == "entity-ghost" and source.ghost_type or source.type) ~= "inserter" or (destination.type == "entity-ghost" and destination.ghost_type or destination.type) ~= "inserter" then return end + local metadata = storage.programmable_inserters[destination.unit_number] if source.type == "entity-ghost" then data = (source.tags or {})["py-dynamic-inserter"] or {} elseif storage.programmable_inserters[source.unit_number] then @@ -400,7 +417,6 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) else if not data and storage.programmable_inserters[destination.unit_number] then -- remove old references - local metadata = storage.programmable_inserters[destination.unit_number] if metadata.drop_target then metadata.drop_target.destroy() end if metadata.pickup_target then metadata.pickup_target.destroy() end storage.programmable_inserters[destination.unit_number] = nil @@ -447,7 +463,6 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) } or nil, pickup_target_inventory = data.pickup_target_inventory } - storage.programmable_inserters[destination.unit_number].pickup_target_inventory = data.pickup_target_inventory update_targets(destination) end end From 993cad20dff0644323656addfb8d1a09a58322b0 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Sun, 14 Sep 2025 23:42:04 -0700 Subject: [PATCH 18/28] actually update proxies when buildings are placed --- scripts/programmable-inserter.lua | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index d42f69fe3..fbdbf0b79 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -98,7 +98,7 @@ py.on_event(py.events.on_init(), function (event) end) local function update_targets(inserter) - if not inserter or not valid(inserter.unit_number) or not storage.programmable_inserters[inserter.unit_number] then return end + if not inserter or not storage.programmable_inserters[inserter.unit_number] or not valid(inserter.unit_number) then return end local metadata = storage.programmable_inserters[inserter.unit_number] for index, entity in pairs{ drop_target = metadata.drop_target, @@ -349,12 +349,14 @@ py.on_event(py.events.on_gui_click(), function (event) end end) +local search_range = script.active_mods.bobinserters and 4 or script.active_mods["quick-adjustable-inserters"] and 3 or 2 + py.on_event(py.events.on_built(), function (event) if event.entity.type == "inserter" and event.tags and event.tags["py-dynamic-inserter"] then -- create relevant entities local metadata = event.tags["py-dynamic-inserter"] metadata.inserter = event.entity - for index, value in pairs(metadata) do + for index in pairs(metadata) do if index:sub(-9) == "inventory" then metadata[index:sub(1,-11)] = event.entity.surface.create_entity{ name = "py-dynamic-inserter-target", @@ -369,13 +371,20 @@ py.on_event(py.events.on_built(), function (event) elseif (event.entity.type ~= "car" or event.entity.name == "space-pod") and proxy_targets[event.entity.type] then -- connect proxies to newly created entity local target = event.entity - for _, proxy in pairs(target.surface.find_entities_filtered{ - area = target.bounding_box, - name = "py-dynamic-inserter-target" + for _, inserter in pairs(target.surface.find_entities_filtered{ + area = { + { + target.bounding_box.left_top.x - search_range, + target.bounding_box.left_top.y - search_range + }, + { + target.bounding_box.right_bottom.x + search_range, + target.bounding_box.right_bottom.y + search_range + } + }, + type = "inserter" }) do - proxy.proxy_target_entity = target - -- TODO fix somehow - proxy.proxy_target_inventory = proxy_targets[target.type][proxy_pointers[proxy.proxy_target_inventory]] + update_targets(inserter) end end end) From fdc557ea163d3f6435978774f197e335552f203c Mon Sep 17 00:00:00 2001 From: Zachary Picco Date: Fri, 3 Oct 2025 09:54:24 -0500 Subject: [PATCH 19/28] Storage tank rewrite (#469) * Storage tank rewrite * There is no longer any seperation between "pyph tanks" and "pyin tanks". * Decopule py tank internal names from their fluid values. --- prototypes/item-sounds.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/prototypes/item-sounds.lua b/prototypes/item-sounds.lua index 0eb2e19e9..80e0c0782 100644 --- a/prototypes/item-sounds.lua +++ b/prototypes/item-sounds.lua @@ -174,14 +174,16 @@ add_sound_single("beacon-mk01", item_sounds.mechanical_inventory_move, item_soun -- PyIndustry if mods.pyindustry then - add_sound_single("py-tank-1000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-1500", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-3000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-4000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-5000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-6500", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-7000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-8000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-1", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-2", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-3", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-4", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-5", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-6", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-7", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-8", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-9", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) + add_sound_single("py-tank-10", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) add_sound_single("barrel-machine-mk01", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) add_sound_single("py-check-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) add_sound_single("py-overflow-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) @@ -433,8 +435,6 @@ if mods.pyfusionenergy then end -- PyPetroleumHandling if mods.pypetroleumhandling then - add_sound_single("py-tank-9000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-10000", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) add_sound_multiple("natural-gas-derrick-mk%02d", 1, 4, item_sounds.pumpjack_inventory_move, item_sounds.pumpjack_inventory_pickup, item_sounds.pumpjack_inventory_move) add_sound_multiple("oil-derrick-mk%02d", 1, 4, item_sounds.pumpjack_inventory_move, item_sounds.pumpjack_inventory_pickup, item_sounds.pumpjack_inventory_move) add_sound_multiple("oil-sand-extractor-mk%02d", 1, 4, item_sounds.drill_inventory_move, item_sounds.drill_inventory_pickup, item_sounds.drill_inventory_move) From 29ad5d8d552043a148c79fe3071e405db4fa3cd9 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Thu, 9 Oct 2025 20:05:11 -0700 Subject: [PATCH 20/28] fix misscoped variable, optimize search code --- scripts/programmable-inserter.lua | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index fbdbf0b79..a0197c0b3 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -76,7 +76,7 @@ local selection_indices ={ } local function valid(metadata_index) - metadata = storage.programmable_inserters[metadata_index] + local metadata = storage.programmable_inserters[metadata_index] -- if not valid, then remove entities (will most always be inserters being invalid) if not metadata then return true end if not metadata.inserter.valid or (metadata.pickup_target and not metadata.pickup_target.valid) or (metadata.drop_target and not metadata.drop_target.valid) then @@ -107,8 +107,7 @@ local function update_targets(inserter) -- move proxy to new target position entity.teleport(inserter[index:sub(1, -7) .. "position"]) - local target - for _, p_target in pairs(entity.surface.find_entities_filtered{ + for _, target in pairs(entity.surface.find_entities_filtered{ position = entity.position, type = { "furnace", @@ -119,17 +118,13 @@ local function update_targets(inserter) } }) do -- make sure we dont select things that we aren't supposed to see, only target things we need - if (p_target.type ~= "car" or p_target.name == "space-pod") and not p_target.prototype.hidden and proxy_targets[p_target.type][metadata[index .. "_inventory"]] then - target = p_target + if (target.type ~= "car" or target.name == "space-pod") and not target.prototype.hidden and proxy_targets[target.type][metadata[index .. "_inventory"]] then + -- set new target and proper inventory target index + entity.proxy_target_entity = target + entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] break end end - - if target then - -- set new target and proper inventory target index - entity.proxy_target_entity = target - entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] - end end end From eb9a40d4fb4d2529b21ea6cde582bdf9aff0301c Mon Sep 17 00:00:00 2001 From: Lemon <55360995+lemonlambda@users.noreply.github.com> Date: Sun, 19 Oct 2025 14:24:52 -0400 Subject: [PATCH 21/28] Linearilized up to pyrawores (#468) * Linearilized Dependencies * Linearized PyCoal and PyIndustry Linearized PyCoal and PyIndustry * PyFusionEnergy Linearization Linearizes PyCoalProcessing with PyFusionEnergy * Linearized with PyRawOres Linearized PyCoalProcessing with PyRawOres * fluid tank fixes * Final Linearization Tweaks --------- Co-authored-by: Alyssa Doubrovsky --- changelog.txt | 1 + data-updates.lua | 7 +- data.lua | 38 ++--- info.json | 1 + prototypes/buildings/advanced-foundry.lua | 12 +- prototypes/buildings/automated-factory.lua | 13 +- prototypes/buildings/ball-mill.lua | 11 +- prototypes/buildings/borax-mine.lua | 9 +- prototypes/buildings/botanical-nursery.lua | 14 +- prototypes/buildings/carbon-filter.lua | 7 +- prototypes/buildings/chemical-plant.lua | 12 ++ prototypes/buildings/classifier.lua | 5 + prototypes/buildings/cooling-tower-mk01.lua | 4 + prototypes/buildings/cooling-tower-mk02.lua | 4 + prototypes/buildings/desulfurizator-unit.lua | 13 +- prototypes/buildings/distilator.lua | 5 + prototypes/buildings/evaporator.lua | 10 ++ prototypes/buildings/fawogae-plantation.lua | 4 + prototypes/buildings/fluid-separator.lua | 15 +- prototypes/buildings/fts-reactor.lua | 11 +- prototypes/buildings/gasifier.lua | 16 +- prototypes/buildings/glassworks.lua | 7 +- prototypes/buildings/ground-borer.lua | 11 +- prototypes/buildings/hpf.lua | 5 + prototypes/buildings/jaw-crusher.lua | 8 +- prototypes/buildings/methanol-reactor.lua | 9 ++ prototypes/buildings/olefin-plant.lua | 19 ++- prototypes/buildings/power-house.lua | 9 ++ prototypes/buildings/quenching-tower.lua | 7 +- prototypes/buildings/ralesia-plantation.lua | 4 + prototypes/buildings/rectisol.lua | 11 +- prototypes/buildings/sand-extractor.lua | 8 +- prototypes/buildings/soil-extractor.lua | 11 +- prototypes/buildings/solid-separator.lua | 7 +- prototypes/buildings/tar-processing-unit.lua | 8 +- prototypes/buildings/washer.lua | 7 +- prototypes/buildings/wpu.lua | 9 +- prototypes/equipment/armor-updates.lua | 141 ++++++++++++++++++ .../equipment/portable-gasoline-generator.lua | 66 ++++++++ prototypes/fluids/aromatics.lua | 4 + prototypes/fluids/boric-acid.lua | 4 + prototypes/fluids/diborane.lua | 4 + prototypes/fluids/hydrogen-peroxide.lua | 4 + prototypes/fluids/methanol.lua | 4 + prototypes/fluids/molten-glass.lua | 4 + prototypes/fluids/niobium-complex.lua | 4 + prototypes/item-sounds.lua | 101 +++++++------ prototypes/items/canister.lua | 4 + prototypes/items/items.lua | 5 + prototypes/logo.lua | 29 +++- prototypes/menu-simulations.lua | 4 - .../recipes/advanced-foundry-recipes.lua | 4 + .../recipes/coal-processing-recipes.lua | 83 +++++++++-- prototypes/recipes/fts-reactor-recipes.lua | 4 + prototypes/recipes/mukmoux-recipes.lua | 4 + prototypes/recipes/olefin-plant-recipes.lua | 4 + prototypes/recipes/recipes.lua | 49 +++++- prototypes/recipes/seperation-recipes.lua | 5 + prototypes/tiles/py-iron-oxide.lua | 75 ++++++++++ prototypes/tiles/py-nexelit.lua | 54 +++++++ prototypes/updates/base-oil.lua | 2 +- prototypes/updates/base-updates.lua | 2 +- prototypes/updates/pyindustry-updates.lua | 34 +---- scripts/generator-equipment-autofill.lua | 13 +- 64 files changed, 891 insertions(+), 172 deletions(-) create mode 100644 prototypes/equipment/armor-updates.lua create mode 100644 prototypes/equipment/portable-gasoline-generator.lua create mode 100644 prototypes/tiles/py-iron-oxide.lua create mode 100644 prototypes/tiles/py-nexelit.lua diff --git a/changelog.txt b/changelog.txt index 227243b86..e6ba42374 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ Version: 4.0.0 Date: ??? Changes: + - Linearilized Dependencies. - Change order for muddy-sludge to set it as the default recipe. Resolves https://github.com/pyanodon/pybugreports/issues/1193 - Update recipe icon for muddy-sludge. --------------------------------------------------------------------------------------------------- diff --git a/data-updates.lua b/data-updates.lua index 5bcffd441..75bccd437 100644 --- a/data-updates.lua +++ b/data-updates.lua @@ -1,7 +1,3 @@ -if mods.pyindustry then - require "prototypes/updates/pyindustry-updates" -end - require "prototypes/updates/base-updates" require "prototypes/updates/entity-updates" require "prototypes/technologies/stacking-belts" @@ -22,6 +18,9 @@ ITEM("lab"):set("icon_size", 64) ITEM("electric-engine-unit"):set("icon", "__pycoalprocessinggraphics__/graphics/icons/electric-engine-unit.png") ITEM("electric-engine-unit"):set("icon_size", 64) +RECIPE("niobium-pipe"):remove_unlock("py-storage-tanks"):add_unlock("niobium") +RECIPE("niobium-pipe-to-ground"):remove_unlock("py-storage-tanks"):add_unlock("niobium") + RECIPE("small-electric-pole"):replace_result("small-electric-pole", {type = "item", name = "small-electric-pole", amount = 1}) RECIPE("medium-electric-pole"):add_ingredient {type = "item", name = "niobium-plate", amount = 1}:replace_ingredient("copper-plate", {type = "item", name = "copper-cable", amount = 5}):replace_ingredient("iron-stick", {type = "item", name = "nbfe-alloy", amount = 2}):remove_ingredient("steel-plate") diff --git a/data.lua b/data.lua index 60a8f0a24..e740b021d 100644 --- a/data.lua +++ b/data.lua @@ -59,6 +59,10 @@ require "prototypes/technologies/hidden-mining-fluid-autounlock" require "prototypes.ores.borax" require "prototypes.ores.niobium" +-- Armor +require "prototypes/equipment/armor-updates" +require "prototypes/equipment/portable-gasoline-generator" + -- (( RECIPES )) -- require "prototypes/recipes/recipes" @@ -83,6 +87,8 @@ require "prototypes/items/canister" -- (( TILES )) -- require "prototypes/tiles/polluted-ground" +require "prototypes/tiles/py-iron-oxide" +require "prototypes/tiles/py-nexelit" -- (( FLUIDS )) -- require "prototypes/fluids/acidgas" @@ -161,7 +167,7 @@ require "prototypes/buildings/beacon" require "prototypes/buildings/diet-beacon" require "prototypes/buildings/lab" -require 'prototypes/achievements' +require "prototypes/achievements" require "prototypes/logo" require "prototypes/menu-simulations" @@ -187,19 +193,17 @@ data.raw.fluid["methanol"].fuel_value = "1MJ" data.raw.fluid["tar"].fuel_value = "0.2MJ" --data.raw.fluid['combustion-mixture1'].fuel_value = '0.1MJ' -if mods.pyindustry then - data:extend {{ - type = "shortcut", - name = "py-toggle-equipment-fuel-manager", - action = "lua", - technology_to_unlock = "personal-roboport-equipment", - unavailable_until_unlocked = true, - toggleable = true, - style = "default", - icon = "__pycoalprocessinggraphics__/graphics/gui/toggle-equipment-fuel-manager.png", - small_icon = "__pycoalprocessinggraphics__/graphics/gui/toggle-equipment-fuel-manager.png", - icon_size = 36, - small_icon_size = 36, - order = data.raw.shortcut["toggle-equipment-movement-bonus"].order - }} -end +data:extend {{ + type = "shortcut", + name = "py-toggle-equipment-fuel-manager", + action = "lua", + technology_to_unlock = "personal-roboport-equipment", + unavailable_until_unlocked = true, + toggleable = true, + style = "default", + icon = "__pycoalprocessinggraphics__/graphics/gui/toggle-equipment-fuel-manager.png", + small_icon = "__pycoalprocessinggraphics__/graphics/gui/toggle-equipment-fuel-manager.png", + icon_size = 36, + small_icon_size = 36, + order = data.raw.shortcut["toggle-equipment-movement-bonus"].order +}} diff --git a/info.json b/info.json index d10307884..7c4a90216 100644 --- a/info.json +++ b/info.json @@ -9,6 +9,7 @@ "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.", "dependencies": [ "base >= 2.0.58", + "pyindustry >= 4.0.0", "~ pycoalprocessinggraphics >= 3.0.6", "~ pypostprocessing >= 3.0.37", "(?) DiscoScience", diff --git a/prototypes/buildings/advanced-foundry.lua b/prototypes/buildings/advanced-foundry.lua index 8342987ec..e465d341f 100644 --- a/prototypes/buildings/advanced-foundry.lua +++ b/prototypes/buildings/advanced-foundry.lua @@ -14,6 +14,10 @@ RECIPE { } }:add_unlock("steel-processing") +if mods.pyrawores then + RECIPE("advanced-foundry-mk01"):replace_ingredient_unsafe("steel-furnace", {type = "item", name = "py-burner", amount = 1}) +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -151,7 +155,10 @@ RECIPE { {type = "item", name = "engine-unit", amount = 4}, {type = "item", name = "steel-plate", amount = 40}, {type = "item", name = "plastic-bar", amount = 10}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "stainless-steel", amount = 15}, + {type = "item", name = "glass", amount = 15}, }, results = { {type = "item", name = "advanced-foundry-mk02", amount = 1} @@ -169,6 +176,8 @@ RECIPE { {type = "item", name = "processing-unit", amount = 15}, {type = "item", name = "niobium-plate", amount = 10}, {type = "item", name = "electric-engine-unit", amount = 4}, + {type = "item", name = "titanium-plate", amount = 10}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "advanced-foundry-mk03", amount = 1} @@ -184,6 +193,7 @@ RECIPE { {type = "item", name = "advanced-foundry-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 20}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "lead-plate", amount = 40} }, results = { {type = "item", name = "advanced-foundry-mk04", amount = 1} diff --git a/prototypes/buildings/automated-factory.lua b/prototypes/buildings/automated-factory.lua index abb234949..4dcee135a 100644 --- a/prototypes/buildings/automated-factory.lua +++ b/prototypes/buildings/automated-factory.lua @@ -24,6 +24,10 @@ RECIPE { } }:add_unlock("advanced-circuit") +if mods["pyrawores"] then + RECIPE("automated-factory-mk01"):replace_ingredient("advanced-circuit", "electronic-circuit"):remove_unlock("advanced-circuit"):add_unlock("fast-inserter") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -138,7 +142,9 @@ RECIPE { {type = "item", name = "plastic-bar", amount = 20}, {type = "item", name = "fast-inserter", amount = 4}, {type = "item", name = "engine-unit", amount = 4}, - {type = "item", name = "advanced-circuit", amount = 15} + {type = "item", name = "advanced-circuit", amount = 15}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "automated-factory-mk02", amount = 1} @@ -155,7 +161,9 @@ RECIPE { {type = "item", name = "bulk-inserter", amount = 4}, {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "niobium-plate", amount = 25}, - {type = "item", name = "processing-unit", amount = 10} + {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 30}, + {type = "item", name = "super-steel", amount = 30} }, results = { {type = "item", name = "automated-factory-mk03", amount = 1} @@ -171,6 +179,7 @@ RECIPE { {type = "item", name = "automated-factory-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "lead-plate", amount = 10}, }, results = { diff --git a/prototypes/buildings/ball-mill.lua b/prototypes/buildings/ball-mill.lua index 022299722..81bf6ac1d 100644 --- a/prototypes/buildings/ball-mill.lua +++ b/prototypes/buildings/ball-mill.lua @@ -1,4 +1,4 @@ -RECIPE { +local ball_mill_1 = RECIPE { type = "recipe", name = "ball-mill-mk01", energy_required = 0.5, @@ -15,6 +15,10 @@ RECIPE { } }:add_unlock("crusher") +if mods.pyrawores then + RECIPE("ball-mill-mk01"):add_ingredient_unsafe {type = "item", name = "py-asphalt", amount = 50} +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -103,6 +107,8 @@ RECIPE { {type = "item", name = "steel-plate", amount = 30}, {type = "item", name = "engine-unit", amount = 1}, {type = "item", name = "advanced-circuit", amount = 5}, + {type = "item", name = "duralumin", amount = 10}, + {type = "item", name = "stainless-steel", amount = 25}, }, results = { {type = "item", name = "ball-mill-mk02", amount = 1} @@ -119,6 +125,8 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 15}, {type = "item", name = "electric-engine-unit", amount = 2}, {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 50}, + {type = "item", name = "super-steel", amount = 15}, }, results = { {type = "item", name = "ball-mill-mk03", amount = 1} @@ -134,6 +142,7 @@ RECIPE { {type = "item", name = "ball-mill-mk03", amount = 1}, {type = "item", name = "concrete", amount = 35}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "lead-plate", amount = 30}, }, results = { {type = "item", name = "ball-mill-mk04", amount = 1} diff --git a/prototypes/buildings/borax-mine.lua b/prototypes/buildings/borax-mine.lua index a740b3e19..794cf23e7 100644 --- a/prototypes/buildings/borax-mine.lua +++ b/prototypes/buildings/borax-mine.lua @@ -147,7 +147,9 @@ RECIPE { {type = "item", name = "plastic-bar", amount = 50}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "engine-unit", amount = 3}, - {type = "item", name = "fast-transport-belt", amount = 30} + {type = "item", name = "fast-transport-belt", amount = 30}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "stainless-steel", amount = 20} }, results = { {type = "item", name = "borax-mine-mk02", amount = 1} @@ -164,7 +166,9 @@ RECIPE { {type = "item", name = "processing-unit", amount = 20}, {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 6}, - {type = "item", name = "express-transport-belt", amount = 15} + {type = "item", name = "express-transport-belt", amount = 15}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "super-steel", amount = 30} }, results = { {type = "item", name = "borax-mine-mk03", amount = 1} @@ -181,6 +185,7 @@ RECIPE { {type = "item", name = "kevlar", amount = 30}, {type = "item", name = "nbfe-alloy", amount = 15}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "borax-mine-mk04", amount = 1} diff --git a/prototypes/buildings/botanical-nursery.lua b/prototypes/buildings/botanical-nursery.lua index 52905cde1..85f765134 100644 --- a/prototypes/buildings/botanical-nursery.lua +++ b/prototypes/buildings/botanical-nursery.lua @@ -42,6 +42,10 @@ RECIPE { } }:add_unlock("wood-processing") +if mods.pyrawores then + RECIPE("botanical-nursery"):add_ingredient_unsafe {type = "item", name = "glass", amount = 10} +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -157,7 +161,9 @@ RECIPE { {type = "item", name = "botanical-nursery", amount = 1}, {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "advanced-circuit", amount = 5}, - {type = "item", name = "nexelit-plate", amount = 30} + {type = "item", name = "nexelit-plate", amount = 30}, + {type = "item", name = "duralumin", amount = 10}, + {type = "item", name = "glass", amount = 50} }, results = { {type = "item", name = "botanical-nursery-mk02", amount = 1} @@ -174,7 +180,9 @@ RECIPE { {type = "item", name = "electric-engine-unit", amount = 2}, {type = "item", name = "processing-unit", amount = 10}, {type = "item", name = "niobium-plate", amount = 40}, - {type = "item", name = "kevlar", amount = 15} + {type = "item", name = "kevlar", amount = 15}, + {type = "item", name = "titanium-plate", amount = 10}, + {type = "item", name = "stainless-steel", amount = 10} }, results = { {type = "item", name = "botanical-nursery-mk03", amount = 1} @@ -190,6 +198,8 @@ RECIPE { {type = "item", name = "botanical-nursery-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 20}, + {type = "item", name = "tin-plate", amount = 20}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "botanical-nursery-mk04", amount = 1} diff --git a/prototypes/buildings/carbon-filter.lua b/prototypes/buildings/carbon-filter.lua index 558618cf9..8d12d79c4 100644 --- a/prototypes/buildings/carbon-filter.lua +++ b/prototypes/buildings/carbon-filter.lua @@ -147,6 +147,7 @@ RECIPE { {type = "item", name = "plastic-bar", amount = 10}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "advanced-circuit", amount = 5}, + {type = "item", name = "duralumin", amount = 20}, }, results = { {type = "item", name = "carbon-filter-mk02", amount = 1} @@ -164,7 +165,9 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "niobium-pipe", amount = 10}, {type = "item", name = "electric-engine-unit", amount = 1}, - {type = "item", name = "kevlar", amount = 10} + {type = "item", name = "kevlar", amount = 10}, + {type = "item", name = "titanium-plate", amount = 30}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "carbon-filter-mk03", amount = 1} @@ -180,6 +183,8 @@ RECIPE { {type = "item", name = "carbon-filter-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 15}, {type = "item", name = "nbfe-alloy", amount = 5}, + {type = "item", name = "tin-plate", amount = 30}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "carbon-filter-mk04", amount = 1} diff --git a/prototypes/buildings/chemical-plant.lua b/prototypes/buildings/chemical-plant.lua index f9ad7e029..80edc5f71 100644 --- a/prototypes/buildings/chemical-plant.lua +++ b/prototypes/buildings/chemical-plant.lua @@ -16,6 +16,10 @@ RECIPE { } }:add_unlock("filtration") +if mods.pyrawores then + RECIPE("chemical-plant-mk01"):add_ingredient_unsafe {type = "item", name = "glass", amount = 50} +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -293,6 +297,8 @@ RECIPE { {type = "item", name = "titanium-plate", amount = 20}, {type = "item", name = "nickel-plate", amount = 50}, {type = "item", name = "engine-unit", amount = 5}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "tin-plate", amount = 25}, }, results = { {type = "item", name = "chemical-plant-mk02", amount = 1} @@ -309,6 +315,10 @@ RECIPE { {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "nichrome", amount = 20}, {type = "item", name = "glass", amount = 50}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "stainless-steel", amount = 40}, + {type = "item", name = "sc-unit", amount = 10}, + {type = "item", name = "molybdenum-plate", amount = 20}, }, results = { {type = "item", name = "chemical-plant-mk03", amount = 1} @@ -323,6 +333,8 @@ RECIPE { ingredients = { {type = "item", name = "chemical-plant-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 30}, + {type = "item", name = "super-steel", amount = 45}, + {type = "item", name = "control-unit", amount = 10}, }, results = { {type = "item", name = "chemical-plant-mk04", amount = 1} diff --git a/prototypes/buildings/classifier.lua b/prototypes/buildings/classifier.lua index d6cd04d91..208221402 100644 --- a/prototypes/buildings/classifier.lua +++ b/prototypes/buildings/classifier.lua @@ -116,6 +116,8 @@ RECIPE { {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "fast-transport-belt", amount = 30}, {type = "item", name = "steel-plate", amount = 15}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "classifier-mk02", amount = 1} @@ -134,6 +136,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 15}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-plate", amount = 10}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "classifier-mk03", amount = 1} @@ -149,6 +153,7 @@ RECIPE { {type = "item", name = "classifier-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 5}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "classifier-mk04", amount = 1} diff --git a/prototypes/buildings/cooling-tower-mk01.lua b/prototypes/buildings/cooling-tower-mk01.lua index 07d97f827..67fc3517b 100644 --- a/prototypes/buildings/cooling-tower-mk01.lua +++ b/prototypes/buildings/cooling-tower-mk01.lua @@ -14,6 +14,10 @@ RECIPE { } }:add_unlock("cooling-tower-1") +if mods.pyrawores then + RECIPE("cooling-tower-mk01"):replace_ingredient_unsafe("iron-plate", "duralumin") +end + ITEM { type = "item", name = "cooling-tower-mk01", diff --git a/prototypes/buildings/cooling-tower-mk02.lua b/prototypes/buildings/cooling-tower-mk02.lua index 3b5ea4a17..cf01ced96 100644 --- a/prototypes/buildings/cooling-tower-mk02.lua +++ b/prototypes/buildings/cooling-tower-mk02.lua @@ -25,6 +25,10 @@ RECIPE { } }:add_unlock("cooling-tower-2") +if mods.pyrawores then + RECIPE("cooling-tower-mk02"):replace_ingredient_unsafe("pipe", "niobium-pipe"):replace_ingredient_unsafe("iron-plate", "stainless-steel") +end + ITEM { type = "item", name = "cooling-tower-mk02", diff --git a/prototypes/buildings/desulfurizator-unit.lua b/prototypes/buildings/desulfurizator-unit.lua index a4d1d5716..05b113855 100644 --- a/prototypes/buildings/desulfurizator-unit.lua +++ b/prototypes/buildings/desulfurizator-unit.lua @@ -33,6 +33,10 @@ RECIPE { } }:add_unlock("desulfurization") +if mods.pyrawores then + RECIPE("desulfurizator-unit"):replace_ingredient_unsafe("iron-plate", "titanium-plate") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -137,7 +141,10 @@ RECIPE { {type = "item", name = "desulfurizator-unit", amount = 1}, {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "advanced-circuit", amount = 10}, - {type = "item", name = "nexelit-plate", amount = 10} + {type = "item", name = "nexelit-plate", amount = 10}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "tin-plate", amount = 25}, + {type = "item", name = "glass", amount = 10} }, results = { {type = "item", name = "desulfurizator-unit-mk02", amount = 1} @@ -154,7 +161,9 @@ RECIPE { {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-plate", amount = 10}, {type = "item", name = "electric-engine-unit", amount = 4}, - {type = "item", name = "kevlar", amount = 30} + {type = "item", name = "kevlar", amount = 30}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "stainless-steel", amount = 30}, }, results = { {type = "item", name = "desulfurizator-unit-mk03", amount = 1} diff --git a/prototypes/buildings/distilator.lua b/prototypes/buildings/distilator.lua index f9f365af4..5282aad3b 100644 --- a/prototypes/buildings/distilator.lua +++ b/prototypes/buildings/distilator.lua @@ -218,6 +218,8 @@ RECIPE { {type = "item", name = "advanced-circuit", amount = 5}, {type = "item", name = "plastic-bar", amount = 10}, {type = "item", name = "engine-unit", amount = 3}, + {type = "item", name = "stainless-steel", amount = 30}, + {type = "item", name = "duralumin", amount = 20}, }, results = { {type = "item", name = "distilator-mk02", amount = 1} @@ -236,6 +238,8 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-pipe", amount = 15}, + {type = "item", name = "titanium-plate", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "distilator-mk03", amount = 1} @@ -251,6 +255,7 @@ RECIPE { {type = "item", name = "distilator-mk03", amount = 1}, {type = "item", name = "pump", amount = 4}, {type = "item", name = "nbfe-alloy", amount = 15}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "distilator-mk04", amount = 1} diff --git a/prototypes/buildings/evaporator.lua b/prototypes/buildings/evaporator.lua index 87e7c72ac..f0ac6a967 100644 --- a/prototypes/buildings/evaporator.lua +++ b/prototypes/buildings/evaporator.lua @@ -34,6 +34,10 @@ RECIPE { } }:add_unlock("fluid-processing-machines-1") +if mods.pyrawores then + RECIPE("evaporator"):replace_ingredient_unsafe("iron-plate", "tin-plate") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -240,6 +244,9 @@ RECIPE { {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "nexelit-plate", amount = 10}, {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "tin-plate", amount = 25}, + {type = "item", name = "glass", amount = 10}, }, results = { {type = "item", name = "evaporator-mk02", amount = 1} @@ -257,6 +264,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 5}, {type = "item", name = "processing-unit", amount = 10}, {type = "item", name = "niobium-plate", amount = 12}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "stainless-steel", amount = 30}, }, results = { {type = "item", name = "evaporator-mk03", amount = 1} @@ -272,6 +281,7 @@ RECIPE { {type = "item", name = "evaporator-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 5}, + {type = "item", name = "super-steel", amount = 35}, }, results = { {type = "item", name = "evaporator-mk04", amount = 1} diff --git a/prototypes/buildings/fawogae-plantation.lua b/prototypes/buildings/fawogae-plantation.lua index 32980c3c1..c9f36a000 100644 --- a/prototypes/buildings/fawogae-plantation.lua +++ b/prototypes/buildings/fawogae-plantation.lua @@ -32,6 +32,10 @@ RECIPE { } } +if mods.pyrawores then + RECIPE("fawogae-plantation-mk01"):replace_ingredient_unsafe("copper-cable", "tinned-cable") +end + local fluid_boxes if mods.pyalienlife then fluid_boxes = { diff --git a/prototypes/buildings/fluid-separator.lua b/prototypes/buildings/fluid-separator.lua index 5c0ceb341..377b35a60 100644 --- a/prototypes/buildings/fluid-separator.lua +++ b/prototypes/buildings/fluid-separator.lua @@ -139,11 +139,13 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "fluid-separator", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-3", amount = 1}, {type = "item", name = "nexelit-plate", amount = 10}, {type = "item", name = "concrete", amount = 40}, {type = "item", name = "plastic-bar", amount = 10}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "fluid-separator-mk02", amount = 1} @@ -157,11 +159,13 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "fluid-separator-mk02", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-7", amount = 1}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-plate", amount = 15}, {type = "item", name = "electric-engine-unit", amount = 5}, - {type = "item", name = "kevlar", amount = 30} + {type = "item", name = "kevlar", amount = 30}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 20} }, results = { {type = "item", name = "fluid-separator-mk03", amount = 1} @@ -175,10 +179,11 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "fluid-separator-mk03", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-8", amount = 1}, {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 5}, {type = "item", name = "niobium-pipe", amount = 15}, + {type = "item", name = "super-steel", amount = 10}, }, results = { {type = "item", name = "fluid-separator-mk04", amount = 1} diff --git a/prototypes/buildings/fts-reactor.lua b/prototypes/buildings/fts-reactor.lua index 75bd123a8..882f7a175 100644 --- a/prototypes/buildings/fts-reactor.lua +++ b/prototypes/buildings/fts-reactor.lua @@ -17,6 +17,10 @@ RECIPE { } }:add_unlock("coal-processing-2") +if mods.pyrawores then + RECIPE("fts-reactor"):replace_ingredient_unsafe("stone-brick", "glass") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -267,7 +271,9 @@ RECIPE { {type = "item", name = "engine-unit", amount = 6}, {type = "item", name = "nexelit-plate", amount = 10}, {type = "item", name = "plastic-bar", amount = 10}, - {type = "item", name = "advanced-circuit", amount = 20} + {type = "item", name = "advanced-circuit", amount = 20}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "lead-plate", amount = 20} }, results = { {type = "item", name = "fts-reactor-mk02", amount = 1} @@ -284,6 +290,8 @@ RECIPE { {type = "item", name = "electric-engine-unit", amount = 6}, {type = "item", name = "kevlar", amount = 15}, {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 25}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "fts-reactor-mk03", amount = 1} @@ -299,6 +307,7 @@ RECIPE { {type = "item", name = "fts-reactor-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 15}, {type = "item", name = "nbfe-alloy", amount = 5}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "fts-reactor-mk04", amount = 1} diff --git a/prototypes/buildings/gasifier.lua b/prototypes/buildings/gasifier.lua index b6f2ba208..a530d9441 100644 --- a/prototypes/buildings/gasifier.lua +++ b/prototypes/buildings/gasifier.lua @@ -156,10 +156,12 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "gasifier", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-3", amount = 1}, {type = "item", name = "plastic-bar", amount = 30}, {type = "item", name = "engine-unit", amount = 2}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "lead-plate", amount = 20} }, results = { {type = "item", name = "gasifier-mk02", amount = 1} @@ -173,11 +175,13 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "gasifier-mk02", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-7", amount = 1}, {type = "item", name = "electric-engine-unit", amount = 2}, {type = "item", name = "kevlar", amount = 15}, {type = "item", name = "processing-unit", amount = 10}, {type = "item", name = "niobium-plate", amount = 20}, + {type = "item", name = "titanium-plate", amount = 25}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "gasifier-mk03", amount = 1} @@ -191,10 +195,12 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "gasifier-mk03", amount = 1}, - {type = "item", name = "storage-tank", amount = 1}, + {type = "item", name = "py-tank-8", amount = 1}, {type = "item", name = "nbfe-alloy", amount = 20}, + {type = "item", name = "super-steel", amount = 20}, + {type = "item", name = "tin-plate", amount = 40}, }, results = { - {type = "item", name = "gasifier-mk04", amount = 1} + {type = "item", name = "gasifier-mk04", amount = 1}, } } diff --git a/prototypes/buildings/glassworks.lua b/prototypes/buildings/glassworks.lua index e2a9bbd12..d87fae8a3 100644 --- a/prototypes/buildings/glassworks.lua +++ b/prototypes/buildings/glassworks.lua @@ -244,7 +244,9 @@ RECIPE { {type = "item", name = "glassworks-mk01", amount = 1}, {type = "item", name = "steel-plate", amount = 35}, {type = "item", name = "engine-unit", amount = 5}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "tin-plate", amount = 30} }, results = { {type = "item", name = "glassworks-mk02", amount = 1} @@ -262,6 +264,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 15}, {type = "item", name = "processing-unit", amount = 10}, {type = "item", name = "niobium-plate", amount = 20}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "glassworks-mk03", amount = 1} @@ -278,6 +282,7 @@ RECIPE { {type = "item", name = "concrete", amount = 40}, {type = "item", name = "nbfe-alloy", amount = 15}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "glassworks-mk04", amount = 1} diff --git a/prototypes/buildings/ground-borer.lua b/prototypes/buildings/ground-borer.lua index 7974fb827..8d66b9e86 100644 --- a/prototypes/buildings/ground-borer.lua +++ b/prototypes/buildings/ground-borer.lua @@ -15,6 +15,10 @@ RECIPE { } }:add_unlock("excavation-1") +if mods.pyrawores then + RECIPE("ground-borer"):replace_ingredient_unsafe("iron-plate", "titanium-plate") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -134,7 +138,9 @@ RECIPE { {type = "item", name = "concrete", amount = 40}, {type = "item", name = "plastic-bar", amount = 10}, {type = "item", name = "engine-unit", amount = 4}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "ground-borer-mk02", amount = 1} @@ -152,6 +158,8 @@ RECIPE { {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "processing-unit", amount = 10}, {type = "item", name = "kevlar", amount = 15}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "ground-borer-mk03", amount = 1} @@ -168,6 +176,7 @@ RECIPE { {type = "item", name = "concrete", amount = 40}, {type = "item", name = "nbfe-alloy", amount = 30}, {type = "item", name = "low-density-structure", amount = 15}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "ground-borer-mk04", amount = 1} diff --git a/prototypes/buildings/hpf.lua b/prototypes/buildings/hpf.lua index e9ecd86cc..1539a2b81 100644 --- a/prototypes/buildings/hpf.lua +++ b/prototypes/buildings/hpf.lua @@ -176,6 +176,8 @@ RECIPE { {type = "item", name = "advanced-circuit", amount = 10}, {type = "item", name = "steel-plate", amount = 15}, {type = "item", name = "concrete", amount = 10}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "hpf-mk02", amount = 1} @@ -193,6 +195,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 10}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-pipe", amount = 10}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "hpf-mk03", amount = 1} @@ -208,6 +212,7 @@ RECIPE { {type = "item", name = "hpf-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 20}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "hpf-mk04", amount = 1} diff --git a/prototypes/buildings/jaw-crusher.lua b/prototypes/buildings/jaw-crusher.lua index a6ad8f1a6..6988482b4 100644 --- a/prototypes/buildings/jaw-crusher.lua +++ b/prototypes/buildings/jaw-crusher.lua @@ -129,7 +129,10 @@ RECIPE { {type = "item", name = "jaw-crusher", amount = 1}, {type = "item", name = "nexelit-plate", amount = 30}, {type = "item", name = "engine-unit", amount = 4}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "stainless-steel", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "jaw-crusher-mk02", amount = 1} @@ -146,6 +149,8 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 60}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "jaw-crusher-mk03", amount = 1} @@ -161,6 +166,7 @@ RECIPE { {type = "item", name = "jaw-crusher-mk03", amount = 1}, {type = "item", name = "concrete", amount = 40}, {type = "item", name = "nbfe-alloy", amount = 15}, + {type = "item", name = "lead-plate", amount = 30}, }, results = { {type = "item", name = "jaw-crusher-mk04", amount = 1} diff --git a/prototypes/buildings/methanol-reactor.lua b/prototypes/buildings/methanol-reactor.lua index 0e99679a1..d853d8576 100644 --- a/prototypes/buildings/methanol-reactor.lua +++ b/prototypes/buildings/methanol-reactor.lua @@ -27,6 +27,10 @@ RECIPE { } }:add_unlock("methanol-processing-1") +if mods.pyrawores then + RECIPE("methanol-reactor"):replace_ingredient_unsafe("chemical-plant-mk01", "electrolyzer-mk01") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -185,6 +189,7 @@ RECIPE { {type = "item", name = "plastic-bar", amount = 50}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "engine-unit", amount = 8}, + {type = "item", name = "duralumin", amount = 20}, }, results = { {type = "item", name = "methanol-reactor-mk02", amount = 1} @@ -201,6 +206,8 @@ RECIPE { {type = "item", name = "processing-unit", amount = 20}, {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 6}, + {type = "item", name = "titanium-plate", amount = 30}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "methanol-reactor-mk03", amount = 1} @@ -217,6 +224,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 30}, {type = "item", name = "nbfe-alloy", amount = 15}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "tin-plate", amount = 30}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "methanol-reactor-mk04", amount = 1} diff --git a/prototypes/buildings/olefin-plant.lua b/prototypes/buildings/olefin-plant.lua index ee17644f5..7e74e5ec0 100644 --- a/prototypes/buildings/olefin-plant.lua +++ b/prototypes/buildings/olefin-plant.lua @@ -15,6 +15,10 @@ RECIPE { } }:add_unlock("lubricant") +if mods.pyrawores then + RECIPE("olefin-plant"):replace_ingredient_unsafe("chemical-plant-mk01", "electrolyzer-mk01"):replace_ingredient_unsafe("advanced-circuit", "electronic-circuit") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -163,12 +167,14 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "olefin-plant", amount = 1}, - {type = "item", name = "storage-tank", amount = 3}, + {type = "item", name = "py-tank-3", amount = 3}, {type = "item", name = "advanced-circuit", amount = 10}, {type = "item", name = "pump", amount = 4}, {type = "item", name = "concrete", amount = 40}, {type = "item", name = "engine-unit", amount = 2}, - {type = "item", name = "nexelit-plate", amount = 10} + {type = "item", name = "nexelit-plate", amount = 10}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "tin-plate", amount = 25} }, results = { {type = "item", name = "olefin-plant-mk02", amount = 1} @@ -182,12 +188,14 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "olefin-plant-mk02", amount = 1}, - {type = "item", name = "storage-tank", amount = 3}, + {type = "item", name = "py-tank-7", amount = 3}, {type = "item", name = "processing-unit", amount = 15}, {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "pump", amount = 4}, {type = "item", name = "electric-engine-unit", amount = 4}, - {type = "item", name = "kevlar", amount = 20} + {type = "item", name = "kevlar", amount = 20}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "stainless-steel", amount = 30} }, results = { {type = "item", name = "olefin-plant-mk03", amount = 1} @@ -201,10 +209,11 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "olefin-plant-mk03", amount = 1}, - {type = "item", name = "storage-tank", amount = 3}, + {type = "item", name = "py-tank-8", amount = 3}, {type = "item", name = "pump", amount = 4}, {type = "item", name = "nbfe-alloy", amount = 20}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "super-steel", amount = 35}, }, results = { {type = "item", name = "olefin-plant-mk04", amount = 1} diff --git a/prototypes/buildings/power-house.lua b/prototypes/buildings/power-house.lua index a83f94f08..ee2d261f3 100644 --- a/prototypes/buildings/power-house.lua +++ b/prototypes/buildings/power-house.lua @@ -42,6 +42,10 @@ RECIPE { } }:add_unlock("energy-1") +if mods.pyrawores then + RECIPE("power-house"):replace_ingredient_unsafe("iron-plate", "lead-plate") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -198,6 +202,8 @@ RECIPE { {type = "item", name = "fast-transport-belt", amount = 30}, {type = "item", name = "steel-plate", amount = 15}, {type = "item", name = "engine-unit", amount = 1}, + {type = "item", name = "duralumin", amount = 15}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "power-house-mk02", amount = 1} @@ -215,6 +221,8 @@ RECIPE { {type = "item", name = "kevlar", amount = 15}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-plate", amount = 10}, + {type = "item", name = "titanium-plate", amount = 40}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "power-house-mk03", amount = 1} @@ -230,6 +238,7 @@ RECIPE { {type = "item", name = "power-house-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 5}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "lead-plate", amount = 20} }, results = { {type = "item", name = "power-house-mk04", amount = 1} diff --git a/prototypes/buildings/quenching-tower.lua b/prototypes/buildings/quenching-tower.lua index e4c1c5dde..f8ca77aa2 100644 --- a/prototypes/buildings/quenching-tower.lua +++ b/prototypes/buildings/quenching-tower.lua @@ -165,6 +165,8 @@ RECIPE { {type = "item", name = "pump", amount = 4}, {type = "item", name = "advanced-circuit", amount = 15}, {type = "item", name = "engine-unit", amount = 1}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "quenching-tower-mk02", amount = 1} @@ -181,7 +183,9 @@ RECIPE { {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "niobium-pipe", amount = 20}, - {type = "item", name = "processing-unit", amount = 10} + {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 25}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "quenching-tower-mk03", amount = 1} @@ -198,6 +202,7 @@ RECIPE { {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 10}, {type = "item", name = "kevlar", amount = 20}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "quenching-tower-mk04", amount = 1} diff --git a/prototypes/buildings/ralesia-plantation.lua b/prototypes/buildings/ralesia-plantation.lua index c36ef89ef..cad3bd310 100644 --- a/prototypes/buildings/ralesia-plantation.lua +++ b/prototypes/buildings/ralesia-plantation.lua @@ -99,6 +99,10 @@ RECIPE { } }:add_unlock("ralesia") +if mods.pyrawores then + RECIPE("ralesia-plantation-mk01"):replace_ingredient_unsafe("stone", "glass") +end + for i = 1, 4 do if not mods.pyalienlife and i == 2 then return end diff --git a/prototypes/buildings/rectisol.lua b/prototypes/buildings/rectisol.lua index 3aa769d83..8e5224b7e 100644 --- a/prototypes/buildings/rectisol.lua +++ b/prototypes/buildings/rectisol.lua @@ -221,12 +221,13 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "rectisol", amount = 1}, - {type = "item", name = "storage-tank", amount = 2}, + {type = "item", name = "py-tank-3", amount = 2}, {type = "item", name = "advanced-circuit", amount = 25}, {type = "item", name = "plastic-bar", amount = 50}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "pump", amount = 2}, {type = "item", name = "engine-unit", amount = 1}, + {type = "item", name = "duralumin", amount = 20}, }, results = { {type = "item", name = "rectisol-mk02", amount = 1} @@ -240,11 +241,13 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "rectisol-mk02", amount = 1}, - {type = "item", name = "storage-tank", amount = 2}, + {type = "item", name = "py-tank-7", amount = 2}, {type = "item", name = "processing-unit", amount = 20}, {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "pump", amount = 2}, + {type = "item", name = "titanium-plate", amount = 30}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "rectisol-mk03", amount = 1} @@ -258,10 +261,12 @@ RECIPE { enabled = false, ingredients = { {type = "item", name = "rectisol-mk03", amount = 1}, - {type = "item", name = "storage-tank", amount = 2}, + {type = "item", name = "py-tank-8", amount = 2}, {type = "item", name = "kevlar", amount = 30}, {type = "item", name = "nbfe-alloy", amount = 15}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "tin-plate", amount = 30}, + {type = "item", name = "super-steel", amount = 20}, }, results = { {type = "item", name = "rectisol-mk04", amount = 1} diff --git a/prototypes/buildings/sand-extractor.lua b/prototypes/buildings/sand-extractor.lua index 4f6692cba..0e51d5370 100644 --- a/prototypes/buildings/sand-extractor.lua +++ b/prototypes/buildings/sand-extractor.lua @@ -117,6 +117,9 @@ RECIPE { {type = "item", name = "engine-unit", amount = 5}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "advanced-circuit", amount = 5}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "stainless-steel", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "sand-extractor-mk02", amount = 1} @@ -134,7 +137,9 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "niobium-pipe", amount = 10}, {type = "item", name = "electric-engine-unit", amount = 1}, - {type = "item", name = "kevlar", amount = 10} + {type = "item", name = "kevlar", amount = 10}, + {type = "item", name = "titanium-plate", amount = 60}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "sand-extractor-mk03", amount = 1} @@ -150,6 +155,7 @@ RECIPE { {type = "item", name = "sand-extractor-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 20}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "lead-plate", amount = 30}, }, results = { {type = "item", name = "sand-extractor-mk04", amount = 1} diff --git a/prototypes/buildings/soil-extractor.lua b/prototypes/buildings/soil-extractor.lua index 63872694e..a841ec4c5 100644 --- a/prototypes/buildings/soil-extractor.lua +++ b/prototypes/buildings/soil-extractor.lua @@ -30,6 +30,10 @@ RECIPE { } } +if mods.pyrawores then + RECIPE("soil-extractor-mk01"):replace_ingredient_unsafe("copper-cable", "tinned-cable") +end + for i = 1, 4 do if not mods.pyrawores and i == 2 then return end @@ -169,7 +173,9 @@ RECIPE { {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "pump", amount = 4}, {type = "item", name = "advanced-circuit", amount = 15}, - {type = "item", name = "copper-cable", amount = 50}, + {type = "item", name = "tinned-cable", amount = 50}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "stainless-steel", amount = 30}, }, results = { {type = "item", name = "soil-extractor-mk02", amount = 1} @@ -186,6 +192,8 @@ RECIPE { {type = "item", name = "processing-unit", amount = 20}, {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 6}, + {type = "item", name = "titanium-plate", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "soil-extractor-mk03", amount = 1} @@ -201,6 +209,7 @@ RECIPE { {type = "item", name = "soil-extractor-mk03", amount = 1}, {type = "item", name = "pump", amount = 1}, {type = "item", name = "nbfe-alloy", amount = 35}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "soil-extractor-mk04", amount = 1} diff --git a/prototypes/buildings/solid-separator.lua b/prototypes/buildings/solid-separator.lua index 7dcd5d108..d0702ddc9 100644 --- a/prototypes/buildings/solid-separator.lua +++ b/prototypes/buildings/solid-separator.lua @@ -103,7 +103,9 @@ RECIPE { {type = "item", name = "engine-unit", amount = 6}, {type = "item", name = "nexelit-plate", amount = 10}, {type = "item", name = "plastic-bar", amount = 10}, - {type = "item", name = "advanced-circuit", amount = 20} + {type = "item", name = "advanced-circuit", amount = 20}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "tin-plate", amount = 30}, }, results = { {type = "item", name = "solid-separator-mk02", amount = 1} @@ -122,6 +124,8 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 20}, {type = "item", name = "processing-unit", amount = 5}, {type = "item", name = "niobium-pipe", amount = 15}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 15}, }, results = { {type = "item", name = "solid-separator-mk03", amount = 1} @@ -137,6 +141,7 @@ RECIPE { {type = "item", name = "solid-separator-mk03", amount = 1}, {type = "item", name = "nbfe-alloy", amount = 20}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "solid-separator-mk04", amount = 1} diff --git a/prototypes/buildings/tar-processing-unit.lua b/prototypes/buildings/tar-processing-unit.lua index 5bf0dae7c..3e07dcf8d 100644 --- a/prototypes/buildings/tar-processing-unit.lua +++ b/prototypes/buildings/tar-processing-unit.lua @@ -210,7 +210,9 @@ RECIPE { {type = "item", name = "nexelit-plate", amount = 20}, {type = "item", name = "concrete", amount = 60}, {type = "item", name = "plastic-bar", amount = 10}, - {type = "item", name = "advanced-circuit", amount = 10} + {type = "item", name = "advanced-circuit", amount = 10}, + {type = "item", name = "duralumin", amount = 20}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "tar-processing-unit-mk02", amount = 1} @@ -228,6 +230,8 @@ RECIPE { {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 2}, {type = "item", name = "pump", amount = 2}, + {type = "item", name = "titanium-plate", amount = 25}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "tar-processing-unit-mk03", amount = 1} @@ -244,6 +248,8 @@ RECIPE { {type = "item", name = "pump", amount = 4}, {type = "item", name = "nbfe-alloy", amount = 20}, {type = "item", name = "low-density-structure", amount = 10}, + {type = "item", name = "super-steel", amount = 20}, + {type = "item", name = "tin-plate", amount = 40}, }, results = { {type = "item", name = "tar-processing-unit-mk04", amount = 1} diff --git a/prototypes/buildings/washer.lua b/prototypes/buildings/washer.lua index c16dc722c..992dfe6d7 100644 --- a/prototypes/buildings/washer.lua +++ b/prototypes/buildings/washer.lua @@ -137,7 +137,9 @@ RECIPE { {type = "item", name = "washer", amount = 1}, {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "advanced-circuit", amount = 5}, - {type = "item", name = "nexelit-plate", amount = 30} + {type = "item", name = "nexelit-plate", amount = 30}, + {type = "item", name = "duralumin", amount = 30}, + {type = "item", name = "lead-plate", amount = 20}, }, results = { {type = "item", name = "washer-mk02", amount = 1} @@ -154,6 +156,8 @@ RECIPE { {type = "item", name = "processing-unit", amount = 20}, {type = "item", name = "niobium-plate", amount = 30}, {type = "item", name = "electric-engine-unit", amount = 6}, + {type = "item", name = "titanium-plate", amount = 20}, + {type = "item", name = "stainless-steel", amount = 20}, }, results = { {type = "item", name = "washer-mk03", amount = 1} @@ -169,6 +173,7 @@ RECIPE { {type = "item", name = "washer-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 15}, {type = "item", name = "nbfe-alloy", amount = 5}, + {type = "item", name = "super-steel", amount = 10}, }, results = { {type = "item", name = "washer-mk04", amount = 1} diff --git a/prototypes/buildings/wpu.lua b/prototypes/buildings/wpu.lua index b21ba7c85..8131e1348 100644 --- a/prototypes/buildings/wpu.lua +++ b/prototypes/buildings/wpu.lua @@ -129,12 +129,13 @@ RECIPE { energy_required = 0.5, enabled = false, ingredients = { - {type = "item", name = "wpu-mk01", amount = 1}, + {type = "item", name = "wpu-mk01", amount = 1}, {type = "item", name = "engine-unit", amount = 2}, {type = "item", name = "advanced-circuit", amount = 25}, {type = "item", name = "plastic-bar", amount = 50}, {type = "item", name = "nexelit-plate", amount = 15}, {type = "item", name = "fast-inserter", amount = 4}, + {type = "item", name = "duralumin", amount = 10}, }, results = { {type = "item", name = "wpu-mk02", amount = 1} @@ -151,7 +152,9 @@ RECIPE { {type = "item", name = "bulk-inserter", amount = 4}, {type = "item", name = "electric-engine-unit", amount = 4}, {type = "item", name = "niobium-plate", amount = 25}, - {type = "item", name = "processing-unit", amount = 10} + {type = "item", name = "processing-unit", amount = 10}, + {type = "item", name = "titanium-plate", amount = 10}, + {type = "item", name = "stainless-steel", amount = 10}, }, results = { {type = "item", name = "wpu-mk03", amount = 1} @@ -167,6 +170,8 @@ RECIPE { {type = "item", name = "wpu-mk03", amount = 1}, {type = "item", name = "low-density-structure", amount = 10}, {type = "item", name = "nbfe-alloy", amount = 10}, + {type = "item", name = "tin-plate", amount = 20}, + {type = "item", name = "super-steel", amount = 30}, }, results = { {type = "item", name = "wpu-mk04", amount = 1} diff --git a/prototypes/equipment/armor-updates.lua b/prototypes/equipment/armor-updates.lua new file mode 100644 index 000000000..6170cb039 --- /dev/null +++ b/prototypes/equipment/armor-updates.lua @@ -0,0 +1,141 @@ +data:extend {{ + name = "light-armor-equipment-grid", + type = "equipment-grid", + height = 6, + width = 4, + equipment_categories = {"armor"} +}} + +data:extend {{ + name = "heavy-armor-equipment-grid", + type = "equipment-grid", + height = 8, + width = 6, + equipment_categories = {"armor"} +}} + +data.raw.armor["light-armor"].equipment_grid = "light-armor-equipment-grid" +data.raw.armor["heavy-armor"].equipment_grid = "heavy-armor-equipment-grid" + +data.raw["equipment-grid"]["small-equipment-grid"].width = 10 +data.raw["equipment-grid"]["small-equipment-grid"].height = 8 +data.raw["equipment-grid"]["medium-equipment-grid"].width = 12 +data.raw["equipment-grid"]["medium-equipment-grid"].height = 10 +data.raw["equipment-grid"]["large-equipment-grid"].width = 14 +data.raw["equipment-grid"]["large-equipment-grid"].height = 12 + +data.raw.armor["light-armor"].inventory_size_bonus = 20 +data.raw.armor["heavy-armor"].inventory_size_bonus = 40 +data.raw.armor["modular-armor"].inventory_size_bonus = 60 +data.raw.armor["power-armor"].inventory_size_bonus = 80 +data.raw.armor["power-armor-mk2"].inventory_size_bonus = 100 + +-- This should fix this issue https://github.com/pyanodon/pybugreports/issues/1050 +-- IF IF IF IF pyindustry and or pycoalprocessing are enabled only +if mods.pyhightech then + data.raw.technology["battery-equipment"].hidden = true + data.raw.technology["battery-equipment"].enabled = false + data.raw.recipe["battery-equipment"].hidden = true + data.raw.item["battery-equipment"].hidden = true + data.raw.item["battery-equipment"].place_as_equipment_result = nil + data.raw.item["battery-equipment"].localised_name = {"equipment-name.battery-equipment"} + data.raw.technology["battery-mk2-equipment"].hidden = true + data.raw.technology["battery-mk2-equipment"].enabled = false + data.raw.recipe["battery-mk2-equipment"].hidden = true + data.raw.item["battery-mk2-equipment"].hidden = true + data.raw.item["battery-mk2-equipment"].place_as_equipment_result = nil + data.raw.item["battery-mk2-equipment"].localised_name = {"equipment-name.battery-mk2-equipment"} +end + +data:extend {{ + name = "personal-fusion-cell", + type = "fuel-category" +}} + +ITEM { + type = "item", + name = "personal-fusion-cell", + icon = "__pyindustrygraphics__/graphics/icons/fusion-cell.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-cb[personal-fusion-cell]", + stack_size = 10, + burnt_result = "personal-fusion-cell-used", + fuel_value = "2GJ", + fuel_category = "personal-fusion-cell" +} + +RECIPE { + type = "recipe", + name = "personal-fusion-cell", + energy_required = 10, + category = "crafting-with-fluid", + enabled = false, + ingredients = { + {type = "item", name = "barrel", amount = 1}, + {type = "fluid", name = "water", amount = 100} + }, + results = { + {type = "item", name = "personal-fusion-cell", amount = 1} + } +}:add_unlock("fission-reactor-equipment") + +ITEM { + type = "item", + name = "personal-fusion-cell-used", + icon = "__pyindustrygraphics__/graphics/icons/empty-fusion-cell.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-cb[personal-fusion-cell-used]", + stack_size = 10, +} + +RECIPE { + type = "recipe", + name = "personal-fusion-cell-refuel", + energy_required = 10, + category = "crafting-with-fluid", + enabled = false, + ingredients = { + {type = "item", name = "personal-fusion-cell-used", amount = 1}, + {type = "fluid", name = "water", amount = 100} + }, + results = { + {type = "item", name = "personal-fusion-cell", amount = 1} + } +}:add_unlock("fission-reactor-equipment") + +data.raw.item["solar-panel-equipment"].subgroup = "py-generator-equipment" +data.raw.item["solar-panel-equipment"].order = "a[energy-source]-b[solar-panel-equipment]" + +data.raw.technology["fission-reactor-equipment"].icons = util.technology_icon_constant_equipment("__pyindustrygraphics__/graphics/technology/fusion-reactor-equipment.png") +data.raw.technology["fission-reactor-equipment"].icon_size = 256 +data.raw.technology["fission-reactor-equipment"].icon = nil +data.raw.item["fission-reactor-equipment"].icon = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png" +data.raw.item["fission-reactor-equipment"].icon_size = 256 +data.raw.item["fission-reactor-equipment"].subgroup = "py-generator-equipment" +data.raw.item["fission-reactor-equipment"].order = "a[energy-source]-c[fission-reactor-equipment]" +data.raw["generator-equipment"]["fission-reactor-equipment"].power = "2.7MW" +data.raw["generator-equipment"]["fission-reactor-equipment"].burner = { + type = "burner", + fuel_inventory_size = 4, + burnt_inventory_size = 4, + fuel_categories = {"personal-fusion-cell"} +} +data.raw["generator-equipment"]["fission-reactor-equipment"].sprite = { + filename = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png", + size = 256 +} +data.raw["generator-equipment"]["fission-reactor-equipment"].shape = { + type = "manual", + width = 4, + height = 4, + points = { + {1, 0}, {2, 0}, + {0, 1}, {1, 1}, {2, 1}, {3, 1}, + {0, 2}, {1, 2}, {2, 2}, {3, 2}, + {0, 3}, {1, 3}, {2, 3}, {3, 3} + } +} + +data.raw["solar-panel-equipment"]["solar-panel-equipment"].power = "90kW" diff --git a/prototypes/equipment/portable-gasoline-generator.lua b/prototypes/equipment/portable-gasoline-generator.lua new file mode 100644 index 000000000..d89ff5cc6 --- /dev/null +++ b/prototypes/equipment/portable-gasoline-generator.lua @@ -0,0 +1,66 @@ +data:extend {{ + type = "generator-equipment", + name = "portable-gasoline-generator", + power = "180kW", + burner = { + type = "burner", + emissions_per_minute = { + pollution = 6 + }, + fuel_inventory_size = 4, + burnt_inventory_size = 4, + fuel_categories = {"jerry"} + }, + energy_source = { + type = "electric", + usage_priority = "secondary-output" + }, + categories = {"armor"}, + shape = {type = "full", width = 2, height = 2}, + sprite = { + width = 64, + height = 64, + filename = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png" + } +}} + +ITEM { + type = "item", + name = "portable-gasoline-generator", + icon = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-a[portable-gasoline-generator]", + stack_size = 10, + place_as_equipment_result = "portable-gasoline-generator", + localised_description = {"equipment-description.portable-gasoline-generator"} +} + +RECIPE { + type = "recipe", + name = "portable-gasoline-generator", + energy_required = 10, + category = "crafting", + enabled = false, + ingredients = { + {type = "item", name = "engine-unit", amount = 4}, + {type = "item", name = "boiler", amount = 1}, + {type = "item", name = "steel-plate", amount = 20}, + {type = "item", name = "iron-gear-wheel", amount = 14}, + {type = "item", name = "small-electric-pole", amount = 1} + }, + results = { + {type = "item", name = "portable-gasoline-generator", amount = 1} + } +}:add_unlock("personal-roboport-equipment") + +data.raw.recipe["personal-roboport-equipment"].ingredients = { + {type = "item", name = "iron-gear-wheel", amount = 45}, + {type = "item", name = "steel-plate", amount = 20}, + {type = "item", name = "electronic-circuit", amount = 10}, + {type = "item", name = "battery", amount = 10}, +} + +data.raw.technology["personal-roboport-equipment"].prerequisites = {"construction-robotics"} +data.raw.technology["personal-roboport-equipment"].unit.count = 300 +data.raw.technology["personal-roboport-mk2-equipment"]:remove_prereq("solar-panel-equipment") diff --git a/prototypes/fluids/aromatics.lua b/prototypes/fluids/aromatics.lua index 7f28ffdcc..dd1c4d8c5 100644 --- a/prototypes/fluids/aromatics.lua +++ b/prototypes/fluids/aromatics.lua @@ -14,6 +14,10 @@ RECIPE { } }:add_unlock("advanced-oil-processing") +if mods.pyrawores then + RECIPE("aromatics2"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen", amount = 500}) +end + FLUID { type = "fluid", name = "aromatics", diff --git a/prototypes/fluids/boric-acid.lua b/prototypes/fluids/boric-acid.lua index 17286046c..ced2ce646 100644 --- a/prototypes/fluids/boric-acid.lua +++ b/prototypes/fluids/boric-acid.lua @@ -13,6 +13,10 @@ RECIPE { } }:add_unlock("lab-instrument") +if mods.pyrawores then + RECIPE("boric-acid").category = "electrolyzer" +end + FLUID { type = "fluid", name = "boric-acid", diff --git a/prototypes/fluids/diborane.lua b/prototypes/fluids/diborane.lua index 8ff034c7a..131ae7cc5 100644 --- a/prototypes/fluids/diborane.lua +++ b/prototypes/fluids/diborane.lua @@ -13,6 +13,10 @@ RECIPE { } }:add_unlock("energy-1") +if mods.pyrawores then + RECIPE("diborane"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen", amount = 250}).category = "electrolyzer" +end + FLUID { type = "fluid", name = "diborane", diff --git a/prototypes/fluids/hydrogen-peroxide.lua b/prototypes/fluids/hydrogen-peroxide.lua index 7d2ffcbd8..86cfda890 100644 --- a/prototypes/fluids/hydrogen-peroxide.lua +++ b/prototypes/fluids/hydrogen-peroxide.lua @@ -13,6 +13,10 @@ RECIPE { } }:add_unlock("sulfur-processing") +if mods.pyrawores then + RECIPE("hydrogen-peroxide"):replace_ingredient_unsafe("iron-plate", "nickel-plate") +end + FLUID { type = "fluid", name = "hydrogen-peroxide", diff --git a/prototypes/fluids/methanol.lua b/prototypes/fluids/methanol.lua index 5e5b58826..b307b0955 100644 --- a/prototypes/fluids/methanol.lua +++ b/prototypes/fluids/methanol.lua @@ -16,6 +16,10 @@ RECIPE { order = "a" }:add_unlock("methanol-processing-1") +if mods.pyrawores then + RECIPE("methanol-from-syngas"):replace_ingredient_unsafe("iron-plate", "zinc-plate") +end + RECIPE { type = "recipe", name = "oleo-methanol", diff --git a/prototypes/fluids/molten-glass.lua b/prototypes/fluids/molten-glass.lua index 82fdff1cc..8e913b417 100644 --- a/prototypes/fluids/molten-glass.lua +++ b/prototypes/fluids/molten-glass.lua @@ -15,6 +15,10 @@ RECIPE { order = "aac" } +if mods.pyrawores then + RECIPE("glass"):set_fields {enabled = false}:set_fields {hidden = true} +end + RECIPE { type = "recipe", name = "glass-2", diff --git a/prototypes/fluids/niobium-complex.lua b/prototypes/fluids/niobium-complex.lua index f8b480584..5b65c6789 100644 --- a/prototypes/fluids/niobium-complex.lua +++ b/prototypes/fluids/niobium-complex.lua @@ -16,6 +16,10 @@ RECIPE { order = "c" }:add_unlock("niobium") +if mods.pyrawores then + RECIPE("niobium-complex"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen-chloride", amount = 100}) +end + FLUID { type = "fluid", name = "niobium-complex", diff --git a/prototypes/item-sounds.lua b/prototypes/item-sounds.lua index 80e0c0782..c6c213377 100644 --- a/prototypes/item-sounds.lua +++ b/prototypes/item-sounds.lua @@ -173,59 +173,58 @@ add_sound_multiple("gasturbinemk%02d", 1, 3, item_sounds.mechanical_inventory_mo add_sound_single("beacon-mk01", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) -- PyIndustry -if mods.pyindustry then - add_sound_single("py-tank-1", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-2", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-3", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-4", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-5", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-6", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-7", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-8", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-9", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-tank-10", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("barrel-machine-mk01", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) - add_sound_single("py-check-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) - add_sound_single("py-overflow-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) - add_sound_single("py-underflow-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) - add_sound_single("niobium-pipe", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) - add_sound_single("niobium-pipe-to-ground", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) - add_sound_multiple("accumulator-mk%02d", 1, 2, item_sounds.electric_large_inventory_move, item_sounds.electric_large_inventory_pickup, item_sounds.electric_large_inventory_move) - for _, building in ipairs {"shed", "storehouse", "warehouse", "deposit"} do - for _, type in ipairs {"basic", "active-provider", "buffer", "passive-provider", "requester", "storage"} do - add_sound_single("py-" .. building .. "-" .. type, item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - end +add_sound_single("py-tank-1", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-2", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-3", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-4", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-5", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-6", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-7", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-8", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-9", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-tank-10", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("barrel-machine-mk01", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) +add_sound_single("py-check-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) +add_sound_single("py-overflow-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) +add_sound_single("py-underflow-valve", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) +add_sound_single("niobium-pipe", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) +add_sound_single("niobium-pipe-to-ground", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) +add_sound_multiple("accumulator-mk%02d", 1, 2, item_sounds.electric_large_inventory_move, item_sounds.electric_large_inventory_pickup, item_sounds.electric_large_inventory_move) +for _, building in ipairs {"shed", "storehouse", "warehouse", "deposit"} do + for _, type in ipairs {"basic", "active-provider", "buffer", "passive-provider", "requester", "storage"} do + add_sound_single("py-" .. building .. "-" .. type, item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) end - add_sound_single("py-recharge-station-mk01", item_sounds.electric_large_inventory_move, item_sounds.electric_large_inventory_pickup, item_sounds.electric_large_inventory_move) - add_sound_multiple("py-roboport-mk%02d", 1, 2, item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) - add_sound_single("py-ze", item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) - add_sound_multiple("py-ze-mk%02d", 2, 4, item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) - add_sound_single("py-construction-robot-mk01", item_sounds.robotic_inventory_move, item_sounds.robotic_inventory_pickup, item_sounds.robotic_inventory_move) - add_sound_single("py-logistic-robot-mk01", item_sounds.robotic_inventory_move, item_sounds.robotic_inventory_pickup, item_sounds.robotic_inventory_move) - -- These sounds cannot be added here because these items are implemented during data-updates. - --add_sound_item("py-aluminium", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-iron", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-iron-oxide", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-limestone", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-nexelit", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-steel", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - --add_sound_item("py-coal-tile", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) - --add_sound_item("py-asphalt", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) - add_sound_single("mk02-locomotive", item_sounds.locomotive_inventory_move, item_sounds.locomotive_inventory_pickup, item_sounds.locomotive_inventory_move) - add_sound_single("mk02-wagon", item_sounds.metal_large_inventory_move, item_sounds.locomotive_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("mk02-fluid-wagon", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) - add_sound_single("py-burner", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-gas-vent", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) - add_sound_single("py-sinkhole", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) - add_sound_single("concrete-wall", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) - add_sound_single("poorman-wood-fence", item_sounds.wood_inventory_move, item_sounds.wood_inventory_pickup, item_sounds.wood_inventory_move) - add_sound_single("wood-fence", item_sounds.wood_inventory_move, item_sounds.wood_inventory_pickup, item_sounds.wood_inventory_move) - add_sound_single("megadar", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("py-local-radar", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) - add_sound_single("portable-gasoline-generator", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) - add_sound_single("personal-fusion-cell", item_sounds.fuel_cell_inventory_move, item_sounds.fuel_cell_inventory_pickup, item_sounds.fuel_cell_inventory_move) - add_sound_single("personal-fusion-cell-used", item_sounds.fuel_cell_inventory_move, item_sounds.fuel_cell_inventory_pickup, item_sounds.fuel_cell_inventory_move) end +add_sound_single("py-recharge-station-mk01", item_sounds.electric_large_inventory_move, item_sounds.electric_large_inventory_pickup, item_sounds.electric_large_inventory_move) +add_sound_multiple("py-roboport-mk%02d", 1, 2, item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) +add_sound_single("py-ze", item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) +add_sound_multiple("py-ze-mk%02d", 2, 4, item_sounds.roboport_inventory_move, item_sounds.roboport_inventory_pickup, item_sounds.roboport_inventory_move) +add_sound_single("py-construction-robot-mk01", item_sounds.robotic_inventory_move, item_sounds.robotic_inventory_pickup, item_sounds.robotic_inventory_move) +add_sound_single("py-logistic-robot-mk01", item_sounds.robotic_inventory_move, item_sounds.robotic_inventory_pickup, item_sounds.robotic_inventory_move) +-- These sounds cannot be added here because these items are implemented during data-updates. +--add_sound_item("py-aluminium", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-iron", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-iron-oxide", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-limestone", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-nexelit", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-steel", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +--add_sound_item("py-coal-tile", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) +--add_sound_item("py-asphalt", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) +add_sound_single("mk02-locomotive", item_sounds.locomotive_inventory_move, item_sounds.locomotive_inventory_pickup, item_sounds.locomotive_inventory_move) +add_sound_single("mk02-wagon", item_sounds.metal_large_inventory_move, item_sounds.locomotive_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("mk02-fluid-wagon", item_sounds.fluid_inventory_move, item_sounds.fluid_inventory_pickup, item_sounds.fluid_inventory_move) +add_sound_single("py-burner", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-gas-vent", item_sounds.metal_small_inventory_move, item_sounds.metal_small_inventory_pickup, item_sounds.metal_small_inventory_move) +add_sound_single("py-sinkhole", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) +add_sound_single("concrete-wall", item_sounds.concrete_inventory_move, item_sounds.concrete_inventory_pickup, item_sounds.concrete_inventory_move) +add_sound_single("poorman-wood-fence", item_sounds.wood_inventory_move, item_sounds.wood_inventory_pickup, item_sounds.wood_inventory_move) +add_sound_single("wood-fence", item_sounds.wood_inventory_move, item_sounds.wood_inventory_pickup, item_sounds.wood_inventory_move) +add_sound_single("megadar", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("py-local-radar", item_sounds.metal_large_inventory_move, item_sounds.metal_large_inventory_pickup, item_sounds.metal_large_inventory_move) +add_sound_single("portable-gasoline-generator", item_sounds.mechanical_inventory_move, item_sounds.mechanical_inventory_pickup, item_sounds.mechanical_inventory_move) +add_sound_single("personal-fusion-cell", item_sounds.fuel_cell_inventory_move, item_sounds.fuel_cell_inventory_pickup, item_sounds.fuel_cell_inventory_move) +add_sound_single("personal-fusion-cell-used", item_sounds.fuel_cell_inventory_move, item_sounds.fuel_cell_inventory_pickup, item_sounds.fuel_cell_inventory_move) + -- PyRawOres if mods.pyrawores then add_sound_single("py-construction-robot-mk02", item_sounds.robotic_inventory_move, item_sounds.robotic_inventory_pickup, item_sounds.robotic_inventory_pickup) diff --git a/prototypes/items/canister.lua b/prototypes/items/canister.lua index 1c2b22f01..01e29a4b8 100644 --- a/prototypes/items/canister.lua +++ b/prototypes/items/canister.lua @@ -21,6 +21,10 @@ RECIPE { order = "c [methanol]" }:add_unlock("methanol-processing-1") +if mods.pyrawores then + RECIPE("empty-gas-canister"):replace_ingredient_unsafe("steel-plate", "aluminium-plate") +end + ITEM { type = "item", name = "empty-gas-canister", diff --git a/prototypes/items/items.lua b/prototypes/items/items.lua index 94abae687..8d8d43770 100644 --- a/prototypes/items/items.lua +++ b/prototypes/items/items.lua @@ -797,6 +797,11 @@ ITEM { stack_size = 100 } +if mods.pyrawores then + ITEM("crushed-copper").hidden = true + ITEM("crushed-iron").hidden = true +end + ITEM { type = "item", name = "log", diff --git a/prototypes/logo.lua b/prototypes/logo.lua index 5bf60ec09..b351fb0ff 100644 --- a/prototypes/logo.lua +++ b/prototypes/logo.lua @@ -5,7 +5,7 @@ data:extend {{ icon_size = 64, flags = {"placeable-neutral", "player-creation"}, hidden = true, - minable = {mining_time = 0.5}, + minable = {mining_time = 0.5, result = "py-logo-15tiles"}, max_health = 666, inventory_type = "with_filters_and_bar", collision_box = {{-7.5 + 0.15, -1.5 + 0.15}, {7.5 - 0.15, 1.5 - 0.15}}, @@ -20,3 +20,30 @@ data:extend {{ scale = 0.5 } }} + +ITEM { + name = "py-logo-15tiles", + type = "item", + stack_size = 10, + icon = "__pycoalprocessinggraphics__/graphics/icons/py-logo-15tiles.png", + icon_size = 64, + place_result = "py-logo-15tiles", + flags = {}, + subgroup = "py-walls", + order = "zz" +} + +RECIPE { + type = "recipe", + name = "py-logo-15tiles", + energy_required = 0.5, + enabled = false, + ingredients = { + {type = "item", name = "py-iron-oxide", amount = 45}, + {type = "item", name = "iron-chest", amount = 1}, + }, + category = "crafting-with-fluid", + results = { + {type = "item", name = "py-logo-15tiles", amount = 1} + } +}:add_unlock("py-asphalt-mk03"):add_ingredient {type = "fluid", name = "flue-gas", amount = 200}:add_ingredient {type = "item", name = "small-parts-01", amount = 10} diff --git a/prototypes/menu-simulations.lua b/prototypes/menu-simulations.lua index e5ced8eb8..f417bb7b6 100644 --- a/prototypes/menu-simulations.lua +++ b/prototypes/menu-simulations.lua @@ -1,7 +1,3 @@ -if not mods["pyindustry"] then - return -end - local menu_simulations = data.raw["utility-constants"]["default"].main_menu_simulations -- do not work diff --git a/prototypes/recipes/advanced-foundry-recipes.lua b/prototypes/recipes/advanced-foundry-recipes.lua index 93394e7ec..6f6644e23 100644 --- a/prototypes/recipes/advanced-foundry-recipes.lua +++ b/prototypes/recipes/advanced-foundry-recipes.lua @@ -21,6 +21,10 @@ RECIPE { order = "a1" }:add_unlock("nexelit") +if mods.pyrawores then + data.raw.recipe["nexelit-plate"] = nil +end + --STEEL PLATE - cant change the base one,so i did that. RECIPE { type = "recipe", diff --git a/prototypes/recipes/coal-processing-recipes.lua b/prototypes/recipes/coal-processing-recipes.lua index 4540ba8d1..8905ce4e5 100644 --- a/prototypes/recipes/coal-processing-recipes.lua +++ b/prototypes/recipes/coal-processing-recipes.lua @@ -6,7 +6,7 @@ RECIPE { enabled = false, energy_required = 45, ingredients = { - {type = "item", name = "ralesia", amount = 10}, + {type = "item", name = "ralesia", amount = 10}, {type = "item", name = "muddy-sludge-barrel", amount = 5} }, results = { @@ -62,6 +62,10 @@ RECIPE { order = "h" }:add_unlock("ralesia") +if mods.pyrawores then + RECIPE("ralesia"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen", amount = 300}) +end + RECIPE { type = "recipe", name = "rich-clay", @@ -163,6 +167,11 @@ RECIPE { order = "n" }:add_unlock("lab-instrument") +if mods.pyrawores then + RECIPE("equipment-chassi"):replace_ingredient_unsafe("copper-plate", "tin-plate") + RECIPE("equipment-chassi"):replace_ingredient_unsafe("iron-plate", "duralumin") +end + RECIPE { type = "recipe", name = "lab-instrument", @@ -203,6 +212,10 @@ RECIPE { order = "f" }:add_unlock("lab-instrument") +if mods.pyrawores then + RECIPE("lens"):remove_ingredient("molten-glass"):add_ingredient_unsafe {type = "fluid", name = "molten-glass", amount = 100, fluidbox_index = 2} +end + RECIPE { type = "recipe", name = "boron-trioxide", @@ -269,7 +282,7 @@ RECIPE { {type = "item", name = "raw-borax", amount = 10} }, results = { - {type = "item", name = "borax", amount = 10}, + {type = "item", name = "borax", amount = 10}, {type = "fluid", name = "muddy-sludge", amount = 100} }, main_product = "borax", @@ -342,6 +355,10 @@ RECIPE { order = "g" }:add_unlock("coal-processing-1") +if mods.pyrawores then + RECIPE("coal-fawogae"):replace_result_unsafe("coal", "raw-coal", 3) +end + RECIPE { type = "recipe", name = "coke-coal", @@ -361,6 +378,10 @@ RECIPE { order = "h" }:add_unlock("coal-processing-1") +if mods.pyrawores then + RECIPE("coke-coal"):replace_ingredient_unsafe("coal", "raw-coal", 10) +end + RECIPE { type = "recipe", name = "stone-distilation", @@ -372,10 +393,10 @@ RECIPE { {type = "fluid", name = "water", amount = 200} }, results = { - {type = "item", name = "tailings-dust", amount = 10}, - {type = "item", name = "coarse", amount = 10}, - {type = "fluid", name = "tar", amount = 100}, - {type = "fluid", name = "tailings", amount = 100} + {type = "item", name = "tailings-dust", amount = 10}, + {type = "item", name = "coarse", amount = 10}, + {type = "fluid", name = "tar", amount = 100}, + {type = "fluid", name = "tailings", amount = 100} }, main_product = "tar", icon = "__pycoalprocessinggraphics__/graphics/icons/tar.png", @@ -519,7 +540,7 @@ RECIPE { main_product = "syngas" }:add_unlock("coal-processing-3") -RECIPE { +local nichrome = RECIPE { type = "recipe", name = "nichrome", category = "hpf", @@ -535,6 +556,11 @@ RECIPE { } }:add_unlock("chromium") +if mods.pyrawores then + RECIPE("nichrome"):replace_ingredient_unsafe("water", {type = "fluid", name = "nitrogen", amount = 100}) + RECIPE("nichrome"):replace_ingredient_unsafe("iron-plate", "nickel-plate") +end + RECIPE { type = "recipe", name = "active-carbon", @@ -552,6 +578,10 @@ RECIPE { } }:add_unlock("filtration") +if mods.pyrawores then + RECIPE("active-carbon"):remove_ingredient("water"):add_ingredient_unsafe {type = "fluid", name = "nitrogen", amount = 50}:add_ingredient_unsafe {type = "item", name = "sodium-hydroxide", amount = 4} +end + RECIPE { type = "recipe", name = "zinc-chloride", @@ -573,6 +603,10 @@ RECIPE { order = "d [syn-gas]" }:add_unlock("filtration") +if mods.pyrawores then + RECIPE("zinc-chloride"):replace_ingredient_unsafe("iron-plate", "zinc-plate"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen-chloride", amount = 20}):remove_ingredient("copper-plate"):add_result {type = "fluid", name = "hydrogen", amount = 20} +end + RECIPE { type = "recipe", name = "tailings-dust", @@ -672,6 +706,10 @@ RECIPE { main_product = "niobium-oxide" }:add_unlock("niobium") +if mods.pyrawores then + RECIPE("niobium-oxide"):replace_ingredient_unsafe("water", {type = "fluid", name = "nitrogen", amount = 250}) +end + RECIPE { type = "recipe", name = "niobium-plate", @@ -688,6 +726,10 @@ RECIPE { main_product = "niobium-plate" }:add_unlock("niobium") +if mods.pyrawores then + RECIPE("niobium-plate"):replace_ingredient_unsafe("coal", "salt").category = "electrolyzer" +end + RECIPE { type = "recipe", name = "log5", @@ -695,8 +737,8 @@ RECIPE { enabled = false, energy_required = 20, ingredients = { - {type = "fluid", name = "muddy-sludge", amount = 500}, - {type = "fluid", name = "carbon-dioxide", amount = 300} + {type = "fluid", name = "muddy-sludge", amount = 500}, + {type = "fluid", name = "carbon-dioxide", amount = 300} }, results = { {type = "item", name = "log", amount = 3} @@ -752,9 +794,9 @@ RECIPE { enabled = false, energy_required = 15, ingredients = { - {type = "fluid", name = "muddy-sludge", amount = 500}, - {type = "item", name = "ash", amount = 30}, - {type = "fluid", name = "carbon-dioxide", amount = 350} + {type = "fluid", name = "muddy-sludge", amount = 500}, + {type = "item", name = "ash", amount = 30}, + {type = "fluid", name = "carbon-dioxide", amount = 350} }, results = { {type = "item", name = "log", amount = 3} @@ -803,6 +845,10 @@ RECIPE { order = "f" }:add_unlock("chromium") +if mods.pyrawores then + RECIPE("richdust-separation"):replace_result_unsafe("chromite-sand", "chromite-sand", 3) +end + RECIPE { type = "recipe", name = "organic-solvent", @@ -909,6 +955,10 @@ RECIPE { order = "a" }:add_unlock("chromium") +if mods.pyrawores then + data.raw.recipe["making-chromium"] = nil +end + RECIPE { type = "recipe", name = "wood-to-coal", @@ -995,6 +1045,11 @@ RECIPE { order = "i" }:add_unlock("advanced-oil-processing") +if mods.pyrawores then + RECIPE("oleochemicals-distilation"):replace_result_unsafe("coal", "raw-coal", 4) + RECIPE("oleochemicals-distilation"):replace_ingredient_unsafe("water", {type = "fluid", name = "oxygen", amount = 400}) +end + RECIPE { type = "recipe", name = "oleo-gasification", @@ -1012,6 +1067,10 @@ RECIPE { }, main_product = "aromatics", }:add_unlock("mukmoux") + +if mods.pyrawores then + RECIPE("oleo-gasification"):replace_ingredient_unsafe("water", {type = "fluid", name = "oxygen", amount = 250}) +end --)) Coal Processing 2 ((-- --(( Coal Processing 3 ))-- diff --git a/prototypes/recipes/fts-reactor-recipes.lua b/prototypes/recipes/fts-reactor-recipes.lua index bedbc3f97..aee9e3d84 100644 --- a/prototypes/recipes/fts-reactor-recipes.lua +++ b/prototypes/recipes/fts-reactor-recipes.lua @@ -88,6 +88,10 @@ RECIPE { order = "h4" }:add_unlock("advanced-oil-processing") +if mods.pyrawores then + RECIPE("ref-to-light-oil"):add_ingredient_unsafe {type = "fluid", name = "hydrogen", amount = 250} +end + RECIPE { type = "recipe", name = "sulfuric-petgas", diff --git a/prototypes/recipes/mukmoux-recipes.lua b/prototypes/recipes/mukmoux-recipes.lua index 81a0b2260..fd6978855 100644 --- a/prototypes/recipes/mukmoux-recipes.lua +++ b/prototypes/recipes/mukmoux-recipes.lua @@ -58,3 +58,7 @@ RECIPE { subgroup = "py-fluid-handling", order = "c" }:add_unlock("mukmoux") + +if mods.pyrawores then + RECIPE("dedicated-oleochemicals"):replace_ingredient_unsafe("chromium", "titanium-plate") +end diff --git a/prototypes/recipes/olefin-plant-recipes.lua b/prototypes/recipes/olefin-plant-recipes.lua index a9b81ea25..67940604a 100644 --- a/prototypes/recipes/olefin-plant-recipes.lua +++ b/prototypes/recipes/olefin-plant-recipes.lua @@ -42,6 +42,10 @@ RECIPE { order = "d4" }:add_unlock("fuel-production") +if mods.pyrawores then + RECIPE("olefin"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen", amount = 400}) +end + RECIPE { type = "recipe", name = "olefin-petgas", diff --git a/prototypes/recipes/recipes.lua b/prototypes/recipes/recipes.lua index 9efa9ac04..3515954a9 100644 --- a/prototypes/recipes/recipes.lua +++ b/prototypes/recipes/recipes.lua @@ -50,7 +50,7 @@ RECIPE { {type = "fluid", name = "water", amount = 600} }, results = { - {type = "item", name = "sand", amount = 10}, + {type = "item", name = "sand", amount = 10}, {type = "fluid", name = "muddy-sludge", amount = 100} }, main_product = "sand", @@ -89,7 +89,7 @@ RECIPE { {type = "fluid", name = "water", amount = 200} }, results = { - {type = "item", name = "pure-sand", amount = 8}, + {type = "item", name = "pure-sand", amount = 8}, {type = "fluid", name = "muddy-sludge", amount = 80} }, main_product = "pure-sand", @@ -138,6 +138,10 @@ RECIPE { order = "f" } +if mods.pyrawores then + RECIPE("flask"):remove_ingredient("molten-glass"):add_ingredient_unsafe {type = "fluid", name = "molten-glass", amount = 200, fluidbox_index = 2} +end + RECIPE { type = "recipe", name = "automation-science-pack", @@ -255,7 +259,7 @@ RECIPE { enabled = false, energy_required = 5, ingredients = { - {type = "item", name = "biofilm", amount = 1}, + {type = "item", name = "biofilm", amount = 1}, {type = "fluid", name = "tailings", amount = 200} }, results = { @@ -386,6 +390,11 @@ RECIPE { }, }:add_unlock("battery") +if mods.pyrawores then + RECIPE("nas-battery"):replace_ingredient_unsafe("copper-ore", "sodium-hydroxide") + RECIPE("nas-battery"):add_ingredient_unsafe {type = "item", name = "lead-plate", amount = 6} +end + RECIPE { type = "recipe", name = "fluegas-filtration", @@ -454,6 +463,11 @@ RECIPE { main_product = "glass-core" }:add_unlock("fine-electronics") +if mods.pyrawores then + RECIPE("glass-core"):remove_ingredient("molten-glass"):add_ingredient_unsafe {type = "fluid", name = "molten-glass", amount = 100, fluidbox_index = 2} + RECIPE("glass-core"):replace_ingredient_unsafe("steel-plate", "silver-plate") +end + RECIPE { type = "recipe", name = "cladding", @@ -470,6 +484,10 @@ RECIPE { main_product = "cladding" }:add_unlock("fine-electronics") +if mods.pyrawores then + RECIPE("cladding"):remove_ingredient("molten-glass"):add_ingredient_unsafe {type = "item", name = "glass", amount = 5} +end + RECIPE { type = "recipe", name = "ppd", @@ -486,6 +504,10 @@ RECIPE { main_product = "ppd" }:add_unlock("kevlar") +if mods.pyrawores then + RECIPE("ppd"):replace_ingredient_unsafe("water", {type = "fluid", name = "hydrogen", amount = 500}):add_ingredient_unsafe {type = "fluid", name = "chlorine", amount = 400}.category = "electrolyzer" +end + RECIPE { type = "recipe", name = "kevlar", @@ -535,6 +557,10 @@ RECIPE { main_product = "nbfe-alloy" }:add_unlock("niobium") +if mods.pyrawores then + RECIPE("nbfe-alloy").category = "py-rawores-smelter" +end + RECIPE { type = "recipe", name = "nbfe-coating", @@ -567,6 +593,10 @@ RECIPE { main_product = "cladded-core" }:add_unlock("fine-electronics") +if mods.pyrawores then + RECIPE("cladded-core"):add_ingredient_unsafe {type = "item", name = "aramid", amount = 1} +end + RECIPE { type = "recipe", name = "copper-coating", @@ -584,6 +614,11 @@ RECIPE { main_product = "copper-coating" }:add_unlock("fine-electronics") +if mods.pyrawores then + RECIPE("copper-coating").category = "electrolyzer" + RECIPE("copper-coating"):replace_ingredient_unsafe("organic-solvent", {type = "fluid", name = "water-saline", amount = 100}) +end + RECIPE { type = "recipe", name = "optical-fiber", @@ -600,6 +635,10 @@ RECIPE { main_product = "optical-fiber" }:add_unlock("fine-electronics") +if mods.pyrawores then + RECIPE("optical-fiber"):remove_ingredient("plastic-bar"):add_ingredient {type = "item", name = "plastic-bar", amount = 5} +end + RECIPE { type = "recipe", name = "biofilm", @@ -634,6 +673,10 @@ RECIPE { main_product = "filtration-media", }:add_unlock("advanced-oil-processing") +if mods.pyrawores then + RECIPE("filtration-media"):add_ingredient_unsafe {type = "item", name = "glass", amount = 6} +end + RECIPE { type = "recipe", name = "nexelit-ore-1", diff --git a/prototypes/recipes/seperation-recipes.lua b/prototypes/recipes/seperation-recipes.lua index 7d0eb2658..13d80f00f 100644 --- a/prototypes/recipes/seperation-recipes.lua +++ b/prototypes/recipes/seperation-recipes.lua @@ -61,6 +61,11 @@ RECIPE { order = "c" }:add_unlock("separation") +if mods.pyrawores then + RECIPE("tailings-classification"):replace_ingredient_unsafe("copper-ore", "ore-lead") + RECIPE("tailings-classification"):replace_ingredient_unsafe("iron-ore", "ore-tin") +end + RECIPE { type = "recipe", name = "co2-organics", diff --git a/prototypes/tiles/py-iron-oxide.lua b/prototypes/tiles/py-iron-oxide.lua new file mode 100644 index 000000000..408c649e7 --- /dev/null +++ b/prototypes/tiles/py-iron-oxide.lua @@ -0,0 +1,75 @@ +RECIPE { + type = "recipe", + name = "py-iron-oxide", + category = "hpf", + enabled = false, + ingredients = { + {type = "item", name = "iron-oxide", amount = 4}, + {type = "item", name = "pipe", amount = 1}, + {type = "fluid", name = "muddy-sludge", amount = 20} + }, + results = { + {type = "item", name = "py-iron-oxide", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt") + +ITEM { + type = "item", + name = "py-iron-oxide", + icon = "__pyindustrygraphics__/graphics/icons/py-iron-oxide.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-iron-oxide", + stack_size = 1000, + place_as_tile = {result = "py-iron-oxide", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-iron-oxide", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-iron-oxide"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 76, + layer_group = "ground-artificial", + walking_sound = { + { + filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", + volume = 0.3, + speed = 1.2 + } + }, + map_color = {r = 87, g = 33, b = 3, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.75, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-iron-oxide/py-iron-oxide.png", + count = 2, + scale = 0.5 + } + } +} diff --git a/prototypes/tiles/py-nexelit.lua b/prototypes/tiles/py-nexelit.lua new file mode 100644 index 000000000..7407f8b54 --- /dev/null +++ b/prototypes/tiles/py-nexelit.lua @@ -0,0 +1,54 @@ +RECIPE { + type = "recipe", + name = "py-nexelit", + category = mods.pyhightech and "pcb" or "hpf", + enabled = false, + ingredients = { + {type = "item", name = "nexelit-plate", amount = 1}, + mods.pyhightech and {type = "item", name = "resistor1", amount = 1} or {type = "item", name = "gravel", amount = 2}, + {type = "fluid", name = "tar", amount = 20} + }, + results = { + {type = "item", name = "py-nexelit", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt-mk02", "nexelit-mk02") + +ITEM { + type = "item", + name = "py-nexelit", + icon = "__pyindustrygraphics__/graphics/icons/py-nexelit.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-nexelit", + stack_size = 1000, + place_as_tile = {result = "py-nexelit", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-nexelit", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-nexelit"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 75, + layer_group = "ground-artificial", + walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound), + map_color = {r = 0, g = 110, b = 255, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-nexelit/py-nexelit.png", + count = 2, + scale = 0.5 + } + } +} diff --git a/prototypes/updates/base-oil.lua b/prototypes/updates/base-oil.lua index 328940dd1..e2c97ced3 100644 --- a/prototypes/updates/base-oil.lua +++ b/prototypes/updates/base-oil.lua @@ -37,7 +37,7 @@ RECIPE("sulfur"):remove_unlock("sulfur-processing"):set_fields {hidden = true} ITEM("solid-fuel"):set_fields {hidden = true} -if not (mods["pyhightech"] or mods["pypetroleumhandling"] or mods["pyrawores"]) then +if not (mods["pyrawores"]) then TECHNOLOGY("sulfur-processing"):add_pack("chemical-science-pack") TECHNOLOGY("battery"):add_pack("chemical-science-pack") TECHNOLOGY("battery-equipment"):add_pack("chemical-science-pack") diff --git a/prototypes/updates/base-updates.lua b/prototypes/updates/base-updates.lua index e945f0292..548a6a9cf 100644 --- a/prototypes/updates/base-updates.lua +++ b/prototypes/updates/base-updates.lua @@ -51,7 +51,7 @@ TECHNOLOGY("braking-force-7"):add_pack("military-science-pack") TECHNOLOGY("power-armor-mk2"):add_pack("production-science-pack") TECHNOLOGY("rocket-silo"):add_pack("military-science-pack") TECHNOLOGY("research-speed-6"):add_pack("military-science-pack") -TECHNOLOGY("logistic-system"):add_pack("military-science-pack"):add_pack("production-science-pack") +--TECHNOLOGY("logistic-system"):add_pack("military-science-pack"):add_pack("production-science-pack") TECHNOLOGY("worker-robots-speed-5"):add_pack("military-science-pack") TECHNOLOGY("worker-robots-speed-6"):add_pack("military-science-pack").unit.count_formula = "1.5^(L-6)*1000" TECHNOLOGY("worker-robots-storage-3"):add_pack("military-science-pack") diff --git a/prototypes/updates/pyindustry-updates.lua b/prototypes/updates/pyindustry-updates.lua index feca2568b..3a954f64b 100644 --- a/prototypes/updates/pyindustry-updates.lua +++ b/prototypes/updates/pyindustry-updates.lua @@ -1,30 +1,4 @@ -ITEM { - name = "py-logo-15tiles", - type = "item", - stack_size = 10, - icon = "__pycoalprocessinggraphics__/graphics/icons/py-logo-15tiles.png", - icon_size = 64, - place_result = "py-logo-15tiles", - flags = {}, - subgroup = "py-walls", - order = "zz" -} - -RECIPE { - type = "recipe", - name = "py-logo-15tiles", - energy_required = 0.5, - enabled = false, - ingredients = { - {type = "item", name = "py-iron-oxide", amount = 45}, - {type = "item", name = "iron-chest", amount = 1}, - }, - category = "crafting-with-fluid", - results = { - {type = "item", name = "py-logo-15tiles", amount = 1} - } -}:add_unlock("py-asphalt-mk03"):add_ingredient {type = "fluid", name = "flue-gas", amount = 200}:add_ingredient {type = "item", name = "small-parts-01", amount = 10} - -data.raw["container"]["py-logo-15tiles"].minable.result = "py-logo-15tiles" -RECIPE("niobium-pipe"):remove_unlock("py-storage-tanks"):add_unlock("niobium") -RECIPE("niobium-pipe-to-ground"):remove_unlock("py-storage-tanks"):add_unlock("niobium") +--DEPRECIATED-- +if mods["pycoalprocessing"] then + TECHNOLOGY("railway"):add_prereq("wood-processing"):remove_prereq("steel-processing") +end diff --git a/scripts/generator-equipment-autofill.lua b/scripts/generator-equipment-autofill.lua index 787ac6012..842a2752c 100644 --- a/scripts/generator-equipment-autofill.lua +++ b/scripts/generator-equipment-autofill.lua @@ -54,13 +54,13 @@ local function restock_generator_equipment(player) local burner_data = burners[index] if burner_data.fuel_categories[prototypes.item[item_stack.name].fuel_category] then local item_stack_size = prototypes.item[item_stack.name].stack_size - local inserted_count = burner_data.burner_inventory.insert{ - name = item_stack.name, - quality = item_stack.quality, - count = math.min(item_stack.count, item_stack_size) - } + local inserted_count = burner_data.burner_inventory.insert { + name = item_stack.name, + quality = item_stack.quality, + count = math.min(item_stack.count, item_stack_size) + } if inserted_count ~= 0 then -- if items were inserted then remove them from the player's inventory - inventory.remove{ + inventory.remove { name = item_stack.name, quality = item_stack.quality, count = inserted_count @@ -110,7 +110,6 @@ local function restock_generator_equipment(player) end py.register_on_nth_tick(251, "generator-equipment-autofill", "pycp", function() - if not script.active_mods["pyindustry"] then return end for _, player in pairs(game.connected_players) do restock_generator_equipment(player) end From d6b4cf22a48633bf04b557a05770d5831eb3dfa6 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Sun, 26 Oct 2025 00:13:34 -0700 Subject: [PATCH 22/28] dont let it yell at you when playing pysex --- control.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control.lua b/control.lua index fe21557de..93b7ed1b1 100644 --- a/control.lua +++ b/control.lua @@ -91,7 +91,7 @@ py.on_event(defines.events.on_player_created, function(event) local autoplace = nauvis.map_gen_settings.autoplace_controls - if not script.active_mods["PyBlock"] and autoplace.stone and autoplace.stone.richness <= 1 then + if not script.active_mods["PyBlock"] and not script.active_mods["pystellarexpedition"] and autoplace.stone and autoplace.stone.richness <= 1 then player.print {"messages.warning-no-preset", {"map-gen-preset-name.py-recommended"}} end From 7de1965447de9e887bdb9cc7a9a1888a3f102be1 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Sun, 26 Oct 2025 00:58:28 -0700 Subject: [PATCH 23/28] Fixed inserter targets not being set when data is pasted --- scripts/programmable-inserter.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index a0197c0b3..82c57a0d2 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -434,6 +434,7 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) force = destination.force, position = destination.drop_position } + destination.drop_target = metadata.drop_target elseif metadata.drop_target and not metadata.drop_target_inventory then metadata.drop_target.destroy() metadata.drop_target = nil @@ -445,6 +446,7 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) force = destination.force, position = destination.pickup_position } + destination.pickup_target = metadata.pickup_target elseif metadata.pickup_target and not metadata.pickup_target_inventory then metadata.pickup_target.destroy() metadata.pickup_target = nil From daff70481d8f33f795f647107602cc8a3f4b461a Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 11 Nov 2025 21:59:55 -0700 Subject: [PATCH 24/28] fixed inserters not copying values when copy/pasted via shift click --- scripts/programmable-inserter.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 82c57a0d2..65d2c7970 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -469,6 +469,8 @@ py.on_event(defines.events.on_entity_settings_pasted, function (event) } or nil, pickup_target_inventory = data.pickup_target_inventory } + destination.drop_target = storage.programmable_inserters[destination.unit_number].drop_target + destination.pickup_target = storage.programmable_inserters[destination.unit_number].pickup_target update_targets(destination) end end From ae9fd0e447176ccaeee7cb363c1e5d40fd6d1138 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Dec 2025 23:17:06 -0700 Subject: [PATCH 25/28] fixed proxy inventories being interactible from other inserters --- scripts/programmable-inserter.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index 65d2c7970..e86f58ac2 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -121,6 +121,7 @@ local function update_targets(inserter) if (target.type ~= "car" or target.name == "space-pod") and not target.prototype.hidden and proxy_targets[target.type][metadata[index .. "_inventory"]] then -- set new target and proper inventory target index entity.proxy_target_entity = target + target.teleport(0) entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] break end From 8c11a27b9a1ad2654b6091b272bb9414c0560499 Mon Sep 17 00:00:00 2001 From: protocol-1903 Date: Tue, 2 Dec 2025 23:26:56 -0700 Subject: [PATCH 26/28] decreased proxy inventory selection box --- prototypes/util.lua | 2 +- scripts/programmable-inserter.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/prototypes/util.lua b/prototypes/util.lua index ae7183e38..08a8b91ea 100644 --- a/prototypes/util.lua +++ b/prototypes/util.lua @@ -7,7 +7,7 @@ data:extend{ icon = util.empty_icon().icon, draw_inventory_content = false, collision_mask = {layers = {}}, - selection_box = {{-0.3, -0.3}, {0.3, 0.3}}, + selection_box = {{-0.25, -0.25}, {0.25, 0.25}}, flags = { "not-rotatable", "placeable-neutral", diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index e86f58ac2..ff4522a25 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -121,8 +121,8 @@ local function update_targets(inserter) if (target.type ~= "car" or target.name == "space-pod") and not target.prototype.hidden and proxy_targets[target.type][metadata[index .. "_inventory"]] then -- set new target and proper inventory target index entity.proxy_target_entity = target - target.teleport(0) entity.proxy_target_inventory = proxy_targets[target.type][metadata[index .. "_inventory"]] + target.teleport(0) -- set it on top so its the default target break end end From 087a43ff0136784aa7931edf7219a33e3a21f904 Mon Sep 17 00:00:00 2001 From: protocol-1903 <67478786+protocol-1903@users.noreply.github.com> Date: Fri, 2 Jan 2026 00:46:18 -0700 Subject: [PATCH 27/28] support for ghost entities --- scripts/programmable-inserter.lua | 42 +++++++++++++------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/scripts/programmable-inserter.lua b/scripts/programmable-inserter.lua index ff4522a25..97c982ca4 100644 --- a/scripts/programmable-inserter.lua +++ b/scripts/programmable-inserter.lua @@ -137,14 +137,8 @@ local function update_gui(entity, player_index) local tags = (entity.tags or {})["py-dynamic-inserter"] local metadata = storage.programmable_inserters[entity.unit_number] or {} - local drop_target = metadata.drop_target and (proxy_targets[(metadata.drop_target.proxy_target_entity or {}).type or ""] or {}) and metadata.drop_target.proxy_target_entity or entity.drop_target - if not drop_target and entity.type == "entity-ghost" then - -- check for other ghost or normal entities - end - local pickup_target = metadata.pickup_target and (proxy_targets[(metadata.pickup_target.proxy_target_entity or {}).type or ""] or {}) and metadata.pickup_target.proxy_target_entity or entity.pickup_target - if not pickup_target and entity.type == "entity-ghost" then - -- check for other ghost or normal entities - end + local drop_target = metadata.drop_target and metadata.drop_target.proxy_target_entity or entity.drop_target + local pickup_target = metadata.pickup_target and metadata.pickup_target.proxy_target_entity or entity.pickup_target local relative = player.gui.relative @@ -221,9 +215,9 @@ local function update_gui(entity, player_index) name = "drop_target", items = { {"", {"inventory-target.default"}}, - {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, - {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, - {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, }, tooltip = {"tooltip.inserter-drop-target-tooltip"}, selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 @@ -233,11 +227,11 @@ local function update_gui(entity, player_index) name = "pickup_target", items = { {"", {"inventory-target.default"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} }, tooltip = {"tooltip.inserter-pickup-target-tooltip"}, selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 @@ -249,18 +243,18 @@ local function update_gui(entity, player_index) -- update checkboxes sub_frame.drop_target.items = { {"", {"inventory-target.default"}}, - {(proxy_targets[(drop_target or {}).type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, - {(proxy_targets[(drop_target or {}).type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, - {(proxy_targets[(drop_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).input and "" or "tooltip.unavailable-insert-target", {"inventory-target.input"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).fuel and "" or "tooltip.unavailable-insert-target", {"inventory-target.fuel"}}, + {drop_target and (proxy_targets[drop_target.type ~= "entity-ghost" and drop_target.type or drop_target.ghost_type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, } sub_frame.drop_target.selected_index = selection_indices.input[(tags or metadata).drop_target_inventory] or 1 sub_frame.pickup_target.items = { {"", {"inventory-target.default"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, - {(proxy_targets[(pickup_target or {}).type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).output and "" or "tooltip.unavailable-insert-target", {"inventory-target.output"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).burnt_result and "" or "tooltip.unavailable-insert-target", {"inventory-target.burnt_result"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).modules and "" or "tooltip.unavailable-insert-target", {"inventory-target.modules"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).trash and "" or "tooltip.unavailable-insert-target", {"inventory-target.trash"}}, + {pickup_target and (proxy_targets[pickup_target.type ~= "entity-ghost" and pickup_target.type or pickup_target.ghost_type] or {}).dump and "" or "tooltip.unavailable-insert-target", {"inventory-target.dump"}} } sub_frame.pickup_target.selected_index = selection_indices.output[(tags or metadata).pickup_target_inventory] or 1 end From 9ea09ad7a81b90f24f8f62fec5bcd9a224864a58 Mon Sep 17 00:00:00 2001 From: protocol-1903 <67478786+protocol-1903@users.noreply.github.com> Date: Fri, 2 Jan 2026 00:59:08 -0700 Subject: [PATCH 28/28] update inserter codex page with programmable inserter data --- locale/en/tips.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/en/tips.cfg b/locale/en/tips.cfg index be78feedd..a777f91ff 100644 --- a/locale/en/tips.cfg +++ b/locale/en/tips.cfg @@ -21,7 +21,7 @@ big-mines=[item=ore-lead] Big mines [pywiki-descriptions] ash=Most inorganic fuels such as [item=coal] now produce [item=ash] when burnt, much like how [item=uranium-fuel-cell] produces [item=depleted-uranium-fuel-cell] on consumption.\n\nAsh management is a central part of the early game, as it will eventually jam machines if not removed from the output slot. [item=burner-inserter] can have a filter set to automatically remove ash. [entity=solid-separator] can help to repurpose some of the ash into ores. -mechanical-inserter=The burner inserter is now an [item=burner-inserter]. Unlike in the base game, it does not need to be fueled.\n\nRequired fuel:\n [entity=burner-inserter]: Free\n [entity=inserter]: 16.9 kW\n [entity=long-handed-inserter]: 20.11 kW\n [entity=fast-inserter]: 46.7 kW\n [entity=bulk-inserter]: 169 kW\n [entity=py-stack-inserter]: 1.6 MW\n\nInserter speeds: (chest-to-chest)\n [entity=burner-inserter]: 0.78 arm cycles/s\n [entity=inserter]: 1.2 arm cycles/s\n [entity=long-handed-inserter]: 1.2 arm cycles/s\n [entity=fast-inserter]: 2.31 arm cycles/s\n [entity=bulk-inserter]: 2.31 arm cycles/s\n [entity=py-stack-inserter]: 1.8 arm cycles/s\n\nFilter slot counts:\n [entity=burner-inserter]: 1\n [entity=inserter]: 2\n [entity=long-handed-inserter]: 3\n [entity=fast-inserter]: 4\n [entity=bulk-inserter]: 5\n [entity=py-stack-inserter]: 5\n\nSpecial:\n [entity=long-handed-inserter]: Reaches two tiles instead of one.\n [entity=bulk-inserter]: Benefits from [technology=inserter-capacity-bonus-1].\n [entity=py-stack-inserter]: Benefits from [technology=inserter-capacity-bonus-1]. Stacks items on the belt up to eight tall. +mechanical-inserter=The burner inserter is now an [item=burner-inserter]. Unlike in the base game, it does not need to be fueled.\n\Power use:\n [entity=burner-inserter]: Free\n [entity=inserter]: 16.9 kW\n [entity=long-handed-inserter]: 20.11 kW\n [entity=fast-inserter]: 46.7 kW\n [entity=bulk-inserter]: 169 kW\n [entity=py-stack-inserter]: 1.6 MW\n\nInserter speeds: (chest-to-chest)\n [entity=burner-inserter]: 0.78 arm cycles/s\n [entity=inserter]: 1.2 arm cycles/s\n [entity=long-handed-inserter]: 1.2 arm cycles/s\n [entity=fast-inserter]: 2.31 arm cycles/s\n [entity=bulk-inserter]: 2.31 arm cycles/s\n [entity=py-stack-inserter]: 1.8 arm cycles/s\n\nFilter slot counts:\n [entity=burner-inserter]: 1\n [entity=inserter]: 2\n [entity=long-handed-inserter]: 3\n [entity=fast-inserter]: 4\n [entity=bulk-inserter]: 5\n [entity=py-stack-inserter]: 5\n\nInserter Settings:\nInserters can be configured to only interact with specific slots of entities. With the exception of module slots, this only allows you to specifically pull things from and push things to slots that would normally be accessibly by inserter.\nThe button on the right of the inserter GUI opens up the target menu. Invalid targets will show up in red. Targets will always appear invalid when the inserter is a ghost.\nInput, output, fuel, and modules are self-explanatory. Burnt result is the slots for ash/jerry cans/other items that are the direct result of fuel burning. Trash is the output slots for spoiled items. Dump is the slots that assembling machines use to dump items when their recipe is changed via the circuit network.\n\nSpecial:\n [entity=long-handed-inserter]: Reaches two tiles instead of one.\n [entity=bulk-inserter]: Benefits from [technology=inserter-capacity-bonus-1].\n [entity=py-stack-inserter]: Benefits from [technology=inserter-capacity-bonus-1]. Stacks items on the belt up to eight tall. tailings-pond=The [entity=tailings-pond] is a huge open-air fluid storage solution that can hold up to 1,000,000 fluid units. It has different mechanisms depending on whether you put a gas or a liquid into it.\n\nGasses such as [fluid=coal-gas] are vented into the atmosphere. This destroys the gas and creates tons of pollution. 100 units of any gas will create 15 units of pollution.\n\nCertain gasses do not create pollution:\n [fluid=oxygen]\n [fluid=hydrogen]\n [fluid=nitrogen]\n [fluid=purest-nitrogen-gas]\n [fluid=pressured-air]\n [fluid=hot-air]\n [fluid=vacuum]\n\nLiquids such as [fluid=tar] are stored in the pond until the tailings pond is 100% full. Once the pond reaches this threshold the pond overflows, destroying the fluid and creating rings of highly flammable pollution tiles in the effected area.\n\nAny fluid with "water" in the name will instead seep into the groundwater and not create pollution tiles. [fluid=muddy-sludge] will also not create pollution tiles. The conversion factor is 500 units of fluid per every pollution tile. The pollution tiles can be used to fill lakes.\n\nYou can remove fluids from the pond by connecting [entity=pump] directly to one of the outputs. [item=red-wire] and [item=green-wire] can be used to read the contents of the pond. beacon=The [entity=beacon-AM1-FM1] and [entity=diet-beacon-AM1-FM1] use radio signals to trasmit module effects into nearby assembling machines. Each beacon has both an AM and an FM frequency that determines the effect radius, transmission efficiency, and power usage.\nThe AM and FM frequency sliders range from 1-5.\n\n[entity=diet-beacon-AM1-FM1]\nEffect radius:\n - AM1: 32\n - AM2: 24\n - AM3: 16\n - AM4: 8\n - AM5: 2\nTransmission efficiency: 0.1 * AM * FM\nPower consumption: AM * (FM ^ 3) / 2 MW\n\n[entity=beacon-AM1-FM1]\nEffect radius:\n - AM1: 64\n - AM2: 48\n - AM3: 32\n - AM4: 16\n - AM5: 2\nTransmission efficiency: 0.2 * AM * FM\nPower consumption: AM * (FM ^ 3) MW\n\nThe default 1AM 1FM beacon is wide area low power.\nIf a machine recives conflicting signals on either the AM or FM frequencies then the wavelengths will interfere and overload the machine.\nBeacons do not accept productivity modules such as [item=productivity-module-3]. combustion-mixture=You can burn [fluid=combustion-mixture1] in [entity=gasturbinemk01] for electricity. Higher temperatures of the fluid mean that the turbine works at a higher efficiency, thus generating more power. [entity=gasturbinemk01] has a limit to the temperature it can accept: if you give it a higher temperature input than this limit, it will be capped to that temperature, so you will be wasting the input. Higher level turbines have higher limits.