From ec7e5cdce50e36859e46a4d583c7a727ec176186 Mon Sep 17 00:00:00 2001 From: Thomas--S Date: Sat, 19 Sep 2020 15:09:09 +0200 Subject: [PATCH] TA4: Add Liquid Filter Red Mud -> Lye/Desert Cobble The filter is an entirely passive machine. Additional changes: * Remove `not_in_creative_inventory` from battery (forgotten in #29) * Improve pump leftover handling (needed for the filter) * markdown2formspec.py: Switch to Python 3 (Python 2 is deprecated) --- chemistry/ta4_liquid_filter.lua | 220 ++++++++++++++++++ doc/items.lua | 1 + doc/manual_DE.lua | 37 +++ doc/manual_EN.lua | 37 +++ doc/plans.lua | 61 ++++- icta_controller/battery.lua | 2 +- init.lua | 1 + liquids/pump.lua | 8 +- locale/techage.de.tr | 2 + locale/template.txt | 2 + manuals/manual_ta4_DE.md | 36 +++ manuals/manual_ta4_EN.md | 36 +++ manuals/markdown2formspec.py | 10 +- manuals/toc_DE.md | 30 +-- manuals/toc_EN.md | 4 + textures/techage_gaspipe_hole.png | Bin 0 -> 2876 bytes textures/techage_liquid_filter_filler.png | Bin 0 -> 2987 bytes .../techage_liquid_filter_filler_bottom.png | Bin 0 -> 2463 bytes textures/techage_ta4_filter.png | Bin 0 -> 33566 bytes 19 files changed, 455 insertions(+), 32 deletions(-) create mode 100644 chemistry/ta4_liquid_filter.lua create mode 100644 textures/techage_gaspipe_hole.png create mode 100644 textures/techage_liquid_filter_filler.png create mode 100644 textures/techage_liquid_filter_filler_bottom.png create mode 100644 textures/techage_ta4_filter.png diff --git a/chemistry/ta4_liquid_filter.lua b/chemistry/ta4_liquid_filter.lua new file mode 100644 index 0000000..8d4f543 --- /dev/null +++ b/chemistry/ta4_liquid_filter.lua @@ -0,0 +1,220 @@ +--[[ + + TechAge + ======= + + Copyright (C) 2019-2020 Joachim Stolberg + Copyright (C) 2020 Thomas S. + + GPL v3 + See LICENSE.txt for more information + + TA4 Liquid Filter + +]]-- + +-- For now, the Red Mud -> Lye/Desert Cobble recipe is hardcoded. +-- If necessary, this can be adjusted later. + +local M = minetest.get_meta +local S = techage.S +local Pipe = techage.LiquidPipe +local liquid = techage.liquid + +-- Checks if the filter structure is ok and returns the amount of gravel +local function checkStructure(pos) + local pos1_outer = {x=pos.x-2,y=pos.y-7,z=pos.z-2} + local pos2_outer = {x=pos.x+2,y=pos.y,z=pos.z+2} + local pos1_inner = {x=pos.x-1,y=pos.y-1,z=pos.z-1} + local pos2_inner = {x=pos.x+1,y=pos.y-7,z=pos.z+1} + local pos1_top = {x=pos.x-1,y=pos.y,z=pos.z-1} + local pos2_top = {x=pos.x+1,y=pos.y,z=pos.z+1} + local pos1_bottom = {x=pos.x-2,y=pos.y-8,z=pos.z-2} + local pos2_bottom = {x=pos.x+2,y=pos.y-8,z=pos.z+2} + + + local gravel = minetest.find_nodes_in_area(pos1_inner, pos2_inner, {"default:gravel"}) + + local _, inner = minetest.find_nodes_in_area(pos1_inner, pos2_inner, { + "default:desert_cobble" + }) + if #gravel + (inner["default:desert_cobble"] or 0) ~= 63 then -- 7x3x3=63 + return false, gravel + end + + local _, outer = minetest.find_nodes_in_area(pos1_outer, pos2_outer, { + "basic_materials:concrete_block", + "default:obsidian_glass" + }) + + -- + 4x7=28 (corners) + -- + 5x5-3x3=16 (top ring) + -- ------------------------------ + -- = 44 (total concrete) + if outer["basic_materials:concrete_block"] ~= 44 then + return false, gravel + end + if outer["default:obsidian_glass"] ~= 84 then -- 4x7x3=84 + return false, gravel + end + + local _,top = minetest.find_nodes_in_area(pos1_top, pos2_top, {"air"}) + if top["air"] ~= 8 then + return false, gravel + end + + local _,bottom = minetest.find_nodes_in_area(pos1_bottom, pos2_bottom, { + "basic_materials:concrete_block", + "techage:ta3_pipe_wall_entry" + }) + if bottom["basic_materials:concrete_block"] ~= 22 or bottom["techage:ta3_pipe_wall_entry"] ~= 2 then + return false, gravel + end + + if minetest.get_node({x=pos.x,y=pos.y-8,z=pos.z}).name ~= "techage:ta4_liquid_filter_sink" then + return false, gravel + end + + return true, gravel +end + +minetest.register_node("techage:ta4_liquid_filter_filler", { + description = S("TA4 Liquid Filter Filler"), + tiles = { + -- up, down, right, left, back, front + "basic_materials_concrete_block.png^techage_gaspipe_hole.png", + "basic_materials_concrete_block.png^techage_liquid_filter_filler_bottom.png", + "basic_materials_concrete_block.png^techage_liquid_filter_filler.png", + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-6/8, -0.5, -6/8, 6/8, -0.25, 6/8}, + {-7/16, -0.25, -7/16, 7/16, 0, 7/16}, + {-1/8, 0, -1/8, 1/8, 13/32, 1/8}, + {-2/8, 13/32, -2/8, 2/8, 0.5, 2/8}, + }, + }, + after_place_node = function(pos) + Pipe:after_place_node(pos) + end, + tubelib2_on_update2 = function(pos, dir, tlib2, node) + liquid.update_network(pos) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + Pipe:after_dig_node(pos) + end, + + paramtype = "light", + paramtype2 = "facedir", + on_rotate = screwdriver.disallow, + groups = {cracky=2}, + is_ground_content = false, + sounds = default.node_sound_metal_defaults(), + + + liquid = { + capa = 1, + peek = function(...) return nil end, + put = function(pos, indir, name, amount) + local structure_ok, gravel = checkStructure(pos) + if name ~= "techage:redmud" then + return amount + end + if not structure_ok then + return amount + end + if #gravel < 33 then + return amount + end + if math.random() < 0.5 then + local leftover = liquid.put({x=pos.x,y=pos.y-8,z=pos.z}, 2, "techage:lye", 1) + if leftover > 0 then + return amount + end + else + minetest.swap_node(gravel[math.random(#gravel)], {name = "default:desert_cobble"}) + end + return amount - 1 + end, + take = function(...) return 0 end, + untake = function(pos, outdir, name, amount, player_name) + return amount + end, + }, + + networks = { + pipe2 = { + sides = {U = 1}, -- Pipe connection sides + ntype = "tank", + }, + }, +}) + +minetest.register_node("techage:ta4_liquid_filter_sink", { + description = S("TA4 Liquid Filter Sink"), + tiles = { + -- up, down, right, left, back, front + "basic_materials_concrete_block.png^techage_appl_arrow.png", + "basic_materials_concrete_block.png", + "basic_materials_concrete_block.png^techage_appl_hole_pipe.png", + "basic_materials_concrete_block.png", + "basic_materials_concrete_block.png", + "basic_materials_concrete_block.png", + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 3/16, 0.5}, + {-0.5, 3/16, -0.5, 0.5, 5/16, -0.25}, + {0.25, 3/16, -0.5, 0.5, 5/16, 0.5}, + {-0.5, 3/16, 0.25, 0.5, 5/16, 0.5}, + {-0.5, 3/16, -0.5, -0.25, 5/16, 0.5} + }, + }, + after_place_node = function(pos) + Pipe:after_place_node(pos) + end, + tubelib2_on_update2 = function(pos, dir, tlib2, node) + liquid.update_network(pos) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + Pipe:after_dig_node(pos) + end, + + paramtype = "light", + paramtype2 = "facedir", + on_rotate = screwdriver.disallow, + groups = {cracky=2}, + is_ground_content = false, + sounds = default.node_sound_metal_defaults(), + + networks = { + pipe2 = { + sides = {R = 1}, -- Pipe connection sides + ntype = "pump", + }, + }, +}) + +Pipe:add_secondary_node_names({"techage:ta4_liquid_filter_filler", "techage:ta4_liquid_filter_sink"}) + +minetest.register_craft({ + output = 'techage:ta4_liquid_filter_filler', + recipe = { + {'', 'techage:ta3_pipeS', ''}, + {'basic_materials:concrete_block', 'basic_materials:concrete_block', 'basic_materials:concrete_block'}, + {'', 'default:steel_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'techage:ta4_liquid_filter_sink 2', + recipe = { + {'basic_materials:concrete_block', '', 'basic_materials:concrete_block'}, + {'basic_materials:concrete_block', 'techage:ta3_pipeS', 'techage:ta3_pipeS'}, + {'basic_materials:concrete_block', 'basic_materials:concrete_block', 'basic_materials:concrete_block'}, + } +}) \ No newline at end of file diff --git a/doc/items.lua b/doc/items.lua index ef5ac6b..034fd1c 100644 --- a/doc/items.lua +++ b/doc/items.lua @@ -172,5 +172,6 @@ techage.Items = { ta4_quarry = "techage:ta4_quarry_pas", ta4_electronicfab = "techage:ta4_electronic_fab_pas", ta4_injector = "techage:ta4_injector_pas", + ta4_liquid_filter = "techage_ta4_filter.png", --ta4_ "", } diff --git a/doc/manual_DE.lua b/doc/manual_DE.lua index 6039266..1761303 100644 --- a/doc/manual_DE.lua +++ b/doc/manual_DE.lua @@ -170,6 +170,10 @@ techage.manual_DE.aTitel = { "3,TA4 LED Pflanzenlampe / TA4 LED Grow Light", "3,TA4 LED Straßenlampe / TA4 LED Street Lamp", "3,TA4 LED Industrielampe / TA4 LED Industrial Lamp", + "2,TA4 Flüssigkeitsfilter", + "3,Fundament-Ebene", + "3,Schotter-Ebene", + "3,Einfüll-Ebene", "2,Weitere TA4 Blöcke", "3,TA4 Tank / TA4 Tank", "3,TA4 Pumpe / TA4 Pump", @@ -1402,6 +1406,31 @@ techage.manual_DE.aText = { "\n".. "\n".. "\n", + "Im Flüssigkeitsfilter wird Rotschlamm gefiltert.\n".. + "Dabei entsteht entweder Lauge\\, welche unten in einem Tank gesammelt werden kann oder Wüstenkopfsteinpflaster\\, welches sich im Filter absetzt.\n".. + "Wenn der Filter zu sehr verstopft ist\\, muss er geleert und neu befüllt werden.\n".. + "Der Filter besteht aus einer Fundament-Ebene\\, auf der 7 identische Filterschichten platziert werden. \n".. + "Ganz oben befindet sich die Einfüllebene.\n".. + "\n".. + "\n".. + "\n", + "Der Aufbau dieser Ebene kann dem Plan entnommen werden.\n".. + "\n".. + "Im Tank wird die Lauge gesammelt.\n".. + "\n".. + "\n".. + "\n", + "Diese Ebene muss so wie im Plan gezeigt mit Schotter befüllt werden.\n".. + "Insgesamt müssen sieben Lagen Schotter übereinander liegen.\n".. + "Dabei wird mit der Zeit der Filter verunreinigt\\, sodass das Füllmaterial erneuert werden muss.\n".. + "\n".. + "\n".. + "\n", + "Diese Ebene dient zum Befüllen des Filters mit Rotschlamm.\n".. + "In den Einfüllstutzen muss Rotschlamm mittels einer Pumpe geleitet werden.\n".. + "\n".. + "\n".. + "\n", "", "Siehe TA3 Tank.\n".. "\n".. @@ -1678,6 +1707,10 @@ techage.manual_DE.aItemName = { "ta4_growlight", "ta4_streetlamp", "ta4_industriallamp", + "ta4_liquid_filter", + "", + "", + "", "", "ta4_tank", "ta4_pump", @@ -1866,6 +1899,10 @@ techage.manual_DE.aPlanTable = { "", "", "", + "ta4_liquid_filter_base", + "ta4_liquid_filter_gravel", + "ta4_liquid_filter_top", + "", "", "", "", diff --git a/doc/manual_EN.lua b/doc/manual_EN.lua index 3473f67..4b24d6c 100644 --- a/doc/manual_EN.lua +++ b/doc/manual_EN.lua @@ -170,6 +170,10 @@ techage.manual_EN.aTitel = { "3,TA4 LED Grow Light", "3,TA4 Street Lamp", "3,TA4 LED Industrial Lamp", + "2,TA4 Liquid Filter", + "3,Base Layer", + "3,Gravel Layer", + "3,Filling Layer", "2,More TA4 Blocks", "3,TA4 Tank", "3,TA4 Pump", @@ -1393,6 +1397,31 @@ techage.manual_EN.aText = { "\n".. "\n".. "\n", + "The liquid filter filters red mud.\n".. + "A part of the red mud becomes lye\\, which can be collected at the bottom in a tank.\n".. + "The other part becomes desert cobblestone and clutters the filter material.\n".. + "If the filter is too clogged\\, it has to be cleaned and re-filled.\n".. + "The filter consists of a base layer\\, 7 identical filter layers and a filling layer at the top.\n".. + "\n".. + "\n".. + "\n", + "You can see the structure of this layer in the plan.\n".. + "\n".. + "The lye is collected in the tank.\n".. + "\n".. + "\n".. + "\n", + "This layer has to be filled with gravel as shown in the plan.\n".. + "In total\\, there must be seven layers of gravel.\n".. + "The filter will become cluttered over time\\, so that it has to be cleaned and re-filled.\n".. + "\n".. + "\n".. + "\n", + "This layer is used to fill the filter with red mud.\n".. + "The red mud must be pumped into the filler pipe.\n".. + "\n".. + "\n".. + "\n", "", "See TA3 tank.\n".. "\n".. @@ -1669,6 +1698,10 @@ techage.manual_EN.aItemName = { "ta4_growlight", "ta4_streetlamp", "ta4_industriallamp", + "ta4_liquid_filter", + "", + "", + "", "", "ta4_tank", "ta4_pump", @@ -1857,6 +1890,10 @@ techage.manual_EN.aPlanTable = { "", "", "", + "ta4_liquid_filter_base", + "ta4_liquid_filter_gravel", + "ta4_liquid_filter_top", + "", "", "", "", diff --git a/doc/plans.lua b/doc/plans.lua index 73b0289..4af9460 100644 --- a/doc/plans.lua +++ b/doc/plans.lua @@ -23,6 +23,7 @@ local IMG_4 = {"", "techage_ta4.png"} local IMG41 = {"", "techage_ta4_tes.png"} local IMG42 = {"", "techage_ta4_solar.png"} local IMG43 = {"", "techage_reactor_inv.png"} +local IMG44 = {"", "techage_ta4_filter.png"} -- -- TA1: Coal Pile @@ -172,7 +173,7 @@ techage.ConstructionPlans["ta3_furnace"] = { -- TA3 Tank Pump Pusher -- local Pump = {"techage_filling_ta3.png^techage_appl_pump.png^techage_frame_ta3.png", "techage:t3_pump"} -local Tank = {"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_tank.png", "techage:ta3_tank"} +local TANK3 = {"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_tank.png", "techage:ta3_tank"} local Fillr = {"techage_filling_ta3.png^techage_appl_liquid_hopper.png^techage_frame_ta3.png", "techage:filler"} local PIPEH = {"techage_gaspipe.png", "techage:ta4_pipeS"} local PIPEV = {"techage_gaspipe.png^[transformR90", "techage:ta4_pipeS"} @@ -184,7 +185,7 @@ local PN270 = {"techage_gaspipe_knee.png^[transformR270", "techage:ta4_pipeS"} techage.ConstructionPlans["ta3_tank"] = { {false, false, false, false, false, false, false, false, false, false}, {false, Tubes, PushR, Tubes, Fillr, Tubes, PushR, Tubes, false, false}, - {false, false, false, false, Tank, PIPEH, PIPEH, Pump, PIPEH, Tank}, + {false, false, false, false, TANK3, PIPEH, PIPEH, Pump, PIPEH, Tank}, {false, false, false, false, false, false, false, false, false, false}, } @@ -205,7 +206,7 @@ local BUFFR = {"default_junglewood.png^minecart_buffer.png", "minecart:buffer"} techage.ConstructionPlans["ta3_loading"] = { {false, false, PIPEH, Pump, PIPEH, PN270, false, false, false, false, false}, {false, false, false, false, false, PIPEV, false, false, false, false, false}, - {false, MCART, false, false, false, PN090, Tank, false, false, false, false}, + {false, MCART, false, false, false, PN090, TANK3, false, false, false, false}, {false, HOPPR, CHEST, Tubes, PushR, Tubes, Fillr, PushR, Tubes, MCART, false}, {false, false, false, false, false, false, false, false, false, false, false}, {false, false, false, false, false, false, false, false, false, false, false}, @@ -226,16 +227,16 @@ local DBASE = {"techage_concrete.png", "techage:ta3_distiller_base"} local REBIO = {"techage_filling_ta3.png^techage_appl_reboiler.png^techage_frame_ta3.png", "techage:ta3_reboiler"} techage.ConstructionPlans["ta3_distiller"] = { - {false, false, false, false, false, false, false, PN000, PIPEH, Tank, false}, + {false, false, false, false, false, false, false, PN000, PIPEH, TANK3, false}, {false, IMG31, false, false, false, false, false, DIST4, false, false, false}, - {false, false, false, false, false, false, false, DIST3, PIPEH, Tank, false}, + {false, false, false, false, false, false, false, DIST3, PIPEH, TANK3, false}, {false, false, false, false, false, false, false, DIST2, false, false, false}, - {false, false, false, false, false, false, false, DIST3, PIPEH, Tank, false}, + {false, false, false, false, false, false, false, DIST3, PIPEH, TANK3, false}, {false, false, false, false, false, false, false, DIST2, false, false, false}, - {false, false, false, false, false, false, false, DIST3, PIPEH, Tank, false}, + {false, false, false, false, false, false, false, DIST3, PIPEH, TANK3, false}, {false, false, false, false, false, false, false, DIST2, false, false, false}, - {false, Tank, PIPEH, Pump, PIPEH, REBIO, PIPEH, DIST1, false, false, false}, - {false, false, false, false, false, false, false, DBASE, PIPEH, Tank, false}, + {false, TANK3, PIPEH, Pump, PIPEH, REBIO, PIPEH, DIST1, false, false, false}, + {false, false, false, false, false, false, false, DBASE, PIPEH, TANK3, false}, } -- @@ -255,7 +256,7 @@ techage.ConstructionPlans["ta4_reactor"] = { {false, false, false, false, PIPEV, false, false, FILLR, false, false, false}, {false, false, false, false, PIPEV, false, false, REACT, false, false, false}, {false, false, false, false, PIPEV, false, false, STAND, PIPEH, PIPEH, SILO}, - {false, Tank, PIPEH, PIPEH, DOSER, PN270, false, RBASE, PIPEH, PIPEH, Tank}, + {false, TANK3, PIPEH, PIPEH, DOSER, PN270, false, RBASE, PIPEH, PIPEH, Tank}, {false, SILO, PIPEH, PIPEH, PIPEH, PN180, false, false, false, false, false}, } @@ -322,4 +323,44 @@ techage.ConstructionPlans["ta4_solarplant"] = { } +-- +-- Liquid Filter +-- +local LFSNK = {"basic_materials_concrete_block.png^techage_appl_arrow.png", "techage:ta4_liquid_filter_sink"} +local PWETR = {"basic_materials_concrete_block.png^techage_gaspipe.png", "techage:ta3_pipe_wall_entry"} +local TANK4 = {"techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_tank.png", "techage:ta4_tank"} +local LFFIL = {"basic_materials_concrete_block.png^techage_gaspipe_hole.png", "techage:ta4_liquid_filter_filler"} + +techage.ConstructionPlans["ta4_liquid_filter_base"] = { + {false, false, false, false, false, false, false, false, IMG44, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, + {false, CONCR, CONCR, LFSNK, PWETR, PWETR, PIPEH, PIPEH, TANK4}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, +} + +techage.ConstructionPlans["ta4_liquid_filter_gravel"] = { + {false, false, false, false, false, false, false, false, IMG44, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, CONCR, OGLAS, OGLAS, OGLAS, CONCR}, + {false, OGLAS, GRAVL, GRAVL, GRAVL, OGLAS}, + {false, OGLAS, GRAVL, GRAVL, GRAVL, OGLAS}, + {false, OGLAS, GRAVL, GRAVL, GRAVL, OGLAS}, + {false, CONCR, OGLAS, OGLAS, OGLAS, CONCR}, +} + +techage.ConstructionPlans["ta4_liquid_filter_top"] = { + {false, false, false, false, false, false, false, false, IMG44, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, + {false, CONCR, false, false, false, CONCR}, + {false, CONCR, false, LFFIL, false, CONCR}, + {false, CONCR, false, false, false, CONCR}, + {false, CONCR, CONCR, CONCR, CONCR, CONCR}, +} \ No newline at end of file diff --git a/icta_controller/battery.lua b/icta_controller/battery.lua index 9f1a4f7..7d3f262 100644 --- a/icta_controller/battery.lua +++ b/icta_controller/battery.lua @@ -94,7 +94,7 @@ minetest.register_node("techage:ta4_battery", { paramtype = "light", sunlight_propagates = true, paramtype2 = "facedir", - groups = {choppy=1, cracky=1, crumbly=1, not_in_creative_inventory=nici}, + groups = {choppy=1, cracky=1, crumbly=1}, is_ground_content = false, sounds = default.node_sound_stone_defaults(), }) diff --git a/init.lua b/init.lua index 6c94bd5..d6b1b85 100644 --- a/init.lua +++ b/init.lua @@ -271,6 +271,7 @@ dofile(MP.."/energy_storage/nodes.lua") dofile(MP.."/chemistry/ta4_reactor.lua") dofile(MP.."/chemistry/ta4_stand.lua") dofile(MP.."/chemistry/ta4_doser.lua") +dofile(MP.."/chemistry/ta4_liquid_filter.lua") -- Hydrogen dofile(MP.."/hydrogen/fuelcellstack.lua") diff --git a/liquids/pump.lua b/liquids/pump.lua index a01c36e..45fc50b 100644 --- a/liquids/pump.lua +++ b/liquids/pump.lua @@ -69,10 +69,12 @@ local function pumping(pos, nvm, state, capa) local taken, name = liquid.take(pos, Flip[outdir], nil, capa, starter) if taken > 0 then local leftover = liquid.put(pos, outdir, name, taken, starter) - if leftover and leftover == taken then + if leftover then liquid.untake(pos, Flip[outdir], name, leftover) - state:blocked(pos, nvm) - return + if leftover == taken then + state:blocked(pos, nvm) + return + end end state:keep_running(pos, nvm, COUNTDOWN_TICKS) return diff --git a/locale/techage.de.tr b/locale/techage.de.tr index 21ae9dc..6d139ab 100644 --- a/locale/techage.de.tr +++ b/locale/techage.de.tr @@ -329,6 +329,8 @@ TA4 LED Street Lamp=TA4 LED Straßenlampe TA4 LED Street Lamp Arm=TA4 LED Lampenarm TA4 LED Street Lamp Pole=TA4 LED Lampenmast TA4 LEDs=TA4 LEDs +TA4 Liquid Filter Filler=TA4 Flüssigkeitsfilter Einfüllstutzen +TA4 Liquid Filter Sink=TA4 Flüssigkeitsfilter Abfluss TA4 Low Power Box=TA4 Niederspannungsverteilerbox TA4 Low Power Cable=TA4 Niederspannungskabel TA4 Pillar=TA4 Säule diff --git a/locale/template.txt b/locale/template.txt index 2d9530a..31ccf96 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -327,6 +327,8 @@ TA4 LED Street Lamp= TA4 LED Street Lamp Arm= TA4 LED Street Lamp Pole= TA4 LEDs= +TA4 Liquid Filter Filler= +TA4 Liquid Filter Sink= TA4 Low Power Box= TA4 Low Power Cable= TA4 Pillar= diff --git a/manuals/manual_ta4_DE.md b/manuals/manual_ta4_DE.md index 178c703..2afd3da 100644 --- a/manuals/manual_ta4_DE.md +++ b/manuals/manual_ta4_DE.md @@ -474,6 +474,42 @@ Die Lampe benötigt 1 ku Strom. +## TA4 Flüssigkeitsfilter + +Im Flüssigkeitsfilter wird Rotschlamm gefiltert. +Dabei entsteht entweder Lauge, welche unten in einem Tank gesammelt werden kann oder Wüstenkopfsteinpflaster, welches sich im Filter absetzt. +Wenn der Filter zu sehr verstopft ist, muss er geleert und neu befüllt werden. +Der Filter besteht aus einer Fundament-Ebene, auf der 7 identische Filterschichten platziert werden. +Ganz oben befindet sich die Einfüllebene. + +[ta4_liquid_filter|image] + +### Fundament-Ebene + +Der Aufbau dieser Ebene kann dem Plan entnommen werden. + +Im Tank wird die Lauge gesammelt. + +[ta4_liquid_filter_base|plan] + +### Schotter-Ebene + +Diese Ebene muss so wie im Plan gezeigt mit Schotter befüllt werden. +Insgesamt müssen sieben Lagen Schotter übereinander liegen. +Dabei wird mit der Zeit der Filter verunreinigt, sodass das Füllmaterial erneuert werden muss. + +[ta4_liquid_filter_gravel|plan] + +### Einfüll-Ebene + +Diese Ebene dient zum Befüllen des Filters mit Rotschlamm. +In den Einfüllstutzen muss Rotschlamm mittels einer Pumpe geleitet werden. + +[ta4_liquid_filter_top|plan] + + + + ## Weitere TA4 Blöcke ### TA4 Tank / TA4 Tank diff --git a/manuals/manual_ta4_EN.md b/manuals/manual_ta4_EN.md index 665ca46..8ae2363 100644 --- a/manuals/manual_ta4_EN.md +++ b/manuals/manual_ta4_EN.md @@ -475,6 +475,42 @@ The lamp requires 1 ku of electricity. +## TA4 Liquid Filter + +The liquid filter filters red mud. +A part of the red mud becomes lye, which can be collected at the bottom in a tank. +The other part becomes desert cobblestone and clutters the filter material. +If the filter is too clogged, it has to be cleaned and re-filled. +The filter consists of a base layer, 7 identical filter layers and a filling layer at the top. + +[ta4_liquid_filter|image] + +### Base Layer + +You can see the structure of this layer in the plan. + +The lye is collected in the tank. + +[ta4_liquid_filter_base|plan] + +### Gravel Layer + +This layer has to be filled with gravel as shown in the plan. +In total, there must be seven layers of gravel. +The filter will become cluttered over time, so that it has to be cleaned and re-filled. + +[ta4_liquid_filter_gravel|plan] + +### Filling Layer + +This layer is used to fill the filter with red mud. +The red mud must be pumped into the filler pipe. + +[ta4_liquid_filter_top|plan] + + + + ## More TA4 Blocks ### TA4 Tank diff --git a/manuals/markdown2formspec.py b/manuals/markdown2formspec.py index aee6ebb..72df37b 100644 --- a/manuals/markdown2formspec.py +++ b/manuals/markdown2formspec.py @@ -190,7 +190,7 @@ class MyRenderer(mistune.Renderer): return "\\n" def inline_html(self, text): - print text + print(text) # ~ # ~ double_emphasis(text) # ~ image(src, title, alt_text) @@ -207,7 +207,7 @@ def parse_md_file(src_name, mod, manual): inline.enable_wiki_link() md = mistune.Markdown(renderer=renderer, inline=inline) md.renderer.src_name = src_name - md.render(file(src_name).read()) + md.render(open(src_name, 'r').read()) md.renderer.add_last_paragraph() def gen_lua_file(dest_name): @@ -217,7 +217,7 @@ def gen_lua_file(dest_name): lOut.append(lua_text_table("%s.%s.aText" % (mod, manual), lText)) lOut.append(lua_table("%s.%s.aItemName" % (mod, manual), lItemName)) lOut.append(lua_table("%s.%s.aPlanTable" % (mod, manual), lPlanTable)) - file(dest_name, "w").write("".join(lOut)) + open(dest_name, "w").write("".join(lOut)) def gen_toc_md_file(dest_name, titel, level_range=[1,6]): print("Write MD file '%s'" % dest_name) @@ -228,7 +228,7 @@ def gen_toc_md_file(dest_name, titel, level_range=[1,6]): list_item = " " * (item["level"] - level_range[0]) + "-" link = "%s#%s" % (item["link"], header_escsape(item["header"])) lOut.append("%s [%s](%s)" % (list_item, item["header"], link)) - file(dest_name, "w").write("\n".join(lOut)) + open(dest_name, "w").write("\n".join(lOut)) def gen_file_local_toc(dest_name, level_range=[1,6]): lOut = [] @@ -237,7 +237,7 @@ def gen_file_local_toc(dest_name, level_range=[1,6]): list_item = " " * (item["level"] - level_range[0]) + "-" link = "#%s" % (item["header"].replace(" ", "-").replace("\\", "")) lOut.append("%s [%s](%s)" % (list_item, item["header"].replace("\\", ""), link)) - file(dest_name, "w").write("\n".join(lOut)) + open(dest_name, "w").write("\n".join(lOut)) ########################### German ######################### mod = "techage" diff --git a/manuals/toc_DE.md b/manuals/toc_DE.md index 8ca24f5..8e26dda 100644 --- a/manuals/toc_DE.md +++ b/manuals/toc_DE.md @@ -44,10 +44,10 @@ - [TA2 Flüssigkeitensammler / Liquid Sampler](./manual_ta2_DE.md#ta2-flüssigkeitensammler--liquid-sampler) - [TA2 Gesicherte Kiste / Protected Chest](./manual_ta2_DE.md#ta2-gesicherte-kiste--protected-chest) - [Techage Forceload Block](./manual_ta2_DE.md#techage-forceload-block) -- [TA3: Ölzeitalter](./manual_ta3_DE.md#ta3:-Ölzeitalter) - - [Kohlekraftwerk / Ölkraftwerk](./manual_ta3_DE.md#kohlekraftwerk--Ölkraftwerk) +- [TA3: Ölzeitalter](./manual_ta3_DE.md#ta3:-ölzeitalter) + - [Kohlekraftwerk / Ölkraftwerk](./manual_ta3_DE.md#kohlekraftwerk--ölkraftwerk) - [TA3 Kraftwerks-Feuerbox / Power Station Firebox](./manual_ta3_DE.md#ta3-kraftwerks-feuerbox--power-station-firebox) - - [TA3 Kraftwerks-Ölbrenner / TA3 Power Station Oil Burner](./manual_ta3_DE.md#ta3-kraftwerks-Ölbrenner--ta3-power-station-oil-burner) + - [TA3 Kraftwerks-Ölbrenner / TA3 Power Station Oil Burner](./manual_ta3_DE.md#ta3-kraftwerks-ölbrenner--ta3-power-station-oil-burner) - [TA3 Boiler unten/oben](./manual_ta3_DE.md#ta3-boiler-untenoben) - [TA3 Turbine](./manual_ta3_DE.md#ta3-turbine) - [TA3 Generator](./manual_ta3_DE.md#ta3-generator) @@ -66,7 +66,7 @@ - [TA3 Akku Block / Akku Box](./manual_ta3_DE.md#ta3-akku-block---akku-box) - [TA3 Strom Terminal / Power Terminal](./manual_ta3_DE.md#ta3-strom-terminal--power-terminal) - [TA3 Industrieofen](./manual_ta3_DE.md#ta3-industrieofen) - - [TA3 Ofen-Ölbrenner / Furnace Oil Burner](./manual_ta3_DE.md#ta3-ofen-Ölbrenner--furnace-oil-burner) + - [TA3 Ofen-Ölbrenner / Furnace Oil Burner](./manual_ta3_DE.md#ta3-ofen-ölbrenner--furnace-oil-burner) - [TA3 Ofenoberteil / Furnace Top](./manual_ta3_DE.md#ta3-ofenoberteil--furnace-top) - [TA3 Gebläse / Booster](./manual_ta3_DE.md#ta3-gebläse--booster) - [Flüssigkeiten](./manual_ta3_DE.md#flüssigkeiten) @@ -76,18 +76,18 @@ - [TA4 Röhre / Pipe](./manual_ta3_DE.md#ta4-röhre--pipe) - [TA3 Rohr/Wanddurchbruch / TA3 Pipe Wall Entry Blöcke](./manual_ta3_DE.md#ta3-rohrwanddurchbruch--ta3-pipe-wall-entry-blöcke) - [TA Ventil / TA Valve](./manual_ta3_DE.md#ta-ventil--ta-valve) - - [Öl-Förderung](./manual_ta3_DE.md#Öl-förderung) - - [TA3 Ölexplorer / Oil Explorer](./manual_ta3_DE.md#ta3-Ölexplorer--oil-explorer) - - [TA3 Ölbohrkiste / Oil Drill Box](./manual_ta3_DE.md#ta3-Ölbohrkiste--oil-drill-box) - - [TA3 Ölpumpe / Oil Pumpjack](./manual_ta3_DE.md#ta3-Ölpumpe--oil-pumpjack) + - [Öl-Förderung](./manual_ta3_DE.md#öl-förderung) + - [TA3 Ölexplorer / Oil Explorer](./manual_ta3_DE.md#ta3-ölexplorer--oil-explorer) + - [TA3 Ölbohrkiste / Oil Drill Box](./manual_ta3_DE.md#ta3-ölbohrkiste--oil-drill-box) + - [TA3 Ölpumpe / Oil Pumpjack](./manual_ta3_DE.md#ta3-ölpumpe--oil-pumpjack) - [TA3 Bohrgestänge / Drill Pipe](./manual_ta3_DE.md#ta3-bohrgestänge--drill-pipe) - - [Öltank / Oil Tank](./manual_ta3_DE.md#Öltank--oil-tank) - - [Öl-Transport](./manual_ta3_DE.md#Öl-transport) - - [Öl-Transport mit dem Tankwagen](./manual_ta3_DE.md#Öl-transport-mit-dem-tankwagen) - - [Öl-Transport mit Fässern über Minecarts](./manual_ta3_DE.md#Öl-transport-mit-fässern-über-minecarts) + - [Öltank / Oil Tank](./manual_ta3_DE.md#öltank--oil-tank) + - [Öl-Transport](./manual_ta3_DE.md#öl-transport) + - [Öl-Transport mit dem Tankwagen](./manual_ta3_DE.md#öl-transport-mit-dem-tankwagen) + - [Öl-Transport mit Fässern über Minecarts](./manual_ta3_DE.md#öl-transport-mit-fässern-über-minecarts) - [Tankwagen / Tank Cart](./manual_ta3_DE.md#tankwagen--tank-cart) - [Kistenwagen / Chest Cart](./manual_ta3_DE.md#kistenwagen--chest-cart) - - [Öl-Verarbeitung](./manual_ta3_DE.md#Öl-verarbeitung) + - [Öl-Verarbeitung](./manual_ta3_DE.md#öl-verarbeitung) - [Destillationsturm / distiller tower](./manual_ta3_DE.md#destillationsturm--distiller-tower) - [Aufkocher / reboiler)](./manual_ta3_DE.md#aufkocher--reboiler)) - [Logik-/Schalt-Blöcke](./manual_ta3_DE.md#logik-schalt-blöcke) @@ -169,6 +169,10 @@ - [TA4 LED Pflanzenlampe / TA4 LED Grow Light](./manual_ta4_DE.md#ta4-led-pflanzenlampe--ta4-led-grow-light) - [TA4 LED Straßenlampe / TA4 LED Street Lamp](./manual_ta4_DE.md#ta4-led-straßenlampe--ta4-led-street-lamp) - [TA4 LED Industrielampe / TA4 LED Industrial Lamp](./manual_ta4_DE.md#ta4-led-industrielampe--ta4-led-industrial-lamp) + - [TA4 Flüssigkeitsfilter](./manual_ta4_DE.md#ta4-flüssigkeitsfilter) + - [Fundament-Ebene](./manual_ta4_DE.md#fundament-ebene) + - [Schotter-Ebene](./manual_ta4_DE.md#schotter-ebene) + - [Einfüll-Ebene](./manual_ta4_DE.md#einfüll-ebene) - [Weitere TA4 Blöcke](./manual_ta4_DE.md#weitere-ta4-blöcke) - [TA4 Tank / TA4 Tank](./manual_ta4_DE.md#ta4-tank--ta4-tank) - [TA4 Pumpe / TA4 Pump](./manual_ta4_DE.md#ta4-pumpe--ta4-pump) diff --git a/manuals/toc_EN.md b/manuals/toc_EN.md index 1c997e3..f5d2dda 100644 --- a/manuals/toc_EN.md +++ b/manuals/toc_EN.md @@ -169,6 +169,10 @@ - [TA4 LED Grow Light](./manual_ta4_EN.md#ta4-led-grow-light) - [TA4 Street Lamp](./manual_ta4_EN.md#ta4-street-lamp) - [TA4 LED Industrial Lamp](./manual_ta4_EN.md#ta4-led-industrial-lamp) + - [TA4 Liquid Filter](./manual_ta4_EN.md#ta4-liquid-filter) + - [Base Layer](./manual_ta4_EN.md#base-layer) + - [Gravel Layer](./manual_ta4_EN.md#gravel-layer) + - [Filling Layer](./manual_ta4_EN.md#filling-layer) - [More TA4 Blocks](./manual_ta4_EN.md#more-ta4-blocks) - [TA4 Tank](./manual_ta4_EN.md#ta4-tank) - [TA4 Pump](./manual_ta4_EN.md#ta4-pump) diff --git a/textures/techage_gaspipe_hole.png b/textures/techage_gaspipe_hole.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f3ef55b7752d4b7279a9ffc278c573dc93f1b9 GIT binary patch literal 2876 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 z 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 literal 0 HcmV?d00001 diff --git a/textures/techage_liquid_filter_filler_bottom.png b/textures/techage_liquid_filter_filler_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..0444647b62fa390d5ca7d39f79add2603b82e2d3 GIT binary patch literal 2463 zcmV;Q31Ie#P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b-a`ZL~{m)b62n0y59EWu#H^}kxKvMD++p#C# zYL}A0g7VPTjDP-~<}Z9$*cvY}g&cy#$7i3p;33)lDQhI_*SJ1>rttnmH}?dC7K^$SFRm z(9ZgK=9d}pGdg$|IY^-BF?zN!hK%RL)<@W_tDr7!^IVKx-_5m@ArlWr&SFd|q1(TL zU&ctz@dt%4dR?cI0xdQ+;yGV-{r>Zvh^j{X}2TACNZ7px1>4F7?vxC?hj18S%m2E}PZrIo0YzlfZ7ayd>e-M&ks~seundUMJVupe z;Olz*D6S3&$})3;g2h%n0q|F$59e|VXorP@`;H@u{Tu)jK>~p=f#~c!SHMCd+#w`;=K{b%6o5DOL|RLc6E_)&5I~3v#zkO*pafXn3;ZYg1RpBm z#EVFfC`q!E;DSb22r+0zEzw0EC59Mdia8dOT=Gd$NHL|9Q^}kiGOlFAV@^5eQoyv} z&vHi~_vMTEsU zF{2tIjbL($+?yv#3f@!-$Z&{5C1N}*i(-47;xPl?aUv=-QZ1nm}Ibu5Ah z<~QBVQT~y7VYEd#+kq9U>6ZLwVN}EO=3}mvRlEko2W(}cly5yQ!)+VFMCzVL?`3{G znTljMF2%QDq4>7yChi3m&I%rN*bHe#>utnPV8SNI?lF?IHcPh!BWK%@vw5LbG&x;N?iWqLx^xB%#SYXpt%#!rR*9P67ShDgE8@8h$V=@Z2siyXh}0ftszK}$PvVZRC_o{ zCH&!N1n7Wo&1oW|SH;Y`YR;=$x`r-^s&lZFst7m-G$YAXFgmE^KEQ)s7RJ{%0A^5m z&~FW_!xwJa8ni=a=J66>`iX|EmFmTfoW15M6o?MDM0X`cz(a{L4UqMk%K))%Uex`J zWUG6XMq@ZVIU`5I*{jvUr88*sAwSfsX5Ak3Np@*p*S4Z9B@l8;H@G57TVubx9N*+| z+u$0D5Sexyr-Ld9s(hQmKF?t0^AzTKTYJh(NFG+JbX{mM_ii5;C3-?*VI*bK{ z{R0M=$T`B!mR9QMB?;J99HZGNx0$`BlPecR#5;l(Ug%mb zyX?n~js;mu)A;hk7caZIiM#lIVVD2p|rXOU*$E0Y!%!-Ss zl|`)~(}K_SBeMt-%uXxv_wcSGSvp_Xh0O{g?To0sD3TWqy^t zzUjZr7Y*32`!DlF1NQ6w%Y4y*{ks1$Uo>Dp?!Vl`KZlH1`xlqT?$KbHO%MP80IN_; zR7F7m0AF8UU|?WjVPRonVPaxpVq;-rV`F4wWMpJzWMyJxWn^V#V`XJ!VrFJ#WoKq( zWM*Y&WoBh&W@cz+XJ=<+XJ=<;XlH0>XlZC?X=rF`XlQ6@XlQ9^X=!O{X=!R{Y-ws} zX=-h1YHDq2Yiet2Yinw2Yin$4Y;0_7Y;0|9Y-@dOD{XCUZf$LCZfk9BZEbFEZf_CX>@2HM@dakSAh-}0003dNkleewpW2EWv@_ d7ytTPd;mL*N(!!>r3nB4002ovPDHLkV1gPYd{h7c literal 0 HcmV?d00001 diff --git a/textures/techage_ta4_filter.png b/textures/techage_ta4_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..60996282e22340d9b5aa154a433ff2f2dd25d4b1 GIT binary patch literal 33566 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 z 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