├── .github └── workflows │ └── stylua.yml ├── LICENSE ├── README.md ├── SeaBlock ├── changelog.txt ├── control.lua ├── data-final-fixes.lua ├── data-final-fixes │ ├── SpaceMod.lua │ ├── icons.lua │ ├── logistics.lua │ ├── mapgen.lua │ ├── recipe.lua │ ├── tech-tree.lua │ └── unobtainable_items.lua ├── data-updates.lua ├── data-updates │ ├── Companion_Drones.lua │ ├── SpaceMod.lua │ ├── algae.lua │ ├── clowns.lua │ ├── coal.lua │ ├── fuel.lua │ ├── furnaces.lua │ ├── groups.lua │ ├── landfill.lua │ ├── military.lua │ ├── misc.lua │ ├── other-mods.lua │ ├── rubber.lua │ ├── science-cost-tweaker.lua │ ├── slag-processing.lua │ ├── startup.lua │ ├── sulfur.lua │ ├── thermal-extractor.lua │ └── wood.lua ├── data.lua ├── data │ ├── ScienceCostTweakerM.lua │ ├── misc.lua │ ├── recipe.lua │ ├── tables.lua │ └── tech-tree.lua ├── graphics │ └── technology │ │ ├── basic-circuit-board.png │ │ ├── lab.png │ │ └── ore.png ├── info.json ├── lib.lua ├── locale │ ├── de │ │ └── SeaBlock.cfg │ ├── en │ │ └── SeaBlock.cfg │ ├── es-ES │ │ └── SeaBlock.cfg │ ├── fr │ │ └── SeaBlock.cfg │ ├── hu │ │ └── SeaBlock.cfg │ ├── ja │ │ └── SeaBlock.cfg │ ├── ko │ │ └── SeaBlock.cfg │ ├── pl │ │ └── SeaBlock.cfg │ ├── pt-BR │ │ └── SeaBlock.cfg │ ├── ru │ │ └── SeaBlock.cfg │ ├── uk │ │ └── SeaBlock.cfg │ ├── zh-CN │ │ └── SeaBlock.cfg │ └── zh-TW │ │ └── SeaBlock.cfg ├── mapgen.lua ├── migrations │ ├── SeaBlock_0.5.1.lua │ ├── SeaBlock_0.5.2.lua │ ├── SeaBlock_0.5.3.lua │ └── SeaBlock_0.5.4.lua ├── prototypes │ ├── recipe-category.lua │ ├── recipe.lua │ ├── rockchest.lua │ └── technology.lua ├── remote.lua ├── settings-updates.lua ├── settings-updates │ ├── ScienceCostTweakerM.lua │ ├── SpaceMod.lua │ ├── angelsbioprocessing.lua │ ├── angelsindustries.lua │ ├── angelspetrochem.lua │ ├── angelsrefining.lua │ ├── bobassembly.lua │ ├── bobenemies.lua │ ├── boblibrary.lua │ ├── boblogistics.lua │ ├── bobmining.lua │ ├── bobores.lua │ ├── bobplates.lua │ ├── bobpower.lua │ ├── bobrevamp.lua │ ├── bobtech.lua │ ├── bobwarfare.lua │ └── reskins-angels.lua ├── settings.lua ├── starting-items.lua └── thumbnail.png ├── SeaBlockMetaPack ├── info.json └── thumbnail.png ├── assets.sh ├── factorio-mods-localization.json └── stylua.toml /.github/workflows/stylua.yml: -------------------------------------------------------------------------------- 1 | name: StyLuaFormatter 2 | 3 | on: [push] 4 | 5 | jobs: 6 | prettier: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v2 11 | with: 12 | # Make sure the actual branch is checked out when running on pull requests 13 | ref: ${{ github.head_ref }} 14 | - name: Format code 15 | uses: JohnnyMorganz/stylua-action@v1 16 | with: 17 | token: ${{ secrets.GITHUB_TOKEN }} 18 | version: latest # NOTE: we recommend pinning to a specific version in case of formatting changes 19 | # CLI arguments 20 | args: . 21 | - name: Commit changes 22 | uses: EndBug/add-and-commit@v9 23 | with: 24 | author_name: StyLuaFormatter 25 | message: 'Format Code' 26 | add: '*.lua' 27 | 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 KiwiHawk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sea Block 2 | Factorio mod Sea Block. Created by Trainwreck. 3 | 4 | https://mods.factorio.com/mod/SeaBlock 5 | -------------------------------------------------------------------------------- /SeaBlock/control.lua: -------------------------------------------------------------------------------- 1 | seablock = seablock or {} 2 | 3 | require("starting-items") 4 | require("remote") 5 | 6 | function seablock.give_research(force) 7 | if not force.technologies["sb-startup1"].researched then 8 | force.add_research("sb-startup1") 9 | end 10 | end 11 | 12 | function seablock.create_rock_chest(surface, pos) 13 | local has_items = false 14 | 15 | if global.starting_items and (not game.is_multiplayer()) then 16 | for item, quantity in pairs(global.starting_items) do 17 | if quantity > 0 then 18 | has_items = true 19 | break 20 | end 21 | end 22 | end 23 | 24 | if has_items then 25 | local chest = surface.create_entity({ name = "rock-chest", position = pos, force = game.forces.neutral }) 26 | for item, quantity in pairs(global.starting_items) do 27 | if quantity > 0 then 28 | chest.insert({ name = item, count = quantity }) 29 | end 30 | end 31 | end 32 | end 33 | 34 | function seablock.have_item(player, itemname, crafted) 35 | local unlock = global.unlocks[itemname] 36 | -- Special case for basic-circuit because it is part of starting equipment 37 | if unlock and (itemname ~= "basic-circuit-board" or crafted) then 38 | for _, v in ipairs(unlock) do 39 | if player.force.technologies[v] then 40 | player.force.technologies[v].researched = true 41 | end 42 | end 43 | end 44 | end 45 | 46 | local function set_pvp() 47 | if remote.interfaces.pvp then 48 | remote.call("pvp", "set_config", { silo_offset = { x = 16, y = 16 } }) 49 | end 50 | end 51 | 52 | local function init() 53 | set_pvp() 54 | global.starting_items = seablock.populate_starting_items(game.item_prototypes) 55 | if remote.interfaces.freeplay then 56 | if remote.interfaces.freeplay.set_disable_crashsite then 57 | remote.call("freeplay", "set_disable_crashsite", true) 58 | end 59 | end 60 | global.unlocks = { 61 | ["angels-ore3-crushed"] = { "sb-startup1", "bio-wood-processing" }, 62 | ["basic-circuit-board"] = { "sb-startup3", "sct-lab-t1" }, 63 | } 64 | if game.technology_prototypes["sct-automation-science-pack"] then 65 | global.unlocks["lab"] = { "sct-automation-science-pack" } 66 | else 67 | global.unlocks["lab"] = { "sb-startup4" } 68 | end 69 | 70 | if remote.interfaces["freeplay"] then 71 | local created_items = remote.call("freeplay", "get_created_items") 72 | created_items["iron-plate"] = nil 73 | created_items["burner-mining-drill"] = nil 74 | created_items["burner-ore-crusher"] = nil 75 | created_items["stone-furnace"] = nil 76 | created_items["iron-plate"] = nil 77 | created_items["wood"] = nil 78 | remote.call("freeplay", "set_created_items", created_items) 79 | end 80 | end 81 | 82 | script.on_event(defines.events.on_player_joined_game, function(e) 83 | seablock.give_research(game.players[e.player_index].force) 84 | end) 85 | 86 | script.on_event(defines.events.on_force_created, function(e) 87 | seablock.give_research(e.force) 88 | end) 89 | 90 | script.on_event(defines.events.on_chunk_generated, function(e) 91 | local surface = e.surface 92 | if surface.name ~= "nauvis" and surface.name:sub(1, 14) ~= "battle_surface" then 93 | return 94 | end 95 | local ltx = e.area.left_top.x 96 | local lty = e.area.left_top.y 97 | local rbx = e.area.right_bottom.x 98 | local rby = e.area.right_bottom.y 99 | for _, pos in pairs(surface.map_gen_settings.starting_points) do 100 | if pos.x >= ltx and pos.y >= lty and pos.x < rbx and pos.y < rby then 101 | seablock.create_rock_chest(surface, pos) 102 | end 103 | end 104 | end) 105 | 106 | script.on_event(defines.events.on_player_crafted_item, function(e) 107 | local player = game.players[e.player_index] 108 | if e.item_stack.valid_for_read then 109 | seablock.have_item(player, e.item_stack.name, true) 110 | end 111 | end) 112 | 113 | script.on_event(defines.events.on_picked_up_item, function(e) 114 | local player = game.players[e.player_index] 115 | if e.item_stack.valid_for_read then 116 | seablock.have_item(player, e.item_stack.name, false) 117 | end 118 | end) 119 | 120 | script.on_event(defines.events.on_player_cursor_stack_changed, function(e) 121 | local player = game.players[e.player_index] 122 | if player.cursor_stack and player.cursor_stack.valid_for_read then 123 | seablock.have_item(player, player.cursor_stack.name, false) 124 | end 125 | end) 126 | 127 | script.on_event(defines.events.on_player_main_inventory_changed, function(e) 128 | local player = game.players[e.player_index] 129 | local inv = player.get_inventory(defines.inventory.character_main) 130 | if not inv then -- Compatibility with BlueprintLab_Bud17 131 | return 132 | end 133 | for k, v in pairs(global.unlocks) do 134 | for _, v2 in ipairs(v) do 135 | if 136 | player.force.technologies[v2] 137 | and not player.force.technologies[v2].researched 138 | and inv.get_item_count(k) > 0 139 | then 140 | seablock.have_item(player, k, false) 141 | end 142 | end 143 | end 144 | end) 145 | 146 | script.on_init(init) 147 | 148 | script.on_configuration_changed(function(cfg) 149 | init() 150 | -- Heavy handed fix for mods that forget migration scripts 151 | for _, force in pairs(game.forces) do 152 | force.reset_technologies() 153 | force.reset_recipes() 154 | for tech_name, tech in pairs(force.technologies) do 155 | if tech.researched then 156 | for tech_name, effect in pairs(tech.effects) do 157 | if effect.type == "unlock-recipe" then 158 | force.recipes[effect.recipe].enabled = true 159 | end 160 | end 161 | end 162 | if game.technology_prototypes[tech_name].enabled then 163 | force.technologies[tech_name].enabled = true 164 | end 165 | end 166 | if force.technologies["kovarex-enrichment-process"] then 167 | force.technologies["kovarex-enrichment-process"].enabled = true 168 | end 169 | 170 | if 171 | force.technologies["sct-automation-science-pack"] 172 | and force.technologies["sb-startup4"] 173 | and force.technologies["sb-startup4"].researched 174 | then 175 | force.technologies["sct-lab-t1"].researched = true 176 | force.technologies["sct-automation-science-pack"].researched = true 177 | end 178 | end 179 | end) 180 | 181 | script.on_load(function() 182 | set_pvp() 183 | end) 184 | 185 | script.on_event(defines.events.on_player_created, function(e) 186 | if global.starting_items and game.is_multiplayer() then 187 | local inv = game.players[e.player_index].get_main_inventory() 188 | for item, quantity in pairs(global.starting_items) do 189 | if quantity > 0 then 190 | inv.insert({ name = item, count = quantity }) 191 | end 192 | end 193 | end 194 | end) 195 | 196 | if script.active_mods["Companion_Drones"] then 197 | script.on_event(defines.events.on_player_created, function(e) 198 | local s = game.surfaces["nauvis"] 199 | if s then 200 | local companions = s.find_entities_filtered({ name = "companion" }) 201 | for _, companion in pairs(companions) do 202 | local inventory = companion.get_main_inventory() 203 | local i = companion.remove_item("coal") 204 | -- Only do drone inventory cleanup if coal is found 205 | -- Else players will get free wood pellets any time a new player joins 206 | if i > 0 then 207 | companion.insert("wood-pellets") 208 | local grid = companion.grid 209 | for _, item in pairs(grid.equipment) do 210 | if (item.name == "companion-defense-equipment") or (item.name == "companion-shield-equipment") then 211 | grid.take({ equipment = item }) 212 | end 213 | end 214 | end 215 | end 216 | end 217 | end) 218 | end 219 | 220 | script.on_load(function() 221 | set_pvp() 222 | end) 223 | 224 | script.on_event(defines.events.on_player_created, function(e) 225 | if global.starting_items and game.is_multiplayer() then 226 | local inv = game.players[e.player_index].get_main_inventory() 227 | for item, quantity in pairs(global.starting_items) do 228 | if quantity > 0 then 229 | inv.insert({ name = item, count = quantity }) 230 | end 231 | end 232 | end 233 | end) 234 | 235 | if script.active_mods["Companion_Drones"] then 236 | script.on_event(defines.events.on_player_created, function(e) 237 | local s = game.surfaces["nauvis"] 238 | if s then 239 | local companions = s.find_entities_filtered({ name = "companion" }) 240 | for _, companion in pairs(companions) do 241 | companion.remove_item("coal") 242 | companion.insert("wood-pellets") 243 | local grid = companion.grid 244 | for _, item in pairs(grid.equipment) do 245 | if (item.name == "companion-defense-equipment") or (item.name == "companion-shield-equipment") then 246 | grid.take({ equipment = item }) 247 | end 248 | end 249 | end 250 | end 251 | end) 252 | end 253 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes.lua: -------------------------------------------------------------------------------- 1 | -- Adjust rubber production amount to how it was in petrochem 0.7.9. 2 | -- TODO: Revisit this after Angel adds more liquid rubber recipes 3 | seablock.lib.substresult("liquid-rubber-1", "liquid-rubber", nil, 20) 4 | 5 | -- Reduce burner heat source neighbour bonus 6 | local reactors = { 7 | "burner-reactor", 8 | "burner-reactor-2", 9 | "fluid-reactor", 10 | "fluid-reactor-2", 11 | } 12 | 13 | for _, v in pairs(reactors) do 14 | local r = data.raw.reactor[v] 15 | if r then 16 | r.neighbour_bonus = 0.125 17 | end 18 | end 19 | 20 | -- Refresh circuit board icon as it may have been overwritten 21 | if data.raw.tool["sb-basic-circuit-board-tool"] and data.raw.item["basic-circuit-board"] then 22 | seablock.lib.copy_icon(data.raw.tool["sb-basic-circuit-board-tool"], data.raw.item["basic-circuit-board"]) 23 | end 24 | 25 | require("data-final-fixes/logistics") 26 | require("data-final-fixes/icons") 27 | require("data-final-fixes/recipe") 28 | require("data-final-fixes/tech-tree") 29 | require("data-final-fixes/unobtainable_items") 30 | require("data-final-fixes/mapgen") 31 | require("data-final-fixes/SpaceMod") 32 | 33 | data.raw.recipe["copper-cable"].allow_decomposition = true 34 | data.raw.recipe["paper-bleaching-1"].allow_decomposition = true 35 | 36 | for _, v in pairs(data.raw.character) do 37 | if v.crafting_categories then 38 | table.insert(v.crafting_categories, "crafting-handonly") 39 | end 40 | end 41 | 42 | bobmods.lib.tech.prerequisite_cleanup() 43 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/SpaceMod.lua: -------------------------------------------------------------------------------- 1 | if not mods["SpaceMod"] then 2 | return 3 | end 4 | 5 | if settings.startup["SpaceX-ignore-tech-multiplier"] then 6 | if settings.startup["SpaceX-ignore-tech-multiplier"].value then 7 | for _, tech_name in pairs({ 8 | "ftl-theory-A", 9 | "ftl-theory-B", 10 | "ftl-theory-C", 11 | "ftl-theory-D", 12 | "ftl-theory-D1", 13 | "ftl-theory-D2", 14 | "ftl-propulsion", 15 | }) do 16 | bobmods.lib.tech.ignore_tech_cost_multiplier(tech_name, true) 17 | end 18 | else 19 | for _, tech_name in pairs({ 20 | "space-assembly", 21 | "space-construction", 22 | "space-casings", 23 | "protection-fields", 24 | "fusion-reactor", 25 | "space-thrusters", 26 | "fuel-cells", 27 | "habitation", 28 | "life-support-systems", 29 | "spaceship-command", 30 | "astrometrics", 31 | }) do 32 | local tech = data.raw.technology[tech_name] 33 | 34 | if tech then 35 | tech.unit.count = tech.unit.count / 4 36 | end 37 | end 38 | end 39 | end 40 | 41 | local recipes = { 42 | "low-density-structure", 43 | "rocket-control-unit", 44 | "assembly-robot", 45 | "satellite", 46 | "drydock-assembly", 47 | "fusion-reactor", 48 | "hull-component", 49 | "protection-field", 50 | "space-thruster", 51 | "fuel-cell", 52 | "habitation", 53 | "life-support", 54 | "command", 55 | "astrometrics", 56 | "ftl-drive", 57 | } 58 | 59 | local techs = { 60 | "space-assembly", 61 | "space-construction", 62 | "space-casings", 63 | "protection-fields", 64 | "fusion-reactor", 65 | "space-thrusters", 66 | "fuel-cells", 67 | "habitation", 68 | "life-support-systems", 69 | "spaceship-command", 70 | "astrometrics", 71 | "ftl-theory-A", 72 | "ftl-theory-B", 73 | "ftl-theory-C", 74 | "ftl-theory-D", 75 | "ftl-theory-D1", 76 | "ftl-theory-D2", 77 | "ftl-propulsion", 78 | } 79 | 80 | local upgrades = { 81 | ["bob-construction-robot-4"] = "bob-construction-robot-5", 82 | -- CircuitProcessing replaces module-3 with module-4, so SpaceMod data-final-fixes 83 | -- doesn't find the modules it's expecting. 84 | ["speed-module-4"] = "speed-module-8", 85 | ["effectivity-module-4"] = "effectivity-module-8", 86 | ["productivity-module-4"] = "productivity-module-8", 87 | ["fusion-reactor-equipment-4"] = "fusion-reactor-equipment-4", -- for amount adjustment 88 | } 89 | 90 | local function iterateingredients(recipe, func) 91 | if recipe.normal then 92 | func(recipe.normal.ingredients) 93 | func(recipe.expensive.ingredients) 94 | else 95 | func(recipe.ingredients) 96 | end 97 | end 98 | 99 | local function doupgrade(ingredients) 100 | for _, item in pairs(ingredients) do 101 | local nameidx = 1 102 | local amountidx = 2 103 | if item.name then 104 | nameidx = "name" 105 | end 106 | if item.amount then 107 | amountidx = "amount" 108 | end 109 | local upgrade = upgrades[item[nameidx]] 110 | if upgrade and (data.raw.item[upgrade] or data.raw.module[upgrade]) then 111 | item[nameidx] = upgrade 112 | end 113 | if upgrade == "bob-construction-robot-5" then 114 | item[amountidx] = 1 115 | elseif upgrade == "fusion-reactor-equipment-4" then 116 | item[amountidx] = item[amountidx] / 2 117 | end 118 | end 119 | end 120 | 121 | for _, recipe in pairs(recipes) do 122 | if data.raw.recipe[recipe] then 123 | iterateingredients(data.raw.recipe[recipe], doupgrade) 124 | end 125 | end 126 | 127 | -- ftl-theory-D means SpaceMod bob's mode has activated 128 | if data.raw.technology["ftl-theory-D"] then 129 | for _, tech in pairs(techs) do 130 | if data.raw.technology[tech] then 131 | data.raw.technology[tech].unit.count = data.raw.technology[tech].unit.count / 10 132 | end 133 | end 134 | 135 | if mods["bobtech"] then 136 | bobmods.lib.tech.add_science_pack("ftl-theory-D2", "advanced-logistic-science-pack", 1) 137 | bobmods.lib.tech.remove_prerequisite("ftl-theory-D1", "ftl-theory-D") 138 | bobmods.lib.tech.add_prerequisite("ftl-theory-D1", "ftl-theory-C") 139 | bobmods.lib.tech.add_prerequisite("ftl-theory-D2", "ftl-theory-D") 140 | end 141 | end 142 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/icons.lua: -------------------------------------------------------------------------------- 1 | -- Revert Artisanal Reskins recipe icons 2 | if mods["reskins-angels"] then 3 | local slag_processing_list = { 4 | "slag-processing-1", 5 | "slag-processing-2", 6 | "slag-processing-3", 7 | "slag-processing-4", 8 | "slag-processing-5", 9 | "slag-processing-6", 10 | } 11 | for _, name in pairs(slag_processing_list) do 12 | seablock.reskins.clear_icon_specification(name, "recipe") 13 | end 14 | end 15 | 16 | -- Remove I overlay from recipes 17 | seablock.reskins.clear_icon_specification("explosives", "recipe") 18 | seablock.reskins.clear_icon_specification("liquid-rubber-1", "recipe") 19 | seablock.reskins.clear_icon_specification("solid-rubber", "recipe") 20 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/logistics.lua: -------------------------------------------------------------------------------- 1 | -- Overwrite belt lengths 2 | 3 | local function set_speed(type, name, speed) 4 | local item = data.raw[type][name] 5 | if item then 6 | item.speed = speed / (60 * 8) 7 | end 8 | end 9 | 10 | set_speed("transport-belt", "basic-transport-belt", 7.5) 11 | set_speed("underground-belt", "basic-underground-belt", 7.5) 12 | set_speed("splitter", "basic-splitter", 7.5) 13 | 14 | set_speed("transport-belt", "transport-belt", 15) 15 | set_speed("underground-belt", "underground-belt", 15) 16 | set_speed("splitter", "splitter", 15) 17 | 18 | set_speed("transport-belt", "fast-transport-belt", 30) 19 | set_speed("underground-belt", "fast-underground-belt", 30) 20 | set_speed("splitter", "fast-splitter", 30) 21 | 22 | set_speed("transport-belt", "express-transport-belt", 45) 23 | set_speed("underground-belt", "express-underground-belt", 45) 24 | set_speed("splitter", "express-splitter", 45) 25 | 26 | set_speed("transport-belt", "turbo-transport-belt", 60) 27 | set_speed("underground-belt", "turbo-underground-belt", 60) 28 | set_speed("splitter", "turbo-splitter", 60) 29 | 30 | set_speed("transport-belt", "ultimate-transport-belt", 75) 31 | set_speed("underground-belt", "ultimate-underground-belt", 75) 32 | set_speed("splitter", "ultimate-splitter", 75) 33 | 34 | -- Increase energy consumption of bob's extra beacons 35 | -- Also reduce module slots and effectivity 36 | if data.raw.beacon["beacon-2"] then 37 | data.raw.beacon["beacon-2"].energy_usage = "960kW" 38 | data.raw.beacon["beacon-2"].module_specification.module_slots = 2 39 | data.raw.beacon["beacon-2"].distribution_effectivity = 0.5 40 | end 41 | if data.raw.beacon["beacon-3"] then 42 | data.raw.beacon["beacon-3"].energy_usage = "1920kW" 43 | data.raw.beacon["beacon-3"].module_specification.module_slots = 2 44 | data.raw.beacon["beacon-3"].distribution_effectivity = 0.5 45 | end 46 | 47 | -- Undo boblogistcs changes to logistic system research 48 | bobmods.lib.tech.add_new_science_pack("logistic-system", "production-science-pack", 1) 49 | if data.raw.tool["advanced-logistic-science-pack"] then 50 | bobmods.lib.tech.add_new_science_pack("logistic-system", "advanced-logistic-science-pack", 1) 51 | else 52 | bobmods.lib.tech.add_new_science_pack("logistic-system", "utility-science-pack", 1) 53 | end 54 | 55 | bobmods.lib.tech.add_prerequisite("logistic-system", "bob-robots-2") 56 | 57 | local logisticstechs = { 58 | "logistic-system-2", 59 | "logistic-system-3", 60 | "angels-logistic-warehouses", 61 | "logistic-silos", 62 | } 63 | 64 | for _, v in pairs(logisticstechs) do 65 | if data.raw.technology[v] then 66 | bobmods.lib.tech.add_new_science_pack(v, "production-science-pack", 1) 67 | bobmods.lib.tech.add_new_science_pack(v, "utility-science-pack", 1) 68 | 69 | if data.raw.tool["advanced-logistic-science-pack"] then 70 | bobmods.lib.tech.add_new_science_pack(v, "advanced-logistic-science-pack", 1) 71 | end 72 | end 73 | end 74 | 75 | if mods["angelsaddons-storage"] then 76 | bobmods.lib.tech.replace_prerequisite("logistic-silos", "logistic-system", "logistic-system-3") 77 | bobmods.lib.tech.replace_prerequisite("angels-logistic-warehouses", "logistic-system", "logistic-silos") 78 | end 79 | bobmods.lib.tech.add_prerequisite("logistic-system-2", "utility-science-pack") 80 | 81 | -- No logistics chest at green science level. 82 | local function revertchests(tech) 83 | local neweffects = { 84 | { type = "unlock-recipe", recipe = "logistic-chest-passive-provider" }, 85 | { type = "unlock-recipe", recipe = "logistic-chest-storage" }, 86 | } 87 | for k, v in pairs(tech.effects) do 88 | if 89 | v.type ~= "unlock-recipe" 90 | or ( 91 | v.recipe ~= "logistic-chest-passive-provider" 92 | and v.recipe ~= "logistic-chest-storage" 93 | and v.recipe ~= "logistic-chest-requester" 94 | ) 95 | then 96 | table.insert(neweffects, v) 97 | end 98 | end 99 | tech.effects = neweffects 100 | end 101 | revertchests(data.raw.technology["logistic-robotics"]) 102 | revertchests(data.raw.technology["construction-robotics"]) 103 | local found = false 104 | for k, v in pairs(data.raw.technology["logistic-system"].effects) do 105 | if v.type == "unlock-recipe" and v.recipe == "logistic-chest-requester" then 106 | found = true 107 | end 108 | end 109 | if not found then 110 | table.insert( 111 | data.raw.technology["logistic-system"].effects, 112 | { type = "unlock-recipe", recipe = "logistic-chest-requester" } 113 | ) 114 | end 115 | 116 | if mods["angelsindustries"] then 117 | bobmods.lib.tech.remove_recipe_unlock("angels-construction-robots-2", "angels-logistic-chest-buffer") 118 | bobmods.lib.tech.remove_recipe_unlock("cargo-robots", "angels-logistic-chest-requester") 119 | bobmods.lib.tech.remove_recipe_unlock("cargo-robots-2", "angels-logistic-chest-active-provider") 120 | bobmods.lib.tech.add_recipe_unlock("logistic-system", "angels-logistic-chest-active-provider") 121 | bobmods.lib.tech.add_recipe_unlock("logistic-system", "angels-logistic-chest-buffer") 122 | bobmods.lib.tech.add_recipe_unlock("logistic-system", "angels-logistic-chest-requester") 123 | end 124 | 125 | -- Reduce payload size of Bob's bots 126 | for i = 2, 5 do 127 | local robot = data.raw["logistic-robot"]["bob-logistic-robot-" .. i] 128 | if robot then 129 | robot.max_payload_size = 1 130 | end 131 | robot = data.raw["construction-robot"]["bob-construction-robot-" .. i] 132 | if robot then 133 | robot.max_payload_size = 1 134 | end 135 | end 136 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/mapgen.lua: -------------------------------------------------------------------------------- 1 | -- No resource placement 2 | for k, v in pairs(data.raw.resource) do 3 | v.autoplace = nil 4 | end 5 | 6 | -- No spawners 7 | for k, v in pairs(data.raw["unit-spawner"]) do 8 | v.autoplace = nil 9 | v.control = nil 10 | end 11 | 12 | -- No trees 13 | for k, v in pairs(data.raw.tree) do 14 | if 15 | k ~= "temperate-garden" 16 | and k ~= "desert-garden" 17 | and k ~= "swamp-garden" 18 | and k ~= "temperate-tree" 19 | and k ~= "desert-tree" 20 | and k ~= "swamp-tree" 21 | and k ~= "puffer-nest" 22 | then 23 | v.autoplace = nil 24 | seablock.lib.add_flag("tree", v.name, "not-deconstructable") 25 | end 26 | end 27 | 28 | -- No rocks 29 | for k, v in pairs(data.raw["simple-entity"]) do 30 | v.autoplace = nil 31 | seablock.lib.add_flag("simple-entity", v.name, "not-deconstructable") 32 | end 33 | 34 | local keepcontrols = {} 35 | local turrets = data.raw["turret"] 36 | for turret_name, turret in pairs(turrets) do 37 | if turret.autoplace and turret.autoplace.control then 38 | keepcontrols[turret.autoplace.control] = true 39 | end 40 | end 41 | 42 | local controls = data.raw["autoplace-control"] 43 | for k, v in pairs(controls) do 44 | if k ~= "enemy-base" and not keepcontrols[k] then 45 | controls[k] = nil 46 | end 47 | end 48 | 49 | local presets = data.raw["map-gen-presets"]["default"] 50 | for k, v in pairs(presets) do 51 | -- Check for order as this is a manditory property for a MapGenPreset (so we skip type and name) 52 | if k ~= "default" and k ~= "marathon" and v.order then 53 | data.raw["map-gen-presets"]["default"][k] = nil 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/recipe.lua: -------------------------------------------------------------------------------- 1 | -- Revert massive buff of insulated wire recipe 2 | bobmods.lib.recipe.set_energy_required("insulated-cable", 2) 3 | seablock.lib.substingredient("insulated-cable", "tinned-copper-cable", nil, 8) 4 | seablock.lib.substingredient("insulated-cable", "rubber", nil, 8) 5 | bobmods.lib.recipe.set_result("insulated-cable", { "insulated-cable", 8 }) 6 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/tech-tree.lua: -------------------------------------------------------------------------------- 1 | -- Remove empty bob's techs 2 | bobmods.lib.tech.remove_prerequisite("cobalt-processing", "chemical-processing-1") 3 | bobmods.lib.tech.remove_prerequisite("grinding", "chemical-processing-1") 4 | bobmods.lib.tech.remove_prerequisite("lithium-processing", "chemical-processing-1") 5 | 6 | bobmods.lib.tech.remove_prerequisite("cobalt-processing", "chemical-processing-2") 7 | bobmods.lib.tech.remove_prerequisite("silicon-processing", "chemical-processing-2") 8 | bobmods.lib.tech.remove_prerequisite("advanced-electronics", "chemical-processing-2") 9 | bobmods.lib.tech.remove_prerequisite("titanium-processing", "chemical-processing-2") 10 | bobmods.lib.tech.remove_prerequisite("tungsten-processing", "chemical-processing-2") 11 | 12 | seablock.lib.hide_technology("electrolysis-1") 13 | seablock.lib.hide_technology("electrolysis-2") 14 | seablock.lib.hide_technology("chemical-processing-1") 15 | seablock.lib.hide_technology("chemical-processing-2") 16 | 17 | bobmods.lib.tech.remove_recipe_unlock("angels-advanced-gas-processing", "solid-fuel-methane") 18 | bobmods.lib.tech.remove_prerequisite("circuit-network", "bio-wood-processing-2") 19 | bobmods.lib.tech.add_prerequisite("circuit-network", "bio-paper-1") 20 | bobmods.lib.tech.remove_prerequisite("rubbers", "circuit-network") 21 | 22 | -- Unhide solid fuel from hydrogen 23 | seablock.lib.unhide_recipe("solid-fuel-from-hydrogen") 24 | seablock.lib.add_recipe_unlock("flammables", "solid-fuel-from-hydrogen", 4) 25 | -------------------------------------------------------------------------------- /SeaBlock/data-final-fixes/unobtainable_items.lua: -------------------------------------------------------------------------------- 1 | -- Rename internal item names to keep mods like FNEI searching properly 2 | local itemrename = { 3 | ["solid-coke"] = "wood-charcoal", 4 | ["filter-coal"] = "filter-charcoal", 5 | ["pellet-coke"] = "pellet-charcoal", 6 | } 7 | 8 | for k, v in pairs(itemrename) do 9 | local item = data.raw.item[k] 10 | data.raw.item[k] = nil 11 | item.name = v 12 | if not data.raw.item[v] then 13 | data.raw.item[v] = item 14 | end 15 | end 16 | local function updateline(line) 17 | local nameidx = "name" 18 | if line[nameidx] == nil then 19 | nameidx = 1 20 | end 21 | local item = line[nameidx] 22 | if itemrename[item] then 23 | line[nameidx] = itemrename[item] 24 | end 25 | end 26 | local function updaterecipe(recipe) 27 | for _, v in pairs(recipe.ingredients) do 28 | updateline(v) 29 | end 30 | if recipe.result and itemrename[recipe.result] then 31 | recipe.result = itemrename[recipe.result] 32 | end 33 | for _, v in pairs(recipe.results or {}) do 34 | updateline(v) 35 | end 36 | end 37 | for _, v in pairs(data.raw.recipe) do 38 | seablock.lib.iteraterecipes(v, updaterecipe) 39 | end 40 | 41 | -- Recipes to unconditionally remove 42 | local removerecipes = {} 43 | for _, v in ipairs({ 44 | "alien-artifact-blue-from-basic", 45 | "alien-artifact-green-from-basic", 46 | "alien-artifact-orange-from-basic", 47 | "alien-artifact-purple-from-basic", 48 | "alien-artifact-red-from-basic", 49 | "alien-artifact-yellow-from-basic", 50 | "angels-chemical-void-gas-natural-1", 51 | "angels-chemical-void-liquid-condensates", 52 | "angels-water-void-crystal-matrix", 53 | "angels-water-void-lithia-water", 54 | "angelsore1-crushed-hand", 55 | "angelsore3-crushed-hand", 56 | "big-burner-generator", 57 | "bio-tile", 58 | "bob-coal-from-wood", 59 | "bob-resin-wood", 60 | "burner-generator", 61 | "burner-mining-drill", 62 | "carbon-from-charcoal", 63 | "coal-cracking-1", 64 | "coal-cracking-2", 65 | "coal-cracking-3", 66 | "coal-crushed", 67 | "condensates-oil-refining", 68 | "condensates-refining", 69 | "diesel-fuel", 70 | "electric-mining-drill", 71 | "empty-crystal-matrix-barrel", 72 | "empty-diesel-fuel-barrel", 73 | "empty-gas-natural-1-barrel", 74 | "empty-liquid-condensates-barrel", 75 | "empty-lithia-water-barrel", 76 | "fill-crystal-matrix-barrel", 77 | "fill-diesel-fuel-barrel", 78 | "fill-gas-natural-1-barrel", 79 | "fill-liquid-condensates-barrel", 80 | "fill-lithia-water-barrel", 81 | "gas-fractioning-condensates", 82 | "gas-phosgene", 83 | "gas-separation", 84 | "oil-steam-boiler", 85 | "petroleum-generator", 86 | "protection-field-goopless", 87 | "pumpjack", 88 | "slag-processing-7", 89 | "slag-processing-8", 90 | "slag-processing-9", 91 | "solid-coke", 92 | "solid-coke-sulfur", 93 | "thermal-water-filtering-1", 94 | "thermal-water-filtering-2", 95 | "water-thermal-lithia", 96 | "wood-charcoal", 97 | }) do 98 | removerecipes[v] = true 99 | end 100 | 101 | -- Items to remove. Recipes are checked to ensure these can't be crafted, 102 | -- then any recipe that uses an unobtainable item is removed 103 | local unobtainable = {} 104 | for _, v in ipairs({ 105 | "big-burner-generator", 106 | "bio-tile", 107 | "burner-generator", 108 | "burner-mining-drill", 109 | "coal", 110 | "coal-crushed", 111 | "diesel-fuel", 112 | "diesel-fuel-barrel", 113 | "electric-mining-drill", 114 | "gas-natural-1", 115 | "gas-natural-1-barrel", 116 | "gas-phosgene", 117 | "gas-phosgene-barrel", 118 | "liquid-condensates", 119 | "liquid-condensates-barrel", 120 | "lithia-water", 121 | "lithia-water-barrel", 122 | "oil-steam-boiler", 123 | "petroleum-generator", 124 | "pumpjack", 125 | }) do 126 | unobtainable[v] = {} 127 | end 128 | 129 | -- unobtainable[key] -> { { a, and b, and .. }, or { c, ... } or, { d, and e, and f, ...}... } 130 | -- a,b,c... are items which if craftable imply key is also craftable and should not be removed 131 | local recipes = {} 132 | for k, v in pairs(data.raw.recipe) do 133 | if (v.enabled == true or v.enabled == nil) and not removerecipes[k] then 134 | recipes[k] = v 135 | end 136 | end 137 | 138 | -- Only scan recipes which are researchable 139 | for k, v in pairs(data.raw.technology) do 140 | if v.effects and (v.enabled == nil or v.enabled == true) then 141 | for _, effect in pairs(v.effects) do 142 | if effect.type == "unlock-recipe" and not removerecipes[effect.recipe] then 143 | recipes[effect.recipe] = data.raw.recipe[effect.recipe] 144 | end 145 | end 146 | end 147 | end 148 | 149 | for k, v in pairs(recipes) do 150 | local iset = {} 151 | if v.normal then 152 | iset = { v.normal, v.expensive } 153 | else 154 | iset = { v } 155 | end 156 | for _, recipe in ipairs(iset) do 157 | local items = {} 158 | if recipe.ingredients then 159 | for _, ingredient in pairs(recipe.ingredients) do 160 | local item = ingredient[1] or ingredient.name 161 | if unobtainable[item] then 162 | items[item] = true 163 | end 164 | end 165 | end 166 | local results = {} 167 | if recipe.result then 168 | results = { recipe.result } 169 | elseif recipe.results then 170 | for _, w in pairs(recipe.results) do 171 | table.insert(results, w.name) 172 | end 173 | end 174 | if next(items) ~= nil then 175 | for _, r in pairs(results) do 176 | if unobtainable[r] ~= nil then 177 | table.insert(unobtainable[r], table.deepcopy(items)) 178 | end 179 | end 180 | else 181 | for _, r in pairs(results) do 182 | unobtainable[r] = nil 183 | end 184 | end 185 | end 186 | end 187 | 188 | local work = true 189 | while work do 190 | work = false 191 | for item, inputs in pairs(unobtainable) do 192 | for _, inputarray in pairs(inputs) do 193 | for input, _ in pairs(inputarray) do 194 | if unobtainable[input] == nil then -- Input is obtainable 195 | inputarray[input] = nil 196 | if next(inputarray) == nil then 197 | unobtainable[item] = nil 198 | work = true 199 | end 200 | end 201 | end 202 | end 203 | end 204 | end 205 | 206 | -- Add hidden flag to disabled items so they don't show up in circuit menu/item filter/FNEI etc. 207 | for k, _ in pairs(unobtainable) do 208 | seablock.lib.hide_item(k) 209 | end 210 | 211 | -- Remove any recipe that uses an unobtainable ingredient 212 | local function keeprecipe(r) 213 | local iset = {} 214 | local count = 0 215 | table.insert(iset, r.ingredients) 216 | table.insert(iset, (r.normal or {}).ingredients) 217 | table.insert(iset, (r.expensive or {}).ingredients) 218 | for _, ingredients in ipairs(iset) do 219 | for _, v in ipairs(ingredients) do 220 | local ingredient = v[1] or v.name 221 | if ingredient and unobtainable[ingredient] then 222 | count = count + 1 223 | break 224 | end 225 | end 226 | end 227 | return count < #iset 228 | end 229 | 230 | for k, v in pairs(data.raw.recipe) do 231 | if not keeprecipe(v) then 232 | removerecipes[k] = true 233 | end 234 | end 235 | 236 | for k, _ in pairs(removerecipes) do 237 | bobmods.lib.recipe.hide(k) 238 | end 239 | 240 | -- Remove disabled recipes from technology unlock 241 | for k, v in pairs(data.raw.technology) do 242 | if v.effects then 243 | local neweffects = {} 244 | for _, e in pairs(v.effects) do 245 | if e.type ~= "unlock-recipe" or not removerecipes[e.recipe] then 246 | table.insert(neweffects, e) 247 | end 248 | end 249 | v.effects = neweffects 250 | end 251 | end 252 | 253 | -- Clear the list of science packs that alien lab can take 254 | -- This prevents YAFC warning 255 | if data.raw.lab["lab-alien"] then 256 | data.raw.lab["lab-alien"].inputs = {} 257 | end 258 | -------------------------------------------------------------------------------- /SeaBlock/data-updates.lua: -------------------------------------------------------------------------------- 1 | require("data-updates/algae") 2 | require("data-updates/clowns") 3 | require("data-updates/coal") 4 | require("data-updates/fuel") 5 | require("data-updates/furnaces") 6 | require("data-updates/groups") 7 | require("data-updates/military") 8 | require("data-updates/misc") 9 | require("data-updates/other-mods") 10 | require("data-updates/rubber") 11 | require("data-updates/science-cost-tweaker") 12 | require("data-updates/slag-processing") 13 | require("data-updates/SpaceMod") 14 | require("data-updates/sulfur") 15 | require("data-updates/thermal-extractor") 16 | require("data-updates/wood") 17 | require("data-updates/startup") 18 | require("data-updates/landfill") 19 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/Companion_Drones.lua: -------------------------------------------------------------------------------- 1 | if mods["Companion_Drones"] then 2 | bobmods.lib.tech.add_recipe_unlock("electronics", "companion") 3 | bobmods.lib.tech.add_recipe_unlock("electronics", "companion-roboport-equipment") 4 | bobmods.lib.tech.add_recipe_unlock("electronics", "companion-reactor-equipment") 5 | bobmods.lib.tech.add_recipe_unlock("energy-shield-mk2-equipment", "companion-shield-equipment") 6 | 7 | bobmods.lib.recipe.set_ingredient("companion-shield-equipment", { "energy-shield-mk2-equipment", 1 }) 8 | 9 | bobmods.lib.recipe.enabled("companion", false) 10 | bobmods.lib.recipe.enabled("companion-roboport-equipment", false) 11 | bobmods.lib.recipe.enabled("companion-reactor-equipment", false) 12 | bobmods.lib.recipe.enabled("companion-shield-equipment", false) 13 | bobmods.lib.recipe.enabled("companion-defense-equipment", false) 14 | 15 | if mods["bobwarfare"] and mods["bobequipment"] then 16 | -- If both Bob's Warfare and Bob's Personal equipment mods are enabled, 17 | -- then make make sure companion shield and laser defence stay at military + blue science 18 | bobmods.lib.tech.remove_science_pack("personal-laser-defense-equipment", "chemical-science-pack") 19 | bobmods.lib.tech.replace_prerequisite("personal-laser-defense-equipment", "power-armor", "modular-armor") 20 | bobmods.lib.tech.remove_prerequisite("personal-laser-defense-equipment", "low-density-structure") 21 | bobmods.lib.tech.remove_prerequisite("personal-laser-defense-equipment", "military-3") 22 | bobmods.lib.tech.add_prerequisite("personal-laser-defense-equipment-2", "military-3") 23 | 24 | bobmods.lib.tech.add_recipe_unlock("personal-laser-defense-equipment-2", "companion-defense-equipment") 25 | bobmods.lib.recipe.set_ingredient("companion-defense-equipment", { "personal-laser-defense-equipment-2", 1 }) 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/SpaceMod.lua: -------------------------------------------------------------------------------- 1 | if mods["SpaceMod"] then 2 | if 3 | settings.startup["bobmods-logistics-disableroboports"] 4 | and settings.startup["bobmods-logistics-disableroboports"].value 5 | then 6 | bobmods.lib.recipe.remove_ingredient("drydock-assembly", "roboport") 7 | bobmods.lib.recipe.add_ingredients("drydock-assembly", { 8 | { type = "item", name = "bob-robochest", amount = 10 }, 9 | { type = "item", name = "bob-logistic-zone-expander", amount = 10 }, 10 | { type = "item", name = "bob-robo-charge-port-large", amount = 10 }, 11 | }) 12 | end 13 | 14 | bobmods.lib.tech.add_science_pack("ftl-theory-D2", "production-science-pack", 1) 15 | bobmods.lib.tech.remove_prerequisite("ftl-propulsion", "ftl-theory-D1") 16 | bobmods.lib.tech.add_prerequisite("ftl-theory-D2", "ftl-theory-D1") 17 | bobmods.lib.tech.remove_prerequisite("ftl-theory-D2", "ftl-theory-C") 18 | 19 | if mods["boblogistics"] then 20 | bobmods.lib.tech.add_prerequisite("space-assembly", "bob-robots-4") 21 | end 22 | 23 | if not mods["bobmodules"] then 24 | -- Do nothing 25 | elseif mods["CircuitProcessing"] then 26 | bobmods.lib.tech.add_prerequisite("space-assembly", "effectivity-module-4") 27 | bobmods.lib.tech.add_prerequisite("space-assembly", "productivity-module-4") 28 | bobmods.lib.tech.add_prerequisite("space-assembly", "speed-module-4") 29 | else 30 | bobmods.lib.tech.add_prerequisite("space-assembly", "productivity-module-8") 31 | end 32 | 33 | if mods["bobpower"] and settings.startup["bobmods-power-solar"].value == true then 34 | bobmods.lib.tech.add_prerequisite("space-construction", "bob-solar-energy-3") 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/algae.lua: -------------------------------------------------------------------------------- 1 | -- Speed up algae farm 2 | data.raw["assembling-machine"]["algae-farm"].crafting_speed = 0.75 3 | 4 | -- Green algae 5 | bobmods.lib.recipe.set_category("algae-green", "bio-processing") 6 | 7 | -- Improved algae processing 8 | bobmods.lib.tech.remove_prerequisite("bio-processing-green", "water-treatment") 9 | bobmods.lib.tech.add_prerequisite("bio-processing-green", "bio-wood-processing-2") 10 | bobmods.lib.tech.add_prerequisite("bio-processing-green", "water-washing-1") 11 | data.raw.technology["bio-processing-green"].localised_name = { "technology-name.sb-bio-processing-green" } 12 | 13 | -- Move Lithia Salt to Thermal Water Extraction 14 | seablock.lib.moveeffect("algae-brown-burning", "bio-processing-green", "thermal-water-extraction", 2) 15 | bobmods.lib.tech.add_prerequisite("lithium-processing", "thermal-water-extraction") 16 | 17 | -- Change lithium crafting category 18 | bobmods.lib.recipe.set_category("lithium", "petrochem-electrolyser") 19 | bobmods.lib.recipe.set_category("lithium-water-electrolysis", "petrochem-electrolyser") 20 | 21 | bobmods.lib.tech.remove_recipe_unlock("water-treatment-3", "solid-lithium") 22 | bobmods.lib.recipe.hide("solid-lithium") 23 | 24 | -- Move Sodium Carbonate from Brown Algae to Sodium processing 2 25 | seablock.lib.moveeffect("algae-brown-burning-wash", "bio-processing-green", "sodium-processing-2", nil) 26 | 27 | -- Move Methanol from Cellulose Fibre to Advanced chemistry 1 28 | seablock.lib.moveeffect("gas-methanol-from-wood", "bio-processing-green", "angels-advanced-chemistry-1", 5) 29 | 30 | -- Make Red Algae depend on Blue Algae instead of Green Algae 31 | bobmods.lib.tech.remove_prerequisite("bio-processing-red", "bio-processing-green") 32 | bobmods.lib.tech.add_prerequisite("bio-processing-red", "bio-processing-blue") 33 | 34 | -- Blue algae 35 | bobmods.lib.tech.replace_prerequisite("bio-processing-blue", "bio-processing-red", "bio-processing-green") 36 | bobmods.lib.tech.remove_prerequisite("bio-processing-blue", "chemical-science-pack") 37 | bobmods.lib.tech.remove_science_pack("bio-processing-blue", "chemical-science-pack") 38 | bobmods.lib.tech.remove_recipe_unlock("bio-processing-blue", "algae-farm-4") 39 | bobmods.lib.recipe.set_category("algae-blue", "bio-processing-2") 40 | 41 | -- Red algae. Make Calcium carbonate in an assembling machine, not a liquefier 42 | bobmods.lib.recipe.set_category("solid-calcium-carbonate", "advanced-crafting") 43 | 44 | -- Alien bacteria 45 | bobmods.lib.recipe.set_category("alien-bacteria", "bio-processing-3") 46 | 47 | -- Make these craftable by hand 48 | bobmods.lib.recipe.set_category("solid-alginic-acid", "crafting") 49 | 50 | -- Fix handcrafting trying to use wrong crafting path 51 | data.raw.recipe["cellulose-fiber-raw-wood"].allow_as_intermediate = false 52 | 53 | -- Speed up algae->cellulose fiber crafting 54 | data.raw.recipe["cellulose-fiber-algae"].energy_required = 2 55 | 56 | -- Speed up cellulose->wood pellet crafting 57 | data.raw.recipe["wood-pellets"].energy_required = 3 58 | 59 | -- Reduce cost of Algae farm 2 60 | 61 | local buildingmulti = angelsmods.marathon.buildingmulti 62 | local buildingtime = angelsmods.marathon.buildingtime 63 | 64 | angelsmods.functions.RB.build({ 65 | { 66 | type = "recipe", 67 | name = "algae-farm-2", 68 | normal = { 69 | energy_required = 5, 70 | enabled = false, 71 | ingredients = { 72 | { type = "item", name = "algaefarm-2", amount = 1 }, 73 | { type = "item", name = "t0-plate", amount = 11 }, 74 | { type = "item", name = "t0-circuit", amount = 4 }, 75 | { type = "item", name = "t0-brick", amount = 11 }, 76 | { type = "item", name = "t0-pipe", amount = 18 }, 77 | }, 78 | result = "algae-farm-2", 79 | }, 80 | expensive = { 81 | energy_required = 5 * buildingtime, 82 | enabled = false, 83 | ingredients = { 84 | { type = "item", name = "algaefarm-2", amount = 1 }, 85 | { type = "item", name = "t0-plate", amount = 11 * buildingmulti }, 86 | { type = "item", name = "t0-circuit", amount = 4 * buildingmulti }, 87 | { type = "item", name = "t0-brick", amount = 11 * buildingmulti }, 88 | { type = "item", name = "t0-pipe", amount = 18 * buildingmulti }, 89 | }, 90 | result = "algae-farm-2", 91 | }, 92 | }, 93 | }) 94 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/clowns.lua: -------------------------------------------------------------------------------- 1 | if mods["Clowns-Extended-Minerals"] then 2 | data:extend({ 3 | { 4 | type = "item-subgroup", 5 | name = "resource-refining-2", 6 | group = "resource-refining", 7 | order = "i-a", 8 | }, 9 | { 10 | type = "item-subgroup", 11 | name = "slag-processing-2", 12 | group = "resource-refining", 13 | order = "i-b", 14 | }, 15 | { 16 | type = "recipe", 17 | name = "sb-slag-processing-clowns-1", 18 | localised_name = { 19 | "recipe-name.slag-processing", 20 | { "item-name.clown-mat", { "entity-name.clowns-ore1" }, "Ore" }, 21 | }, 22 | category = "crystallizing", 23 | subgroup = "slag-processing-2", 24 | enabled = false, 25 | allow_decomposition = false, 26 | normal = { 27 | energy_required = 4, 28 | ingredients = { 29 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 30 | }, 31 | results = { 32 | { type = "item", name = "clowns-ore1", amount = 1 }, 33 | }, 34 | }, 35 | expensive = { 36 | energy_required = 8, 37 | ingredients = { 38 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 39 | }, 40 | results = { 41 | { type = "item", name = "clowns-ore1", amount = 1 }, 42 | }, 43 | }, 44 | icon_size = 32, 45 | order = "a", 46 | }, 47 | { 48 | type = "recipe", 49 | name = "sb-slag-processing-clowns-2", 50 | localised_name = { 51 | "recipe-name.slag-processing", 52 | { "item-name.clown-mat", { "entity-name.clowns-ore2" }, "Ore" }, 53 | }, 54 | category = "crystallizing", 55 | subgroup = "slag-processing-2", 56 | enabled = false, 57 | allow_decomposition = false, 58 | normal = { 59 | energy_required = 4, 60 | ingredients = { 61 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 62 | }, 63 | results = { 64 | { type = "item", name = "clowns-ore2", amount = 1 }, 65 | }, 66 | }, 67 | expensive = { 68 | energy_required = 8, 69 | ingredients = { 70 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 71 | }, 72 | results = { 73 | { type = "item", name = "clowns-ore2", amount = 1 }, 74 | }, 75 | }, 76 | icon_size = 32, 77 | order = "b", 78 | }, 79 | { 80 | type = "recipe", 81 | name = "sb-slag-processing-clowns-3", 82 | localised_name = { 83 | "recipe-name.slag-processing", 84 | { "item-name.clown-mat", { "entity-name.clowns-ore3" }, "Ore" }, 85 | }, 86 | category = "crystallizing", 87 | subgroup = "slag-processing-2", 88 | enabled = false, 89 | allow_decomposition = false, 90 | normal = { 91 | energy_required = 4, 92 | ingredients = { 93 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 94 | }, 95 | results = { 96 | { type = "item", name = "clowns-ore3", amount = 1 }, 97 | }, 98 | }, 99 | expensive = { 100 | energy_required = 8, 101 | ingredients = { 102 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 103 | }, 104 | results = { 105 | { type = "item", name = "clowns-ore3", amount = 1 }, 106 | }, 107 | }, 108 | icon_size = 32, 109 | order = "c", 110 | }, 111 | { 112 | type = "recipe", 113 | name = "sb-slag-processing-clowns-4", 114 | localised_name = { 115 | "recipe-name.slag-processing", 116 | { "item-name.clown-mat", { "entity-name.clowns-ore4" }, "Ore" }, 117 | }, 118 | category = "crystallizing", 119 | subgroup = "slag-processing-2", 120 | enabled = false, 121 | allow_decomposition = false, 122 | normal = { 123 | energy_required = 4, 124 | ingredients = { 125 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 126 | }, 127 | results = { 128 | { type = "item", name = "clowns-ore4", amount = 1 }, 129 | }, 130 | }, 131 | expensive = { 132 | energy_required = 8, 133 | ingredients = { 134 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 135 | }, 136 | results = { 137 | { type = "item", name = "clowns-ore4", amount = 1 }, 138 | }, 139 | }, 140 | icon_size = 32, 141 | order = "d", 142 | }, 143 | { 144 | type = "recipe", 145 | name = "sb-slag-processing-clowns-5", 146 | localised_name = { 147 | "recipe-name.slag-processing", 148 | { "item-name.clown-mat", { "entity-name.clowns-ore5" }, "Ore" }, 149 | }, 150 | category = "crystallizing", 151 | subgroup = "slag-processing-2", 152 | enabled = false, 153 | allow_decomposition = false, 154 | normal = { 155 | energy_required = 4, 156 | ingredients = { 157 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 158 | }, 159 | results = { 160 | { type = "item", name = "clowns-ore5", amount = 1 }, 161 | }, 162 | }, 163 | expensive = { 164 | energy_required = 8, 165 | ingredients = { 166 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 167 | }, 168 | results = { 169 | { type = "item", name = "clowns-ore5", amount = 1 }, 170 | }, 171 | }, 172 | icon_size = 32, 173 | order = "e", 174 | }, 175 | { 176 | type = "recipe", 177 | name = "sb-slag-processing-clowns-6", 178 | localised_name = { 179 | "recipe-name.slag-processing", 180 | { "item-name.clown-mat", { "entity-name.clowns-ore6" }, "Ore" }, 181 | }, 182 | category = "crystallizing", 183 | subgroup = "slag-processing-2", 184 | enabled = false, 185 | allow_decomposition = false, 186 | normal = { 187 | energy_required = 4, 188 | ingredients = { 189 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 190 | }, 191 | results = { 192 | { type = "item", name = "clowns-ore6", amount = 1 }, 193 | }, 194 | }, 195 | expensive = { 196 | energy_required = 8, 197 | ingredients = { 198 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 199 | }, 200 | results = { 201 | { type = "item", name = "clowns-ore6", amount = 1 }, 202 | }, 203 | }, 204 | icon_size = 32, 205 | order = "f", 206 | }, 207 | { 208 | type = "recipe", 209 | name = "sb-slag-processing-clowns-7", 210 | localised_name = { 211 | "recipe-name.slag-processing", 212 | { "item-name.clown-mat", { "entity-name.clowns-ore7" }, "Ore" }, 213 | }, 214 | category = "crystallizing", 215 | subgroup = "slag-processing-2", 216 | enabled = false, 217 | allow_decomposition = false, 218 | normal = { 219 | energy_required = 4, 220 | ingredients = { 221 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 222 | }, 223 | results = { 224 | { type = "item", name = "clowns-ore7", amount = 1 }, 225 | }, 226 | }, 227 | expensive = { 228 | energy_required = 8, 229 | ingredients = { 230 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 231 | }, 232 | results = { 233 | { type = "item", name = "clowns-ore7", amount = 1 }, 234 | }, 235 | }, 236 | icon_size = 32, 237 | order = "g", 238 | }, 239 | { 240 | type = "recipe", 241 | name = "sb-slag-processing-clowns-8", 242 | localised_name = { 243 | "recipe-name.slag-processing", 244 | { "item-name.clown-mat", { "entity-name.clowns-ore8" }, "Ore" }, 245 | }, 246 | category = "crystallizing", 247 | subgroup = "slag-processing-2", 248 | enabled = false, 249 | allow_decomposition = false, 250 | normal = { 251 | energy_required = 4, 252 | ingredients = { 253 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 254 | }, 255 | results = { 256 | { type = "item", name = "clowns-ore8", amount = 1 }, 257 | }, 258 | }, 259 | expensive = { 260 | energy_required = 8, 261 | ingredients = { 262 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 263 | }, 264 | results = { 265 | { type = "item", name = "clowns-ore8", amount = 1 }, 266 | }, 267 | }, 268 | icon_size = 32, 269 | order = "h", 270 | }, 271 | { 272 | type = "recipe", 273 | name = "sb-slag-processing-clowns-9", 274 | localised_name = { 275 | "recipe-name.slag-processing", 276 | { "item-name.clown-mat", { "entity-name.clowns-ore9" }, "Ore" }, 277 | }, 278 | category = "crystallizing", 279 | subgroup = "slag-processing-2", 280 | enabled = false, 281 | allow_decomposition = false, 282 | normal = { 283 | energy_required = 4, 284 | ingredients = { 285 | { type = "fluid", name = "mineral-sludge", amount = 25 }, 286 | }, 287 | results = { 288 | { type = "item", name = "clowns-ore9", amount = 1 }, 289 | }, 290 | }, 291 | expensive = { 292 | energy_required = 8, 293 | ingredients = { 294 | { type = "fluid", name = "mineral-sludge", amount = 50 }, 295 | }, 296 | results = { 297 | { type = "item", name = "clowns-ore9", amount = 1 }, 298 | }, 299 | }, 300 | icon_size = 32, 301 | order = "i", 302 | }, 303 | { 304 | type = "recipe", 305 | name = "sb-clowns-resource-1", 306 | category = "ore-refining-t1", 307 | subgroup = "resource-refining-2", 308 | enabled = false, 309 | allow_decomposition = false, 310 | normal = { 311 | energy_required = 4, 312 | ingredients = { 313 | { type = "item", name = "solid-sand", amount = 1 }, 314 | { type = "item", name = "stone-crushed", amount = 6 }, 315 | }, 316 | results = { 317 | { type = "item", name = "clowns-resource1", amount = 1 }, 318 | }, 319 | }, 320 | expensive = { 321 | energy_required = 8, 322 | ingredients = { 323 | { type = "item", name = "solid-sand", amount = 1 }, 324 | { type = "item", name = "stone-crushed", amount = 12 }, 325 | }, 326 | results = { 327 | { type = "item", name = "clowns-resource1", amount = 1 }, 328 | }, 329 | }, 330 | icon_size = 32, 331 | order = "j", 332 | }, 333 | { 334 | type = "recipe", 335 | name = "sb-clowns-resource-2", 336 | category = "ore-refining-t1", 337 | subgroup = "resource-refining-2", 338 | enabled = false, 339 | allow_decomposition = false, 340 | normal = { 341 | energy_required = 4, 342 | ingredients = { 343 | { type = "item", name = "solid-sand", amount = 5 }, 344 | { type = "item", name = "blue-cellulose-fiber", amount = 1 }, 345 | }, 346 | results = { 347 | { type = "item", name = "clowns-resource2", amount = 5 }, 348 | }, 349 | }, 350 | expensive = { 351 | energy_required = 8, 352 | ingredients = { 353 | { type = "item", name = "solid-sand", amount = 5 }, 354 | { type = "item", name = "blue-cellulose-fiber", amount = 2 }, 355 | }, 356 | results = { 357 | { type = "item", name = "clowns-resource2", amount = 5 }, 358 | }, 359 | }, 360 | icon_size = 32, 361 | order = "k", 362 | }, 363 | }) 364 | 365 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-9", 23) 366 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-8", 21) 367 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-7", 19) 368 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-6", 16) 369 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-5", 13) 370 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-4", 10) 371 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-3", 7) 372 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-2", 4) 373 | seablock.lib.add_recipe_unlock("clowns-ore-crushing", "sb-slag-processing-clowns-1", 1) 374 | seablock.lib.add_recipe_unlock("water-washing-2", "sb-clowns-resource-1") 375 | seablock.lib.add_recipe_unlock("oil-gas-extraction", "sb-clowns-resource-2") 376 | end 377 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/coal.lua: -------------------------------------------------------------------------------- 1 | -- Coal removal 2 | seablock.lib.substingredient("grenade", "coal", "wood-charcoal") 3 | seablock.lib.substingredient("explosives", "coal", "wood-charcoal") 4 | seablock.lib.substingredient("solid-fuel-from-hydrogen", "coal", "wood-charcoal") 5 | if mods["bobenemies"] then 6 | seablock.lib.substingredient("alien-poison", "coal", "wood-charcoal") 7 | seablock.lib.substingredient("alien-explosive", "coal", "wood-charcoal") 8 | end 9 | seablock.lib.substingredient("filter-coal", "coal", "wood-charcoal") 10 | seablock.lib.substingredient("carbon", "coal", "wood-charcoal") 11 | if mods["Transport_Drones"] then 12 | seablock.lib.substingredient("road", "coal", "wood-charcoal") 13 | end 14 | seablock.lib.substingredient("carbon-separation-2", "coal", "wood-charcoal", 1) 15 | if mods["angelsaddons-storage"] and data.raw.recipe["silo-coal"] then 16 | seablock.lib.substingredient("silo-coal", "coal-crushed", "wood-charcoal", 10) 17 | end 18 | 19 | -- Disable coal cracking technology 20 | seablock.lib.hide_technology("angels-coal-cracking") 21 | seablock.lib.moveeffect("pellet-coke", "angels-coal-cracking", "angels-coal-processing-2") 22 | angelsmods.functions.move_item("pellet-coke", "bio-processing-wood", "f[pellet-coke]") 23 | angelsmods.functions.move_item("pellet-coke", "bio-processing-wood", "f[pellet-coke]", "recipe") 24 | 25 | -- Clear fuel value so these don't appear in Helmod's fuel picker 26 | data.raw.item["carbon"].fuel_emissions_multiplier = nil 27 | data.raw.item["carbon"].fuel_value = nil 28 | data.raw.item["carbon"].fuel_category = nil 29 | data.raw.item["coal"].fuel_emissions_multiplier = nil 30 | data.raw.item["coal"].fuel_value = nil 31 | data.raw.item["coal"].fuel_category = nil 32 | data.raw.item["coal-crushed"].fuel_value = nil 33 | data.raw.item["coal-crushed"].fuel_category = nil 34 | 35 | data.raw.recipe["coolant-used-filtration-1"].localised_name = { "recipe-name.coolant-used-filtration-1" } 36 | data.raw.recipe["coolant-used-filtration-2"].localised_name = { "recipe-name.coolant-used-filtration-2" } 37 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/fuel.lua: -------------------------------------------------------------------------------- 1 | -- Reduce angels charcoal fuel value 2 | data.raw.item["wood-bricks"].fuel_value = "18MJ" 3 | data.raw.item["wood-charcoal"].fuel_value = "4MJ" 4 | data.raw.item["pellet-coke"].fuel_value = "24MJ" 5 | 6 | -- Make hydrazine solid fuel match fuel_value 7 | if data.raw.fluid["hydrazine"] then 8 | local hydrazinevalue = data.raw.fluid["hydrazine"].fuel_value 9 | data.raw.fluid["gas-hydrazine"].fuel_value = hydrazinevalue 10 | if hydrazinevalue:sub(-2) == "kJ" then 11 | local hydrazinevaluekj = tonumber(hydrazinevalue:sub(1, -3)) 12 | seablock.lib.substingredient("solid-fuel-hydrazine", "gas-hydrazine", nil, math.floor(24000 / hydrazinevaluekj)) 13 | end 14 | end 15 | 16 | -- petroleum gas/methane has same solid fuel value as naphtha. 17 | data.raw.fluid["liquid-fuel-oil"].fuel_value = "1MJ" 18 | data.raw.fluid["liquid-fuel"].fuel_value = "1MJ" 19 | data.raw.fluid["liquid-naphtha"].fuel_value = "0.5MJ" 20 | data.raw.fluid["gas-methane"].fuel_value = "0.5MJ" 21 | data.raw.fluid["crude-oil"].fuel_value = "0.5MJ" 22 | data.raw.item["enriched-fuel"].fuel_value = "50MJ" 23 | data.raw.item["enriched-fuel"].stack_size = 50 24 | data.raw.item["solid-carbon"].fuel_value = "2.5MJ" 25 | 26 | seablock.lib.substingredient("solid-fuel-methane", "gas-methane", nil, 40) 27 | seablock.lib.substingredient("solid-fuel-naphtha", "liquid-naphtha", nil, 40) 28 | seablock.lib.substingredient("solid-fuel-fuel-oil", "liquid-fuel-oil", nil, 20) 29 | 30 | for _, v in pairs({ 31 | "hydrogen", 32 | "gas-hydrogen", 33 | "gas-ethane", 34 | "gas-butane", 35 | "gas-propene", 36 | "gas-methanol", 37 | "gas-ethylene", 38 | "gas-benzene", 39 | "gas-ethanol", 40 | "heavy-oil", 41 | "light-oil", 42 | "petroleum-gas", 43 | "sour-gas", 44 | "deuterium", 45 | "hydrazine", 46 | "alien-fire", 47 | "glycerol", 48 | "diesel-fuel", 49 | }) do 50 | if data.raw.fluid[v] then 51 | data.raw.fluid[v].fuel_value = nil 52 | data.raw.fluid[v].emissions_multiplier = nil 53 | end 54 | end 55 | 56 | if mods["KS_Power"] then 57 | seablock.lib.hide("boiler", "oil-steam-boiler") 58 | seablock.lib.hide("burner-generator", "big-burner-generator") 59 | seablock.lib.hide("burner-generator", "burner-generator") 60 | seablock.lib.hide("generator", "petroleum-generator") 61 | local turbine = data.raw["electric-energy-interface"]["wind-turbine-2"] 62 | if turbine and turbine.energy_source then 63 | turbine.energy_source.output_flow_limit = "15kW" 64 | end 65 | end 66 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/furnaces.lua: -------------------------------------------------------------------------------- 1 | -- Fix up furnace tech icons 2 | if not mods["reskins-bobs"] then 3 | for _, v in pairs({ 4 | "fluid-mixing-furnace", 5 | "steel-mixing-furnace", 6 | }) do 7 | seablock.lib.copy_icon(data.raw.technology[v], data.raw.technology["advanced-material-processing"]) 8 | end 9 | 10 | for _, v in pairs({ 11 | "electric-mixing-furnace", 12 | "multi-purpose-furnace-1", 13 | "multi-purpose-furnace-2", 14 | "advanced-material-processing-3", 15 | "advanced-material-processing-4", 16 | }) do 17 | seablock.lib.copy_icon(data.raw.technology[v], data.raw.technology["advanced-material-processing-2"]) 18 | end 19 | end 20 | 21 | bobmods.lib.tech.remove_prerequisite("steel-mixing-furnace", "angels-steel-smelting-1") 22 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/groups.lua: -------------------------------------------------------------------------------- 1 | local move_item = angelsmods.functions.move_item 2 | 3 | if not mods["angelsindustries"] then 4 | -- Move misc sciencey things over to intermediate products tab 5 | for k, v in pairs(data.raw["item-subgroup"]) do 6 | if 7 | v.group == "bob-resource-products" 8 | or v.group == "bob-fluid-products" 9 | or v.group == "bob-intermediate-products" 10 | then 11 | v.group = "intermediate-products" 12 | end 13 | end 14 | 15 | move_item("battery", "bob-intermediates", "f-cba[battery]") 16 | move_item("iron-gear-wheel", "bob-gears", "aa[iron-gear-wheel]") 17 | move_item("thorium-processing", "bob-nuclear", "l[thorium-processing]", "recipe") 18 | end 19 | 20 | if mods["SpaceMod"] then 21 | if mods["ScienceCostTweakerM"] then 22 | move_item("rocket-part", "sct-sciencepack-space", "z[space]-b[rocket-part]") 23 | end 24 | 25 | for _, item_name in pairs({ 26 | "assembly-robot", 27 | "astrometrics", 28 | "command", 29 | "drydock-assembly", 30 | "drydock-structural", 31 | "ftl-drive", 32 | "fuel-cell", 33 | "fusion-reactor", 34 | "habitation", 35 | "hull-component", 36 | "life-support", 37 | "protection-field", 38 | "space-thruster", 39 | }) do 40 | move_item(item_name, "sb-SpaceMod") 41 | end 42 | end 43 | 44 | if mods["Explosive Excavation"] then 45 | move_item("blasting-charge", "petrochem-solids", "b[petrochem-solids-2]-c[blasting-charge]") 46 | move_item("blasting-charge", "petrochem-solids-2", "a[explosives]-g", "recipe") 47 | end 48 | 49 | move_item("solid-fuel-from-hydrogen", "petrochem-fuel", "e[bob]-d", "recipe") 50 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/landfill.lua: -------------------------------------------------------------------------------- 1 | -- Will need a lot of landfill 2 | seablock.lib.substingredient("landfill", "stone", "stone-crushed", 10) 3 | for k, v in pairs(data.raw.item) do 4 | if string.sub(k, 1, 8) == "landfill" then 5 | v.stack_size = 1000 6 | end 7 | end 8 | 9 | -- Set prefered type for basic landfill crafting 10 | if settings.startup["sb-default-landfill"] and data.raw.item[settings.startup["sb-default-landfill"].value] then 11 | data.raw.recipe["landfill"].result = settings.startup["sb-default-landfill"].value 12 | end 13 | 14 | local function BuffLandfill(recipe) 15 | seablock.lib.substingredient(recipe, "solid-mud", nil, 5) 16 | bobmods.lib.recipe.set_energy_required(recipe, 2) 17 | bobmods.lib.tech.remove_recipe_unlock("water-washing-1", recipe) 18 | bobmods.lib.tech.add_recipe_unlock("landfill", recipe) 19 | end 20 | 21 | BuffLandfill("solid-mud-landfill") 22 | 23 | if mods["LandfillPainting"] then 24 | BuffLandfill("landfill-dry-dirt") 25 | BuffLandfill("landfill-dirt-4") 26 | BuffLandfill("landfill-grass-1") 27 | BuffLandfill("landfill-red-desert-1") 28 | BuffLandfill("landfill-sand-3") 29 | else 30 | bobmods.lib.tech.remove_recipe_unlock("water-washing-2", "solid-mud-landfill") 31 | end 32 | 33 | -- Make landfill a red science tech 34 | data.raw.technology["landfill"].prerequisites = { "water-washing-1" } 35 | data.raw.technology["landfill"].unit = { 36 | count = 10, 37 | ingredients = { { type = "item", name = "automation-science-pack", amount = 1 } }, 38 | time = 15, 39 | } 40 | bobmods.lib.tech.remove_prerequisite("water-washing-2", "landfill") 41 | bobmods.lib.tech.ignore_tech_cost_multiplier("landfill", true) 42 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/misc.lua: -------------------------------------------------------------------------------- 1 | if data.raw.item["wind-turbine-2"] then 2 | seablock.lib.substingredient("wind-turbine-2", "iron-plate", "steel-plate", 3) 3 | bobmods.lib.recipe.enabled("wind-turbine-2", false) 4 | bobmods.lib.tech.add_recipe_unlock("steel-processing", "wind-turbine-2") 5 | end 6 | 7 | -- No natural gas, use methane for manganese pellet smelting 8 | seablock.lib.substingredient("pellet-manganese-smelting", "gas-natural-1", "gas-methane") 9 | bobmods.lib.tech.remove_prerequisite("angels-manganese-smelting-3", "oil-gas-extraction") 10 | bobmods.lib.tech.add_prerequisite("angels-manganese-smelting-3", "gas-processing") 11 | 12 | -- Remove steel's prerequiste on Chemical processing 1 13 | bobmods.lib.tech.remove_prerequisite("steel-processing", "chemical-processing-1") 14 | 15 | -- Merge basic chemistry 2 into basic chemistry 16 | local function movealleffects(from, to) 17 | for _, v in pairs(data.raw.technology[from].effects) do 18 | table.insert(data.raw.technology[to].effects, v) 19 | end 20 | for _, v in pairs(data.raw.technology) do 21 | for k, prerequisite in pairs(v.prerequisites or {}) do 22 | if prerequisite == from then 23 | v.prerequisites[k] = to 24 | end 25 | end 26 | end 27 | data.raw.technology[from].effects = {} 28 | end 29 | movealleffects("basic-chemistry-2", "basic-chemistry") 30 | movealleffects("basic-chemistry-3", "basic-chemistry-2") 31 | bobmods.lib.tech.add_new_science_pack("basic-chemistry-2", "logistic-science-pack", 1) 32 | seablock.lib.hide_technology("basic-chemistry-3") 33 | -- Move gas shift recipes back 34 | seablock.lib.moveeffect("water-gas-shift-1", "basic-chemistry", "basic-chemistry-2") 35 | seablock.lib.moveeffect("water-gas-shift-2", "basic-chemistry", "basic-chemistry-2") 36 | bobmods.lib.tech.add_prerequisite("angels-nickel-smelting-1", "basic-chemistry-2") 37 | 38 | -- Make Basic Chemistry depend on Wood Processing 2. Required for Charcoal > Carbon Dioxide 39 | bobmods.lib.tech.add_prerequisite("basic-chemistry", "bio-wood-processing-2") 40 | 41 | -- Move Water Treatment from Electronics to Slag Processing 1. Hydro Plant no longer requires Green Circuits 42 | -- Slag Processing 1 is first source of Sulfuric Waste Water 43 | bobmods.lib.tech.remove_prerequisite("water-treatment", "angels-fluid-control") 44 | bobmods.lib.tech.add_prerequisite("water-treatment", "slag-processing-1") 45 | 46 | -- Allow skipping of waste water recycling 47 | bobmods.lib.tech.remove_prerequisite("water-washing-1", "water-treatment") 48 | bobmods.lib.tech.add_prerequisite("water-washing-1", "automation") 49 | seablock.lib.moveeffect("yellow-waste-water-purification", "water-treatment-2", "water-treatment") 50 | 51 | bobmods.lib.tech.remove_prerequisite("electronics", "chemical-processing-1") 52 | 53 | bobmods.lib.recipe.set_category("liquid-fish-atmosphere", "chemistry") 54 | seablock.lib.hide_technology("pumpjack") 55 | 56 | if not seablock.trigger.mining_productivity then 57 | for i = 1, 4, 1 do 58 | if data.raw.technology["mining-productivity-" .. i] then 59 | seablock.lib.hide_technology("mining-productivity-" .. i) 60 | data.raw.technology["mining-productivity-" .. i].effects = {} 61 | end 62 | end 63 | end 64 | 65 | -- Remove resources so mining recipes don't show in FNEI 66 | -- Have to leave at least one resource or game will not load 67 | for k, v in pairs(data.raw["resource"]) do 68 | -- Sea-pump-resource is a virtual resource. 69 | -- When the offshore pump is placed, it is supposed to be replaced by the resource and a mining-drill. 70 | -- Removing the resource causes placement of heavy pumps to crash new maps. 71 | if k ~= "sea-pump-resource" then 72 | data.raw["resource"][k] = nil 73 | end 74 | end 75 | 76 | -- Add prerequisite for Tin and Lead 77 | if settings.startup["bobmods-logistics-beltoverhaul"].value then 78 | bobmods.lib.tech.add_prerequisite("logistics", "ore-crushing") 79 | end 80 | 81 | -- Tidy prerequisite for Brass 82 | bobmods.lib.tech.remove_prerequisite("zinc-processing", "electrolysis-1") 83 | bobmods.lib.tech.replace_prerequisite("battery-3", "zinc-processing", "angels-zinc-smelting-1") 84 | if mods["bobpower"] then 85 | bobmods.lib.tech.replace_prerequisite("electric-pole-2", "zinc-processing", "angels-brass-smelting-1") 86 | bobmods.lib.tech.replace_prerequisite("electric-substation-2", "zinc-processing", "angels-brass-smelting-1") 87 | end 88 | 89 | -- Add fluid handling as a prerequisite for Oil and gas extraction 90 | -- Else Electric engine doesn't depend on Engine 91 | bobmods.lib.tech.add_prerequisite("oil-gas-extraction", "fluid-handling") 92 | 93 | -- Move recipes that shouldn't be unlocked at startup 94 | if mods["bobenemies"] then 95 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-red-from-small") 96 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-yellow-from-small") 97 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-orange-from-small") 98 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-blue-from-small") 99 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-purple-from-small") 100 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-green-from-small") 101 | seablock.lib.add_recipe_unlock("bio-processing-alien-3", "alien-artifact-from-small") 102 | end 103 | 104 | bobmods.lib.tech.remove_prerequisite("tungsten-processing", "angels-nickel-smelting-1") 105 | 106 | bobmods.lib.tech.remove_recipe_unlock("bio-arboretum-swamp-1", "solid-plastic") 107 | 108 | seablock.lib.hide("mining-drill", "burner-mining-drill") 109 | seablock.lib.hide("mining-drill", "electric-mining-drill") 110 | seablock.lib.hide("mining-drill", "pumpjack") 111 | seablock.lib.hide("storage-tank", "bob-overflow-valve") 112 | seablock.lib.hide("storage-tank", "bob-valve") 113 | seablock.lib.hide("storage-tank", "bob-topup-valve") 114 | 115 | -- Buff Lime filtering 116 | seablock.lib.substingredient("filter-lime", "solid-lime", nil, 1) 117 | data.raw.recipe["filter-lime"].energy_required = 1 118 | data.raw.recipe["angels-sulfur-scrubber"].energy_required = 6 119 | 120 | -- Make Long Inserters a startup tech 121 | if data.raw.technology["logistics-0"] then 122 | bobmods.lib.tech.replace_prerequisite("long-inserters-1", "logistics", "logistics-0") 123 | end 124 | 125 | -- Adjust for handcrafting boards 126 | 127 | -- Divide by 2 128 | seablock.lib.substingredient("solid-alginic-acid", "algae-brown", nil, 5) 129 | seablock.lib.substresult("solid-alginic-acid", "solid-alginic-acid", nil, 1) 130 | data.raw.recipe["solid-alginic-acid"].energy_required = 5 131 | 132 | -- Divide by 5 133 | seablock.lib.substingredient("solid-wood-pulp", "cellulose-fiber", nil, 4) 134 | seablock.lib.substingredient("solid-wood-pulp", "solid-alginic-acid", nil, 1) 135 | seablock.lib.substresult("solid-wood-pulp", "solid-wood-pulp", nil, 4) 136 | data.raw.recipe["solid-wood-pulp"].energy_required = 0.8 137 | 138 | -- Tidy up ore silo prerequisites 139 | if mods["angelsaddons-storage"] then 140 | bobmods.lib.tech.remove_prerequisite("ore-silos", "angels-coal-processing") 141 | bobmods.lib.tech.replace_prerequisite("ore-silos", "ore-crushing", "ore-advanced-crushing") 142 | end 143 | 144 | -- Logistic System prerequisite of Pink Science 145 | if not data.raw.tool["advanced-logistic-science-pack"] then 146 | bobmods.lib.tech.add_prerequisite("logistic-system", "utility-science-pack") 147 | end 148 | 149 | -- Saline rebalance 150 | seablock.lib.substingredient("solid-salt-dissolving", "solid-salt", nil, 15) 151 | seablock.lib.substingredient("solid-salt-dissolving", "water-purified", "water", 1000) 152 | seablock.lib.substresult("solid-salt-dissolving", "water-saline", nil, 1000) 153 | data.raw.recipe["solid-salt-dissolving"].energy_required = 5 154 | 155 | -- Swap out Nickel and Zinc plates 156 | seablock.lib.substingredient("roboport-antenna-3", "nickel-plate", "titanium-plate", nil) 157 | bobmods.lib.recipe.remove_ingredient("roboport-antenna-4", "nickel-plate") 158 | seablock.lib.substingredient("silver-zinc-battery", "zinc-plate", "solid-zinc-oxide", nil) 159 | 160 | seablock.lib.unhide_recipe("zinc-ore-processing-alt") 161 | bobmods.lib.tech.add_recipe_unlock("angels-zinc-smelting-2", "zinc-ore-processing-alt") 162 | bobmods.lib.tech.add_prerequisite("battery-3", "angels-zinc-smelting-2") 163 | if data.raw.recipe["pellet-zinc-smelting"] then 164 | data.raw.recipe["pellet-zinc-smelting"].icons = angelsmods.functions.add_number_icon_layer( 165 | angelsmods.functions.get_object_icons("solid-zinc-oxide"), 166 | 2, 167 | angelsmods.smelting.number_tint 168 | ) 169 | end 170 | 171 | if mods["angelsindustries"] then 172 | seablock.lib.substingredient("angels-thorium-fuel-cell", "angels-plate-zinc", "lead-plate", nil) 173 | seablock.lib.substingredient("angels-deuterium-fuel-cell", "angels-plate-zinc", "lead-plate", nil) 174 | end 175 | 176 | seablock.lib.hide_item("nickel-plate") 177 | seablock.lib.hide_item("zinc-plate") 178 | bobmods.lib.recipe.hide("bob-zinc-plate") 179 | bobmods.lib.tech.remove_recipe_unlock("zinc-processing", "bob-zinc-plate") 180 | 181 | -- Add missing science packs 182 | 183 | for _, v in pairs({ 184 | "bio-processing-alien-3", 185 | "gem-processing-1", 186 | "gem-processing-2", 187 | "gem-processing-3", 188 | "geode-crystallization-1", 189 | "polishing", 190 | }) do 191 | if data.raw.technology[v] then 192 | bobmods.lib.tech.add_new_science_pack(v, "chemical-science-pack", 1) 193 | end 194 | end 195 | 196 | bobmods.lib.tech.add_prerequisite("polishing", "chemical-science-pack") 197 | bobmods.lib.tech.add_prerequisite("geode-crystallization-1", "chemical-science-pack") 198 | 199 | if mods["bobrevamp"] and not mods["bobclasses"] then 200 | bobmods.lib.tech.add_new_science_pack("rtg", "production-science-pack", 1) 201 | bobmods.lib.tech.add_new_science_pack("rtg", "utility-science-pack", 1) 202 | bobmods.lib.tech.add_prerequisite("rtg", "utility-science-pack") 203 | bobmods.lib.tech.remove_prerequisite("rtg", "angels-coal-processing-3") 204 | bobmods.lib.tech.add_prerequisite("rtg", "sodium-processing-2") 205 | end 206 | 207 | if mods["cargo-ships"] then 208 | seablock.lib.hide_item("oil_rig") 209 | end 210 | 211 | -- Swap gold for platinum 212 | seablock.lib.substingredient("processing-electronics", "angels-wire-platinum", nil, 20) 213 | if mods["bobmodules"] then 214 | seablock.lib.substingredient("module-processor-board-3", "angels-wire-platinum", "angels-plate-platinum", nil) 215 | end 216 | bobmods.lib.tech.add_prerequisite("advanced-electronics-3", "angels-platinum-smelting-1") 217 | seablock.lib.substresult("angelsore-pure-mix2-processing", "platinum-ore", nil, 2) 218 | seablock.lib.substresult("angelsore9-crystal-processing", "platinum-ore", nil, 2) 219 | -- Swap stiratite for crotinnium so all pure ores are used 220 | seablock.lib.substingredient("angelsore-pure-mix2-processing", "angels-ore3-pure", "angels-ore4-pure", nil) 221 | 222 | -- Unhide rocket part to make it easier to view recipes 223 | if data.raw.recipe["rocket-part"] then 224 | angelsmods.functions.remove_flag("rocket-part", "hidden") 225 | local r = data.raw.recipe["rocket-part"] 226 | 227 | if r.normal then 228 | r.normal.hidden = false 229 | r.normal.hide_from_player_crafting = true 230 | end 231 | if r.expensive then 232 | r.expensive.hidden = false 233 | r.expensive.hide_from_player_crafting = true 234 | end 235 | if not r.normal and not r.expensive then 236 | r.hidden = false 237 | r.hide_from_player_crafting = true 238 | end 239 | end 240 | 241 | -- Hide recipes that take Chrome Ingots 242 | bobmods.lib.recipe.hide("molten-iron-smelting-5") 243 | bobmods.lib.tech.hide("angels-iron-casting-4") 244 | 245 | bobmods.lib.recipe.hide("molten-steel-smelting-5") 246 | bobmods.lib.tech.hide("angels-steel-smelting-4") 247 | 248 | bobmods.lib.recipe.hide("molten-titanium-smelting-5") 249 | bobmods.lib.tech.remove_recipe_unlock("angels-titanium-casting-3", "molten-titanium-smelting-5") 250 | bobmods.lib.tech.remove_prerequisite("angels-titanium-casting-3", "angels-chrome-smelting-1") 251 | 252 | -- Buff bob's silicon and tungsten recipes 253 | seablock.lib.substingredient("silicon-carbide", "silicon-powder", nil, 10) 254 | seablock.lib.substingredient("silicon-carbide", "carbon", nil, 10) 255 | data.raw.recipe["silicon-carbide"].result_count = 20 256 | 257 | seablock.lib.substingredient("silicon-nitride", "silicon-powder", nil, 10) 258 | seablock.lib.substingredient("silicon-nitride", "gas-nitrogen", nil, 130) 259 | data.raw.recipe["silicon-nitride"].result_count = 10 260 | 261 | seablock.lib.substingredient("tungsten-carbide", "tungsten-oxide", nil, 10) 262 | seablock.lib.substingredient("tungsten-carbide", "carbon", nil, 10) 263 | seablock.lib.substresult("tungsten-carbide", "tungsten-carbide", nil, 20) 264 | bobmods.lib.recipe.set_energy_required("tungsten-carbide", 6) 265 | 266 | seablock.lib.substingredient("tungsten-carbide-2", "powdered-tungsten", nil, 10) 267 | seablock.lib.substingredient("tungsten-carbide-2", "carbon", nil, 10) 268 | seablock.lib.substresult("tungsten-carbide-2", "tungsten-carbide", nil, 20) 269 | bobmods.lib.recipe.set_energy_required("tungsten-carbide-2", 6) 270 | 271 | seablock.lib.substingredient("copper-tungsten-alloy", "powdered-tungsten", nil, 15) 272 | seablock.lib.substingredient("copper-tungsten-alloy", "copper-plate", "powder-copper", 10) 273 | seablock.lib.substresult("copper-tungsten-alloy", "copper-tungsten-alloy", nil, 25) 274 | bobmods.lib.recipe.set_energy_required("copper-tungsten-alloy", 8) 275 | bobmods.lib.tech.add_prerequisite("tungsten-alloy-processing", "angels-copper-smelting-2") 276 | 277 | -- Hide steam inserter 278 | seablock.lib.hide("inserter", "steam-inserter") 279 | bobmods.lib.recipe.hide("steam-inserter") 280 | seablock.lib.hide_item("steam-inserter") 281 | if data.raw.inserter["steam-inserter"] then 282 | data.raw.inserter["steam-inserter"].next_upgrade = nil 283 | bobmods.lib.recipe.replace_ingredient_in_all("steam-inserter", "burner-inserter") 284 | end 285 | 286 | -- Swap out concrete for bricks 287 | 288 | seablock.lib.substingredient("artillery-turret", "concrete", "reinforced-concrete-brick", nil) 289 | if data.raw.recipe["burner-reactor-2"] then 290 | seablock.lib.substingredient("burner-reactor-2", "concrete", "concrete-brick", nil) 291 | bobmods.lib.tech.remove_prerequisite("burner-reactor-2", "concrete") 292 | bobmods.lib.tech.add_prerequisite("burner-reactor-2", "angels-stone-smelting-2") 293 | end 294 | seablock.lib.substingredient("centrifuge", "concrete", "concrete-brick", nil) 295 | if data.raw.recipe["fluid-reactor-2"] then 296 | seablock.lib.substingredient("fluid-reactor-2", "concrete", "concrete-brick", nil) 297 | end 298 | seablock.lib.substingredient("nuclear-reactor", "concrete", "concrete-brick", nil) 299 | seablock.lib.substingredient("rocket-silo", "concrete", "reinforced-concrete-brick", nil) 300 | 301 | bobmods.lib.tech.replace_prerequisite("uranium-processing", "concrete", "angels-stone-smelting-2") 302 | bobmods.lib.tech.replace_prerequisite("rocket-silo", "concrete", "angels-stone-smelting-3") 303 | 304 | -- Swap concrete tiles 305 | local item = data.raw.item["concrete-brick"] 306 | if item and item.place_as_tile then 307 | item.place_as_tile["result"] = "concrete" 308 | end 309 | item = data.raw.item["reinforced-concrete-brick"] 310 | if item and item.place_as_tile then 311 | item.place_as_tile["result"] = "refined-concrete" 312 | end 313 | item = data.raw.item["concrete"] 314 | if item and item.place_as_tile then 315 | item.place_as_tile["result"] = "tile-concrete-brick" 316 | end 317 | item = data.raw.item["refined-concrete"] 318 | if item and item.place_as_tile then 319 | item.place_as_tile["result"] = "tile-reinforced-concrete-brick" 320 | end 321 | 322 | item = data.raw.tile["concrete"] 323 | if item then 324 | item.minable["result"] = "concrete-brick" 325 | item.placeable_by = { item = "concrete-brick", count = 1 } 326 | item.walking_speed_modifier = 1.4 327 | end 328 | item = data.raw.tile["refined-concrete"] 329 | if item then 330 | item.minable["result"] = "reinforced-concrete-brick" 331 | item.placeable_by = { item = "reinforced-concrete-brick", count = 1 } 332 | item.walking_speed_modifier = 1.55 333 | end 334 | item = data.raw.tile["tile-concrete-brick"] 335 | if item then 336 | item.minable["result"] = "concrete" 337 | item.placeable_by = { item = "concrete", count = 1 } 338 | item.walking_speed_modifier = 1.4 339 | end 340 | item = data.raw.tile["tile-reinforced-concrete-brick"] 341 | if item then 342 | item.minable["result"] = "refined-concrete" 343 | item.placeable_by = { item = "refined-concrete", count = 1 } 344 | item.walking_speed_modifier = 1.55 345 | end 346 | item = data.raw.tile["hazard-concrete-left"] 347 | if item then 348 | item.walking_speed_modifier = 1.4 349 | end 350 | item = data.raw.tile["hazard-concrete-right"] 351 | if item then 352 | item.walking_speed_modifier = 1.4 353 | end 354 | item = data.raw.tile["refined-hazard-concrete-left"] 355 | if item then 356 | item.walking_speed_modifier = 1.55 357 | end 358 | item = data.raw.tile["refined-hazard-concrete-right"] 359 | if item then 360 | item.walking_speed_modifier = 1.55 361 | end 362 | 363 | -- Other prerequisites 364 | if data.raw.technology["electronics-machine-1"] then 365 | bobmods.lib.tech.add_prerequisite("electronics-machine-1", "electronics") 366 | end 367 | bobmods.lib.tech.add_prerequisite("bio-pressing-1", "bio-nutrient-paste") 368 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-3", "ore-leaching") 369 | 370 | bobmods.lib.tech.add_prerequisite("resins", "automation-2") 371 | bobmods.lib.tech.add_prerequisite("plastics", "automation-2") 372 | if mods["boblogistics"] then 373 | bobmods.lib.tech.add_prerequisite("bob-repair-pack-2", "military") 374 | end 375 | 376 | -- Nerf early game glass. Just need a little bit for arboretums 377 | seablock.lib.substingredient("quartz-glass", "quartz", nil, 10) 378 | seablock.lib.substresult("quartz-glass", "glass", nil, 1) 379 | 380 | -- Biologically active tile has been hidden so no need for the prerequisites 381 | bobmods.lib.tech.remove_prerequisite("bio-farm-2", "angels-glass-smelting-1") 382 | bobmods.lib.tech.remove_prerequisite("bio-farm-2", "angels-stone-smelting-2") 383 | 384 | -- Rebalance glass mixture recipes 385 | bobmods.lib.recipe.remove_ingredient("glass-mixture-1", "quartz") 386 | bobmods.lib.recipe.set_ingredient("glass-mixture-1", { "silicon-powder", 1 }) 387 | 388 | bobmods.lib.recipe.remove_ingredient("glass-mixture-2", "quartz") 389 | bobmods.lib.recipe.set_ingredient("glass-mixture-2", { "silicon-powder", 2 }) 390 | bobmods.lib.recipe.set_result("glass-mixture-2", { "solid-glass-mixture", 3 }) 391 | bobmods.lib.recipe.set_energy_required("glass-mixture-2", 6) 392 | 393 | bobmods.lib.recipe.remove_ingredient("glass-mixture-3", "quartz") 394 | bobmods.lib.recipe.set_ingredient("glass-mixture-3", { "silicon-powder", 1 }) 395 | bobmods.lib.recipe.set_ingredient("glass-mixture-3", { "solid-lime", 2 }) 396 | bobmods.lib.recipe.set_result("glass-mixture-3", { "solid-glass-mixture", 4 }) 397 | bobmods.lib.recipe.set_energy_required("glass-mixture-3", 8) 398 | 399 | bobmods.lib.recipe.set_energy_required("glass-mixture-4", 8) 400 | 401 | -- Rebalance cement recipes 402 | bobmods.lib.recipe.replace_ingredient("cement-mixture-1", "quartz", "silicon-powder") 403 | 404 | bobmods.lib.recipe.remove_ingredient("cement-mixture-2", "iron-ore") 405 | bobmods.lib.recipe.replace_ingredient("cement-mixture-2", "quartz", "silicon-powder") 406 | bobmods.lib.recipe.set_ingredient("cement-mixture-2", { "solid-lime", 4 }) 407 | bobmods.lib.recipe.set_result("cement-mixture-2", { "solid-cement", 4 }) 408 | bobmods.lib.recipe.set_energy_required("cement-mixture-2", 16) 409 | 410 | -- Bronze prerequisites 411 | bobmods.lib.tech.add_prerequisite("angels-cooling", "alloy-processing") 412 | bobmods.lib.tech.add_prerequisite("bio-nutrient-paste", "alloy-processing") 413 | bobmods.lib.tech.add_prerequisite("ore-floatation", "alloy-processing") 414 | bobmods.lib.tech.add_prerequisite("ore-processing-1", "alloy-processing") 415 | bobmods.lib.tech.add_prerequisite("powder-metallurgy-2", "alloy-processing") 416 | bobmods.lib.tech.add_prerequisite("strand-casting-1", "alloy-processing") 417 | bobmods.lib.tech.add_prerequisite("thermal-water-extraction", "alloy-processing") 418 | bobmods.lib.tech.add_prerequisite("water-washing-2", "alloy-processing") 419 | 420 | -- Clay Brick prerequisites 421 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-1", "angels-stone-smelting-1") 422 | bobmods.lib.tech.add_prerequisite("angels-cooling", "angels-stone-smelting-1") 423 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-2", "angels-stone-smelting-1") 424 | bobmods.lib.tech.add_prerequisite("gardens", "angels-stone-smelting-1") 425 | bobmods.lib.tech.add_prerequisite("oil-gas-extraction", "angels-stone-smelting-1") 426 | bobmods.lib.tech.add_prerequisite("water-washing-2", "angels-stone-smelting-1") 427 | 428 | -- Brass prerequisites 429 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-2", "zinc-processing") 430 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-2", "zinc-processing") 431 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-3", "zinc-processing") 432 | bobmods.lib.tech.add_prerequisite("bio-desert-farm", "zinc-processing") 433 | bobmods.lib.tech.add_prerequisite("bio-refugium-puffer-1", "zinc-processing") 434 | bobmods.lib.tech.add_prerequisite("bio-swamp-farm", "zinc-processing") 435 | bobmods.lib.tech.add_prerequisite("bio-temperate-farm", "zinc-processing") 436 | bobmods.lib.tech.add_prerequisite("slag-processing-2", "zinc-processing") 437 | bobmods.lib.tech.add_prerequisite("water-treatment-3", "zinc-processing") 438 | 439 | -- Concrete Brick prerequisites 440 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-2", "angels-stone-smelting-2") 441 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-2", "angels-stone-smelting-2") 442 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-3", "angels-stone-smelting-2") 443 | bobmods.lib.tech.add_prerequisite("bio-desert-farm", "angels-stone-smelting-2") 444 | bobmods.lib.tech.add_prerequisite("bio-swamp-farm", "angels-stone-smelting-2") 445 | bobmods.lib.tech.add_prerequisite("bio-temperate-farm", "angels-stone-smelting-2") 446 | bobmods.lib.tech.add_prerequisite("bio-refugium-hatchery", "angels-stone-smelting-2") 447 | bobmods.lib.tech.add_prerequisite("bio-refugium-puffer-1", "angels-stone-smelting-2") 448 | bobmods.lib.tech.add_prerequisite("slag-processing-2", "angels-stone-smelting-2") 449 | bobmods.lib.tech.add_prerequisite("water-treatment-3", "angels-stone-smelting-2") 450 | 451 | -- Titanium prerequisites 452 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-4", "titanium-processing") 453 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-4", "titanium-processing") 454 | bobmods.lib.tech.add_prerequisite("bio-refugium-biter-1", "titanium-processing") 455 | bobmods.lib.tech.add_prerequisite("slag-processing-3", "titanium-processing") 456 | bobmods.lib.tech.add_prerequisite("water-treatment-4", "titanium-processing") 457 | 458 | -- Reinforced concrete brick 459 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-3", "angels-stone-smelting-3") 460 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-4", "angels-stone-smelting-3") 461 | bobmods.lib.tech.add_prerequisite("slag-processing-3", "angels-stone-smelting-3") 462 | bobmods.lib.tech.add_prerequisite("thermal-water-extraction-2", "angels-stone-smelting-3") 463 | bobmods.lib.tech.add_prerequisite("water-treatment-4", "angels-stone-smelting-3") 464 | 465 | -- Copper tungsten / tungsten carbide prerequisites 466 | bobmods.lib.tech.add_prerequisite("angels-nitrogen-processing-4", "tungsten-alloy-processing") 467 | bobmods.lib.tech.add_prerequisite("ore-processing-5", "tungsten-alloy-processing") 468 | 469 | -- Nitinol prerequisites 470 | bobmods.lib.tech.add_prerequisite("ore-processing-5", "nitinol-processing") 471 | 472 | -- Advanced circuit 473 | bobmods.lib.tech.add_prerequisite("tank", "advanced-electronics") 474 | 475 | -- Processing unit 476 | bobmods.lib.tech.add_prerequisite("bio-refugium-biter-1", "advanced-electronics-2") 477 | bobmods.lib.tech.add_prerequisite("water-treatment-4", "advanced-electronics-2") 478 | 479 | -- Advanced processing unit 480 | bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-5", "advanced-electronics-3") 481 | bobmods.lib.tech.add_prerequisite("angels-metallurgy-5", "advanced-electronics-3") 482 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/other-mods.lua: -------------------------------------------------------------------------------- 1 | if mods["early_construction"] then 2 | bobmods.lib.recipe.replace_ingredient("early-construction-robot", "coal", "wood-charcoal") 3 | bobmods.lib.tech.add_prerequisite("early-construction-light-armor", "military") 4 | bobmods.lib.tech.add_prerequisite("early-construction-light-armor", "bio-wood-processing-2") 5 | end 6 | 7 | if mods["grappling-gun"] then 8 | bobmods.lib.recipe.replace_ingredient("grappling-gun-ammo", "coal", "wood-charcoal") 9 | end 10 | 11 | if mods["jetpack"] then 12 | bobmods.lib.tech.remove_science_pack("jetpack-1", "chemical-science-pack") 13 | bobmods.lib.tech.add_science_pack("jetpack-1", "military-science-pack", 1) 14 | bobmods.lib.tech.remove_prerequisite("jetpack-1", "rocket-fuel") 15 | bobmods.lib.tech.remove_prerequisite("jetpack-1", "solar-panel-equipment") 16 | bobmods.lib.tech.add_prerequisite("jetpack-1", "modular-armor") 17 | bobmods.lib.tech.add_prerequisite("jetpack-1", "rocket-booster-1") 18 | bobmods.lib.tech.add_prerequisite("jetpack-1", "military-science-pack") 19 | bobmods.lib.tech.add_prerequisite("jetpack-1", "zinc-processing") 20 | bobmods.lib.recipe.replace_ingredient("jetpack-1", "electronic-circuit", "advanced-circuit") 21 | bobmods.lib.recipe.replace_ingredient("jetpack-1", "pipe", "brass-pipe") 22 | bobmods.lib.recipe.replace_ingredient("jetpack-1", "steel-plate", "invar-alloy") 23 | 24 | bobmods.lib.tech.add_science_pack("jetpack-2", "military-science-pack", 1) 25 | bobmods.lib.tech.add_prerequisite("jetpack-2", "advanced-electronics-2") 26 | bobmods.lib.recipe.replace_ingredient("jetpack-2", "advanced-circuit", "processing-unit") 27 | 28 | bobmods.lib.tech.add_science_pack("jetpack-3", "military-science-pack", 1) 29 | bobmods.lib.tech.add_science_pack("jetpack-3", "production-science-pack", 1) 30 | bobmods.lib.recipe.replace_ingredient("jetpack-3", "processing-unit", "advanced-processing-unit") 31 | 32 | bobmods.lib.tech.add_science_pack("jetpack-4", "military-science-pack", 1) 33 | bobmods.lib.tech.add_science_pack("jetpack-4", "production-science-pack", 1) 34 | if mods["bobmodules"] then 35 | if mods["CircuitProcessing"] then 36 | bobmods.lib.recipe.remove_ingredient("jetpack-4", "speed-module-4") 37 | bobmods.lib.recipe.remove_ingredient("jetpack-4", "effectivity-module-4") 38 | bobmods.lib.recipe.add_new_ingredient("jetpack-4", { type = "item", name = "speed-module-8", amount = 2 }) 39 | bobmods.lib.recipe.add_new_ingredient("jetpack-4", { type = "item", name = "effectivity-module-8", amount = 2 }) 40 | else 41 | bobmods.lib.recipe.replace_ingredient("jetpack-4", "speed-module-3", "speed-module-8") 42 | bobmods.lib.recipe.replace_ingredient("jetpack-4", "effectivity-module-3", "effectivity-module-8") 43 | end 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/rubber.lua: -------------------------------------------------------------------------------- 1 | bobmods.lib.recipe.hide("bob-rubber") 2 | bobmods.lib.tech.remove_recipe_unlock("circuit-network", "insulated-cable") 3 | bobmods.lib.tech.add_recipe_unlock("rubbers", "insulated-cable") 4 | 5 | -- Circuit network wires should not require rubber 6 | bobmods.lib.recipe.set_ingredients("green-wire", { { "solid-paper", 2 }, { "tinned-copper-cable", 1 } }) 7 | bobmods.lib.recipe.set_ingredients("red-wire", { { "solid-paper", 2 }, { "tinned-copper-cable", 1 } }) 8 | 9 | if mods["CircuitProcessing"] then 10 | bobmods.lib.tech.add_prerequisite("effectivity-module", "rubbers") 11 | bobmods.lib.tech.add_prerequisite("productivity-module", "rubbers") 12 | bobmods.lib.tech.add_prerequisite("speed-module", "rubbers") 13 | end 14 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/science-cost-tweaker.lua: -------------------------------------------------------------------------------- 1 | if mods["ScienceCostTweakerM"] then 2 | if data.raw.item["lab-2"] then 3 | -- Update lab energy usage 4 | data.raw.lab["lab-2"].energy_usage = "10MW" 5 | -- Only two module slots for lab-2 if s.c.t. is installed (other labs have no module slots) 6 | data.raw.lab["lab-2"].module_specification.module_slots = 2 7 | end 8 | 9 | -- Change tech to use lab icon from SCT 10 | data.raw.tool["sb-lab-tool"].icon = "__ScienceCostTweakerM__/graphics/sct-lab-t1/icon-64.png" 11 | data.raw.tool["sb-lab-tool"].icon_mipmaps = 0 12 | 13 | -- Reduce processing unit cost of S.C.T. high-tech science 14 | seablock.lib.substingredient("sct-htech-injector", "processing-unit", nil, 3) 15 | 16 | -- Hide empty tech (Lab 2 will have been moved to it's own tech sct-lab-lab2 17 | seablock.lib.hide_technology("advanced-research") 18 | 19 | -- Yellow science now requires Purple science 20 | -- Adjust any techs that needed Yellow but not Purple 21 | 22 | bobmods.lib.tech.replace_science_pack("fusion-reactor-equipment", "utility-science-pack", "production-science-pack") 23 | bobmods.lib.tech.replace_prerequisite("fusion-reactor-equipment", "utility-science-pack", "production-science-pack") 24 | bobmods.lib.tech.add_prerequisite("fusion-reactor-equipment", "low-density-structure") 25 | if mods["bobequipment"] then 26 | bobmods.lib.tech.add_prerequisite("fusion-reactor-equipment-3", "utility-science-pack") 27 | end 28 | 29 | if mods["bobvehicleequipment"] then 30 | bobmods.lib.tech.replace_science_pack( 31 | "vehicle-fusion-reactor-equipment-2", 32 | "utility-science-pack", 33 | "production-science-pack" 34 | ) 35 | bobmods.lib.tech.replace_prerequisite( 36 | "vehicle-fusion-reactor-equipment-2", 37 | "utility-science-pack", 38 | "production-science-pack" 39 | ) 40 | bobmods.lib.tech.add_prerequisite("vehicle-fusion-reactor-equipment-3", "utility-science-pack") 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/slag-processing.lua: -------------------------------------------------------------------------------- 1 | -- Decrease amount of crushed stone for slag-slurry so it's still better than mineralized water crystallization 2 | seablock.lib.substingredient("stone-crushed-dissolution", "stone-crushed", nil, 20) 3 | 4 | -- Angels sludge crystalization usually gives normal smeltable ores. This would be far too easy, 5 | -- so change recipes to give the weird ores that need extra processing steps. 6 | for i = 1, 6 do 7 | local recipe = data.raw.recipe["slag-processing-" .. i] 8 | seablock.lib.copy_icon(recipe, {}) 9 | recipe.localised_name = { "recipe-name.slag-processing", { "item-name.angels-ore" .. i } } 10 | recipe.order = "a-a [angels-ore-" .. i .. "]" 11 | 12 | recipe.ingredients = nil 13 | recipe.results = nil 14 | recipe.energy_required = nil 15 | recipe.category = "crystallizing" 16 | 17 | recipe.normal = { 18 | energy_required = 4, 19 | ingredients = { { type = "fluid", name = "mineral-sludge", amount = 25 } }, 20 | results = { { type = "item", name = "angels-ore" .. i, amount = 1 } }, 21 | enabled = false, 22 | } 23 | 24 | recipe.expensive = { 25 | energy_required = 8, 26 | ingredients = { { type = "fluid", name = "mineral-sludge", amount = 50 } }, 27 | results = { { type = "item", name = "angels-ore" .. i, amount = 1 } }, 28 | enabled = false, 29 | } 30 | end 31 | 32 | -- Angels ores 1, 3 (Saphirite, Stiratite) available from tutorial tech 1, 33 | -- Angels ores 5, 6 (Rubyte, Bobmonium) available from Slag processing 1 34 | -- Angels ores 2, 4 (Jivolite, Crotinnium) available from Advanced mechanical refining 35 | bobmods.lib.recipe.enabled("angelsore1-crushed-smelting", false) 36 | bobmods.lib.recipe.enabled("angelsore3-crushed-smelting", false) 37 | seablock.lib.moveeffect("catalysator-brown", "slag-processing-1", "advanced-ore-refining-1", 3) 38 | local slag1start = seablock.lib.findeffectidx(data.raw.technology["slag-processing-1"].effects, "slag-processing-1") 39 | seablock.lib.moveeffect("slag-processing-5", "slag-processing-2", "slag-processing-1", slag1start + 3) 40 | seablock.lib.moveeffect("slag-processing-6", "slag-processing-2", "slag-processing-1", slag1start + 4) 41 | 42 | local slag2start = 0 43 | seablock.lib.moveeffect("slag-processing-2", "slag-processing-1", "ore-advanced-crushing", slag2start + 1) 44 | seablock.lib.moveeffect("slag-processing-4", "slag-processing-2", "ore-advanced-crushing", slag2start + 2) 45 | seablock.lib.moveeffect("angelsore2-crushed", "ore-crushing", "ore-advanced-crushing", slag2start + 3) 46 | seablock.lib.moveeffect("angelsore4-crushed", "ore-crushing", "ore-advanced-crushing", slag2start + 4) 47 | 48 | seablock.lib.add_recipe_unlock("ore-crushing", "angelsore5-crushed", 3) 49 | seablock.lib.add_recipe_unlock("ore-crushing", "angelsore6-crushed", 4) 50 | seablock.lib.add_recipe_unlock("ore-crushing", "iron-plate") 51 | seablock.lib.add_recipe_unlock("ore-crushing", "copper-plate") 52 | seablock.lib.add_recipe_unlock("ore-crushing", "lead-plate") 53 | seablock.lib.add_recipe_unlock("ore-crushing", "tin-plate") 54 | seablock.lib.add_recipe_unlock("ore-crushing", "quartz-glass") 55 | 56 | seablock.lib.unhide_recipe("iron-plate") 57 | seablock.lib.unhide_recipe("copper-plate") 58 | seablock.lib.unhide_recipe("lead-plate") 59 | seablock.lib.unhide_recipe("tin-plate") 60 | 61 | -- Hide unwanted recipes 62 | bobmods.lib.recipe.hide("silver-plate") 63 | bobmods.lib.tech.remove_recipe_unlock("ore-crushing", "angelsore2-crushed-processing") 64 | bobmods.lib.tech.remove_recipe_unlock("ore-crushing", "angelsore4-crushed-processing") 65 | bobmods.lib.recipe.hide("angelsore2-crushed-processing") 66 | bobmods.lib.recipe.hide("angelsore4-crushed-processing") 67 | bobmods.lib.recipe.hide("angelsore5-crushed-smelting") 68 | bobmods.lib.recipe.hide("angelsore6-crushed-smelting") 69 | 70 | -- Add prerequisites 71 | bobmods.lib.tech.add_prerequisite("ore-floatation", "ore-advanced-crushing") 72 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-1", "ore-advanced-crushing") 73 | 74 | -- Move Mechanical Refining under Slag Processing 1 75 | seablock.lib.moveeffect("ore-crusher", "ore-crushing", "automation") 76 | bobmods.lib.tech.remove_prerequisite("slag-processing-1", "ore-crushing") 77 | bobmods.lib.tech.remove_prerequisite("slag-processing-1", "logistic-science-pack") 78 | bobmods.lib.tech.remove_prerequisite("ore-crushing", "basic-chemistry") 79 | bobmods.lib.tech.add_prerequisite("ore-crushing", "slag-processing-1") 80 | 81 | -- Move crystallization ore recipes up above crushed ores 82 | data.raw["item-subgroup"]["slag-processing-1"].order = "ab" 83 | 84 | -- Red science level research for slag processing 1 85 | data.raw.technology["slag-processing-1"].unit = { 86 | count = 20, 87 | ingredients = { { "automation-science-pack", 1 } }, 88 | time = 15, 89 | } 90 | 91 | if data.raw["assembling-machine"]["ore-sorting-facility-4"] then 92 | data.raw["assembling-machine"]["ore-sorting-facility-4"].next_upgrade = "sb-ore-sorting-facility-5" 93 | end 94 | 95 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-2", "ore-powderizer") 96 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-2", "advanced-electronics") 97 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-4", "advanced-electronics-3") 98 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-4", "angels-tungsten-smelting-1") 99 | seablock.lib.add_recipe_unlock("advanced-ore-refining-4", "sb-ore-sorting-facility-5", 3) 100 | 101 | local buildingmulti = angelsmods.marathon.buildingmulti 102 | local buildingtime = angelsmods.marathon.buildingtime 103 | 104 | angelsmods.functions.RB.build({ 105 | { 106 | type = "recipe", 107 | name = "sb-ore-sorting-facility-5", 108 | normal = { 109 | energy_required = 5, 110 | enabled = false, 111 | ingredients = { 112 | { type = "item", name = "ore-sorting-facility-4", amount = 1 }, 113 | { type = "item", name = "t5-plate", amount = 12 }, 114 | { type = "item", name = "t5-circuit", amount = 12 }, 115 | { type = "item", name = "t5-brick", amount = 12 }, 116 | { type = "item", name = "t5-gears", amount = 8 }, 117 | }, 118 | result = "sb-ore-sorting-facility-5", 119 | }, 120 | expensive = { 121 | energy_required = 5 * buildingtime, 122 | enabled = false, 123 | ingredients = { 124 | { type = "item", name = "ore-sorting-facility-4", amount = 1 }, 125 | { type = "item", name = "t5-plate", amount = 12 * buildingmulti }, 126 | { type = "item", name = "t5-circuit", amount = 12 * buildingmulti }, 127 | { type = "item", name = "t5-brick", amount = 12 * buildingmulti }, 128 | { type = "item", name = "t5-gears", amount = 8 * buildingmulti }, 129 | }, 130 | result = "sb-ore-sorting-facility-5", 131 | }, 132 | }, 133 | }) 134 | 135 | -- Make ore sorting recipes require a higher tier ore sorting facility 136 | for _, v in pairs({ 137 | "angelsore1-chunk-processing", 138 | "angelsore2-chunk-processing", 139 | "angelsore3-chunk-processing", 140 | "angelsore4-chunk-processing", 141 | "angelsore5-chunk-processing", 142 | "angelsore6-chunk-processing", 143 | }) do 144 | bobmods.lib.recipe.set_category(v, "ore-sorting-2") 145 | end 146 | bobmods.lib.tech.add_prerequisite("ore-floatation", "advanced-ore-refining-1") 147 | 148 | for _, v in pairs({ 149 | "angelsore1-crystal-processing", 150 | "angelsore2-crystal-processing", 151 | "angelsore3-crystal-processing", 152 | "angelsore4-crystal-processing", 153 | "angelsore5-crystal-processing", 154 | "angelsore6-crystal-processing", 155 | }) do 156 | bobmods.lib.recipe.set_category(v, "ore-sorting-3") 157 | end 158 | bobmods.lib.tech.add_prerequisite("ore-leaching", "advanced-ore-refining-2") 159 | 160 | for _, v in pairs({ 161 | "angelsore1-pure-processing", 162 | "angelsore2-pure-processing", 163 | "angelsore3-pure-processing", 164 | "angelsore4-pure-processing", 165 | "angelsore5-pure-processing", 166 | "angelsore6-pure-processing", 167 | }) do 168 | bobmods.lib.recipe.set_category(v, "ore-sorting-4") 169 | end 170 | bobmods.lib.tech.add_prerequisite("ore-refining", "advanced-ore-refining-3") 171 | 172 | for _, v in pairs({ 173 | "angelsore-pure-mix1-processing", 174 | "angelsore-pure-mix2-processing", 175 | }) do 176 | bobmods.lib.recipe.set_category(v, "ore-sorting-5") 177 | end 178 | 179 | -- Slow down Ore Sorting Facilities to make space for our new top tier 180 | data.raw["assembling-machine"]["ore-sorting-facility"].crafting_speed = 0.5 181 | data.raw["assembling-machine"]["ore-sorting-facility-2"].crafting_speed = 0.75 182 | data.raw["assembling-machine"]["ore-sorting-facility-3"].crafting_speed = 1.0 183 | data.raw["assembling-machine"]["ore-sorting-facility-4"].crafting_speed = 1.5 184 | 185 | -- Add an additional slag to the mixed sorting recipes 186 | for _, v in pairs({ 187 | -- Saphirite 188 | "angelsore1-crushed-processing", 189 | "angelsore1-chunk-processing", 190 | "angelsore1-crystal-processing", 191 | -- Jivolite 192 | "angelsore2-chunk-processing", 193 | "angelsore2-crystal-processing", 194 | -- Stiratite 195 | "angelsore3-crushed-processing", 196 | "angelsore3-chunk-processing", 197 | "angelsore3-crystal-processing", 198 | -- Crotinnium 199 | "angelsore4-chunk-processing", 200 | "angelsore4-crystal-processing", 201 | -- Rubyte 202 | "angelsore5-crushed-processing", 203 | "angelsore5-chunk-processing", 204 | "angelsore5-crystal-processing", 205 | -- Bobmonium 206 | "angelsore6-crushed-processing", 207 | "angelsore6-chunk-processing", 208 | "angelsore6-crystal-processing", 209 | }) do 210 | seablock.lib.substresult(v, "slag", nil, 2) 211 | end 212 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/startup.lua: -------------------------------------------------------------------------------- 1 | -- First stage: circuit board pipe pipe-to-ground iron-gear iron-stick copper-pipe 2 | -- Electrolyser 5 22*4 3 | -- Liquifier 5 2 4 | -- Flare stack 5*2 10*2 5 | -- Offshore pump 2 1 10 6 | -- Crystallizer 5 5 7 | 8 | local knowningredients = { 9 | ["angels-electrolyser"] = { 10 | { "iron-plate", 10 }, 11 | { "basic-circuit-board", 5 }, 12 | { "iron-stick", 22 }, 13 | { "stone-brick", 10 }, 14 | }, 15 | ["liquifier"] = { 16 | { "iron-plate", 10 }, 17 | { "basic-circuit-board", 5 }, 18 | { "pipe-to-ground", 2 }, 19 | { "stone-brick", 10 }, 20 | }, 21 | ["offshore-pump"] = { 22 | { "basic-circuit-board", 2 }, 23 | { "pipe", 1 }, 24 | { "iron-gear-wheel", 10 }, 25 | }, 26 | ["crystallizer"] = { 27 | { "iron-plate", 10 }, 28 | { "basic-circuit-board", 5 }, 29 | { "copper-pipe", 5 }, 30 | { "stone-brick", 10 }, 31 | }, 32 | ["algae-farm"] = { 33 | { "iron-plate", 10 }, 34 | { "basic-circuit-board", 5 }, 35 | { "iron-stick", 10 }, 36 | { "stone-brick", 25 }, 37 | }, 38 | ["angels-flare-stack"] = { 39 | { "iron-plate", 5 }, 40 | { "basic-circuit-board", 5 }, 41 | { "pipe", 10 }, 42 | { "stone-brick", 10 }, 43 | }, 44 | ["seafloor-pump"] = { 45 | { "iron-plate", 5 }, 46 | { "basic-circuit-board", 2 }, 47 | { "pipe", 5 }, 48 | }, 49 | ["washing-plant"] = { 50 | { "iron-plate", 10 }, 51 | { "basic-circuit-board", 5 }, 52 | { "pipe", 10 }, 53 | { "stone-brick", 10 }, 54 | }, 55 | ["angels-chemical-plant"] = { 56 | { "iron-plate", 5 }, 57 | { "iron-gear-wheel", 5 }, 58 | { "basic-circuit-board", 5 }, 59 | { "pipe", 5 }, 60 | }, 61 | ["filtration-unit"] = { 62 | { "iron-plate", 5 }, 63 | { "basic-circuit-board", 5 }, 64 | { "pipe", 10 }, 65 | { "stone-brick", 10 }, 66 | }, 67 | ["filter-frame"] = { 68 | { "iron-plate", 1 }, 69 | { "iron-stick", 2 }, 70 | }, 71 | ["burner-ore-crusher"] = { 72 | { "stone", 5 }, 73 | { "stone-furnace", 1 }, 74 | }, 75 | } 76 | 77 | bobmods.lib.recipe.enabled("angels-flare-stack", true) 78 | seablock.lib.hide_technology("angels-flare-stack") 79 | for k, v in pairs(knowningredients) do 80 | local recipe = data.raw.recipe[k] 81 | for ek, ev in pairs(recipe.normal or {}) do 82 | recipe[ek] = ev 83 | end 84 | recipe.normal = nil 85 | recipe.expensive = nil 86 | recipe.ingredients = {} 87 | for _, line in pairs(v) do 88 | table.insert(recipe.ingredients, { type = "item", name = line[1], amount = line[2] }) 89 | end 90 | end 91 | 92 | -- unlock lab and optional components with Basic Circuit Board 93 | if data.raw.technology["sct-lab-t1"] then 94 | bobmods.lib.tech.add_prerequisite("sct-lab-t1", "sb-startup3") 95 | else 96 | bobmods.lib.tech.add_recipe_unlock("sb-startup3", "lab") 97 | bobmods.lib.recipe.enabled("lab", false) 98 | end 99 | 100 | if data.raw.technology["sct-automation-science-pack"] then 101 | bobmods.lib.tech.add_prerequisite("sct-automation-science-pack", "sct-lab-t1") 102 | data.raw.technology["sct-automation-science-pack"].unit = { 103 | count = 1, 104 | ingredients = { { "sb-lab-tool", 1 } }, 105 | time = 1, 106 | } 107 | data.raw.technology["sct-lab-t1"].unit = { 108 | count = 1, 109 | ingredients = {}, 110 | time = 1, 111 | } 112 | seablock.lib.hide_technology("sb-startup4") 113 | end 114 | 115 | local movedrecipes = table.deepcopy(seablock.startup_recipes) 116 | for k, v in pairs(seablock.scripted_techs) do 117 | if data.raw.technology[k] then 118 | for _, effect in pairs(data.raw.technology[k].effects or {}) do 119 | movedrecipes[effect.recipe] = true 120 | end 121 | bobmods.lib.tech.ignore_tech_cost_multiplier(k, true) 122 | end 123 | end 124 | local disabledrecipes = {} 125 | 126 | -- Don't want any recipes available that consume our carefully 127 | -- selected starting items until the self-sufficient startup is complete 128 | local function ironrecipe(recipe) 129 | local foundiron = false 130 | local ironnames = { 131 | ["iron-plate"] = true, 132 | ["iron-gear-wheel"] = true, 133 | ["iron-stick"] = true, 134 | ["pipe"] = true, 135 | ["pipe-to-ground"] = true, 136 | ["basic-circuit-board"] = true, 137 | ["electronic-circuit"] = true, 138 | ["stone-brick"] = true, 139 | ["copper-plate"] = true, 140 | ["copper-cable"] = true, 141 | ["stone-furnace"] = true, 142 | } 143 | local function scaningredients(recipe) 144 | local haveiron = false 145 | for k, v in pairs(recipe.ingredients) do 146 | local nameidx = 1 147 | if v.name then 148 | nameidx = "name" 149 | end 150 | if ironnames[v[nameidx]] then 151 | haveiron = true 152 | end 153 | end 154 | foundiron = foundiron or haveiron 155 | end 156 | seablock.lib.iteraterecipes(recipe, scaningredients) 157 | return foundiron 158 | end 159 | 160 | -- Disable recipes that shouldn't consume startup items 161 | for k, v in pairs(data.raw.recipe) do 162 | local r = v.normal or v 163 | if (r.enabled == nil or r.enabled == true or r.enabled == "true") and ironrecipe(v) and not v.hidden then 164 | if not movedrecipes[k] then 165 | table.insert(disabledrecipes, k) 166 | end 167 | bobmods.lib.recipe.enabled(k, false) 168 | end 169 | end 170 | 171 | -- Add prerequisites to technologies which are not part of the selected startup techs. 172 | for tech_name, tech in pairs(data.raw.technology) do 173 | if 174 | (tech.enabled == nil or tech.enabled == true or tech.enabled == "true") and not seablock.scripted_techs[tech_name] 175 | then 176 | if not tech.prerequisites or #tech.prerequisites == 0 then 177 | local prerequisite = seablock.final_startup_tech 178 | if seablock.startup_techs[tech_name] then 179 | prerequisite = seablock.final_scripted_tech 180 | end 181 | tech.prerequisites = { prerequisite } 182 | end 183 | end 184 | if tech.effects and not seablock.scripted_techs[tech_name] then 185 | local neweffects = {} 186 | for _, effect in pairs(tech.effects) do 187 | if effect.type ~= "unlock-recipe" or not movedrecipes[effect.recipe] then 188 | table.insert(neweffects, effect) 189 | end 190 | end 191 | tech.effects = neweffects 192 | end 193 | end 194 | 195 | -- Disabled recipes are enabled at last stage of startup. (Laboratory research) 196 | for _, v in pairs(disabledrecipes) do 197 | bobmods.lib.tech.add_recipe_unlock(seablock.final_scripted_tech, v) 198 | end 199 | for k, _ in pairs(seablock.startup_recipes) do 200 | if data.raw.recipe[k] then 201 | bobmods.lib.recipe.enabled(k, true) 202 | end 203 | end 204 | 205 | -- Limit research required for startup techs. 206 | for k, v in pairs(seablock.startup_techs) do 207 | if data.raw.technology[k] then 208 | if v[1] and data.raw.technology[k].unit.count > 20 then 209 | data.raw.technology[k].unit.count = 20 210 | data.raw.technology[k].unit.ingredients = { { "automation-science-pack", 1 } } 211 | end 212 | bobmods.lib.tech.ignore_tech_cost_multiplier(k, true) 213 | data.raw.technology[k].unit.time = 15 214 | end 215 | end 216 | 217 | -- Make bio-wood-processing a startup tutorial tech 218 | data.raw.technology["bio-wood-processing"].prerequisites = { "sb-startup1" } 219 | data.raw.technology["bio-wood-processing"].unit = { 220 | count = 1, 221 | ingredients = {}, 222 | time = 1, 223 | } 224 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/sulfur.lua: -------------------------------------------------------------------------------- 1 | -- Washing plant sulfur byproduct 2 | local washing_fluid_box = { 3 | production_type = "output", 4 | pipe_covers = pipecoverspictures(), 5 | base_level = 1, 6 | pipe_connections = { { position = { -3, 0 }, type = "output" } }, 7 | } 8 | for _, v in pairs({ "", "-2", "-3", "-4" }) do 9 | local washingplant = data.raw["assembling-machine"]["washing-plant" .. v] 10 | if washingplant then 11 | table.insert(washingplant.fluid_boxes, washing_fluid_box) 12 | end 13 | end 14 | seablock.lib.addresult("washing-1", { type = "fluid", name = "gas-hydrogen-sulfide", amount = 2 }) 15 | 16 | -- Sulfuric acid prerequisites 17 | bobmods.lib.tech.add_prerequisite("angels-sulfur-processing-1", "water-washing-1") 18 | 19 | -- Sulfur 1 tech: Remove prerequisite Advanced lead smelting 1 20 | bobmods.lib.tech.remove_prerequisite("angels-sulfur-processing-1", "angels-lead-smelting-1") 21 | 22 | -- Move Sulfur Dioxide Gas from Sulfur processing 2 to Sulfur processing 1 23 | bobmods.lib.tech.remove_recipe_unlock("angels-sulfur-processing-2", "gas-sulfur-dioxide") 24 | bobmods.lib.tech.add_recipe_unlock("angels-sulfur-processing-1", "gas-sulfur-dioxide") 25 | 26 | -- Move Sulfur from Sulfur processing 3 to Sulfur processing 1 27 | bobmods.lib.tech.remove_recipe_unlock("angels-sulfur-processing-3", "solid-sulfur") 28 | bobmods.lib.tech.add_recipe_unlock("angels-sulfur-processing-1", "solid-sulfur") 29 | 30 | -- Sulfur is now available sooner so no longer need Sulfur 2 as a prerequisite 31 | -- Basic chem 2 isn't strictly required but don't want too many techs to depend directly on Green Science tech 32 | bobmods.lib.tech.remove_prerequisite("explosives", "angels-sulfur-processing-2") 33 | bobmods.lib.tech.add_prerequisite("explosives", "basic-chemistry-2") 34 | 35 | bobmods.lib.tech.remove_prerequisite("battery", "angels-sulfur-processing-2") 36 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/thermal-extractor.lua: -------------------------------------------------------------------------------- 1 | local move_item = angelsmods.functions.move_item 2 | 3 | -- Repurpose thermal extractor 4 | 5 | local function makestripes(filename, count) 6 | local r = {} 7 | for i = 1, count do 8 | table.insert(r, { filename = filename, width_in_frames = 1, height_in_frames = 1 }) 9 | end 10 | return r 11 | end 12 | 13 | local function makeextractorlayers(bottom, top) 14 | local layers = {} 15 | if top then 16 | table.insert(layers, { 17 | stripes = makestripes("__angelsrefining__/graphics/entity/thermal-extractor/thermal-extractor-base.png", 16), 18 | priority = "high", 19 | width = 288, 20 | height = 288, 21 | shift = { 0, 0 }, 22 | frame_count = 16, 23 | x = 288 * 2, 24 | animation_speed = 0.5, 25 | }) 26 | end 27 | table.insert(layers, { 28 | priority = "high", 29 | width = 288, 30 | height = 288, 31 | line_length = 4, 32 | shift = { 0, 0 }, 33 | filename = "__angelsrefining__/graphics/entity/thermal-extractor/thermal-extractor-animation.png", 34 | frame_count = 16, 35 | animation_speed = 0.5, 36 | }) 37 | if bottom then 38 | table.insert(layers, { 39 | stripes = makestripes("__angelsrefining__/graphics/entity/thermal-extractor/thermal-extractor-base.png", 16), 40 | priority = "high", 41 | width = 288, 42 | height = 288, 43 | shift = { 0, 0 }, 44 | frame_count = 16, 45 | x = 0, 46 | animation_speed = 0.5, 47 | }) 48 | end 49 | return { layers = layers } 50 | end 51 | 52 | local extractor = data.raw["mining-drill"]["thermal-extractor"] 53 | data.raw["mining-drill"]["thermal-extractor"] = nil 54 | data.raw["assembling-machine"]["thermal-extractor"] = extractor 55 | extractor.type = "assembling-machine" 56 | extractor.crafting_speed = 1 57 | extractor.ingredient_count = 2 58 | extractor.fluid_boxes = { 59 | { 60 | production_type = "input", 61 | base_area = 10, 62 | base_level = -1, 63 | pipe_covers = pipecoverspictures(), 64 | pipe_connections = { { type = "input", position = { 5, 3 } } }, 65 | }, 66 | { 67 | production_type = "output", 68 | base_area = 10, 69 | base_level = 1, 70 | pipe_covers = pipecoverspictures(), 71 | pipe_connections = { { type = "output", position = { -5, -3 } } }, 72 | }, 73 | } 74 | extractor.animation = { 75 | north = makeextractorlayers(false, false), 76 | east = makeextractorlayers(true, true), 77 | south = makeextractorlayers(false, false), 78 | west = makeextractorlayers(true, true), 79 | } 80 | extractor.crafting_categories = { "thermal-extractor" } 81 | extractor.fixed_recipe = "thermal-extractor-water" 82 | bobmods.lib.tech.add_recipe_unlock("thermal-water-extraction-2", "thermal-extractor-water") 83 | move_item("thermal-extractor", "water-treatment-building", "f[thermal-extractor]-b[extractor]", "item") 84 | bobmods.lib.recipe.add_ingredient("thermal-extractor", { "thermal-bore", 1 }) 85 | 86 | local bore = data.raw["mining-drill"]["thermal-bore"] 87 | data.raw["mining-drill"]["thermal-bore"] = nil 88 | data.raw["assembling-machine"]["thermal-bore"] = bore 89 | bore.type = "assembling-machine" 90 | bore.crafting_speed = 1 91 | bore.ingredient_count = 1 92 | bore.fluid_boxes = { 93 | { 94 | production_type = "output", 95 | base_area = 1, 96 | base_level = 1, 97 | pipe_covers = pipecoverspictures(), 98 | pipe_connections = { 99 | { 100 | type = "output", 101 | positions = { { 1, -2 }, { 2, -1 }, { -1, 2 }, { -2, 1 } }, 102 | }, 103 | }, 104 | }, 105 | } 106 | 107 | local function makesheet(sheet, count, d) 108 | local r = table.deepcopy(sheet) 109 | r.stripes = makestripes(r.filename, count) 110 | r.frame_count = count 111 | r.filename = nil 112 | r.x = r.width * d 113 | if r.hr_version then 114 | r.hr_version = makesheet(r.hr_version, count, d) 115 | end 116 | return r 117 | end 118 | local function makeborelayers(d) 119 | return { 120 | layers = { 121 | makesheet(bore.base_picture.sheets[1], bore.animations.north.layers[1].frame_count, d), 122 | makesheet(bore.base_picture.sheets[2], bore.animations.north.layers[1].frame_count, d), 123 | bore.animations.north.layers[1], 124 | bore.animations.north.layers[2], 125 | }, 126 | } 127 | end 128 | bore.animation = { 129 | north = makeborelayers(0), 130 | east = makeborelayers(1), 131 | south = makeborelayers(2), 132 | west = makeborelayers(3), 133 | } 134 | bore.crafting_categories = { "thermal-bore" } 135 | bore.fixed_recipe = "thermal-bore-water" 136 | bobmods.lib.tech.add_recipe_unlock("thermal-water-extraction", "thermal-bore-water") 137 | move_item("thermal-bore", "water-treatment-building", "f[thermal-extractor]-a[bore]", "item") 138 | 139 | -- Fish Pressing requires thermal water so add a prerequisite 140 | if data.raw.technology["bio-pressing-fish"] then 141 | bobmods.lib.tech.add_prerequisite("bio-pressing-fish", "thermal-water-extraction") 142 | else 143 | bobmods.lib.tech.add_prerequisite("bio-pressing-fish-1", "thermal-water-extraction") 144 | end 145 | bobmods.lib.tech.add_prerequisite("thermal-water-extraction", "bio-processing-brown") 146 | -------------------------------------------------------------------------------- /SeaBlock/data-updates/wood.lua: -------------------------------------------------------------------------------- 1 | -- Remove wood from basic underground belt and splitter recipes 2 | seablock.lib.removeingredient("basic-underground-belt", "wood") 3 | seablock.lib.removeingredient("basic-splitter", "wood") 4 | 5 | -- Can always apply productivity modules to furnace recipes, so make it official 6 | for k, v in pairs(data.raw.module) do 7 | if v.effect and v.effect.productivity and v.limitation then 8 | table.insert(v.limitation, "sb-wood-bricks-charcoal") 9 | end 10 | end 11 | 12 | bobmods.lib.recipe.enabled("wooden-chest", false) 13 | bobmods.lib.recipe.enabled("wooden-board", false) 14 | bobmods.lib.recipe.enabled("cellulose-fiber-raw-wood", false) 15 | 16 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing", "wood-pellets") 17 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing", "small-electric-pole") 18 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing", "wooden-chest") 19 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing", "wooden-board") 20 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing", "basic-circuit-board") 21 | 22 | bobmods.lib.tech.remove_prerequisite("bio-wood-processing-2", "bio-farm-1") 23 | bobmods.lib.tech.remove_prerequisite("bio-wood-processing-2", "bio-wood-processing") 24 | bobmods.lib.tech.add_prerequisite("bio-wood-processing-2", "bio-processing-brown") 25 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing-2", "wood-charcoal") 26 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing-2", "bio-resin-wood-reprocessing") 27 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing-2", "bob-rubber") 28 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing-2", "wood-pellets") 29 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing-2", "wood-bricks") 30 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing-2", "sb-wood-bricks-charcoal") 31 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing-2", "carbon-separation-2") 32 | 33 | bobmods.lib.tech.remove_prerequisite("bio-wood-processing-3", "angels-coal-processing") 34 | bobmods.lib.tech.add_prerequisite("bio-wood-processing-3", "bio-arboretum-1") 35 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing-3", "wood-bricks") 36 | bobmods.lib.tech.add_recipe_unlock("bio-wood-processing-3", "cellulose-fiber-raw-wood") 37 | 38 | -- Remove solid resin 39 | bobmods.lib.recipe.hide("bio-resin-wood-reprocessing") 40 | bobmods.lib.tech.remove_prerequisite("bio-wood-processing-2", "bio-farm-1") 41 | bobmods.lib.tech.remove_recipe_unlock("resins", "solid-resin") 42 | bobmods.lib.recipe.hide("solid-resin") 43 | seablock.lib.hide_item("resin") 44 | bobmods.lib.tech.remove_recipe_unlock("bio-arboretum-temperate-1", "bio-resin-resin-liquification") 45 | bobmods.lib.recipe.hide("bio-resin-resin-liquification") 46 | -------------------------------------------------------------------------------- /SeaBlock/data.lua: -------------------------------------------------------------------------------- 1 | seablock = seablock or {} 2 | seablock.trigger = seablock.trigger or {} 3 | 4 | if mods["seablock-mining"] then 5 | seablock.trigger.mining_productivity = true 6 | end 7 | 8 | require("lib") 9 | require("prototypes/recipe") 10 | require("prototypes/recipe-category") 11 | require("prototypes/technology") 12 | require("prototypes/rockchest") 13 | require("mapgen") 14 | require("data-updates/Companion_Drones") 15 | require("data/tables") 16 | require("data/misc") 17 | require("data/ScienceCostTweakerM") 18 | require("data/recipe") 19 | require("data/tech-tree") 20 | -------------------------------------------------------------------------------- /SeaBlock/data/ScienceCostTweakerM.lua: -------------------------------------------------------------------------------- 1 | if mods["ScienceCostTweakerM"] then 2 | bobmods.lib.recipe.set_subgroup("sct-t3-sulfur-lightsource", "sct-labparts") 3 | bobmods.lib.recipe.remove_ingredient("chemical-science-pack", "sct-t3-sulfur-lightsource") 4 | 5 | if mods["bobtech"] then 6 | -- Rename Lab 2 to Exoplanetary Studies Lab 7 | if data.raw.item["lab-2"] then 8 | data.raw.item["lab-2"].localised_name = { "item-name.sct-lab-lab2" } 9 | end 10 | if data.raw.lab["lab-2"] then 11 | data.raw.lab["lab-2"].localised_name = { "entity-name.sct-lab-lab2" } 12 | end 13 | 14 | bobmods.lib.recipe.set_ingredients("lab-2", { 15 | { "sct-lab-t4", 1 }, 16 | { "rocket-silo", 1 }, 17 | { "nitinol-alloy", 100 }, 18 | { "express-stack-filter-inserter", 2 }, 19 | { "advanced-processing-unit", 20 }, 20 | }) 21 | bobmods.lib.tech.add_prerequisite("sct-lab-lab2", "rocket-silo") 22 | bobmods.lib.tech.remove_prerequisite("sct-space-science-pack", "rocket-silo") 23 | bobmods.lib.tech.add_prerequisite("sct-space-science-pack", "sct-lab-lab2") 24 | if data.raw.technology["stack-inserter-4"] then 25 | bobmods.lib.tech.add_prerequisite("sct-lab-lab2", "stack-inserter-4") 26 | else 27 | bobmods.lib.tech.add_prerequisite("sct-lab-lab2", "stack-inserter-2") 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /SeaBlock/data/misc.lua: -------------------------------------------------------------------------------- 1 | require("starting-items") 2 | 3 | -- Populate table of starting items and script enabled techs for YAFC to read 4 | if data.data_crawler then 5 | data.script_enabled = data.script_enabled or {} 6 | 7 | for k, _ in pairs(seablock.scripted_techs) do 8 | table.insert(data.script_enabled, { type = "technology", name = k }) 9 | end 10 | 11 | local starting_items = seablock.populate_starting_items(data.raw.item) 12 | for k, _ in pairs(starting_items) do 13 | table.insert(data.script_enabled, { type = "item", name = k }) 14 | end 15 | 16 | -- YAFC doesn't recognise that Wind Turbines can generate power 17 | -- So add Boiler and Steam Engine to script_enabled 18 | table.insert(data.script_enabled, { type = "item", name = "boiler" }) 19 | table.insert(data.script_enabled, { type = "item", name = "steam-engine" }) 20 | end 21 | 22 | -- Set Angel's triggers 23 | angelsmods.trigger.smelting_products["copper"].powder = true 24 | angelsmods.trigger.smelting_products["nickel"].plate = false 25 | angelsmods.trigger.smelting_products["zinc"].plate = false 26 | angelsmods.trigger.smelting_products["cobalt"].plate = false 27 | angelsmods.trigger.ores["platinum"] = true 28 | angelsmods.trigger.smelting_products["platinum"].plate = true 29 | angelsmods.trigger.smelting_products["platinum"].wire = true 30 | angelsmods.trigger.smelting_products["gunmetal"].plate = false 31 | angelsmods.trigger.early_sulfuric_acid = true 32 | 33 | -- Copy Ore Processing Machine tech icon to Mechanical Refining 34 | seablock.lib.copy_icon(data.raw.technology["ore-crushing"], data.raw.technology["advanced-ore-refining-1"]) 35 | -------------------------------------------------------------------------------- /SeaBlock/data/recipe.lua: -------------------------------------------------------------------------------- 1 | -- Buff Lead 3 2 | seablock.lib.substresult("anode-lead-smelting", "slag", "quartz", 1) 3 | seablock.lib.substingredient("anode-lead-smelting", "liquid-hexafluorosilicic-acid", nil, 20) 4 | 5 | -- Compost void recipe 6 | angelsmods.functions.make_void("solid-compost", "bio", 5) 7 | 8 | -- Remove recipe Wood pellets > Carbon dioxide 9 | -- Move recipe Charcoal > Carbon dioxide from Basic chemistry to Wood processing 2 10 | bobmods.lib.tech.remove_recipe_unlock("bio-wood-processing-3", "gas-carbon-dioxide-from-wood") 11 | bobmods.lib.recipe.hide("gas-carbon-dioxide-from-wood") 12 | bobmods.lib.tech.remove_recipe_unlock("basic-chemistry", "carbon-separation-2") 13 | -------------------------------------------------------------------------------- /SeaBlock/data/tables.lua: -------------------------------------------------------------------------------- 1 | -- seablock.scripted_techs 2 | -- Techs here are expected to be unlocked by the tutorial system 3 | -- They will not have prerequisites added 4 | seablock.scripted_techs = { 5 | ["sb-startup1"] = true, 6 | ["sb-startup2"] = true, 7 | ["bio-wood-processing"] = true, 8 | ["sb-startup3"] = true, 9 | ["sb-startup4"] = true, 10 | } 11 | 12 | if data.raw.technology["sct-lab-t1"] then 13 | seablock.scripted_techs["sct-lab-t1"] = true 14 | end 15 | if data.raw.technology["sct-automation-science-pack"] then 16 | seablock.scripted_techs["sct-automation-science-pack"] = true 17 | end 18 | 19 | -- seablock.startup_techs 20 | -- These techs will depend on the final startup tech 21 | -- Their time will be standardized to 15 and they will ignore tech cost modifier 22 | -- If {true} then their cost will be set to 20 red science 23 | -- Any other tech with no prerequisites will depend on Slag Processing 1 24 | seablock.startup_techs = { 25 | ["angels-fluid-control"] = { true }, 26 | ["angels-sulfur-processing-1"] = { true }, 27 | ["automation"] = { true }, 28 | ["basic-chemistry"] = { true }, 29 | -- Don't reduce the science pack cost of green algae 30 | ["bio-processing-green"] = { false }, 31 | ["bio-wood-processing-2"] = { true }, 32 | ["long-inserters-1"] = { true }, 33 | ["military"] = { true }, 34 | ["optics"] = { true }, 35 | ["slag-processing-1"] = { true }, 36 | ["steam-power"] = { true }, 37 | ["water-washing-1"] = { true }, 38 | } 39 | 40 | if data.raw.technology["logistics-0"] then 41 | seablock.startup_techs["logistics-0"] = { true } 42 | else 43 | seablock.startup_techs["logistics"] = { true } 44 | end 45 | 46 | -- seablock.startup_recipes 47 | -- These recipes will be available at the start of the game 48 | seablock.startup_recipes = { 49 | ["angels-electrolyser"] = true, 50 | ["angels-flare-stack"] = true, 51 | ["burner-ore-crusher"] = true, 52 | ["crystallizer"] = true, 53 | ["dirt-water-separation"] = true, 54 | ["liquifier"] = true, 55 | ["offshore-pump"] = true, 56 | ["sb-wood-foraging"] = true, 57 | ["sb-water-mineralized-crystallization"] = true, 58 | ["slag-processing-stone"] = true, 59 | ["stone-pipe"] = true, 60 | ["stone-pipe-to-ground"] = true, 61 | ["stone-brick"] = true, 62 | ["stone-crushed"] = true, 63 | ["water-mineralized"] = true, 64 | } 65 | 66 | if 67 | settings.startup["bobmods-assembly-multipurposefurnaces"] 68 | and settings.startup["bobmods-assembly-multipurposefurnaces"].value 69 | then 70 | seablock.startup_recipes["stone-mixing-furnace"] = true 71 | end 72 | 73 | -- seablock.final_scripted_tech 74 | -- Startup techs will depend on this tech 75 | seablock.final_scripted_tech = "sb-startup4" 76 | if data.raw.technology["sct-automation-science-pack"] then 77 | seablock.final_scripted_tech = "sct-automation-science-pack" 78 | end 79 | 80 | seablock.final_startup_tech = "slag-processing-1" 81 | -------------------------------------------------------------------------------- /SeaBlock/data/tech-tree.lua: -------------------------------------------------------------------------------- 1 | -- Add bio science to techs 2 | if mods["SpaceMod"] then 3 | bobmods.lib.tech.add_new_science_pack("habitation", "token-bio", 1) 4 | bobmods.lib.tech.add_new_science_pack("life-support-systems", "token-bio", 1) 5 | end 6 | 7 | -- Remove empty tech Thermal water processing 8 | bobmods.lib.tech.remove_prerequisite("water-treatment-4", "thermal-water-processing") 9 | seablock.lib.hide_technology("thermal-water-processing") 10 | 11 | -- Smelting techs don't need to depend on Coal processing 2 as carbon is unlocked earlier 12 | bobmods.lib.tech.remove_prerequisite("angels-aluminium-smelting-1", "angels-coal-processing-2") 13 | bobmods.lib.tech.remove_prerequisite("angels-cobalt-smelting-1", "angels-coal-processing-2") 14 | bobmods.lib.tech.remove_prerequisite("angels-lead-smelting-2", "angels-coal-processing-2") 15 | bobmods.lib.tech.remove_prerequisite("angels-manganese-smelting-1", "angels-coal-processing") 16 | bobmods.lib.tech.remove_prerequisite("angels-tin-smelting-2", "angels-coal-processing-2") 17 | bobmods.lib.tech.remove_prerequisite("angels-titanium-smelting-1", "angels-coal-processing-2") 18 | bobmods.lib.tech.remove_prerequisite("angels-zinc-smelting-2", "angels-coal-processing-2") 19 | bobmods.lib.tech.remove_prerequisite("angels-chrome-smelting-1", "angels-coal-processing-3") 20 | bobmods.lib.tech.remove_prerequisite("angels-iron-smelting-2", "angels-coal-processing-2") 21 | 22 | -- Add a new prerequisite so Coal processing 2 isn't a dead end 23 | -- Probably will want this for Carbon monoxide 24 | bobmods.lib.tech.add_prerequisite("gas-synthesis", "angels-coal-processing-2") 25 | bobmods.lib.tech.replace_prerequisite("angels-coal-processing-2", "water-treatment-2", "basic-chemistry-3") 26 | 27 | -- Add other prerequisites 28 | bobmods.lib.tech.add_prerequisite("gardens", "electronics") 29 | if mods["ScienceCostTweakerM"] then 30 | bobmods.lib.tech.add_prerequisite("sct-bio-science-pack", "bio-arboretum-1") 31 | bobmods.lib.tech.add_prerequisite("sb-bio-processing-advanced", "sct-bio-science-pack") 32 | bobmods.lib.tech.add_prerequisite("utility-science-pack", "rubber") 33 | end 34 | bobmods.lib.tech.add_prerequisite("angels-glass-smelting-1", "silicon-processing") 35 | bobmods.lib.tech.add_prerequisite("angels-stone-smelting-2", "silicon-processing") 36 | 37 | -- Add missing Science Pack Tech prerequisites 38 | 39 | -- Bio 40 | if mods["ScienceCostTweakerM"] then 41 | bobmods.lib.tech.add_prerequisite("bio-desert-farming-1", "sct-bio-science-pack") 42 | bobmods.lib.tech.add_prerequisite("bio-swamp-farming-1", "sct-bio-science-pack") 43 | bobmods.lib.tech.add_prerequisite("bio-temperate-farming-1", "sct-bio-science-pack") 44 | bobmods.lib.tech.add_prerequisite("bio-pressing-1", "sct-bio-science-pack") 45 | bobmods.lib.tech.add_prerequisite("bio-arboretum-2", "sct-bio-science-pack") 46 | bobmods.lib.tech.add_prerequisite("bio-arboretum-desert-1", "sct-bio-science-pack") 47 | bobmods.lib.tech.add_prerequisite("bio-arboretum-swamp-1", "sct-bio-science-pack") 48 | bobmods.lib.tech.add_prerequisite("bio-processing-alien-2", "sct-bio-science-pack") 49 | bobmods.lib.tech.add_prerequisite("bio-refugium-hatchery", "sct-bio-science-pack") 50 | bobmods.lib.tech.add_prerequisite("bio-fermentation", "sct-bio-science-pack") 51 | bobmods.lib.tech.add_prerequisite("bio-processing-crystal-splinter-1", "sct-bio-science-pack") 52 | bobmods.lib.tech.add_prerequisite("gardens-3", "sct-bio-science-pack") 53 | end 54 | 55 | -- Logistics / Green 56 | bobmods.lib.tech.add_prerequisite("water-washing-2", "logistic-science-pack") 57 | bobmods.lib.tech.add_prerequisite("advanced-ore-refining-1", "logistic-science-pack") 58 | bobmods.lib.tech.add_prerequisite("bio-processing-blue", "logistic-science-pack") 59 | bobmods.lib.tech.add_prerequisite("basic-chemistry-2", "logistic-science-pack") 60 | 61 | -- Chemical / Blue 62 | 63 | -- Production 64 | bobmods.lib.tech.add_prerequisite("logistic-system", "production-science-pack") 65 | 66 | -- Utility / Yellow 67 | bobmods.lib.tech.add_prerequisite("radars-5", "utility-science-pack") 68 | 69 | -- Space / White 70 | if mods["bobequipment"] then 71 | bobmods.lib.tech.add_prerequisite("bob-energy-shield-equipment-6", "space-science-pack") 72 | bobmods.lib.tech.add_prerequisite("fusion-reactor-equipment-4", "space-science-pack") 73 | end 74 | if mods["bobwarfare"] then 75 | bobmods.lib.tech.add_prerequisite("bob-power-armor-5", "space-science-pack") 76 | end 77 | 78 | -- Hide KS Power techs 79 | if mods["KS_Power"] then 80 | seablock.lib.hide_technology("OilBurning") 81 | seablock.lib.hide_technology("big-burner-generator") 82 | seablock.lib.hide_technology("petroleum-generator") 83 | end 84 | 85 | -- Add unlocks for starting military techs 86 | seablock.lib.add_recipe_unlock("military", "pistol", 1) 87 | seablock.lib.add_recipe_unlock("military", "firearm-magazine", 3) 88 | seablock.lib.add_recipe_unlock("military", "light-armor", 4) 89 | seablock.lib.add_recipe_unlock("military", "repair-pack", nil) 90 | 91 | bobmods.lib.tech.add_prerequisite("gun-turret", "military") 92 | bobmods.lib.tech.add_prerequisite("stone-wall", "military") 93 | bobmods.lib.tech.add_prerequisite("space-science-pack", "military") 94 | 95 | -- Steam power 96 | bobmods.lib.tech.add_prerequisite("automation", "steam-power") 97 | bobmods.lib.tech.add_prerequisite("optics", "steam-power") 98 | if data.raw.technology["bob-greenhouse"] then 99 | bobmods.lib.tech.add_prerequisite("bob-greenhouse", "steam-power") 100 | end 101 | bobmods.lib.tech.add_prerequisite("angels-coal-processing", "steam-power") 102 | 103 | -- Gems are needed to make higher tier modules 104 | if data.raw.technology["gem-processing-3"] then 105 | --Module with 2 dots has the tech name of 3 106 | bobmods.lib.tech.add_prerequisite("speed-module-3", "gem-processing-3") 107 | bobmods.lib.tech.add_prerequisite("productivity-module-3", "gem-processing-3") 108 | bobmods.lib.tech.add_prerequisite("effectivity-module-3", "gem-processing-3") 109 | end 110 | -------------------------------------------------------------------------------- /SeaBlock/graphics/technology/basic-circuit-board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modded-factorio/SeaBlock/923cd1d105e1646eabc3697adf173abd9cc2e527/SeaBlock/graphics/technology/basic-circuit-board.png -------------------------------------------------------------------------------- /SeaBlock/graphics/technology/lab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modded-factorio/SeaBlock/923cd1d105e1646eabc3697adf173abd9cc2e527/SeaBlock/graphics/technology/lab.png -------------------------------------------------------------------------------- /SeaBlock/graphics/technology/ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modded-factorio/SeaBlock/923cd1d105e1646eabc3697adf173abd9cc2e527/SeaBlock/graphics/technology/ore.png -------------------------------------------------------------------------------- /SeaBlock/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SeaBlock", 3 | "version": "0.5.16", 4 | "factorio_version": "1.1", 5 | "title": "Sea Block", 6 | "author": "Trainwreck", 7 | "contact": "", 8 | "homepage": "https://forums.factorio.com/viewtopic.php?t=93136", 9 | "description": "No ore patches, expand from a small island. Also install the 'Sea Block Pack - Official' mod for a complete modpack", 10 | "dependencies": [ 11 | "base", 12 | "angelsbioprocessing >= 0.7.23", 13 | "angelspetrochem >= 0.9.23", 14 | "angelsrefining >= 0.12.3", 15 | "angelssmelting >= 0.6.20", 16 | "bobelectronics >= 1.1.6", 17 | "boblibrary >= 1.1.6", 18 | "boblogistics >= 1.1.6", 19 | "bobores >= 1.1.6", 20 | "bobplates >= 1.1.6", 21 | 22 | "? angelsaddons-storage", 23 | "? bobassembly", 24 | "? bobenemies", 25 | "? bobequipment", 26 | "? bobinserters", 27 | "? bobmining", 28 | "? bobmodules", 29 | "? bobpower", 30 | "? bobrevamp", 31 | "? bobtech", 32 | "? bobwarfare", 33 | "? CircuitProcessing", 34 | "? Explosive Excavation", 35 | "? KS_Power", 36 | "? LandfillPainting >= 0.5.2", 37 | "? Milestones >= 1.3.19", 38 | "? ScienceCostTweakerM >= 1.2.0", 39 | "? SpaceMod >= 1.1.1", 40 | 41 | "(?) KS_Power_quickfix", 42 | "(?) Companion_Drones", 43 | 44 | "! alien-biomes", 45 | "! angelsexploration" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /SeaBlock/lib.lua: -------------------------------------------------------------------------------- 1 | seablock = seablock or {} 2 | seablock.lib = {} 3 | seablock.reskins = {} 4 | 5 | function seablock.lib.findname(t, name) 6 | for i, v in ipairs(t) do 7 | if v.name == name then 8 | return v 9 | end 10 | end 11 | end 12 | 13 | function seablock.lib.removename(t, name) 14 | for i, v in ipairs(t) do 15 | if v.name == name then 16 | table.remove(t, i) 17 | return 18 | end 19 | end 20 | end 21 | 22 | function seablock.lib.takeeffect(tech, name) 23 | if not data.raw.technology[tech] then 24 | return nil 25 | end 26 | local effects = data.raw.technology[tech].effects or {} 27 | for i, v in ipairs(effects) do 28 | if v.recipe == name then 29 | return table.remove(effects, i) 30 | end 31 | end 32 | end 33 | 34 | function seablock.lib.findeffectidx(effects, name) 35 | for i, v in ipairs(effects) do 36 | if v.recipe == name then 37 | return i 38 | end 39 | end 40 | end 41 | 42 | function seablock.lib.moveeffect(name, fromtech, totech, insertindex) 43 | local effect = seablock.lib.takeeffect(fromtech, name) 44 | if not effect then 45 | log("Effect " .. name .. " not found in tech " .. fromtech) 46 | return 47 | end 48 | if insertindex then 49 | table.insert(data.raw.technology[totech].effects, insertindex, effect) 50 | else 51 | table.insert(data.raw.technology[totech].effects, effect) 52 | end 53 | end 54 | 55 | local function add_recipe_unlock(technology, recipe, insertindex) 56 | local addit = true 57 | if not technology.effects then 58 | technology.effects = {} 59 | end 60 | for i, effect in pairs(technology.effects) do 61 | if effect.type == "unlock-recipe" and effect.recipe == recipe then 62 | addit = false 63 | end 64 | end 65 | if addit then 66 | bobmods.lib.recipe.enabled(recipe, false) 67 | if insertindex then 68 | table.insert(technology.effects, insertindex, { type = "unlock-recipe", recipe = recipe }) 69 | else 70 | table.insert(technology.effects, { type = "unlock-recipe", recipe = recipe }) 71 | end 72 | end 73 | end 74 | 75 | function seablock.lib.add_recipe_unlock(technology, recipe, insertindex) 76 | if 77 | type(technology) == "string" 78 | and type(recipe) == "string" 79 | and data.raw.technology[technology] 80 | and data.raw.recipe[recipe] 81 | then 82 | add_recipe_unlock(data.raw.technology[technology], recipe, insertindex) 83 | 84 | if data.raw.technology[technology].normal then 85 | add_recipe_unlock(data.raw.technology[technology].normal, recipe, insertindex) 86 | end 87 | if data.raw.technology[technology].expensive then 88 | add_recipe_unlock(data.raw.technology[technology].expensive, recipe, insertindex) 89 | end 90 | else 91 | log(debug.traceback()) 92 | bobmods.lib.error.technology(technology) 93 | bobmods.lib.error.recipe(recipe) 94 | end 95 | end 96 | 97 | function seablock.lib.iteraterecipes(recipe, func) 98 | if recipe.normal then 99 | func(recipe.normal) 100 | end 101 | if recipe.expensive then 102 | func(recipe.expensive) 103 | end 104 | if recipe.ingredients then 105 | func(recipe) 106 | end 107 | end 108 | 109 | function seablock.lib.recipeforeach(recipename, itemname, func, tablename) 110 | local doline = function(recipe) 111 | for _, line in pairs(recipe[tablename]) do 112 | local nameidx = 1 113 | local amountidx = 2 114 | if line.name then 115 | nameidx = "name" 116 | end 117 | if line.amount then 118 | amountidx = "amount" 119 | end 120 | if line[nameidx] == itemname then 121 | func(line, nameidx, amountidx) 122 | end 123 | end 124 | end 125 | seablock.lib.iteraterecipes(data.raw.recipe[recipename], doline) 126 | end 127 | 128 | function seablock.lib.substingredient(name, from, to, count) 129 | local t = data.raw.recipe[name] 130 | if t then 131 | local dosubst = function(ingredient, nameidx, amountidx) 132 | if to ~= nil then 133 | ingredient[nameidx] = to 134 | end 135 | if count ~= nil then 136 | ingredient[amountidx] = count 137 | end 138 | end 139 | seablock.lib.recipeforeach(name, from, dosubst, "ingredients") 140 | else 141 | log(debug.traceback()) 142 | end 143 | end 144 | 145 | function seablock.lib.removeingredient(name, ingredient) 146 | local t = data.raw.recipe[name] 147 | if t then 148 | local doremove = function(recipe) 149 | for k, v in pairs(recipe.ingredients) do 150 | if v[1] == ingredient or v.name == ingredient then 151 | table.remove(recipe.ingredients, k) 152 | return 153 | end 154 | end 155 | end 156 | seablock.lib.iteraterecipes(t, doremove) 157 | end 158 | end 159 | 160 | function seablock.lib.substresult(name, from, to, count) 161 | local t = data.raw.recipe[name] 162 | if t then 163 | local dosubst = function(result, nameidx, amountidx) 164 | if to ~= nil then 165 | result[nameidx] = to 166 | end 167 | if count ~= nil then 168 | result[amountidx] = count 169 | end 170 | end 171 | seablock.lib.recipeforeach(name, from, dosubst, "results") 172 | end 173 | end 174 | 175 | function seablock.lib.addresult(name, resulttable) 176 | local t = data.raw.recipe[name] 177 | if t then 178 | local doadd = function(recipe) 179 | table.insert(recipe.results, resulttable) 180 | end 181 | seablock.lib.iteraterecipes(t, doadd) 182 | end 183 | end 184 | 185 | function seablock.lib.findtechunlock(recipename) 186 | for _, tech in pairs(data.raw.technology) do 187 | for _, effect in pairs(tech.effects or {}) do 188 | if effect.type == "unlock-recipe" and effect.recipe == recipename then 189 | return tech 190 | end 191 | end 192 | end 193 | end 194 | 195 | function seablock.lib.tablefind(table, item) 196 | for k, v in pairs(table) do 197 | if v == item then 198 | return k 199 | end 200 | end 201 | return nil 202 | end 203 | 204 | function seablock.lib.unhide_recipe(recipe_name) 205 | local recipe = data.raw.recipe[recipe_name] 206 | if recipe then 207 | if recipe.normal then 208 | recipe.normal.hidden = false 209 | end 210 | if recipe.expensive then 211 | recipe.expensive.hidden = false 212 | end 213 | if not recipe.normal and not recipe.expensive then 214 | recipe.hidden = false 215 | end 216 | end 217 | end 218 | 219 | function seablock.lib.hide_technology(technology_name) 220 | local technology = data.raw.technology[technology_name] 221 | if technology then 222 | if technology.normal then 223 | technology.normal.hidden = true 224 | technology.normal.enabled = false 225 | end 226 | if technology.expensive then 227 | technology.expensive.hidden = true 228 | technology.expensive.enabled = false 229 | end 230 | if not technology.normal and not technology.expensive then 231 | technology.hidden = true 232 | technology.enabled = false 233 | end 234 | end 235 | end 236 | 237 | function seablock.lib.copy_icon(to, from) 238 | if to and from then 239 | to.icon = from.icon 240 | to.icons = from.icons 241 | to.icon_size = from.icon_size 242 | to.icon_mipmaps = from.icon_mipmaps 243 | end 244 | end 245 | 246 | function seablock.lib.hide_item(item_name) 247 | local item = data.raw.item[item_name] 248 | if item then 249 | if not item.flags then 250 | item.flags = {} 251 | end 252 | if not seablock.lib.tablefind(item.flags, "hidden") then 253 | table.insert(item.flags, "hidden") 254 | end 255 | else 256 | item = data.raw.fluid[item_name] 257 | if item then 258 | item.hidden = true 259 | end 260 | end 261 | end 262 | 263 | function seablock.lib.hide(type_name, name) 264 | if not data.raw[type_name] then 265 | log("Unknown type: " .. type_name) 266 | else 267 | local item = data.raw[type_name][name] 268 | if not item then 269 | log("Unknown " .. type_name .. ": " .. name) 270 | else 271 | if type_name == "fluid" then 272 | item.hidden = true 273 | else 274 | if not item.flags then 275 | item.flags = {} 276 | end 277 | if not seablock.lib.tablefind(item.flags, "hidden") then 278 | table.insert(item.flags, "hidden") 279 | end 280 | 281 | if type_name == "item" then 282 | table.insert(item.flags, "hide-from-bonus-gui") 283 | end 284 | 285 | item.next_upgrade = nil 286 | end 287 | end 288 | end 289 | end 290 | 291 | function seablock.lib.remove_effect(technology_name, effect_type, effect_key, effect_value) 292 | local tech = data.raw.technology[technology_name] 293 | if not tech then 294 | log("Unknown technology: " .. technology_name) 295 | return 296 | end 297 | 298 | if tech.effects then 299 | for i, effect in pairs(tech.effects) do 300 | if effect.type == effect_type and effect[effect_key] == effect_value then 301 | table.remove(tech.effects, i) 302 | return 303 | end 304 | end 305 | end 306 | end 307 | 308 | function seablock.lib.add_flag(type, name, flag) 309 | if not data.raw[type] then 310 | log("Unknown type: " .. type) 311 | return 312 | end 313 | 314 | local item = data.raw[type][name] 315 | if not item then 316 | log("Unknown " .. type .. ": " .. name) 317 | return 318 | end 319 | 320 | if item.flags then 321 | table.insert(item.flags, flag) 322 | else 323 | item.flags = { flag } 324 | end 325 | end 326 | 327 | --[[ 328 | Modified from code copied from Artisanal Reskins: Library v1.1.2 329 | With permission from Kira 330 | https://mods.factorio.com/mod/reskins-library 331 | https://github.com/kirazy/reskins-library/ 332 | --]] 333 | function seablock.reskins.composite_existing_icons(target_name, target_type, icons) 334 | -- icons = table of ["name"] = {type, shift, scale} or ["name"] = {icon or icons}, where type, shift, and scale are optional, and icon/icons ignores other param values 335 | 336 | -- Check to ensure the target is available 337 | local target = data.raw[target_type][target_name] 338 | if not target then 339 | return 340 | end 341 | 342 | -- Initialize the icons table 343 | local composite_icon = {} 344 | 345 | -- Iterate through the list of icons to composite 346 | for name, params in pairs(icons) do 347 | if params.icons then 348 | for _, layer in pairs(params.icons) do 349 | table.insert(composite_icon, { 350 | icon = layer.icon, 351 | icon_size = layer.icon_size, 352 | icon_mipmaps = layer.icon_mipmaps, 353 | scale = layer.scale or (32 / layer.icon_size), 354 | shift = layer.shift, 355 | tint = layer.tint, 356 | }) 357 | end 358 | elseif params.icon then 359 | table.insert(composite_icon, { 360 | icon = params.icon.icon, 361 | icon_size = params.icon.icon_size, 362 | icon_mipmaps = params.icon.icon_mipmaps, 363 | scale = params.icon.scale or (32 / params.icon.icon_size), 364 | shift = params.icon.shift, 365 | tint = params.icon.tint, 366 | }) 367 | else 368 | -- Check to ensure the object is available to copy from; abort if not 369 | local source_type = params.type or "item" 370 | 371 | -- Copy the current entity, return if it doesn't exist 372 | if not data.raw[source_type][name] then 373 | return 374 | end 375 | local entity = util.copy(data.raw[source_type][name]) 376 | 377 | -- Check for icons definition 378 | if entity.icons then 379 | -- Transcribe layers to the composite_icon table 380 | for _, layer in pairs(entity.icons) do 381 | local icon_size = layer.icon_size or entity.icon_size 382 | table.insert(composite_icon, { 383 | icon = layer.icon, 384 | icon_size = icon_size, 385 | icon_mipmaps = layer.icon_mipmaps or entity.icon_mipmaps, 386 | tint = layer.tint, 387 | scale = layer.scale or (32 / icon_size) * (params.scale or 1), 388 | shift = { 389 | (layer.shift and (layer.shift[1] or layer.shift.x) or 0) * (params.scale or 1) 390 | + (params.shift and (params.shift[1] or params.shift.x) or 0), 391 | (layer.shift and (layer.shift[2] or layer.shift.y) or 0) * (params.scale or 1) 392 | + (params.shift and (params.shift[2] or params.shift.y) or 0), 393 | }, 394 | }) 395 | end 396 | -- Standard icon 397 | else 398 | -- Fully define an icons layer 399 | table.insert(composite_icon, { 400 | icon = entity.icon, 401 | icon_size = entity.icon_size, 402 | icon_mipmaps = entity.icon_mipmaps, 403 | scale = params.scale and (params.scale * 32 / entity.icon_size) or (32 / entity.icon_size), 404 | shift = { 405 | (params.shift and (params.shift[1] or params.shift.x) or 0), 406 | (params.shift and (params.shift[2] or params.shift.y) or 0), 407 | }, 408 | }) 409 | end 410 | end 411 | end 412 | 413 | -- Assign the composite icon 414 | seablock.reskins.assign_icons(target_name, { type = target_type, icon = composite_icon }) 415 | end 416 | 417 | function seablock.reskins.assign_icons(name, inputs) 418 | -- Inputs required by this function 419 | -- type - Entity type 420 | -- icon - Table or string defining icon 421 | -- icon_size - Pixel size of icons 422 | -- icon_mipmaps - Number of mipmaps present in the icon image file 423 | 424 | -- Initialize paths 425 | local entity 426 | if inputs.type then 427 | entity = data.raw[inputs.type][name] 428 | end 429 | 430 | -- Recipes are exceptions to the usual pattern 431 | local item, item_with_data, explosion, remnant 432 | if inputs.type ~= "recipe" then 433 | item = data.raw["item"][name] 434 | item_with_data = data.raw["item-with-entity-data"][name] 435 | explosion = data.raw["explosion"][name .. "-explosion"] 436 | remnant = data.raw["corpse"][name .. "-remnants"] 437 | end 438 | 439 | -- Check whether icon or icons, ensure the key we're not using is erased 440 | if type(inputs.icon) == "table" then 441 | -- Set icon_size and icon_mipmaps per icons specification 442 | for n = 1, #inputs.icon do 443 | if not inputs.icon[n].icon_size then 444 | inputs.icon[n].icon_size = inputs.icon_size 445 | end 446 | 447 | if not inputs.icon[n].icon_mipmaps then 448 | inputs.icon[n].icon_mipmaps = inputs.icon_mipmaps or 1 449 | end 450 | end 451 | 452 | -- Create icons that have multiple layers 453 | if entity then 454 | entity.icon = nil 455 | entity.icons = inputs.icon 456 | end 457 | 458 | if item then 459 | item.icon = nil 460 | item.icons = inputs.icon 461 | end 462 | 463 | if item_with_data then 464 | item_with_data.icon = nil 465 | item_with_data.icons = inputs.icon 466 | end 467 | 468 | if explosion then 469 | explosion.icon = nil 470 | explosion.icons = inputs.icon 471 | end 472 | 473 | if remnant then 474 | remnant.icon = nil 475 | remnant.icons = inputs.icon 476 | end 477 | else 478 | -- Create icons that do not have multiple layers 479 | if entity then 480 | entity.icons = nil 481 | entity.icon = inputs.icon 482 | entity.icon_size = inputs.icon_size 483 | entity.icon_mipmaps = inputs.icon_mipmaps 484 | end 485 | 486 | if item then 487 | item.icons = nil 488 | item.icon = inputs.icon 489 | item.icon_size = inputs.icon_size 490 | item.icon_mipmaps = inputs.icon_mipmaps 491 | end 492 | 493 | if item_with_data then 494 | item_with_data.icons = nil 495 | item_with_data.icon = inputs.icon 496 | item_with_data.icon_size = inputs.icon_size 497 | item_with_data.icon_mipmaps = inputs.icon_mipmaps 498 | end 499 | 500 | if explosion then 501 | explosion.icons = nil 502 | explosion.icon = inputs.icon 503 | explosion.icon_size = inputs.icon_size 504 | explosion.icon_mipmaps = inputs.icon_mipmaps 505 | end 506 | 507 | if remnant then 508 | remnant.icons = nil 509 | remnant.icon = inputs.icon 510 | remnant.icon_size = inputs.icon_size 511 | remnant.icon_mipmaps = inputs.icon_mipmaps 512 | end 513 | end 514 | 515 | -- Handle picture definitions 516 | if entity then 517 | if inputs.icon_picture and inputs.make_entity_pictures then 518 | entity.pictures = inputs.icon_picture 519 | end 520 | end 521 | 522 | if item then 523 | if inputs.icon_picture and inputs.make_icon_pictures then 524 | item.pictures = inputs.icon_picture 525 | end 526 | end 527 | 528 | -- item-with-entity-data prototypes ignore pictures field as of 1.0 529 | -- this has been left active in the hopes the default behavior is adjusted 530 | if item_with_data then 531 | if inputs.icon_picture and inputs.make_icon_pictures then 532 | item_with_data.pictures = inputs.icon_picture 533 | end 534 | end 535 | 536 | -- Clear out recipe so that icon is inherited properly 537 | if inputs.type ~= "recipe" then 538 | seablock.reskins.clear_icon_specification(name, "recipe") 539 | end 540 | end 541 | 542 | function seablock.reskins.clear_icon_specification(name, type) 543 | -- Inputs required by this function: 544 | -- type - Entity type 545 | 546 | -- Fetch entity 547 | local entity = data.raw[type][name] 548 | 549 | -- If the entity exists, clear the icon specification 550 | if entity then 551 | entity.icon = nil 552 | entity.icons = nil 553 | entity.icon_size = nil 554 | entity.icon_mipmaps = nil 555 | end 556 | end 557 | -------------------------------------------------------------------------------- /SeaBlock/locale/de/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Holzkohle 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Einfache Leiterplatte 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/en/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | sb-water-mineralized-crystallization=Mineralized water crystallization 3 | sb-wood-foraging=Forage for driftwood 4 | sb-blue-algae-liquefaction=Blue algae liquefaction 5 | slag-processing-filtering-1=Slurry charcoal filtering 6 | crystal-slurry-filtering-1=Crystal slurry charcoal filtering 7 | crystal-slurry-filtering-conversion-1=Crystal slurry to mineral sludge charcoal filtering 8 | coolant-used-filtration-1=Used coolant charcoal filtering 9 | coolant-used-filtration-2=Used coolant ceramic filtering 10 | liquid-raw-vegetable-oil-filtering-1=Raw vegetable oil charcoal filtering 11 | liquid-raw-vegetable-oil-filtering-2=Raw vegetable oil ceramic filtering 12 | liquid-raw-fish-oil-filtering-1=Raw fish oil charcoal filtering 13 | liquid-raw-fish-oil-filtering-2=Raw fish oil ceramic filtering 14 | coke-purification-2=Charcoal purification 15 | 16 | [item-name] 17 | charcoal=Charcoal 18 | filter-charcoal=Charcoal filter 19 | pellet-charcoal=Charcoal pellet 20 | rocket-part=Rocket part 21 | sct-lab-lab2=Exoplanetary Studies Lab 22 | 23 | [entity-name] 24 | home=Home 25 | sb-ore-sorting-facility-5=Ore sorting facility 5 26 | sct-lab-lab2=Exoplanetary Studies Lab 27 | silo-coal=Charcoal silo 28 | 29 | [entity-description] 30 | silo-coal=Silo with a "Charcoal" aesthetic. 31 | 32 | [technology-name] 33 | sb-startup1=Crush stiratite 34 | sb-startup3=Basic circuit board 35 | sb-startup4=Laboratory 36 | sb-bio-processing-green=Improved algae processing 37 | sct-lab-lab2=Exoplanetary Studies Lab 38 | angels-coal-processing=Charcoal processing 39 | ftl-theory-D=Faster than light theory D2 40 | ftl-theory-D2=Faster than light theory E 41 | 42 | [technology-description] 43 | sb-startup1=Crushed saphirite can be smelted to iron plates. Crushed stiratite can be smelted to copper plates. 44 | sb-startup3=Craft a basic circuit board. Basic circuit boards are required to craft most machines. 45 | sct-lab-lab2=Exoplanetary Studies Lab 46 | ftl-theory-D=Theoretical faster than light travel part D2 - logistics bias 47 | ftl-theory-D2=Theoretical faster than light travel part E 48 | 49 | [item-description] 50 | sb-angelsore3-tool=Collect crushed stiratite ore from a burner ore crusher to complete this research 51 | sb-basic-circuit-board-tool=Craft one basic circuit board to complete this research 52 | sb-lab-tool=Craft a lab to complete this research 53 | 54 | [mod-setting-name] 55 | sb-default-landfill=Default landfill type 56 | bobmods-assembly-multipurposefurnaces=Recipe furnaces 57 | 58 | [string-mod-setting] 59 | sb-default-landfill-landfill-dirt-4=[img=item/landfill-dirt-4]Dirt 60 | sb-default-landfill-landfill-dry-dirt=[img=item/landfill-dry-dirt]Dry dirt 61 | sb-default-landfill-landfill-grass-1=[img=item/landfill-grass-1]Grass 62 | sb-default-landfill-landfill=[img=item/landfill]Landfill 63 | sb-default-landfill-landfill-red-desert-1=[img=item/landfill-red-desert-1]Red desert 64 | sb-default-landfill-landfill-sand-3=[img=item/landfill-sand-3]Sand 65 | -------------------------------------------------------------------------------- /SeaBlock/locale/es-ES/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Carbón vegetal 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Placa de circuito básica 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/fr/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Charbon de bois 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Circuit imprimé basique 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/hu/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Faszén 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Alap áramköri lap 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/ja/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=木炭 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=基本回路基板 12 | sb-startup4=研究所 13 | 14 | [technology-description] 15 | 16 | [item-description] 17 | 18 | [mod-setting-name] 19 | 20 | [string-mod-setting] 21 | 22 | 23 | -------------------------------------------------------------------------------- /SeaBlock/locale/ko/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=숯 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=기본 회로 기판 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/pl/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Węgiel drzewny 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Płytka elektroniczna 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/pt-BR/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Carvão 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | 12 | [technology-description] 13 | 14 | [item-description] 15 | 16 | [mod-setting-name] 17 | 18 | [string-mod-setting] 19 | 20 | 21 | -------------------------------------------------------------------------------- /SeaBlock/locale/ru/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=Древесный уголь 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=Простая печатная плата 12 | sb-startup4=Лаборатория 13 | 14 | [technology-description] 15 | 16 | [item-description] 17 | 18 | [mod-setting-name] 19 | 20 | [string-mod-setting] 21 | 22 | 23 | -------------------------------------------------------------------------------- /SeaBlock/locale/uk/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | sb-water-mineralized-crystallization=Кристалізація мінералізованої води 3 | 4 | [item-name] 5 | charcoal=Деревне вугілля 6 | 7 | [entity-name] 8 | 9 | [entity-description] 10 | 11 | [technology-name] 12 | sb-startup3=Базова друкована плата 13 | 14 | [technology-description] 15 | 16 | [item-description] 17 | 18 | [mod-setting-name] 19 | 20 | [string-mod-setting] 21 | 22 | 23 | -------------------------------------------------------------------------------- /SeaBlock/locale/zh-CN/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=木炭 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=基础电路板 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/locale/zh-TW/SeaBlock.cfg: -------------------------------------------------------------------------------- 1 | [recipe-name] 2 | 3 | [item-name] 4 | charcoal=木炭 5 | 6 | [entity-name] 7 | 8 | [entity-description] 9 | 10 | [technology-name] 11 | sb-startup3=基礎電路板 12 | 13 | [technology-description] 14 | 15 | [item-description] 16 | 17 | [mod-setting-name] 18 | 19 | [string-mod-setting] 20 | 21 | 22 | -------------------------------------------------------------------------------- /SeaBlock/mapgen.lua: -------------------------------------------------------------------------------- 1 | data.raw.tile["sand-4"] = table.deepcopy(data.raw.tile["sand-1"]) 2 | data.raw.tile["sand-5"] = table.deepcopy(data.raw.tile["sand-2"]) 3 | data.raw.tile["sand-4"].name = "sand-4" 4 | data.raw.tile["sand-5"].name = "sand-5" 5 | 6 | data.raw.tile["dry-dirt"].vehicle_friction_modifier = 1.8 7 | data.raw.tile["dirt-1"].vehicle_friction_modifier = 1.8 8 | data.raw.tile["dirt-2"].vehicle_friction_modifier = 1.8 9 | data.raw.tile["dirt-3"].vehicle_friction_modifier = 1.8 10 | 11 | data.raw.tile["dirt-4"].vehicle_friction_modifier = 1.8 12 | data.raw.tile["dirt-5"].vehicle_friction_modifier = 1.8 13 | data.raw.tile["dirt-6"].vehicle_friction_modifier = 1.8 14 | data.raw.tile["dirt-7"].vehicle_friction_modifier = 1.8 15 | 16 | data.raw.tile["grass-1"].vehicle_friction_modifier = 1.8 17 | data.raw.tile["grass-3"].vehicle_friction_modifier = 1.8 18 | data.raw.tile["grass-2"].vehicle_friction_modifier = 1.8 19 | data.raw.tile["grass-4"].vehicle_friction_modifier = 1.8 20 | 21 | data.raw.tile["red-desert-0"].vehicle_friction_modifier = 1.8 22 | data.raw.tile["red-desert-1"].vehicle_friction_modifier = 1.8 23 | data.raw.tile["red-desert-2"].vehicle_friction_modifier = 1.8 24 | data.raw.tile["red-desert-3"].vehicle_friction_modifier = 1.8 25 | 26 | data.raw.tile["sand-1"].vehicle_friction_modifier = 1.8 27 | data.raw.tile["sand-2"].vehicle_friction_modifier = 1.8 28 | data.raw.tile["sand-3"].vehicle_friction_modifier = 1.8 29 | data.raw.tile["sand-4"].vehicle_friction_modifier = 1.8 30 | data.raw.tile["sand-5"].vehicle_friction_modifier = 1.8 31 | 32 | data.raw.tile["landfill"].vehicle_friction_modifier = 1.8 33 | 34 | for _, v in pairs(data.raw.tile) do 35 | v.autoplace = nil 36 | end 37 | 38 | -- Want player to collide with cliffs 39 | -- Want player to collide with water 40 | -- Don't want cliffs to collide with water 41 | -- Water tile's default collision mask includes player-layer and item-layer 42 | -- So use train-layer as a substitute player-layer 43 | data.raw.cliff["cliff"].collision_mask = { "object-layer", "train-layer", "not-colliding-with-itself" } 44 | 45 | local octaves = -3 46 | local persistence = 0.2 47 | local waterline = 9.4 48 | local elevation_scale = 5 49 | local function scale_elevation(x) 50 | return (x - waterline) * elevation_scale + waterline 51 | end 52 | -- low lying sand 53 | data.raw.tile["sand-4"].autoplace = { 54 | peaks = { 55 | { -- Around cliff islands 56 | influence = 5, 57 | elevation_optimal = 0.3 * elevation_scale + waterline, 58 | elevation_range = 0.3 * elevation_scale, 59 | elevation_max_range = 0.3 * elevation_scale, 60 | }, 61 | { 62 | influence = 0.77 * 8, -- Worm islands 63 | min_influence = 0, 64 | noise_layer = "enemy-base", 65 | noise_octaves_difference = octaves, 66 | noise_persistence = persistence, 67 | tier_from_start_optimal = 8, 68 | tier_from_start_max_range = 40, 69 | tier_from_start_top_property_limit = 8, 70 | }, 71 | { -- Not in starting area 72 | influence = -5, 73 | starting_area_weight_optimal = 1, 74 | starting_area_weight_range = 0, 75 | starting_area_weight_max_range = 0, 76 | }, 77 | { 78 | influence = 100, -- ... except for starting tile 79 | min_influence = 0, 80 | distance_optimal = 0, 81 | distance_range = 0.1, 82 | distance_max_range = 0.1, 83 | }, 84 | { 85 | influence = -5, 86 | }, 87 | }, 88 | } 89 | 90 | -- highground sand 91 | data.raw.tile["sand-5"].autoplace = { 92 | peaks = { 93 | { 94 | influence = 5, 95 | min_influence = 0, 96 | elevation_optimal = scale_elevation(15), 97 | elevation_range = 5 * elevation_scale, 98 | elevation_max_range = 5 * elevation_scale, 99 | tier_from_start_optimal = 0.1, 100 | tier_from_start_range = 0, 101 | tier_from_start_max_range = 0, 102 | tier_from_start_top_property_limit = 0.1, 103 | }, 104 | { 105 | influence = 0.65, -- starting area garden islands 106 | min_influence = 0, 107 | max_influence = 1, 108 | noise_layer = "enemy-base", 109 | noise_octaves_difference = octaves, 110 | noise_persistence = persistence, 111 | tier_from_start_optimal = 0, 112 | tier_from_start_range = 0.1, 113 | tier_from_start_max_range = 0.1, 114 | }, 115 | { 116 | influence = 1, 117 | max_influence = 0, 118 | starting_area_weight_optimal = 1, 119 | starting_area_weight_range = 0, 120 | starting_area_weight_max_range = 0, 121 | }, 122 | { 123 | influence = -100, -- not on starting tile 124 | max_influence = 0, 125 | distance_optimal = 0, 126 | distance_range = 3, 127 | distance_max_range = 3, 128 | }, 129 | }, 130 | } 131 | 132 | local plant_elevation_range = 9.9 * elevation_scale 133 | data.raw.tree["desert-garden"].autoplace = { 134 | max_probability = 0.2, 135 | random_probability_penalty = 0.05, 136 | sharpness = 1, 137 | peaks = { 138 | { 139 | influence = 1, 140 | min_influence = 0, 141 | elevation_optimal = scale_elevation(20), 142 | elevation_range = plant_elevation_range, 143 | elevation_max_range = plant_elevation_range, 144 | }, 145 | { 146 | influence = 0.31, -- Trial and error value to generate size that approximately matches starting area islands 147 | min_influence = 0, 148 | max_influence = 1, 149 | noise_layer = "enemy-base", 150 | noise_octaves_difference = octaves, 151 | noise_persistence = persistence, 152 | tier_from_start_optimal = 0, 153 | tier_from_start_range = 0.1, 154 | tier_from_start_max_range = 0.1, 155 | }, 156 | { 157 | influence = 1, 158 | max_influence = 0, 159 | noise_layer = "desert-garden-noise", 160 | noise_persistence = 0.8, 161 | noise_octaves_difference = -0.5, 162 | }, 163 | }, 164 | order = "yc", 165 | tile_restriction = { "sand-5" }, 166 | } 167 | 168 | data.raw.tree["temperate-garden"].autoplace = { 169 | max_probability = 0.2, 170 | random_probability_penalty = 0.05, 171 | peaks = { 172 | { 173 | influence = 1, 174 | min_influence = 0, 175 | elevation_optimal = scale_elevation(20), 176 | elevation_range = plant_elevation_range, 177 | elevation_max_range = plant_elevation_range, 178 | }, 179 | { 180 | influence = 1, 181 | max_influence = 0, 182 | noise_layer = "temperate-garden-noise", 183 | noise_persistence = 0.8, 184 | noise_octaves_difference = -0.5, 185 | }, 186 | }, 187 | order = "ya", 188 | tile_restriction = { "sand-5" }, 189 | } 190 | 191 | data.raw.tree["swamp-garden"].autoplace = { 192 | max_probability = 0.05, 193 | peaks = { 194 | { 195 | influence = 1, 196 | min_influence = 0, 197 | elevation_optimal = scale_elevation(20), 198 | elevation_range = plant_elevation_range, 199 | elevation_max_range = plant_elevation_range, 200 | }, 201 | }, 202 | order = "yb", 203 | tile_restriction = { "sand-5" }, 204 | } 205 | 206 | data.raw.tree["desert-tree"].autoplace = { 207 | max_probability = 0.1, 208 | random_probability_penalty = 0.025, 209 | sharpness = 1, 210 | peaks = { 211 | { 212 | influence = 1, 213 | min_influence = 0, 214 | elevation_optimal = scale_elevation(20), 215 | elevation_range = plant_elevation_range, 216 | elevation_max_range = plant_elevation_range, 217 | }, 218 | { 219 | influence = 0.31, -- Trial and error value to generate size that approximately matches starting area islands 220 | min_influence = 0, 221 | max_influence = 1, 222 | noise_layer = "enemy-base", 223 | noise_octaves_difference = octaves, 224 | noise_persistence = persistence, 225 | tier_from_start_optimal = 0, 226 | tier_from_start_range = 0.1, 227 | tier_from_start_max_range = 0.1, 228 | }, 229 | { 230 | influence = 1, 231 | max_influence = 0, 232 | noise_layer = "desert-tree-noise", 233 | noise_persistence = 0.8, 234 | noise_octaves_difference = -0.5, 235 | }, 236 | }, 237 | order = "za", 238 | tile_restriction = { "sand-5" }, 239 | } 240 | data.raw.tree["temperate-tree"].autoplace = { 241 | max_probability = 0.1, 242 | random_probability_penalty = 0.025, 243 | peaks = { 244 | { 245 | influence = 1, 246 | min_influence = 0, 247 | elevation_optimal = scale_elevation(20), 248 | elevation_range = plant_elevation_range, 249 | elevation_max_range = plant_elevation_range, 250 | }, 251 | { 252 | influence = 1, 253 | max_influence = 0, 254 | noise_layer = "temperate-tree-noise", 255 | noise_persistence = 0.8, 256 | noise_octaves_difference = -0.5, 257 | }, 258 | }, 259 | order = "zc", 260 | tile_restriction = { "sand-5" }, 261 | } 262 | 263 | data.raw.tree["swamp-tree"].autoplace = { 264 | max_probability = 0.05, 265 | peaks = { 266 | { 267 | influence = 1, 268 | min_influence = 0, 269 | elevation_optimal = scale_elevation(20), 270 | elevation_range = plant_elevation_range, 271 | elevation_max_range = plant_elevation_range, 272 | }, 273 | { 274 | influence = 1, 275 | max_influence = 0, 276 | noise_layer = "swamp-tree-noise", 277 | noise_persistence = 0.8, 278 | noise_octaves_difference = -0.5, 279 | }, 280 | }, 281 | order = "zb", 282 | tile_restriction = { "sand-5" }, 283 | } 284 | 285 | data.raw.tile["water"].autoplace = { 286 | peaks = { 287 | { 288 | influence = 0.1, -- shallow water around cliff islands 289 | min_influence = 0, 290 | elevation_optimal = -2 * elevation_scale + waterline, 291 | elevation_range = 2.5 * elevation_scale, 292 | elevation_max_range = 2.5 * elevation_scale, 293 | }, 294 | { 295 | influence = 0.77 * 2, -- around worm islands 296 | min_influence = 0, 297 | max_influence = 1, 298 | noise_layer = "enemy-base", 299 | noise_octaves_difference = octaves, 300 | noise_persistence = persistence, 301 | }, 302 | { 303 | influence = 5, -- around starting tile 304 | min_influence = 0, 305 | distance_optimal = 0, 306 | distance_range = 5, 307 | distance_max_range = 5, 308 | }, 309 | }, 310 | } 311 | 312 | data.raw.tile["deepwater"].autoplace = { 313 | peaks = { 314 | { 315 | influence = 0.01, 316 | }, 317 | }, 318 | } 319 | 320 | data.raw.fish["alien-fish-1"].autoplace = { 321 | peaks = { 322 | { 323 | influence = -0.1, 324 | max_influence = 0, 325 | noise_layer = "enemy-base", 326 | noise_octaves_difference = octaves, 327 | noise_persistence = persistence, 328 | }, 329 | { 330 | influence = 0.01, 331 | }, 332 | }, 333 | } 334 | 335 | data.raw.fish["alien-fish-2"].autoplace = { 336 | peaks = { 337 | { 338 | influence = 0.02, 339 | min_influence = 0, 340 | noise_layer = "enemy-base", 341 | noise_octaves_difference = octaves, 342 | noise_persistence = persistence, 343 | }, 344 | }, 345 | } 346 | 347 | data.raw.fish["alien-fish-3"].autoplace = { 348 | peaks = { 349 | { 350 | influence = 0.015, 351 | min_influence = 0, 352 | elevation_optimal = scale_elevation(10), 353 | elevation_range = 5 * elevation_scale, 354 | elevation_max_range = 5 * elevation_scale, 355 | tier_from_start_optimal = 0.1, 356 | tier_from_start_range = 0, 357 | tier_from_start_max_range = 0, 358 | tier_from_start_top_property_limit = 0.1, 359 | }, 360 | }, 361 | } 362 | 363 | local noise = require("noise") 364 | local tne = noise.to_noise_expression 365 | local enemy_random_seed = 1 366 | local function new_random_seed() 367 | enemy_random_seed = enemy_random_seed + 1 368 | return enemy_random_seed 369 | end 370 | local function worm_autoplace(distance, probability, order, falloff, control_name) 371 | local d = noise.var("distance") - noise.var("starting_area_radius") 372 | local p = noise.clamp((d - distance * 128) / 128, 0, 1) 373 | if falloff then 374 | p = p * noise.clamp(((distance + 2) * 128 - d) / 128, 0, 1) 375 | end 376 | p = p * noise.clamp((waterline - noise.var("elevation")), 0, 1) 377 | p = p * probability 378 | p = noise.random_penalty(p, probability * 0.5, { 379 | x = noise.var("x") + new_random_seed(), 380 | }) 381 | 382 | return { 383 | control = control_name, 384 | order = order, 385 | force = "enemy", 386 | probability_expression = p, 387 | richness_expression = tne(1), 388 | } 389 | end 390 | 391 | data.raw.turret["small-worm-turret"].autoplace = worm_autoplace(0, 1, "z", true, "enemy-base") 392 | data.raw.turret["medium-worm-turret"].autoplace = worm_autoplace(1, 1, "y", true, "enemy-base") 393 | if data.raw.turret["bob-big-explosive-worm-turret"] then 394 | data.raw.turret["bob-big-explosive-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 395 | end 396 | if data.raw.turret["bob-big-fire-worm-turret"] then 397 | data.raw.turret["bob-big-fire-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 398 | end 399 | if data.raw.turret["bob-big-poison-worm-turret"] then 400 | data.raw.turret["bob-big-poison-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 401 | end 402 | if data.raw.turret["bob-big-piercing-worm-turret"] then 403 | data.raw.turret["bob-big-piercing-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 404 | end 405 | if data.raw.turret["bob-big-electric-worm-turret"] then 406 | data.raw.turret["bob-big-electric-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 407 | end 408 | if data.raw.turret["bob-giant-worm-turret"] then 409 | data.raw.turret["bob-giant-worm-turret"].autoplace = worm_autoplace(2, 0.6, "u", false, "enemy-base") 410 | end 411 | if data.raw.turret["behemoth-worm-turret"] then 412 | data.raw.turret["big-worm-turret"].autoplace = worm_autoplace(1.5, 0.5, "v", false, "enemy-base") 413 | data.raw.turret["behemoth-worm-turret"].autoplace = worm_autoplace(2, 0.2, "t", false, "enemy-base") 414 | else 415 | data.raw.turret["big-worm-turret"].autoplace = worm_autoplace(2, 1, "v", false, "enemy-base") 416 | end 417 | data.raw.tree["puffer-nest"].autoplace = worm_autoplace(0, 0.01, "s", false) 418 | 419 | for _, v in pairs(data.raw.turret) do 420 | v.map_generator_bounding_box = nil 421 | end 422 | 423 | data:extend({ 424 | { 425 | type = "noise-layer", 426 | name = "desert-tree-noise", 427 | }, 428 | { 429 | type = "noise-layer", 430 | name = "temperate-tree-noise", 431 | }, 432 | { 433 | type = "noise-layer", 434 | name = "swamp-tree-noise", 435 | }, 436 | { 437 | type = "noise-layer", 438 | name = "desert-garden-noise", 439 | }, 440 | { 441 | type = "noise-layer", 442 | name = "temperate-garden-noise", 443 | }, 444 | { 445 | type = "noise-layer", 446 | name = "swamp-garden-noise", 447 | }, 448 | }) 449 | 450 | local function make_basis_noise_function(seed0, seed1, outscale0, inscale0) 451 | outscale0 = outscale0 or 1 452 | inscale0 = inscale0 or 1 / outscale0 453 | return function(x, y, inscale, outscale) 454 | return tne({ 455 | type = "function-application", 456 | function_name = "factorio-basis-noise", 457 | arguments = { 458 | x = tne(x), 459 | y = tne(y), 460 | seed0 = tne(seed0), 461 | seed1 = tne(seed1), 462 | input_scale = tne((inscale or 1) * inscale0), 463 | output_scale = tne((outscale or 1) * outscale0), 464 | }, 465 | }) 466 | end 467 | end 468 | 469 | data.raw["noise-expression"]["cliffiness"].expression = noise.define_noise_function(function(x, y, tile, map) 470 | local t = noise.clamp((tile.tier - 0.2) * noise.ceil(noise.var("control-setting:cliffs:richness:multiplier")), 0, 1) -- No cliffs in starting area 471 | return 100 * t 472 | end) 473 | data.raw["noise-expression"]["elevation"].expression = noise.define_noise_function(function(x, y, tile, map) 474 | x = x + 40000 475 | y = y 476 | local v = make_basis_noise_function(map.seed, 5, 6, 1 / 64)(x, y) 477 | v = noise.max(v, 0) 478 | v = (v * elevation_scale) - (waterline * (elevation_scale - 1)) -- Increase gradient for cliffs while leaving waterline unchanged 479 | return v 480 | end) 481 | -------------------------------------------------------------------------------- /SeaBlock/migrations/SeaBlock_0.5.1.lua: -------------------------------------------------------------------------------- 1 | for _, force in pairs(game.forces) do 2 | if 3 | (force.technologies["sct-automation-science-pack"] and force.technologies["sct-automation-science-pack"].researched) 4 | or (force.technologies["sb-startup4"] and force.technologies["sb-startup4"].researched) 5 | then 6 | force.technologies["sb-startup3"].researched = true 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /SeaBlock/migrations/SeaBlock_0.5.2.lua: -------------------------------------------------------------------------------- 1 | for _, force in pairs(game.forces) do 2 | if force.technologies["fluid-chemical-furnace"] and force.technologies["fluid-chemical-furnace"].researched then 3 | force.technologies["fluid-chemical-furnace"].researched = false 4 | force.technologies["fluid-chemical-furnace"].enabled = false 5 | end 6 | if force.technologies["steel-chemical-furnace"].researched then 7 | force.technologies["steel-chemical-furnace"].researched = false 8 | force.technologies["steel-chemical-furnace"].enabled = false 9 | end 10 | if force.technologies["electric-chemical-furnace"].researched then 11 | force.technologies["electric-chemical-furnace"].researched = false 12 | force.technologies["electric-chemical-furnace"].enabled = false 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /SeaBlock/migrations/SeaBlock_0.5.3.lua: -------------------------------------------------------------------------------- 1 | if game.forces["player"].technologies["basic-chemistry-2"] then 2 | game.forces["player"].technologies["basic-chemistry-2"].enabled = true 3 | end 4 | -------------------------------------------------------------------------------- /SeaBlock/migrations/SeaBlock_0.5.4.lua: -------------------------------------------------------------------------------- 1 | for _, v in pairs({ 2 | "angels-platinum-smelting-1", 3 | "angels-platinum-smelting-2", 4 | "angels-platinum-smelting-3", 5 | }) do 6 | if game.forces["player"].technologies[v] then 7 | game.forces["player"].technologies[v].enabled = true 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /SeaBlock/prototypes/recipe-category.lua: -------------------------------------------------------------------------------- 1 | data:extend({ 2 | { 3 | type = "recipe-category", 4 | name = "crafting-handonly", 5 | }, 6 | { 7 | type = "recipe-category", 8 | name = "thermal-bore", 9 | }, 10 | { 11 | type = "recipe-category", 12 | name = "thermal-extractor", 13 | }, 14 | { 15 | type = "recipe-category", 16 | name = "ore-sorting-5", 17 | }, 18 | }) 19 | 20 | if mods["SpaceMod"] then 21 | data:extend({ 22 | { 23 | type = "item-subgroup", 24 | name = "sb-SpaceMod", 25 | group = mods["ScienceCostTweakerM"] and "sct-science" or "intermediate-products", 26 | order = "zz[SpaceMod]", 27 | }, 28 | }) 29 | end 30 | -------------------------------------------------------------------------------- /SeaBlock/prototypes/recipe.lua: -------------------------------------------------------------------------------- 1 | data:extend({ 2 | { 3 | type = "recipe", 4 | name = "sb-wood-bricks-charcoal", 5 | category = "smelting", 6 | enabled = false, 7 | energy_required = 3.5, 8 | ingredients = { { "wood-bricks", 1 } }, 9 | result = "wood-charcoal", 10 | result_count = 5, 11 | subgroup = "bio-processing-wood", 12 | }, 13 | { 14 | type = "recipe", 15 | name = "thermal-bore-water", 16 | category = "thermal-bore", 17 | subgroup = "water-treatment", 18 | order = "h[thermal-bore-water]", 19 | energy_required = 10, 20 | enabled = false, 21 | ingredients = { 22 | { type = "item", name = "lithium-chloride", amount = 1 }, 23 | }, 24 | results = { 25 | { type = "fluid", name = "thermal-water", amount = 20 }, 26 | }, 27 | }, 28 | { 29 | type = "recipe", 30 | name = "thermal-extractor-water", 31 | category = "thermal-extractor", 32 | subgroup = "water-treatment", 33 | order = "h[thermal-extractor-water]", 34 | energy_required = 5, 35 | enabled = false, 36 | ingredients = { 37 | { type = "fluid", name = "steam", amount = 100 }, 38 | { type = "item", name = "lithium-chloride", amount = 2 }, 39 | }, 40 | results = { 41 | { type = "fluid", name = "thermal-water", amount = 100 }, 42 | }, 43 | }, 44 | { 45 | type = "recipe", 46 | name = "sb-water-mineralized-crystallization", 47 | category = "crystallizing", 48 | subgroup = "slag-processing-1", 49 | order = "z[slag-processing]", 50 | enabled = true, 51 | energy_required = 2, 52 | ingredients = { 53 | { type = "fluid", name = "water-mineralized", amount = 200 }, 54 | }, 55 | results = { 56 | { type = "item", name = "angels-ore1", amount = 2, probability = 0.55 }, 57 | { type = "item", name = "angels-ore3", amount = 1, probability = 0.7 }, 58 | }, 59 | }, 60 | { 61 | type = "recipe", 62 | name = "sb-wood-foraging", 63 | localised_name = { "recipe-name.sb-wood-foraging" }, 64 | category = "crafting-handonly", 65 | subgroup = "bio-processing-green", 66 | enabled = true, 67 | energy_required = 4, 68 | ingredients = {}, 69 | results = { 70 | { type = "item", name = "wood", amount = 1 }, 71 | }, 72 | order = "ab[sb-wood-foraging]", 73 | allow_as_intermediate = true, 74 | allow_decomposition = false, 75 | }, 76 | { 77 | -- Balance assuming blue algae is about equal to green algae in MJ value. 78 | -- 1 blue cellulose = 2MJ (1 green cellulose = 1MJ but converting to wood pellets doubles it. 79 | -- Wrong, but I'll stick with it to avoid increasing the cost of all petrochem recipes) 80 | -- Now for multi phase oil MJ value: 81 | -- 100 naphtha = 50MJ 82 | -- 50 fuel oil = 50MJ 83 | -- basic oil refining is 100 crude oil -> 30 fuel oil + 50 naphtha (and other stuff i'll ignore) 84 | -- 100 crude oil = 30MJ (fuel oil) + 25MJ (naphtha) = 55MJ 85 | -- 100 multiphase oil = 55*70/100 = 38.5 MJ. 86 | -- Let's round that up to 40MJ or 20 blue cellulose fiber. 87 | -- This is being generous, haven't counted natural gas liquids and base mineral oil. 88 | 89 | -- 100 sulfuric waste water -> 40 blue algae 90 | -- 40 blue algae -> 20 blue cellulose 91 | -- 20 blue cellulose -> 100 multi phase oil + 60 sulfuric waste water 92 | -- 100 multi phase oil -> 10 sulfuric waste water 93 | -- 70% of sulfuric waste water is recycled 94 | -- Almost forgot +20 raw gas 95 | -- 20 raw gas -> 4 acid gas 96 | -- 4 acid gas -> 2.4 hydrogen sulfide 97 | -- 2.4 hydrogen sulfide -> 0.12 sulfur 98 | -- 0.12 sulfur -> 7.2 sulfur dioxide 99 | -- 7.2 sulfur dioxide -> 4.8 sulfuric acid 100 | -- 4.8 sulfuric acid -> 16 slag slurry 101 | -- 16 slag slurry -> 12.8 sulfuric waste water (coal filtering) 102 | -- So closer to 80% sulfur return 103 | type = "recipe", 104 | name = "sb-blue-algae-liquefaction", 105 | icons = angelsmods.functions.create_liquid_recipe_icon({ 106 | "blue-cellulose-fiber", 107 | }, { { 100, 100, 100 }, { 171, 161, 055 }, { 127, 163, 109 } }), 108 | category = "petrochem-separation", 109 | enabled = false, 110 | energy_required = 5, 111 | ingredients = { 112 | { type = "item", name = "blue-cellulose-fiber", amount = 20 }, 113 | { type = "fluid", name = "steam", amount = 100 }, 114 | }, 115 | results = { 116 | { type = "fluid", name = "water-yellow-waste", amount = 60 }, 117 | { type = "fluid", name = "liquid-multi-phase-oil", amount = 100 }, 118 | { type = "fluid", name = "gas-carbon-dioxide", amount = 20 }, 119 | }, 120 | subgroup = "bio-processing-blue", 121 | order = "d[blue-algae-liquefaction]", 122 | }, 123 | { 124 | type = "item", 125 | name = "sb-ore-sorting-facility-5", 126 | icons = angelsmods.functions.add_number_icon_layer({ 127 | { 128 | icon = "__angelsrefining__/graphics/icons/ore-sorting-facility.png", 129 | icon_size = 64, 130 | icon_mipmaps = 4, 131 | }, 132 | }, 5, angelsmods.refining.number_tint), 133 | subgroup = "ore-sorter", 134 | order = "e[ore-sorting-facility-5]", 135 | place_result = "sb-ore-sorting-facility-5", 136 | stack_size = 10, 137 | }, 138 | { 139 | type = "assembling-machine", 140 | name = "sb-ore-sorting-facility-5", 141 | icons = angelsmods.functions.add_number_icon_layer({ 142 | { 143 | icon = "__angelsrefining__/graphics/icons/ore-sorting-facility.png", 144 | icon_size = 64, 145 | icon_mipmaps = 4, 146 | }, 147 | }, 5, angelsmods.refining.number_tint), 148 | flags = { "placeable-neutral", "player-creation" }, 149 | minable = { mining_time = 1, result = "sb-ore-sorting-facility-5" }, 150 | fast_replaceable_group = "ore-sorting-facility", 151 | max_health = 300, 152 | corpse = "big-remnants", 153 | dying_explosion = "medium-explosion", 154 | collision_box = { { -3.4, -3.4 }, { 3.4, 3.4 } }, 155 | selection_box = { { -3.5, -3.5 }, { 3.5, 3.5 } }, 156 | module_specification = { 157 | module_slots = 3, 158 | }, 159 | allowed_effects = { "consumption", "speed", "pollution", "productivity" }, 160 | crafting_categories = { "ore-sorting", "ore-sorting-2", "ore-sorting-3", "ore-sorting-4", "ore-sorting-5" }, 161 | crafting_speed = 2, 162 | energy_source = { 163 | type = "electric", 164 | usage_priority = "secondary-input", 165 | emissions_per_minute = 0.07 * 60, 166 | }, 167 | energy_usage = "350kW", 168 | animation = { 169 | layers = { 170 | { 171 | filename = "__angelsrefining__/graphics/entity/ore-sorting-facility/ore-sorting-facility-base.png", 172 | priority = "extra-high", 173 | width = 224, 174 | height = 230, 175 | frame_count = 40, 176 | line_length = 10, 177 | shift = util.by_pixel(0, -2), 178 | animation_speed = 0.5, 179 | hr_version = angelsmods.trigger.enable_hq_graphics 180 | and { 181 | filename = "__angelsrefining__/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-base.png", 182 | priority = "extra-high", 183 | width = 449, 184 | height = 458, 185 | frame_count = 40, 186 | line_length = 10, 187 | shift = util.by_pixel(0, -2.5), 188 | animation_speed = 0.5, 189 | scale = 0.5, 190 | } 191 | or nil, 192 | }, 193 | { 194 | filename = "__angelsrefining__/graphics/entity/ore-sorting-facility/ore-sorting-facility-shadow.png", 195 | priority = "extra-high", 196 | width = 265, 197 | height = 179, 198 | repeat_count = 40, 199 | shift = util.by_pixel(21, 25), 200 | animation_speed = 0.5, 201 | draw_as_shadow = true, 202 | hr_version = angelsmods.trigger.enable_hq_graphics 203 | and { 204 | filename = "__angelsrefining__/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-shadow.png", 205 | priority = "extra-high", 206 | width = 528, 207 | height = 356, 208 | repeat_count = 40, 209 | shift = util.by_pixel(21.5, 24.5), 210 | animation_speed = 0.5, 211 | draw_as_shadow = true, 212 | scale = 0.5, 213 | } 214 | or nil, 215 | }, 216 | }, 217 | }, 218 | vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, 219 | working_sound = { 220 | sound = { filename = "__angelsrefining__/sound/ore-sorting-facility.ogg", volume = 0.5 }, 221 | idle_sound = { filename = "__base__/sound/idle1.ogg", volume = 0.6 }, 222 | audible_distance_modifier = 0.5, 223 | apparent_volume = 2.5, 224 | }, 225 | }, 226 | { 227 | type = "recipe", 228 | name = "sb-ore-sorting-facility-5", 229 | energy_required = 5, 230 | enabled = false, 231 | ingredients = { 232 | { type = "item", name = "ore-sorting-facility-4", amount = 1 }, 233 | }, 234 | result = "ore-sorting-facility-5", 235 | }, 236 | }) 237 | 238 | bobmods.lib.tech.add_prerequisite("oil-gas-extraction", "bio-processing-blue") 239 | bobmods.lib.tech.add_recipe_unlock("oil-gas-extraction", "sb-blue-algae-liquefaction") 240 | 241 | -- Setup recipe bases 242 | 243 | local min_water_icons = angelsmods.functions.create_viscous_liquid_fluid_icon( 244 | nil, 245 | { { 039, 112, 194 }, { 093, 067, 049 }, { 070, 133, 232 }, { 109, 070, 020, 0.8 } } 246 | ) 247 | 248 | -- Build Crystalizer slag processing recipes 249 | local composite_recipes = {} 250 | local slag_processing_list = { 251 | ["sb-water-mineralized-crystallization"] = min_water_icons, 252 | } 253 | 254 | local slag_recipe_shifts = { 255 | { -10, 10 }, 256 | { 10, 10 }, 257 | } 258 | 259 | for name, base_icons in pairs(slag_processing_list) do 260 | -- Check the recipe exists 261 | local recipe = data.raw.recipe[name] 262 | if recipe then 263 | local recipe_results 264 | if recipe.normal then 265 | recipe_results = recipe.normal.results 266 | else 267 | recipe_results = recipe.results 268 | end 269 | 270 | -- Build icon overlays based on recipe ingredients 271 | if recipe_results[1].name ~= "angels-void" then 272 | local shift_index = 1 273 | 274 | -- Setup base layer 275 | composite_recipes[name] = { ["base"] = { icons = base_icons } } 276 | 277 | -- Build icon overlays based on recipe products 278 | for _, product in pairs(recipe_results) do 279 | composite_recipes[name][product.name] = { shift = slag_recipe_shifts[shift_index], scale = 0.5 } 280 | shift_index = shift_index + 1 281 | end 282 | end 283 | end 284 | end 285 | 286 | for name, sources in pairs(composite_recipes) do 287 | seablock.reskins.composite_existing_icons(name, "recipe", sources) 288 | end 289 | -------------------------------------------------------------------------------- /SeaBlock/prototypes/rockchest.lua: -------------------------------------------------------------------------------- 1 | data:extend({ 2 | { 3 | type = "container", 4 | name = "rock-chest", 5 | localised_name = { "entity-name.home" }, 6 | icon = "__base__/graphics/icons/stone.png", 7 | icon_size = 32, 8 | flags = { "placeable-neutral", "player-creation" }, 9 | order = "b[decorative]-l[rock]-a[medium]", 10 | minable = { 11 | mining_particle = "stone-particle", 12 | mining_time = 2, 13 | result = "stone", 14 | count = 20, 15 | }, 16 | max_health = 100, 17 | corpse = "small-remnants", 18 | collision_box = { { 0.0, 0.0 }, { 0.35, 0.35 } }, 19 | selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, 20 | inventory_size = 60, 21 | open_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, 22 | close_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, 23 | vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, 24 | picture = { 25 | filename = "__base__/graphics/decorative/rock-big/rock-big-18.png", 26 | width = 71, 27 | height = 64, 28 | shift = { 0.3125, 0.046875 }, 29 | hr_version = { 30 | filename = "__base__/graphics/decorative/rock-big/hr-rock-big-18.png", 31 | width = 141, 32 | height = 128, 33 | scale = 0.5, 34 | shift = { 0.304688, 0.0390625 }, 35 | }, 36 | }, 37 | 38 | circuit_wire_connection_point = circuit_connector_definitions["chest"].points, 39 | circuit_connector_sprites = circuit_connector_definitions["chest"].sprites, 40 | circuit_wire_max_distance = default_circuit_wire_max_distance, 41 | }, 42 | }) 43 | -------------------------------------------------------------------------------- /SeaBlock/prototypes/technology.lua: -------------------------------------------------------------------------------- 1 | data:extend({ 2 | { 3 | type = "tool", 4 | name = "sb-angelsore3-tool", 5 | localised_name = { "item-name.angels-ore3-crushed" }, 6 | icon = "__angelsrefining__/graphics/icons/angels-ore3-crushed.png", 7 | icon_size = 32, 8 | flags = { "hidden" }, 9 | stack_size = 100, 10 | durability = 1, 11 | }, 12 | { 13 | type = "tool", 14 | name = "sb-basic-circuit-board-tool", 15 | localised_name = { "item-name.basic-circuit-board" }, 16 | icon = "__bobelectronics__/graphics/icons/basic-circuit-board.png", 17 | icon_size = 128, 18 | flags = { "hidden" }, 19 | stack_size = 100, 20 | durability = 1, 21 | }, 22 | { 23 | type = "tool", 24 | name = "sb-lab-tool", 25 | localised_name = { "item-name.lab" }, 26 | icon = "__base__/graphics/icons/lab.png", 27 | icon_size = 64, 28 | icon_mipmaps = 4, 29 | flags = { "hidden" }, 30 | stack_size = 100, 31 | durability = 1, 32 | }, 33 | { 34 | type = "technology", 35 | name = "sb-startup1", 36 | icon = "__SeaBlock__/graphics/technology/ore.png", 37 | icon_size = 128, 38 | effects = { 39 | { type = "unlock-recipe", recipe = "angelsore1-crushed-smelting" }, 40 | { type = "unlock-recipe", recipe = "angelsore3-crushed-smelting" }, 41 | { type = "unlock-recipe", recipe = "copper-cable" }, 42 | }, 43 | unit = { 44 | count = 1, 45 | ingredients = { { "sb-angelsore3-tool", 1 } }, 46 | time = 1, 47 | }, 48 | }, 49 | { 50 | type = "technology", 51 | name = "sb-startup3", 52 | icon = "__SeaBlock__/graphics/technology/basic-circuit-board.png", 53 | icon_size = 128, 54 | effects = { 55 | { type = "unlock-recipe", recipe = "inserter" }, 56 | { type = "unlock-recipe", recipe = "pipe" }, 57 | { type = "unlock-recipe", recipe = "pipe-to-ground" }, 58 | { type = "unlock-recipe", recipe = "copper-pipe" }, 59 | { type = "unlock-recipe", recipe = "copper-pipe-to-ground" }, 60 | { type = "unlock-recipe", recipe = "iron-stick" }, 61 | { type = "unlock-recipe", recipe = "iron-gear-wheel" }, 62 | { type = "unlock-recipe", recipe = "burner-inserter" }, 63 | { type = "unlock-recipe", recipe = "iron-chest" }, 64 | }, 65 | prerequisites = { "bio-wood-processing" }, 66 | unit = { 67 | count = 1, 68 | ingredients = { { "sb-basic-circuit-board-tool", 1 } }, 69 | time = 1, 70 | }, 71 | }, 72 | { 73 | type = "technology", 74 | name = "sb-startup4", 75 | icon = "__SeaBlock__/graphics/technology/lab.png", 76 | icon_size = 128, 77 | effects = { 78 | { type = "unlock-recipe", recipe = "automation-science-pack" }, 79 | }, 80 | prerequisites = { "sb-startup3" }, 81 | unit = { 82 | count = 1, 83 | ingredients = { { "sb-lab-tool", 1 } }, 84 | time = 1, 85 | }, 86 | }, 87 | { 88 | type = "technology", 89 | name = "sb-bio-processing-advanced", 90 | localised_name = { "technology-name.bio-processing-green" }, 91 | localised_description = { "technology-description.bio-processing-green" }, 92 | icon = "__angelsbioprocessing__/graphics/technology/algae-farm-tech.png", 93 | icon_size = 128, 94 | order = "c-a", 95 | prerequisites = { 96 | "bio-processing-red", 97 | "advanced-electronics", 98 | "angels-stone-smelting-2", 99 | "zinc-processing", 100 | "chemical-science-pack", 101 | }, 102 | effects = { 103 | { 104 | type = "unlock-recipe", 105 | recipe = "algae-farm-4", 106 | }, 107 | }, 108 | unit = { 109 | count = 50, 110 | ingredients = { 111 | { type = "item", name = "automation-science-pack", amount = 1 }, 112 | { type = "item", name = "logistic-science-pack", amount = 1 }, 113 | { type = "item", name = "token-bio", amount = 1 }, 114 | { type = "item", name = "chemical-science-pack", amount = 1 }, 115 | }, 116 | time = 30, 117 | }, 118 | }, 119 | { 120 | type = "technology", 121 | name = "steam-power", 122 | icon = "__base__/graphics/icons/fluid/steam.png", 123 | icon_size = 64, 124 | icon_mipmaps = 4, 125 | prerequisites = {}, 126 | effects = { 127 | { 128 | type = "unlock-recipe", 129 | recipe = "boiler", 130 | }, 131 | { 132 | type = "unlock-recipe", 133 | recipe = "steam-engine", 134 | }, 135 | }, 136 | unit = { 137 | count = 10, 138 | ingredients = { 139 | { "automation-science-pack", 1 }, 140 | }, 141 | time = 10, 142 | }, 143 | order = "a-a", 144 | }, 145 | }) 146 | 147 | bobmods.lib.recipe.enabled("boiler", false) 148 | bobmods.lib.recipe.enabled("steam-engine", false) 149 | bobmods.lib.recipe.enabled("copper-pipe-to-ground", false) 150 | bobmods.lib.recipe.enabled("basic-circuit-board", false) 151 | bobmods.lib.recipe.enabled("automation-science-pack", false) 152 | if data.raw.recipe["basic-transport-belt"] then 153 | bobmods.lib.tech.add_recipe_unlock("sb-startup3", "basic-transport-belt") 154 | else 155 | bobmods.lib.tech.add_recipe_unlock("sb-startup3", "transport-belt") 156 | end 157 | 158 | if mods["bobwarfare"] then 159 | data:extend({ 160 | { 161 | type = "technology", 162 | name = "sb-sniper-rifle", 163 | localised_name = { "item-name.sniper-rifle" }, 164 | icon_size = 256, 165 | icon_mipmaps = 4, 166 | icon = "__base__/graphics/technology/military.png", 167 | effects = { 168 | { 169 | type = "unlock-recipe", 170 | recipe = "sniper-rifle", 171 | }, 172 | }, 173 | prerequisites = { "military-science-pack" }, 174 | unit = { 175 | count = 200, 176 | ingredients = { 177 | { "automation-science-pack", 1 }, 178 | { "logistic-science-pack", 1 }, 179 | { "military-science-pack", 1 }, 180 | }, 181 | time = 15, 182 | }, 183 | }, 184 | }) 185 | end 186 | -------------------------------------------------------------------------------- /SeaBlock/remote.lua: -------------------------------------------------------------------------------- 1 | require("__core__/lualib/util") 2 | 3 | local function get_unlocks() 4 | return util.table.deepcopy(global.unlocks) 5 | end 6 | 7 | local function set_unlock(item, techs) 8 | global.unlocks[item] = techs 9 | end 10 | 11 | local function get_starting_items() 12 | return util.table.deepcopy(global.starting_items) 13 | end 14 | 15 | local function set_starting_item(item, quantity) 16 | global.starting_items[item] = quantity 17 | end 18 | 19 | local function set_starting_items(items) 20 | global.starting_items = items 21 | end 22 | 23 | -- Presets for Milestones mod 24 | local function milestones_presets() 25 | local grouped_milestones = {} 26 | 27 | -- Science 28 | local bio_science_pack = script.active_mods["ScienceCostTweakerM"] and "sct-bio-science-pack" or "token-bio" 29 | grouped_milestones["science"] = { 30 | { type = "group", name = "Science" }, 31 | { type = "item", name = "automation-science-pack", quantity = 1 }, 32 | { type = "item", name = bio_science_pack, quantity = 1 }, 33 | { type = "item", name = "logistic-science-pack", quantity = 1 }, 34 | { type = "item", name = "military-science-pack", quantity = 1 }, 35 | { type = "item", name = "chemical-science-pack", quantity = 1 }, 36 | script.active_mods["bobtech"] and { type = "item", name = "advanced-logistic-science-pack", quantity = 1 } or nil, 37 | { type = "item", name = "production-science-pack", quantity = 1 }, 38 | { type = "item", name = "utility-science-pack", quantity = 1 }, 39 | { type = "item", name = "space-science-pack", quantity = 1 }, 40 | { type = "item", name = "automation-science-pack", quantity = 1000, next = "x10" }, 41 | { type = "item", name = bio_science_pack, quantity = 1000, next = "x10" }, 42 | { type = "item", name = "logistic-science-pack", quantity = 1000, next = "x10" }, 43 | { type = "item", name = "military-science-pack", quantity = 1000, next = "x10" }, 44 | { type = "item", name = "chemical-science-pack", quantity = 1000, next = "x10" }, 45 | script.active_mods["bobtech"] 46 | and { type = "item", name = "advanced-logistic-science-pack", quantity = 1000, next = "x10" } 47 | or nil, 48 | { type = "item", name = "production-science-pack", quantity = 1000, next = "x10" }, 49 | { type = "item", name = "utility-science-pack", quantity = 1000, next = "x10" }, 50 | { type = "item", name = "space-science-pack", quantity = 10000, next = "x10" }, 51 | } 52 | 53 | -- Resources 54 | grouped_milestones["resorces"] = { 55 | { type = "group", name = "Resources" }, 56 | { type = "item", name = "wood-charcoal", quantity = 1 }, 57 | { type = "item", name = "basic-circuit-board", quantity = 1 }, 58 | { type = "item", name = "electronic-circuit", quantity = 1 }, 59 | { type = "item", name = "advanced-circuit", quantity = 1 }, 60 | { type = "item", name = "processing-unit", quantity = 1 }, 61 | { type = "item", name = "advanced-processing-unit", quantity = 1 }, 62 | 63 | { type = "item", name = "basic-circuit-board", quantity = 10000, next = "x10" }, 64 | { type = "item", name = "electronic-circuit", quantity = 10000, next = "x10" }, 65 | { type = "item", name = "advanced-circuit", quantity = 10000, next = "x10" }, 66 | { type = "item", name = "processing-unit", quantity = 1000, next = "x10" }, 67 | { type = "item", name = "advanced-processing-unit", quantity = 100, next = "x10" }, 68 | 69 | { type = "item", name = "steel-plate", quantity = 1 }, 70 | { type = "item", name = "bronze-alloy", quantity = 1 }, 71 | { type = "item", name = "invar-alloy", quantity = 1 }, 72 | { type = "item", name = "brass-alloy", quantity = 1 }, 73 | { type = "item", name = "glass", quantity = 1 }, 74 | { type = "item", name = "silver-plate", quantity = 1 }, 75 | 76 | { type = "item", name = "aluminium-plate", quantity = 1 }, 77 | { type = "item", name = "titanium-plate", quantity = 1 }, 78 | { type = "item", name = "gold-plate", quantity = 1 }, 79 | { type = "item", name = "cobalt-steel-alloy", quantity = 1 }, 80 | { type = "item", name = "angels-plate-chrome", quantity = 1 }, 81 | { type = "item", name = "angels-plate-platinum", quantity = 1 }, 82 | 83 | { type = "item", name = "tungsten-plate", quantity = 1 }, 84 | { type = "item", name = "copper-tungsten-alloy", quantity = 1 }, 85 | { type = "item", name = "tungsten-carbide", quantity = 1 }, 86 | { type = "item", name = "nitinol-alloy", quantity = 1 }, 87 | 88 | { type = "item", name = "plastic-bar", quantity = 1 }, 89 | { type = "fluid", name = "liquid-resin", quantity = 100 }, 90 | { type = "item", name = "rubber", quantity = 1 }, 91 | { type = "item", name = "alien-bacteria", quantity = 1 }, 92 | { type = "item", name = "sulfur", quantity = 1 }, 93 | { type = "fluid", name = "mineral-sludge", quantity = 1 }, 94 | { type = "fluid", name = "mineral-sludge", quantity = 10000, next = "x10" }, 95 | } 96 | 97 | -- Progress 98 | local seablock_default_landfill = script.active_mods["LandfillPainting"] 99 | and settings.startup["sb-default-landfill"] 100 | and settings.startup["sb-default-landfill"].value 101 | or "landfill" 102 | grouped_milestones["progress1"] = { 103 | { type = "group", name = "Progress" }, 104 | { type = "item", name = "lab", quantity = 1 }, 105 | { type = "item", name = seablock_default_landfill, quantity = 1 }, 106 | { type = "item", name = seablock_default_landfill, quantity = 1000, next = "x10" }, 107 | { type = "alias", name = "landfill-dirt-4", equals = seablock_default_landfill, quantity = 1 }, 108 | { type = "alias", name = "landfill-dry-dirt", equals = seablock_default_landfill, quantity = 1 }, 109 | { type = "alias", name = "landfill-grass-1", equals = seablock_default_landfill, quantity = 1 }, 110 | { type = "alias", name = "landfill-red-desert-1", equals = seablock_default_landfill, quantity = 1 }, 111 | { type = "alias", name = "landfill-sand-3", equals = seablock_default_landfill, quantity = 1 }, 112 | { type = "alias", name = "landfill", equals = seablock_default_landfill, quantity = 1 }, 113 | { type = "fluid", name = "liquid-fuel-oil", quantity = 1 }, 114 | { type = "item", name = "locomotive", quantity = 1 }, 115 | { type = "item", name = "construction-robot", quantity = 1 }, 116 | { type = "item", name = "logistic-chest-requester", quantity = 1 }, 117 | } 118 | 119 | if not script.active_mods["bobmodules"] then 120 | -- Vanilla modules 121 | grouped_milestones["modules"] = { 122 | { type = "item", name = "productivity-module", quantity = 1 }, 123 | { type = "item", name = "productivity-module-4", quantity = 1 }, 124 | { type = "item", name = "productivity-module-6", quantity = 1 }, 125 | } 126 | elseif script.active_mods["CircuitProcessing"] then 127 | -- Circuit Processing modules 128 | grouped_milestones["modules"] = { 129 | { type = "item", name = "productivity-module-2", quantity = 1 }, 130 | { type = "item", name = "productivity-module-4", quantity = 1 }, 131 | { type = "item", name = "productivity-module-6", quantity = 1 }, 132 | { type = "item", name = "productivity-module-8", quantity = 1 }, 133 | } 134 | else 135 | -- Bob's Modules 136 | grouped_milestones["modules"] = { 137 | { type = "item", name = "productivity-module", quantity = 1 }, 138 | { type = "item", name = "productivity-module-8", quantity = 1 }, 139 | } 140 | end 141 | 142 | grouped_milestones["progress2"] = { 143 | { type = "item", name = "beacon", quantity = 1 }, 144 | script.active_mods["bobmodules"] and { type = "item", name = "beacon-2", quantity = 1 } or nil, 145 | script.active_mods["bobmodules"] and { type = "item", name = "beacon-3", quantity = 1 } or nil, 146 | { type = "item", name = "rocket-fuel", quantity = 1 }, 147 | { type = "technology", name = "rocket-silo", quantity = 1 }, 148 | { type = "item", name = "nuclear-reactor", quantity = 1 }, 149 | } 150 | 151 | -- SpaceX 152 | if script.active_mods["SpaceMod"] then 153 | grouped_milestones["SpaceX"] = { 154 | { type = "group", name = "SpaceX" }, 155 | { type = "item", name = "drydock-structural", quantity = 10 }, 156 | { type = "item", name = "drydock-assembly", quantity = 2 }, 157 | { type = "item", name = "protection-field", quantity = 1 }, 158 | { type = "item", name = "fusion-reactor", quantity = 1 }, 159 | { type = "item", name = "habitation", quantity = 1 }, 160 | { type = "item", name = "life-support", quantity = 1 }, 161 | { type = "item", name = "command", quantity = 1 }, 162 | { type = "item", name = "fuel-cell", quantity = 2 }, 163 | { type = "item", name = "space-thruster", quantity = 4 }, 164 | { type = "item", name = "hull-component", quantity = 10 }, 165 | { type = "technology", name = "ftl-theory-A", quantity = 1 }, 166 | { type = "technology", name = "ftl-theory-B", quantity = 1 }, 167 | { type = "technology", name = "ftl-theory-C", quantity = 1 }, 168 | { type = "technology", name = "ftl-theory-D1", quantity = 1 }, 169 | script.active_mods["bobtech"] and { type = "technology", name = "ftl-theory-D", quantity = 1 } or nil, 170 | { type = "technology", name = "ftl-theory-D2", quantity = 1 }, 171 | { type = "technology", name = "ftl-propulsion", quantity = 1 }, 172 | { type = "item", name = "ftl-drive", quantity = 1 }, 173 | } 174 | end 175 | 176 | -- Kills 177 | if script.active_mods["bobenemies"] then 178 | grouped_milestones["kills"] = { 179 | { type = "group", name = "Kills" }, 180 | { type = "kill", name = "small-worm-turret", quantity = 1 }, 181 | { type = "kill", name = "medium-worm-turret", quantity = 1 }, 182 | { type = "kill", name = "big-worm-turret", quantity = 1 }, 183 | { type = "alias", name = "bob-big-explosive-worm-turret", equals = "big-worm-turret", quantity = 1 }, 184 | { type = "alias", name = "bob-big-piercing-worm-turret", equals = "big-worm-turret", quantity = 1 }, 185 | { type = "alias", name = "bob-big-fire-worm-turret", equals = "big-worm-turret", quantity = 1 }, 186 | { type = "alias", name = "bob-big-poison-worm-turret", equals = "big-worm-turret", quantity = 1 }, 187 | { type = "alias", name = "bob-big-electric-worm-turret", equals = "big-worm-turret", quantity = 1 }, 188 | { type = "kill", name = "bob-giant-worm-turret", quantity = 1 }, 189 | { type = "kill", name = "behemoth-worm-turret", quantity = 1 }, 190 | { type = "kill", name = "behemoth-worm-turret", quantity = 1000, next = "x10" }, 191 | { type = "kill", name = "character", quantity = 1, next = "x5" }, 192 | } 193 | else 194 | grouped_milestones["kills"] = { 195 | { type = "group", name = "Kills" }, 196 | { type = "kill", name = "small-worm-turret", quantity = 1 }, 197 | { type = "kill", name = "medium-worm-turret", quantity = 1 }, 198 | { type = "kill", name = "big-worm-turret", quantity = 1 }, 199 | { type = "kill", name = "behemoth-worm-turret", quantity = 1 }, 200 | { type = "kill", name = "behemoth-worm-turret", quantity = 1000, next = "x10" }, 201 | { type = "kill", name = "character", quantity = 1, next = "x5" }, 202 | } 203 | end 204 | 205 | local milestones = {} 206 | for group_name, group_milestones in pairs(grouped_milestones) do 207 | for _, milestone in pairs(group_milestones) do 208 | table.insert(milestones, milestone) 209 | end 210 | end 211 | 212 | return { 213 | ["Sea Block"] = { 214 | required_mods = { "SeaBlock", "bobplates", "bobelectronics", "angelsbioprocessing", "angelspetrochem" }, 215 | milestones = milestones, 216 | }, 217 | } 218 | end 219 | 220 | local function get_jetpack_fuels() 221 | return { ["enriched-fuel"] = 0.7 } 222 | end 223 | 224 | remote.add_interface("SeaBlock", { 225 | get_unlocks = get_unlocks, 226 | set_unlock = set_unlock, 227 | get_starting_items = get_starting_items, 228 | set_starting_item = set_starting_item, 229 | set_starting_items = set_starting_items, 230 | milestones_presets = milestones_presets, 231 | jetpack_fuels = get_jetpack_fuels, 232 | }) 233 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates.lua: -------------------------------------------------------------------------------- 1 | function seablock.set_setting_default_value(setting_type, setting_name, value) 2 | if data.raw[setting_type] then 3 | local s = data.raw[setting_type][setting_name] 4 | if s then 5 | s.default_value = value 6 | end 7 | end 8 | end 9 | 10 | function seablock.overwrite_setting(setting_type, setting_name, value) 11 | -- setting_type: [bool-setting | int-setting | double-setting | string-setting] 12 | if data.raw[setting_type] then 13 | local s = data.raw[setting_type][setting_name] 14 | if s then 15 | if setting_type == "bool-setting" then 16 | s.forced_value = value 17 | else 18 | s.default_value = value 19 | s.allowed_values = { value } 20 | end 21 | s.hidden = true 22 | else 23 | log("Error: missing setting " .. setting_name) 24 | end 25 | else 26 | log("Error: missing setting type " .. setting_type) 27 | end 28 | end 29 | 30 | require("settings-updates/angelsbioprocessing") 31 | require("settings-updates/angelsindustries") 32 | require("settings-updates/angelspetrochem") 33 | require("settings-updates/angelsrefining") 34 | require("settings-updates/bobassembly") 35 | require("settings-updates/bobenemies") 36 | require("settings-updates/boblibrary") 37 | require("settings-updates/boblogistics") 38 | require("settings-updates/bobmining") 39 | require("settings-updates/bobores") 40 | require("settings-updates/bobplates") 41 | require("settings-updates/bobpower") 42 | require("settings-updates/bobrevamp") 43 | require("settings-updates/bobtech") 44 | require("settings-updates/bobwarfare") 45 | require("settings-updates/reskins-angels") 46 | require("settings-updates/ScienceCostTweakerM") 47 | require("settings-updates/SpaceMod") 48 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/ScienceCostTweakerM.lua: -------------------------------------------------------------------------------- 1 | -- ScienceCostTweaker Mod (mexmer) 2 | if mods["ScienceCostTweakerM"] then 3 | seablock.overwrite_setting("string-setting", "sct-lab-modules", "none") 4 | seablock.overwrite_setting("bool-setting", "sct-connect-science", false) 5 | end 6 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/SpaceMod.lua: -------------------------------------------------------------------------------- 1 | -- Space Extension Mod 2 | if mods["SpaceMod"] then 3 | seablock.overwrite_setting("bool-setting", "SpaceX-no-bob", false) 4 | seablock.set_setting_default_value("bool-setting", "SpaceX-ignore-tech-multiplier", true) 5 | end 6 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/angelsbioprocessing.lua: -------------------------------------------------------------------------------- 1 | -- Angel's Bioprocessing 2 | if mods["angelsbioprocessing"] then 3 | seablock.overwrite_setting("double-setting", "angels-bio-tile-pollution-absorbtion-multiplier", 0) 4 | end 5 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/angelsindustries.lua: -------------------------------------------------------------------------------- 1 | -- Angel's Industries 2 | if mods["angelsindustries"] then 3 | seablock.overwrite_setting("bool-setting", "angels-enable-industries", true) 4 | seablock.overwrite_setting("bool-setting", "angels-enable-components", false) 5 | seablock.overwrite_setting("bool-setting", "angels-enable-tech", false) 6 | seablock.overwrite_setting("bool-setting", "angels-return-ingredients", true) 7 | seablock.overwrite_setting("int-setting", "angels-components-stack-size", 1000) 8 | end 9 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/angelspetrochem.lua: -------------------------------------------------------------------------------- 1 | -- Angel's Petrochemical Processing 2 | seablock.overwrite_setting("bool-setting", "angels-disable-bobs-electrolysers", true) 3 | seablock.overwrite_setting("bool-setting", "angels-disable-bobs-chemical-plants", true) 4 | seablock.overwrite_setting("bool-setting", "angels-enable-acids", true) 5 | seablock.overwrite_setting("bool-setting", "angels-enable-converter", false) 6 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/angelsrefining.lua: -------------------------------------------------------------------------------- 1 | -- Angel's Refining 2 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore1", false) 3 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore2", false) 4 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore3", false) 5 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore4", false) 6 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore5", false) 7 | seablock.overwrite_setting("bool-setting", "angels-starting-resource-ore6", false) 8 | seablock.overwrite_setting("double-setting", "angels-starting-resource-base", 40000) 9 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobassembly.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Assembling Machines 2 | if mods["bobassembly"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-assembly-chemicalplants", false) 4 | seablock.overwrite_setting("bool-setting", "bobmods-assembly-electrolysers", false) 5 | seablock.overwrite_setting("bool-setting", "bobmods-assembly-distilleries", false) 6 | seablock.overwrite_setting("bool-setting", "bobmods-assembly-burner", false) 7 | 8 | seablock.set_setting_default_value("bool-setting", "bobmods-assembly-oilfurnaces", false) 9 | end 10 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobenemies.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Enemies 2 | if mods["bobenemies"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-enableartifacts", true) 4 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-enablesmallartifacts", true) 5 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-enablenewartifacts", true) 6 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-aliensdropartifacts", false) 7 | seablock.overwrite_setting("double-setting", "bobmods-enemies-leviathanfrequency", 0) 8 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-biggersooner", false) 9 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-superspawner", false) 10 | seablock.overwrite_setting("bool-setting", "bobmods-enemies-healthincrease", false) 11 | end 12 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/boblibrary.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Functions Library mod 2 | seablock.overwrite_setting("bool-setting", "bobmods-library-technology-cleanup", false) 3 | seablock.overwrite_setting("bool-setting", "bobmods-library-recipe-cleanup", true) 4 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/boblogistics.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Logistics 2 | if mods["boblogistics"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-logistics-beltoverhaul", true) 4 | seablock.overwrite_setting("bool-setting", "bobmods-logistics-beltoverhaulspeed", false) 5 | seablock.overwrite_setting("double-setting", "bobmods-logistics-beltspeedperlevel", 15) 6 | seablock.overwrite_setting("bool-setting", "bobmods-logistics-ugdistanceoverhaul", true) 7 | seablock.overwrite_setting("int-setting", "bobmods-logistics-beltstarting", 3) 8 | seablock.overwrite_setting("int-setting", "bobmods-logistics-beltperlevel", 2) 9 | seablock.overwrite_setting("int-setting", "bobmods-logistics-pipestarting", 11) 10 | seablock.overwrite_setting("int-setting", "bobmods-logistics-pipeperlevel", 4) 11 | end 12 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobmining.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Mining 2 | if mods["bobmining"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-mining-miningdrills", false) 4 | seablock.overwrite_setting("bool-setting", "bobmods-mining-areadrills", false) 5 | seablock.overwrite_setting("bool-setting", "bobmods-mining-pumpjacks", false) 6 | seablock.overwrite_setting("bool-setting", "bobmods-mining-waterminers", false) 7 | seablock.overwrite_setting("bool-setting", "bobmods-mining-steamminingdrills", false) 8 | end 9 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobores.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Ores mod 2 | if mods["bobores"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-ores-infiniteore", false) 4 | seablock.overwrite_setting("bool-setting", "bobmods-ores-enablewaterores", false) 5 | end 6 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobplates.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Metals, Chemicals and Intermediates 2 | seablock.overwrite_setting("bool-setting", "bobmods-plates-cheapersteel", false) 3 | seablock.overwrite_setting("bool-setting", "bobmods-plates-nuclearupdate", true) 4 | seablock.overwrite_setting("bool-setting", "bobmods-plates-expensive-electrolysis", false) 5 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobpower.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Power mod 2 | if mods["bobpower"] then 3 | seablock.set_setting_default_value("bool-setting", "bobmods-power-accumulators", false) 4 | seablock.overwrite_setting("bool-setting", "bobmods-power-fluidgenerator", false) 5 | seablock.overwrite_setting("bool-setting", "bobmods-power-burnergenerator", false) 6 | end 7 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobrevamp.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Revamp mod 2 | if mods["bobrevamp"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-revamp-old-oil", true) 4 | seablock.overwrite_setting("bool-setting", "bobmods-revamp-oil", true) 5 | seablock.overwrite_setting("bool-setting", "bobmods-revamp-hardmode", true) 6 | end 7 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobtech.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Tech 2 | if mods["bobtech"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-burnerphase", false) 4 | 5 | if mods["ScienceCostTweakerM"] then 6 | seablock.overwrite_setting("bool-setting", "bobmods-tech-colorupdate", false) 7 | else 8 | seablock.set_setting_default_value("bool-setting", "bobmods-tech-colorupdate", false) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/bobwarfare.lua: -------------------------------------------------------------------------------- 1 | -- Bob's Warfare 2 | if mods["bobwarfare"] then 3 | seablock.overwrite_setting("bool-setting", "bobmods-warfare-robotupdate", false) 4 | seablock.overwrite_setting("bool-setting", "bobmods-warfare-drainlesslaserturrets", false) 5 | seablock.overwrite_setting("bool-setting", "bobmods-warfare-vehicleflamethrowerstartsfires", false) 6 | end 7 | -------------------------------------------------------------------------------- /SeaBlock/settings-updates/reskins-angels.lua: -------------------------------------------------------------------------------- 1 | -- Artisanal Reskins: Angel's Mods 2 | seablock.set_setting_default_value("bool-setting", "reskins-angels-use-item-variations", false) 3 | -------------------------------------------------------------------------------- /SeaBlock/settings.lua: -------------------------------------------------------------------------------- 1 | seablock = seablock or {} 2 | 3 | if mods["LandfillPainting"] then 4 | local tiletypes = { 5 | "landfill-dirt-4", 6 | "landfill-dry-dirt", 7 | "landfill-grass-1", 8 | "landfill", 9 | "landfill-red-desert-1", 10 | "landfill-sand-3", 11 | } 12 | 13 | data:extend({ 14 | { 15 | type = "string-setting", 16 | name = "sb-default-landfill", 17 | setting_type = "startup", 18 | default_value = tiletypes[6], 19 | allowed_values = tiletypes, 20 | }, 21 | }) 22 | end 23 | -------------------------------------------------------------------------------- /SeaBlock/starting-items.lua: -------------------------------------------------------------------------------- 1 | seablock = seablock or {} 2 | 3 | function seablock.populate_starting_items(items) 4 | local starting_items = { 5 | ["stone"] = 65, 6 | ["small-electric-pole"] = 50, 7 | ["small-lamp"] = 12, 8 | ["iron-plate"] = 1200, 9 | ["basic-circuit-board"] = 200, 10 | ["stone-pipe"] = 100, 11 | ["stone-pipe-to-ground"] = 50, 12 | ["stone-brick"] = 500, 13 | ["pipe"] = 21, 14 | ["copper-pipe"] = 5, 15 | ["iron-gear-wheel"] = 10, 16 | ["iron-stick"] = 88, 17 | ["pipe-to-ground"] = 2, 18 | } 19 | 20 | -- Starting power production 21 | if items["wind-turbine-2"] then 22 | starting_items["wind-turbine-2"] = 120 23 | else 24 | starting_items["solar-panel"] = 38 25 | starting_items["accumulator"] = 32 26 | end 27 | 28 | -- Starting landfill 29 | local landfill 30 | local setting = settings.startup["sb-default-landfill"] 31 | if setting and items[setting.value] then 32 | landfill = setting.value 33 | else 34 | landfill = "landfill" 35 | end 36 | starting_items[landfill] = 2000 37 | return starting_items 38 | end 39 | -------------------------------------------------------------------------------- /SeaBlock/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modded-factorio/SeaBlock/923cd1d105e1646eabc3697adf173abd9cc2e527/SeaBlock/thumbnail.png -------------------------------------------------------------------------------- /SeaBlockMetaPack/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SeaBlockMetaPack", 3 | "version": "1.1.4", 4 | "factorio_version": "1.1", 5 | "title": "Sea Block Pack - Official", 6 | "author": "Trainwreck", 7 | "contact": "https://forums.factorio.com/viewtopic.php?t=43759", 8 | "homepage": "https://github.com/KiwiHawk/SeaBlock", 9 | "description": "Enable this mod to get the full recommended Sea Block Mod Pack. Contains dependencies on all mods in the pack. Does nothing by itself.", 10 | "dependencies": [ 11 | "base", 12 | "angelsaddons-storage", 13 | "angelsbioprocessing", 14 | "angelspetrochem", 15 | "angelsrefining", 16 | "angelssmelting", 17 | "reskins-angels", 18 | "reskins-bobs", 19 | "reskins-compatibility", 20 | "reskins-library", 21 | "bobassembly", 22 | "bobelectronics", 23 | "bobenemies", 24 | "bobequipment", 25 | "bobinserters", 26 | "boblibrary", 27 | "boblogistics", 28 | "bobmining", 29 | "bobmodules", 30 | "bobores", 31 | "bobplates", 32 | "bobpower", 33 | "bobrevamp", 34 | "bobtech", 35 | "bobwarfare", 36 | "CircuitProcessing", 37 | "Explosive Excavation", 38 | "flib", 39 | "FNEI", 40 | "helmod", 41 | "KS_Power", 42 | "LandfillPainting", 43 | "Milestones", 44 | "ScienceCostTweakerM", 45 | "SeaBlock", 46 | "SpaceMod" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /SeaBlockMetaPack/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modded-factorio/SeaBlock/923cd1d105e1646eabc3697adf173abd9cc2e527/SeaBlockMetaPack/thumbnail.png -------------------------------------------------------------------------------- /assets.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | FACTORIO=~/factorio18 3 | mkdir -p graphics/technology 4 | convert $FACTORIO/data/base/graphics/item-group/signals.png \ 5 | -adaptive-resize 128x128 -unsharp 0x0.75+0.75+0.008 -modulate 100,100,35 \ 6 | graphics/technology/basic-circuit-board.png 7 | convert $FACTORIO/data/base/graphics/entity/iron-ore/hr-iron-ore.png \ 8 | -crop 128x128+0+0 graphics/technology/ore.png 9 | convert $FACTORIO/data/base/graphics/entity/lab/hr-lab.png \ 10 | -crop 194x174+194+0 -resize 128x128 -gravity center -background transparent -extent 128x128 \ 11 | graphics/technology/lab.png 12 | -------------------------------------------------------------------------------- /factorio-mods-localization.json: -------------------------------------------------------------------------------- 1 | { 2 | "mods": ["SeaBlock"], 3 | "branch": "dev" 4 | } 5 | -------------------------------------------------------------------------------- /stylua.toml: -------------------------------------------------------------------------------- 1 | indent_type = "Spaces" 2 | indent_width = 2 --------------------------------------------------------------------------------