From 27de4d5ee9c6b503a84d29bc3175258c82165add Mon Sep 17 00:00:00 2001 From: Izzy Date: Mon, 18 Jun 2018 20:42:02 -0600 Subject: [PATCH] fluids, pipes, drilling --- crude.lua | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++ gasoline.lua | 74 ++++++++++++++++++- pipes.lua | 38 +++++++++- refinery.lua | 104 +++----------------------- 4 files changed, 315 insertions(+), 102 deletions(-) create mode 100644 crude.lua diff --git a/crude.lua b/crude.lua new file mode 100644 index 0000000..cb12e20 --- /dev/null +++ b/crude.lua @@ -0,0 +1,201 @@ + + + +local function check_drill_stack(opos) + local pos = vector.new(opos) + pos.y = pos.y - 1 + + while 1 == 1 do + if minetest.get_node(pos).name == "bitumen:drill_pipe" then + -- noop + else + -- end of the stack + break + end + pos.y = pos.y - 1 + end + + + print("well depth: "..pos.y) + + return {x=pos.x, y=pos.y, z=pos.z} + +end + + + + + + +minetest.register_node("bitumen:drill_pipe", { + paramtype = "light", + description = "Drill Pipe", + tiles = {"default_copper_block.png", "default_copper_block.png", "default_copper_block.png", + "default_copper_block.png", "default_copper_block.png", "default_copper_block.png"}, + node_box = { + type = "fixed", + fixed = { + --11.25 + {-0.49, -0.5, -0.10, 0.49, 0.5, 0.10}, + {-0.10, -0.5, -0.49, 0.10, 0.5, 0.49}, + --22.5 + {-0.46, -0.5, -0.19, 0.46, 0.5, 0.19}, + {-0.19, -0.5, -0.46, 0.19, 0.5, 0.46}, + -- 33.75 + {-0.416, -0.5, -0.28, 0.416, 0.5, 0.28}, + {-0.28, -0.5, -0.416, 0.28, 0.5, 0.416}, + --45 + {-0.35, -0.5, -0.35, 0.35, 0.5, 0.35}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + drawtype = "nodebox", + groups = {cracky=3,oddly_breakable_by_hand=3 }, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos) + check_drill_stack(pos) + end, +}) + + +minetest.register_node("bitumen:well_siphon", { + paramtype = "light", + description = "Well Siphon", + tiles = {"default_bronze_block.png", "default_bronze_block.png", "default_bronze_block.png", + "default_bronze_block.png", "default_bronze_block.png", "default_bronze_block.png"}, + node_box = { + type = "fixed", + fixed = { + --11.25 + {-0.49, -0.5, -0.10, 0.49, 0.5, 0.10}, + {-0.10, -0.5, -0.49, 0.10, 0.5, 0.49}, + --22.5 + {-0.46, -0.5, -0.19, 0.46, 0.5, 0.19}, + {-0.19, -0.5, -0.46, 0.19, 0.5, 0.46}, + -- 33.75 + {-0.416, -0.5, -0.28, 0.416, 0.5, 0.28}, + {-0.28, -0.5, -0.416, 0.28, 0.5, 0.416}, + --45 + {-0.35, -0.5, -0.35, 0.35, 0.5, 0.35}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + drawtype = "nodebox", + groups = {cracky=3,oddly_breakable_by_hand=3 }, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + + end, +}) + + +local function drill(pos) + + local dp = check_drill_stack(pos) + + local n = minetest.get_node(dp) + + if n.name == "ignore" then + if minetest.forceload_block(pos, true) then + print("forceload successful") + minetest.emerge_area(pos, pos) + local n = minetest.get_node(dp) + else + print("forceload failed") + return + end +-- minetest.emerge_area(pos, pos) + end + + + if n.name == "bitumen:crude_oil" then + pos.y = pos.y + 2 + minetest.set_node(pos, {name = "bitumen:crude_oil"}) + minetest.set_node_level(pos, 64) + else + print("drilling "..n.name) + minetest.set_node(dp, {name = "bitumen:drill_pipe"}) + end +end + + +minetest.register_node("bitumen:drill_rig", { + description = "Drill Rig", + tiles = {"default_tin_block.png", "default_steel_block.png", "default_steel_block.png", + "default_tin_block.png", "default_tin_block.png", "default_steel_block.png"}, + paramtype2 = "facedir", + groups = {cracky=2, petroleum_fixture=1}, + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + return true + end, + + on_timer = dcb_node_timer, + on_punch = function(pos) + drill(pos) + + end, + +}) + + +minetest.register_abm({ + nodenames = {"bitumen:drill_rig"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + print("trydrill") + drill(pos) + + end +}) + + +local function pump_oil(pos) + + local dp = check_drill_stack(pos) + + local n = minetest.get_node(dp) + + if n.name == "bitumen:crude_oil" then + minetest.set_node(dp, {name="air"}) + + pos.x = pos.x + 1 + minetest.set_node(pos, {name="bitumen:crude_oil"}) + minetest.set_node_level(pos, 64) + end +end + + + +minetest.register_node("bitumen:well_pump", { + description = "Drill Rig", + tiles = {"default_gold_block.png", "default_steel_block.png", "default_copper_block.png", + "default_tin_block.png", "default_gold_block.png", "default_steel_block.png"}, + paramtype2 = "facedir", + groups = {cracky=2, petroleum_fixture=1}, + sounds = default.node_sound_wood_defaults(), + can_dig = function(pos,player) + return true + end, + + on_timer = dcb_node_timer, + on_punch = function(pos) + pump_oil(pos) + + end, + +}) + diff --git a/gasoline.lua b/gasoline.lua index 33501d8..c121804 100644 --- a/gasoline.lua +++ b/gasoline.lua @@ -217,8 +217,8 @@ local function register_fluid(modname, name, info) minetest.register_abm({ nodenames = {full_fname}, neighbors = {"air"}, - interval = 5, - chance = 1, + interval = info.reflow_interval or 5, + chance = info.flow_chance or 1, action = function(pos) -- if it's near air it might flow minetest.set_node(pos, {name = fname}) @@ -231,8 +231,8 @@ local function register_fluid(modname, name, info) minetest.register_abm({ nodenames = {fname}, neighbors = {"group:"..gname, "air"}, - interval = 1, - chance = 1, + interval = info.flow_interval or 1, + chance = info.flow_chance or 1, action = function(pos) local mylevel = minetest.get_node_level(pos) -- print("\n mylevel ".. mylevel) @@ -426,6 +426,21 @@ register_fluid("bitumen", "tar", { desc = "Tar", groups = {flammable=1, petroleum=1}, + colorize = "^[colorize:black:210", + post_effect_color = {a = 103, r = 80, g = 76, b = 90}, + + evap_chance = 0, +}) + +register_fluid("bitumen", "crude_oil", { + desc = "Crude Oil", + groups = {flammable=1, petroleum=1}, + + reflow_interval = 10, + reflow_chance = 2, + flow_interval = 3, + flow_chance = 3, + colorize = "^[colorize:black:240", post_effect_color = {a = 103, r = 80, g = 76, b = 90}, @@ -433,3 +448,54 @@ register_fluid("bitumen", "tar", { }) + + + + + +minetest.register_node("bitumen:crudesource", { + description = "thing", + tiles = { "default_copper_block.png" }, + groups = { cracky = 3 }, +}) + + +--temp hack for dev +minetest.register_abm({ + nodenames = {"bitumen:crudesource"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + + pos.y = pos.y - 1 + minetest.set_node(pos, {name = "bitumen:crude_oil"}) + minetest.set_node_level(pos, 64) + + end +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "bitumen:crude_oil_full", + wherein = {"default:stone"}, + clust_scarcity = 64 * 64 * 64, +-- clust_scarcity = 16 * 16 * 16, + clust_size = 30, + y_min = -10000, + y_max = -500, + noise_threshold = 0.04, + noise_params = { + offset = 0.5, + scale = 0.7, + spread = {x = 40, y = 40, z = 40}, + seed = 2316, + octaves = 4, + persist = 0.7 + }, + --[[ it's all "underground" anyway + biomes = { + "taiga", "tundra", "snowy_grassland", "coniferous_forest", + "coniferous_forest_dunes", + } + ]] +}) diff --git a/pipes.lua b/pipes.lua index d5ec75e..a8ef208 100644 --- a/pipes.lua +++ b/pipes.lua @@ -206,10 +206,42 @@ bitumen.pipes.push_fluid = function(pos, fluid, amount, extra_pressure) return take end +-- used by external machines to remove fluid from the pipe network +-- returns amount and fluid type +bitumen.pipes.take_fluid = function(pos, max_amount) + local hash = minetest.hash_node_position(pos) + local phash = net_members[hash] + if phash == nil then + return 0, "air" -- no network + end + local pnet = networks[phash] + + if pnet.buffer <= 0 then + --print("spout: no water in pipe") + return 0, "air" -- no water in the pipe + end + + -- hack + pnet.in_pressure = pnet.in_pressure or -32000 + + if pnet.in_pressure <= pos.y then + print("insufficient pressure at spout: ".. pnet.in_pressure .. " < " ..pos.y ) + return 0, "air" + end + + + pos.y = pos.y - 1 + + local bnode = minetest.get_node(pos) + local take = math.min(pnet.buffer, max_amount) + pnet.buffer = pnet.buffer - take + + return take, pnet.fluid +end minetest.register_node("bitumen:intake", { - description = "Intake", + description = "Petroleum Intake", drawtype = "nodebox", node_box = { type = "connected", @@ -308,7 +340,7 @@ minetest.register_abm({ minetest.register_node("bitumen:spout", { - description = "Spout", + description = "Petroleum Spout", drawtype = "nodebox", node_box = { type = "connected", @@ -441,7 +473,7 @@ end minetest.register_node("bitumen:pipe", { - description = "water pipe", + description = "petroleum pipe", drawtype = "nodebox", node_box = { type = "connected", diff --git a/refinery.lua b/refinery.lua index 521c0a0..497b357 100644 --- a/refinery.lua +++ b/refinery.lua @@ -1,37 +1,16 @@ -- need: --- boiler --- distillation column -- bottler? ---[[ NEED: -machine defs: - synth crude upgrader - -]] - - - - - --- technic.register_extractor_recipe("technic:coal_dust", 1, "dye:black", 2) --- technic.register_extractor_recipe("default:cactus", 1, "dye:green", 2) - - - - - -local extractor_formspec = - "invsize[8,9;]".. - "label[0,0;Extractor]".. - "list[current_name;src;3,1;1,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]" - ---need pipeworks integration +-- +-- usage: alternate distillation columns and dist. col. outlets +-- put boiler on the bottom +-- pipe various distillates out +-- +-- minetest.register_node("bitumen:distillation_column", { paramtype = "light", description = "Distillation Column Segment", @@ -190,35 +169,13 @@ minetest.register_abm({ for fluid,p in pairs(stack) do print("pushing "..fluid.." at "..p.y) - bitumen.pipes.push_fluid(p, "bitumen:"..fluid, 10, 10) + local yield = bitumen.distillation_yield[fluid] * .64 -- convert to levels + bitumen.pipes.push_fluid(p, "bitumen:"..fluid, yield, 10) end end }) ---[[ -minetest.register_node("bitumen:cracking_boiler_active", { - description = "Cracking Column Boiler", - tiles = {"technic_lv_grinder_top.png", "technic_lv_grinder_bottom.png", - "technic_lv_grinder_side.png", "technic_lv_grinder_side.png", - "technic_lv_grinder_side.png", "technic_lv_grinder_front_active.png"}, - paramtype2 = "facedir", - groups = {cracky=2, not_in_creative_inventory=1}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - if not inv:is_empty("src") or not inv:is_empty("dst") then - minetest.chat_send_player(player:get_player_name(), - "Machine cannot be removed because it is not empty"); - return false - else - return true - end - end, -}) -]] -- must add up to 100 bitumen.distillation_yield = { @@ -234,19 +191,6 @@ bitumen.distillation_yield = { - - -bitumen.cracking_yield_rate = { - lpg = 5 , - jet_fuel = 1 , - gasoline = 4 , - diesel = 5, - fuel_oil = 10, - lube_oil = 9, -} - - - bitumen.energy_density = { lpg = { 33 }, jet_fuel = { 40 }, @@ -258,37 +202,7 @@ bitumen.energy_density = { } ---temp hack for dev -minetest.register_abm({ - nodenames = {"bitumen:cracking_boiler", "bitumen:cracking_boiler_active"}, - interval = 3, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local srcstack = inv:get_stack("src", 1) - - local avail = srcstack:get_count() - - local columns = check_cracking_stack(pos) - for otype,colpos in pairs(columns) do - local cmeta = minetest.get_meta(colpos) - local cinv = cmeta:get_inventory() - local dststack = cinv:get_stack("dst", 1) - - local yield = bitumen.cracking_yield_rate[otype] - - -- cinv:add_item("dst", ) - - - end - - -- srcstack:take_item(recipe.src_count) - -- inv:set_stack("src", 1, srcstack) - -- inv:add_item("dst", result) - - end, -}) + --[[ minetest.register_abm({ nodenames = {"bitumen:cracking_boiler_active"},