From af97e126c0e111c34df3f87fff1bb6bb868e00dd Mon Sep 17 00:00:00 2001 From: Thomas--S Date: Sat, 3 Oct 2020 10:58:08 +0200 Subject: [PATCH] Add TA4 High Performance Distributor (36 items/4s; 8 items can be configured per direction) Additionally the distributor bottom textures are fixed. --- basic_machines/distributor.lua | 288 +++++++++++++++---------- doc/items.lua | 1 + doc/manual_DE.lua | 9 + doc/manual_EN.lua | 9 + locale/techage.de.tr | 5 +- locale/template.txt | 2 + manuals/manual_ta4_DE.md | 8 + manuals/manual_ta4_EN.md | 8 + manuals/toc_DE.md | 1 + manuals/toc_EN.md | 1 + textures/techage_frame14_ta4_hp.png | Bin 0 -> 3171 bytes textures/techage_frame4_ta4_hp.png | Bin 0 -> 1736 bytes textures/techage_frame4_ta4_top_hp.png | Bin 0 -> 2060 bytes textures/techage_frame8_ta4_hp.png | Bin 0 -> 1784 bytes textures/techage_frame_ta4_hp.png | Bin 0 -> 1318 bytes textures/techage_frame_ta4_top_hp.png | Bin 0 -> 1347 bytes 16 files changed, 220 insertions(+), 112 deletions(-) create mode 100644 textures/techage_frame14_ta4_hp.png create mode 100644 textures/techage_frame4_ta4_hp.png create mode 100644 textures/techage_frame4_ta4_top_hp.png create mode 100644 textures/techage_frame8_ta4_hp.png create mode 100644 textures/techage_frame_ta4_hp.png create mode 100644 textures/techage_frame_ta4_top_hp.png diff --git a/basic_machines/distributor.lua b/basic_machines/distributor.lua index c6b4707..578fc43 100644 --- a/basic_machines/distributor.lua +++ b/basic_machines/distributor.lua @@ -99,17 +99,17 @@ local function get_filter_settings(pos) return FilterCache[hash].ItemFilter, FilterCache[hash].OpenPorts end -local function blocking_checkbox(pos, filter) +local function blocking_checkbox(pos, filter, is_hp) local cnt = 0 local _, open_ports = get_filter_settings(pos) - + local fs_pos = is_hp and "0.25,5" or "3,3.9" for _,val in ipairs(filter) do if val then cnt = cnt + 1 end end if cnt > 1 and #open_ports > 0 then local blocking = M(pos):get_int("blocking") == 1 and "true" or "false" - return "checkbox[3,3.9;blocking;"..S("blocking mode")..";"..blocking.."]".. - "tooltip[3,3.9;1,1;"..S("Block configured items for open ports")..";#0C3D32;#FFFFFF]" + return "checkbox["..fs_pos..";blocking;"..S("blocking mode")..";"..blocking.."]".. + "tooltip["..fs_pos..";1,1;"..S("Block configured items for open ports")..";#0C3D32;#FFFFFF]" else M(pos):set_int("blocking", 0) -- disable blocking end @@ -118,32 +118,57 @@ end local function formspec(self, pos, nvm) local filter = minetest.deserialize(M(pos):get_string("filter")) or {false,false,false,false} - local blocking = blocking_checkbox(pos, filter) - return "size[10.5,8.5]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "list[context;src;0,0;2,4;]".. - blocking.. - "image[2,1.5;1,1;techage_form_arrow.png]".. - "image_button[0,4.8;1,1;"..self:get_state_button_image(nvm)..";state_button;]".. - "tooltip[0,4.8;1,1;"..self:get_state_tooltip(nvm).."]".. - "checkbox[3,0;filter1;On;"..dump(filter[1]).."]".. - "checkbox[3,1;filter2;On;"..dump(filter[2]).."]".. - "checkbox[3,2;filter3;On;"..dump(filter[3]).."]".. - "checkbox[3,3;filter4;On;"..dump(filter[4]).."]".. - "image[4,0;0.3,1;techage_inv_red.png]".. - "image[4,1;0.3,1;techage_inv_green.png]".. - "image[4,2;0.3,1;techage_inv_blue.png]".. - "image[4,3;0.3,1;techage_inv_yellow.png]".. - "list[context;red;4.5,0;6,1;]".. - "list[context;green;4.5,1;6,1;]".. - "list[context;blue;4.5,2;6,1;]".. - "list[context;yellow;4.5,3;6,1;]".. - "list[current_player;main;1.25,4.8;8,4;]".. - "listring[context;src]".. - "listring[current_player;main]".. - default.get_hotbar_bg(1.25,4.8) + local is_hp = nvm.high_performance == true + local blocking = blocking_checkbox(pos, filter, is_hp) + + if is_hp then + return "size[10.5,9.5]".. + "box[0.25,-0.1;9.6,1.1;#005500]".. + "label[0.6,0.2;"..S("Input").."]".. + "list[context;src;1.75,0;8,1;]".. + blocking.. + "image_button[0.25,5.8;1,1;"..self:get_state_button_image(nvm)..";state_button;]".. + "tooltip[0.25,5.8;1,1;"..self:get_state_tooltip(nvm).."]".. + "checkbox[0.25,1.2;filter1;On;"..dump(filter[1]).."]".. + "checkbox[0.25,2.2;filter2;On;"..dump(filter[2]).."]".. + "checkbox[0.25,3.2;filter3;On;"..dump(filter[3]).."]".. + "checkbox[0.25,4.2;filter4;On;"..dump(filter[4]).."]".. + "image[1.25,1.2;0.3,1;techage_inv_red.png]".. + "image[1.25,2.2;0.3,1;techage_inv_green.png]".. + "image[1.25,3.2;0.3,1;techage_inv_blue.png]".. + "image[1.25,4.2;0.3,1;techage_inv_yellow.png]".. + "list[context;red;1.75,1.2;8,1;]".. + "list[context;green;1.75,2.2;8,1;]".. + "list[context;blue;1.75,3.2;8,1;]".. + "list[context;yellow;1.75,4.2;8,1;]".. + "list[current_player;main;1.75,5.8;8,4;]".. + "listring[context;src]".. + "listring[current_player;main]".. + default.get_hotbar_bg(1.75,5.8) + else + return "size[10.5,8.5]".. + "list[context;src;0,0;2,4;]".. + blocking.. + "image[2,1.5;1,1;techage_form_arrow.png]".. + "image_button[0,4.8;1,1;"..self:get_state_button_image(nvm)..";state_button;]".. + "tooltip[0,4.8;1,1;"..self:get_state_tooltip(nvm).."]".. + "checkbox[3,0;filter1;On;"..dump(filter[1]).."]".. + "checkbox[3,1;filter2;On;"..dump(filter[2]).."]".. + "checkbox[3,2;filter3;On;"..dump(filter[3]).."]".. + "checkbox[3,3;filter4;On;"..dump(filter[4]).."]".. + "image[4,0;0.3,1;techage_inv_red.png]".. + "image[4,1;0.3,1;techage_inv_green.png]".. + "image[4,2;0.3,1;techage_inv_blue.png]".. + "image[4,3;0.3,1;techage_inv_yellow.png]".. + "list[context;red;4.5,0;6,1;]".. + "list[context;green;4.5,1;6,1;]".. + "list[context;blue;4.5,2;6,1;]".. + "list[context;yellow;4.5,3;6,1;]".. + "list[current_player;main;1.25,4.8;8,4;]".. + "listring[context;src]".. + "listring[current_player;main]".. + default.get_hotbar_bg(1.25,4.8) + end end local function allow_metadata_inventory_put(pos, listname, index, stack, player) @@ -357,36 +382,40 @@ local function can_dig(pos, player) return inv:is_empty("src") end -local tiles = {} --- '#' will be replaced by the stage number --- '{power}' will be replaced by the power PNG -tiles.pas = { - -- up, down, right, left, back, front - "techage_filling_ta#.png^techage_appl_distri.png^techage_frame_ta#_top.png^techage_appl_color_top.png", - "techage_filling_ta#.png^techage_frame_ta#.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_yellow.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_green.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_red.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_blue.png", -} -tiles.act = { - -- up, down, right, left, back, front - { - image = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top.png^techage_appl_color_top4.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 32, - aspect_h = 32, - length = 1.0, +local get_tiles = function(is_hp) + local variant = is_hp and "_hp" or "" + local tiles = {} + -- '#' will be replaced by the stage number + -- '{power}' will be replaced by the power PNG + tiles.pas = { + -- up, down, right, left, back, front + "techage_filling_ta#.png^techage_appl_distri.png^techage_frame_ta#_top"..variant..".png^techage_appl_color_top.png", + "techage_filling_ta#.png^techage_frame_ta#_top"..variant..".png^(techage_appl_color_top.png^[transformFY)", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_yellow.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_green.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_red.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_blue.png", + } + tiles.act = { + -- up, down, right, left, back, front + { + image = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top"..variant..".png^techage_appl_color_top4.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 1.0, + }, }, - }, - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_color_top.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_yellow.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_green.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_red.png", - "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_distri_blue.png", -} + "techage_filling_ta#.png^techage_frame_ta#_top"..variant..".png^(techage_appl_color_top.png^[transformFY)", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_yellow.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_green.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_red.png", + "techage_filling_ta#.png^techage_frame_ta#"..variant..".png^techage_appl_distri_blue.png", + } + return tiles +end local tubing = { on_pull_item = function(pos, in_dir, num) @@ -419,57 +448,87 @@ local tubing = { end, } -local node_name_ta2, node_name_ta3, node_name_ta4 = - techage.register_consumer("distributor", S("Distributor"), tiles, { - cycle_time = CYCLE_TIME, - standby_ticks = STANDBY_TICKS, - formspec = formspec, - tubing = tubing, - after_place_node = function(pos, placer) - local meta = M(pos) - local filter = {false,false,false,false} - meta:set_string("filter", minetest.serialize(filter)) - local inv = meta:get_inventory() - inv:set_size('src', 8) - inv:set_size('yellow', 6) - inv:set_size('green', 6) - inv:set_size('red', 6) - inv:set_size('blue', 6) - end, - can_dig = can_dig, - node_timer = keep_running, - on_receive_fields = on_receive_fields, - allow_metadata_inventory_put = allow_metadata_inventory_put, - allow_metadata_inventory_move = allow_metadata_inventory_move, - allow_metadata_inventory_take = allow_metadata_inventory_take, - tubelib2_on_update2 = tubelib2_on_update2, - - on_metadata_inventory_move = function(pos, from_list, from_index, to_list) - if from_list ~= "src" or to_list ~= "src" then - filter_settings(pos) - local nvm = techage.get_nvm(pos) - M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) - end - end, - on_metadata_inventory_put = function(pos, listname) - if listname ~= "src" then - filter_settings(pos) - local nvm = techage.get_nvm(pos) - M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) - end - end, - on_metadata_inventory_take = function(pos, listname) - if listname ~= "src" then - filter_settings(pos) - local nvm = techage.get_nvm(pos) - M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) - end - end, - - groups = {choppy=2, cracky=2, crumbly=2}, - sounds = default.node_sound_wood_defaults(), - num_items = {0,4,12,24}, - }) +local def = { + cycle_time = CYCLE_TIME, + standby_ticks = STANDBY_TICKS, + formspec = formspec, + tubing = tubing, + after_place_node = function(pos, placer) + local meta = M(pos) + local filter = {false,false,false,false} + meta:set_string("filter", minetest.serialize(filter)) + local inv = meta:get_inventory() + inv:set_size('src', 8) + inv:set_size('yellow', 6) + inv:set_size('green', 6) + inv:set_size('red', 6) + inv:set_size('blue', 6) + end, + can_dig = can_dig, + node_timer = keep_running, + on_receive_fields = on_receive_fields, + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, + tubelib2_on_update2 = tubelib2_on_update2, + + on_metadata_inventory_move = function(pos, from_list, from_index, to_list) + if from_list ~= "src" or to_list ~= "src" then + filter_settings(pos) + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) + end + end, + on_metadata_inventory_put = function(pos, listname) + if listname ~= "src" then + filter_settings(pos) + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) + end + end, + on_metadata_inventory_take = function(pos, listname) + if listname ~= "src" then + filter_settings(pos) + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) + end + end, + + groups = {choppy=2, cracky=2, crumbly=2}, + sounds = default.node_sound_wood_defaults(), + num_items = {0,4,12,24}, +} + +local node_name_ta2, node_name_ta3, node_name_ta4 = techage.register_consumer( + "distributor", + S("Distributor"), + get_tiles(false), + def +) + +local hp_def = table.copy(def) + +hp_def.after_place_node = function(pos, placer) + local meta = M(pos) + local nvm = techage.get_nvm(pos) + nvm.high_performance = true + local filter = {false,false,false,false} + meta:set_string("filter", minetest.serialize(filter)) + local inv = meta:get_inventory() + inv:set_size('src', 8) + inv:set_size('yellow', 8) + inv:set_size('green', 8) + inv:set_size('red', 8) + inv:set_size('blue', 8) +end +hp_def.num_items = {0,0,0,36} + +local _, _, node_name_ta4_hp = techage.register_consumer( + "high_performance_distributor", S("High Performance Distributor"), + get_tiles(true), + hp_def, + {false, false, false, true} +) minetest.register_craft({ output = node_name_ta2.." 2", @@ -497,3 +556,12 @@ minetest.register_craft({ {"", "techage:ta4_wlanchip", ""}, }, }) + + +minetest.register_craft({ + output = node_name_ta4_hp, + recipe = { + {node_name_ta4, "default:copper_ingot"}, + {"default:mese_crystal_fragment", node_name_ta4}, + }, +}) diff --git a/doc/items.lua b/doc/items.lua index 034fd1c..b7b91d1 100644 --- a/doc/items.lua +++ b/doc/items.lua @@ -161,6 +161,7 @@ techage.Items = { ta4_collector = "techage:ta4_collector", ta4_pusher = "techage:ta4_pusher_pas", ta4_distributor = "techage:ta4_distributor_pas", + ta4_high_performance_distributor = "techage:ta4_high_performance_distributor_pas", ta4_gravelsieve = "techage:ta4_gravelsieve_pas", ta4_grinder = "techage:ta4_grinder_pas", ta4_detector = "techage:ta4_detector_off", diff --git a/doc/manual_DE.lua b/doc/manual_DE.lua index 1761303..b6caafc 100644 --- a/doc/manual_DE.lua +++ b/doc/manual_DE.lua @@ -184,6 +184,7 @@ techage.manual_DE.aTitel = { "3,TA4 Kiste / TA4 Chest", "3,TA4 8x2000 Kiste / TA4 8x2000 Chest", "3,TA4 Verteiler / Distributor", + "3,TA4 Hochleistungs-Verteiler / High Performance Distributor", "3,TA4 Kiessieb / Gravel Sieve", "3,TA4 Mühle / Grinder", "3,TA4 Steinbrecher / Quarry", @@ -1505,6 +1506,12 @@ techage.manual_DE.aText = { "\n".. "\n".. "\n", + "Die Funktion entspricht dem normalen TA4 Verteiler\\, mit zwei Unterschieden:\n".. + "Die Verarbeitungsleistung beträgt 36 Items alle 4 s\\, sofern auf allen Seiten TA4 Röhren verwendet werden. Anderenfalls sind es nur 18 Items alle 4 s.\n".. + "Außerdem können pro Ausgang bis zu 8 Items konfiguriert werden.\n".. + "\n".. + "\n".. + "\n", "Die Funktion entspricht der von TA2.\n".. "Die Verarbeitungsleistung beträgt 4 Items alle 4 s. Der Block benötigt 5 ku Strom.\n".. "\n".. @@ -1721,6 +1728,7 @@ techage.manual_DE.aItemName = { "ta4_chest", "ta4_8x2000_chest", "ta4_distributor", + "ta4_high_performance_distributor", "ta4_gravelsieve", "ta4_grinder", "ta4_quarry", @@ -1917,5 +1925,6 @@ techage.manual_DE.aPlanTable = { "", "", "", + "", } diff --git a/doc/manual_EN.lua b/doc/manual_EN.lua index 4b24d6c..0e03aaf 100644 --- a/doc/manual_EN.lua +++ b/doc/manual_EN.lua @@ -184,6 +184,7 @@ techage.manual_EN.aTitel = { "3,TA4 Chest", "3,TA4 8x2000 Chest", "3,TA4 Distributor", + "3,TA4 High Performance Distributor", "3,TA4 Gravel Sieve", "3,TA4 Grinder", "3,TA4 Quarry", @@ -1496,6 +1497,12 @@ techage.manual_EN.aText = { "\n".. "\n".. "\n", + "The function corresponds to that of the normal TA4 distributor\\, with two differences:\n".. + "The processing power is 36 items every 4 s\\, provided TA4 tubes are used on all sides. Otherwise there are only 18 items every 4 s.\n".. + "Furthermore\\, up to 8 items can be configured per direction.\n".. + "\n".. + "\n".. + "\n", "The function corresponds to that of TA2.\n".. "The processing power is 4 items every 4 s. The block requires 5 ku of electricity.\n".. "\n".. @@ -1712,6 +1719,7 @@ techage.manual_EN.aItemName = { "ta4_chest", "ta4_8x2000_chest", "ta4_distributor", + "ta4_high_performance_distributor", "ta4_gravelsieve", "ta4_grinder", "ta4_quarry", @@ -1908,5 +1916,6 @@ techage.manual_EN.aPlanTable = { "", "", "", + "", } diff --git a/locale/techage.de.tr b/locale/techage.de.tr index 6d139ab..fd5419f 100644 --- a/locale/techage.de.tr +++ b/locale/techage.de.tr @@ -85,11 +85,13 @@ Grinder=Mühle Grinding=Mahlen Heat=Hitze Heat Exchanger=Wärmetauscher +High Performance Distributor=Hochleistungs-Verteiler Hole size=Lochgröße Hydrogen Cylinder Large=Wasserstoffflasche groß Hydrogen Cylinder Small=Wasserstoffflasche klein In use:=In Benutzung: Injector=Injektor +Input=Einspeisung Insert destination node number(s)=Gebe Zielnummer(n) ein Insert door/gate block number(s)=Gebe Tür-/Tornummer(n) ein Intake=Stromaufnahme @@ -455,5 +457,4 @@ storage empty?=Speicher leer? water temperature=Wassertemperatur wrong catalyst=falscher Katalysator wrong storage diameter=Falscher Wärmespeicher-Durchmesser -##### not used anymore ##### - +##### not used anymore ##### \ No newline at end of file diff --git a/locale/template.txt b/locale/template.txt index 31ccf96..024cbf0 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -83,11 +83,13 @@ Grinder= Grinding= Heat= Heat Exchanger= +High Performance Distributor= Hole size= Hydrogen Cylinder Large= Hydrogen Cylinder Small= In use:= Injector= +Input= Insert destination node number(s)= Insert door/gate block number(s)= Intake= diff --git a/manuals/manual_ta4_DE.md b/manuals/manual_ta4_DE.md index 2afd3da..e9360e8 100644 --- a/manuals/manual_ta4_DE.md +++ b/manuals/manual_ta4_DE.md @@ -610,6 +610,14 @@ Die Verarbeitungsleistung beträgt 24 Items alle 4 s, sofern auf allen Seiten TA [ta4_distributor|image] +### TA4 Hochleistungs-Verteiler / High Performance Distributor + +Die Funktion entspricht dem normalen TA4 Verteiler, mit zwei Unterschieden: +Die Verarbeitungsleistung beträgt 36 Items alle 4 s, sofern auf allen Seiten TA4 Röhren verwendet werden. Anderenfalls sind es nur 18 Items alle 4 s. +Außerdem können pro Ausgang bis zu 8 Items konfiguriert werden. + +[ta4_high_performance_distributor|image] + ### TA4 Kiessieb / Gravel Sieve Die Funktion entspricht der von TA2. diff --git a/manuals/manual_ta4_EN.md b/manuals/manual_ta4_EN.md index 8ae2363..595f71c 100644 --- a/manuals/manual_ta4_EN.md +++ b/manuals/manual_ta4_EN.md @@ -611,6 +611,14 @@ The processing power is 24 items every 4 s, provided TA4 tubes are used on all s [ta4_distributor|image] +### TA4 High Performance Distributor + +The function corresponds to that of the normal TA4 distributor, with two differences: +The processing power is 36 items every 4 s, provided TA4 tubes are used on all sides. Otherwise there are only 18 items every 4 s. +Furthermore, up to 8 items can be configured per direction. + +[ta4_high_performance_distributor|image] + ### TA4 Gravel Sieve The function corresponds to that of TA2. diff --git a/manuals/toc_DE.md b/manuals/toc_DE.md index 8e26dda..c018a99 100644 --- a/manuals/toc_DE.md +++ b/manuals/toc_DE.md @@ -183,6 +183,7 @@ - [TA4 Kiste / TA4 Chest](./manual_ta4_DE.md#ta4-kiste--ta4-chest) - [TA4 8x2000 Kiste / TA4 8x2000 Chest](./manual_ta4_DE.md#ta4-8x2000-kiste--ta4-8x2000-chest) - [TA4 Verteiler / Distributor](./manual_ta4_DE.md#ta4-verteiler--distributor) + - [TA4 Hochleistungs-Verteiler / High Performance Distributor](./manual_ta4_DE.md#ta4-hochleistungs-verteiler--high-performance-distributor) - [TA4 Kiessieb / Gravel Sieve](./manual_ta4_DE.md#ta4-kiessieb--gravel-sieve) - [TA4 Mühle / Grinder](./manual_ta4_DE.md#ta4-mühle--grinder) - [TA4 Steinbrecher / Quarry](./manual_ta4_DE.md#ta4-steinbrecher--quarry) diff --git a/manuals/toc_EN.md b/manuals/toc_EN.md index f5d2dda..f22bfad 100644 --- a/manuals/toc_EN.md +++ b/manuals/toc_EN.md @@ -183,6 +183,7 @@ - [TA4 Chest](./manual_ta4_EN.md#ta4-chest) - [TA4 8x2000 Chest](./manual_ta4_EN.md#ta4-8x2000-chest) - [TA4 Distributor](./manual_ta4_EN.md#ta4-distributor) + - [TA4 High Performance Distributor](./manual_ta4_EN.md#ta4-high-performance-distributor) - [TA4 Gravel Sieve](./manual_ta4_EN.md#ta4-gravel-sieve) - [TA4 Grinder](./manual_ta4_EN.md#ta4-grinder) - [TA4 Quarry](./manual_ta4_EN.md#ta4-quarry) diff --git a/textures/techage_frame14_ta4_hp.png b/textures/techage_frame14_ta4_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d048d7dec5197f3d5da912a44b6c84e2bf3070 GIT binary patch literal 3171 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 WW(FPm6qW6-0=k+;8dYkJ5B>w?V!W9E literal 0 HcmV?d00001 diff --git a/textures/techage_frame4_ta4_hp.png b/textures/techage_frame4_ta4_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..5c25bc72f9fa59973f727d079943b10849f60ff7 GIT binary patch literal 1736 zcmV;(1~>VMP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=lJh7G{I65&5fCrIad@d}Z?MPT29v~@@yxeL z)>LeVha}W$+BE+8Tj?)cHhND!NQyZ|gUe^1ZNW=2$8|i}_;p{G-9z~Q)K9lHn8C*3 z>5ji~?D+-#;juvc?yt}NByHPC+t41k8FbV03}eqr+mN$IKkxsP_qyUw+u1)S$4+jO zzy9}vWb}YeXUPu7&fq>5T6g@)?8DtSINtBh3GTu9>)et5A$j+=FS#>i_q*p*kcoRj z{F0;H&*3_ED?{gq_~H3!z;%<&`8wrJwI|ha?5_BTOhww8x@~2>VPZup-C7pW1iyfH zSuLX_Y_TEf9cWgxMx5Cqo64R$7giqY*|;G@Z-*5;t!>t=zU0Ja+uVe}&&F!SW!K3i z;M9PcL$|%h!pm=7{u(EE?u?n1VT`fjTcfMaciP>M>MUJmla4(31+bk3h%hE{^Nv{< zVBI+lE5EDJscy^(SO-gCr8!}P#ni(@4g9Drw{Uit7mO!!R3uB^1`rH<2L!_o2$;w& zaAYIa3N!MUfKNf>)_Gfj0Eb{ZlL8y(BEU&@`o_ZE0;dJ03sx7*D5cu!s;{BODmB$yOGEiI-$IK`T57qKZoBKCe~(?Lr=EKmJWxu* zk1*npkwzXxQETedYtX2oNwbzaYP@Otgc^TA?swF9qc#!qYo0t%L$}Dy1kd9nOw53o z^$f&iB7lOn6El<8dpnVvn3-%rieP~nhY3#Si5L*{gKbd0WA{MrSKKK0mvFN`Ax9Is z{{uOi&~4u=F~XF!B)D+a5{;ojm0XrT=M8hQcG%)wqCXOl0*lx zh&?(T$l6?yEsi5qu!u%4U8U4vxv0w{V8d`Lh(VX@&LL;yQIW{r(dkuqjv-Tda8oS? z(`oqH@+^`*M=QJLmM_m9y~y8+HRYma6q`k33|2>6o^bN$=&n?4gjmL!YLQP2+2*lC zw41O@*f9Kj4ja?=I38gTwj9_$J6igDb9H#yelYUv>F@(DRATjd>{*7??9%|8iUYk3 zBTxo2x(=j1;k%{RR*}$LT1AN}R<7MBB#PA8QgpPUwL+?(5*@gw6zk|CYVD|U)1_F+ zkRJperuOgWEDWn_0Uav>R?JiS(#mP&g@tW^zFMeqq!i(~y3*~qPyBp3@Jq$bdQwRP zbCTQjgwL8;P|!?na2NVKFKi#medbd(a@HKk*^ON7!Q7+SizfY8VS>xy|a-V1%U5m@>8b_~E z;U|rwa~z*&9G$uSiN?`c3#muV@^7E%kRbj=l=cyBbGlk^4mB=qz%d zXdInI?h}opYjJs9_XyHF<99@0J zy`ypTO>ExOIJ#v18yZJvk$c)4Q0y5Y{|j~bi{E&%$VmVI00v@9M??Vs0J;DHjOjO{ z00009a7bBm000XU000XU0RWnu7ytkO2XskIMF->x0|+HHFkVo-0002rNklb;z0EW>&#dGH_OgV_JlT&e*9wdc`g$*gQrLa^iu!0AkrEF31tXNk34X4Ajwe^x7 zqkR9QwDpqR^{)${CHYG4QET0jbh&D++psLl)>^xR#&N7k&M%tpexB#w`x+=E<;hLw zB*%Asf$nPn00000000000N~kQ@&1MHdwBN4x!|p{FD1kODa9h}w+K&%Df)mupbyxH z00000000000Q3QUKp)Tt^Z|XqMg#x=00000005v5=mYwIKA;ci12!T60000000000 eeLx@hXuu6B#RiO@Zf literal 0 HcmV?d00001 diff --git a/textures/techage_frame4_ta4_top_hp.png b/textures/techage_frame4_ta4_top_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..29d2447ee5ecbf5a8195816dbe047a522984597f GIT binary patch literal 2060 zcmbW2c{Cf?8o-l^wLzwhB8?`-(im0S*lLMXNNMcGni3QtN>oPdRNG9fPZc#9?Vy!T zEs?PmRVvDOh<(?pt(HT#CzVEyL-9#HJoTvy)1ONbt znqR`&9iGU;h!+w#+yi{cFaSWHHqybFYUfEqQmzO4`Umexz99rOCA6klJK5p?Nbzj#C3$WaW(y9`#k z#fP{@(2$l~*G12(B7z>ww-NqEIT*5H(|T@-CwoM_p~r4^leQkJGU~@VqV&xhS`&wj zhi?wYhjkichioPf8xJv8qF>wBz3B*2pWki%48lz)aS;j#7#YRE4 zNo~6>(X6q80CZ```6l}t=L_A7I+dyCD39~l{O|;JTUDpr6hn>EyeJxQ3ZA9QxuKIK zqr)qim=B&yQn=8c`gS-cU^y_^5w9^QCOo0*oH}y#^r%qYHx3mfZ3KBrFF5z(cWF7b z>XEQkVv0_z?m~SlTF*$pPA0!2x~1PbNF>k<;3aKR8)BwvKx~L!V#Up4E>FOd%TLMe zEWQ)s`)JFPO`7i>`NiHZIrhwG9P_L8zA|9BRObpus@et+LNt_x6nx0#(fj`gjWby~DY#CA)Ijjc~oFd1(NYQU# zTK>P=q_Qhx>{A<2G&aoRspzYT<+Bf;=DW;lfy9~H`O;9$wESmaen^imDGVFN1JBWY zaT=FIf`5YT$y&|iOF^l5sZPK5e6X)|d;M$uWM9{3ydJD?Uv!RiiKetw7&Q50=(h>m zWhm+D)Y_t_1d*)%(h*Hmu=Ok(cuxtalzNq3-!C!DI zaBp_s^~Ij^FQZ<9f{8w;k~HtqoJABonc^>T*+CamZ((g^r&(~(^vV$C&O&s^LIzPx z%~o!CVJOkj+f}<$kGrS==56yD&_B8CI?G6XE|tIO*?Jdh!|&1 zz(I5*U3KkxPbJ;Ul;71ba7?=S9jG`G+_mN4ZpYok-B5xkJ@VfmptUmyNyY^^6-~Bp z%rg0sKHunlBo>|`9Ve7NRUIKZDO7zSuP_mhMwy8`9#u133dJn!2EB7gRN62Ko7_z_px*k`Wlutdkx6GP%DKu@*+pHX5ZJTgRf%E7*W7oI zR<8s_{ZLD)0K|C25AYa14n~rDLqX}%1Hzv=!FPF`Qo_P8@zVtei(Vnp?CnAORzCD# z<{gs1JnUk92yN{enG4cw1kH3~VSZqZCB+t7HLgU$Os6i5gY0Neh^&L1Sv7EZyOPZB z>`e1TrDwt4LesCw#PYipHE;=guRBw6*?0?i(B~d_oF3I2WSwAsR5pVjRN9Rz^6Y3C7U)DONdv&qgZJi2^*`R!%)O4eG099DkNj zMNa@S<4M*G?dc!4ub78=q&YqRTtTjgz&78-VXtnvWpwNnBt^&@wF7t7xL$ECrdXZc z7#}y)ZdKq{y`?qvVM*iGZQRxUV}~>Ux#Bsc&*0n3qYyjfZiFecywiMYK1Mk HNKE(xk)W&A literal 0 HcmV?d00001 diff --git a/textures/techage_frame8_ta4_hp.png b/textures/techage_frame8_ta4_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6886a75c2e11d9e158b78cdbde34a42629f145 GIT binary patch literal 1784 zcmbu9eKga19LImIVc4!`R?Th7LQ)C0D@u!{(YQBi@(^1QkseHjgy|?&Q-m91o5wuN zQ;kL)dh*bXyOM`AmDtQfBdeH+yXoqj&bj~H?>XP|`F!5z^?rXpe|=MacXNiStyTj7 z0E*e?bU;=S0H6SXm1W%vCh;5qD4}CKy@&_!QHaxLPX&d91tN&irvnjzq>vy0APumx zLeeKqAs3e>bR$4Xn&jacGeY>*Hae)OB8KVzSo3H>m_d-%(~;XD3*v_7{=d!5B$9(u zZClly+l{2;T;gC`TqMqGG;(fKYcam8w2#%6d4?}V!QG|gnCK|(^vk~L&qW_@n(b8F zsj*9W#8wO$4$00>?0@@NBypFF;U1Rq?Hzh!k!!CuFKMJ6BchP8Gf9T&Hl%Z(&M!T! zd?X?4U*K7pcaa~|a|++4&-#d}W?qW>Jh^&w<&Qqp{1_7{j|GXNw%L56V8ObxhDwSj2DQwFYF)! z?yxh{kB^Cl9{ZIw!OIlcOOQ2m(QcRrCwi|r`2A!@S>;029{Tx+IPEMZqtd!GbR0Kj zRDQRifi(6k*aXLzsBh|Cge2(V!%gQ35=AGs?^N+;Cg^+|ypCEU z0G~;xM--+t_ViMkD-!j=M(|pUw(dqvb5LTuwK3@y*cG9bQjl)!ngVyc0V{0nxK&Vz zLKl{A==9buy=MHR$gG&=^5tgY)(%T^{*8#uN*VePKW-BPZPtUUV!B*C7+TKBQkLG~ z7CkAkVDnsN^X%&5)BMUx^J74e8D?%# z9+sxCWHCWhJm|x57~iYCm=V6XogeHn8*l3D(df*fH=gvI2)zFXN!2=P=-Jp4>Vx6h8$?d4R6i3+XETi4WZCiAXJ^7qF#(}a82T_lgBBi>lGdA$*k;%ECiUM}Jbh^&!XHX zL$HpyQ^Pa9>Ci{}BfYL>S!!Kz+`Nx}Ip8_V=`t_*Fx>Xtqv9nMe{OXv$v1IJ!I*lk z^`d~nSJT8x$QNvqUv=qOo$|qPx75#d>YZ}uQAv`-H_0u&4M-}ymiG0LZv4#SVeqH< z_bE2q*ZR|9Ncbm~dBCOD25WHKF8#g*-Sd*4nnZkxgxwUSoQF8-4B3HdrNW5hD|y?6 zpjCG9T-9yoL=2r{llM?2?fqIwZr5tXN-}U%T?TgP$v{I(;Usb5_Xc zfA_4HhmUHkgnt7G+>d>u+X-^~u^ji6|Uiv97n=Xpovz8|NSCt8_&Q8D*&N@hP z0OZhMGEs$y!J<`0)D*!;TgDJ}lk8u%#yFuoNdq7HEve+)u;ih%$Z=Lf?R!Lop&Q@t z3!+kcjh)Uorsh?DaD~U*HLey3oZ;}yj`nkRZ?9_%oG&#gW@S%S#rpvk9k`ga>|P5@ z_U+zA=wEeVEVf-Rye(&Bp=UmmgjkSfjO;+!163ql$8KYg%x#qmb>Q@ iP@om@+x)*mTbvcc7wsW-SuOKz@>mSo&8ccn0Qn#84mI2W literal 0 HcmV?d00001 diff --git a/textures/techage_frame_ta4_hp.png b/textures/techage_frame_ta4_hp.png new file mode 100644 index 0000000000000000000000000000000000000000..26c041001dcc76a5239b6eb1234faecdf3a45083 GIT binary patch literal 1318 zcmV+>1=;$EP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O?Nymg^`Ch5u_6y#z}j1j}JOr+3iH?~6@RNosgq zvD-eLWFf@;1Wu^`^Y@^?u!;APyjlz?gbkZdK1s$++>Y(I^5*yRzR7xp=O;VeUkFSN zS9d&yzWg)n`q9ArvX^H&SzU4B3bbC_0=n7r>}~nQ70Ah9=k-i!wafltIO}kBjO6D0 z`s@v2G=GZjDEl283#4>=vw+=jDDG|F z6ZVK9R*2p}vtX~pi3Ms7_S`u0;J#lgSET5ri{UC##qGA}Op;VL5%{_D5Oc{jauJ*= zs5zMBo(u2&roF$)5j{7Cr!aysT725+E8{!+JUgeb}%wdHos4t~0M+KzH(YbyXGLf?vH*nz+n*eM6z zOvIR>V+5a!%*A;rAi%29m>F*2cVAIC%vf3gLS4Wli6E2#%X>xrn2)HT ztWG_tYEaXtNpo<)2Mr-um}^uvXWrC;nMF&Mql-Rj4AEkYDdr@}VF}X|l2M8&rJT`e zM(B*z86G(oDX#dUB@`>Mq>?Mjr~0ZjRI9P3nwvD&F#TI-MlH6~a_5dx>b`3a-Fob) z=Yd)qZup@i3>$Hzk?+(N)n{t_Lhfg3yr@lLe)qEvYA~DKLhxKpbTR`m@eJZN380{5 zGTS11FO%G4wk5%&Pysd838(QS27yiT;&woD7EVn!H?XkvA~`9m&!ub5I#ckjXGzVKgfUK=2I~z;pnHtqZspxLZS^y(f*uQ>48!n%sjz=Q8Mj^NIFpl9!Q z1Ji5dcLUR(QvR=j>9<;Z7nsh9d<#rxMZP)GS&?snNpdMV@VPV_s$4TBd~eG=;dgVY zZ3Kre!NAX&hGmc&)-i6DyCq@F29F=NM%C-O=Tleu-T`x`+)OHpC0F*_mC=LaOopz= zW?t!vZ2mB`(;EFgn;(XDTBG-}`M)%JKb!wUqjT9@t;% z(FZ8HBAb&MJ(mq#kJ{K|FvN^iHx%~c#-fj5$MAw8Vg)l;^_!Dq;!qF8o7Jn=f z{R=SMe!E;p#jpSX00v@9M??Vs0J;DHjOjO{00009a7bBm000XU000XU0RWnu7ytkO z2XskIMF->x0|+HMPVX!L0001uNklxMzR>0tg_000IagfB*vCe#PB~_dU*j%mu%8FM@DQ cDGZ@ooya#rVcp$D<^TWy07*qoM6N<$g5N!G8vp zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3yqcB?oLh5y$odI_jXrC~W5&*>fX^7~3)j2)8q z0=8lV7meSQ$_lmr{_XS+K5Pw>RUce*Zo$V!8#&=7EbC{@&0^| z%lhcrRz5-3X9aIJJ-_PY%hpcV8rohw8kEuV=xr+(wuXdP-E7Ykw|dDQrn7y;uQPcR zet)(eFsecnCT?P6!F5z*S-)v$xGsW@w|kK=m2cS5e)|S*zk6f1q)nGs6tuXlfO})K z=|<1lO+v>JnP<;0FVyXe;0wFnYv{eLvrE>2l%s7@kEzT%6wE*=vzkNl_$u!GOc5zy ziUrUs+{{RYOf(Fd-B?piGTpS97gI1q%Z)v9=E5?yAf6)^85Y=)OlL1qD!~hu0@nmG z?_)8u-#Gg#CZOkPP?8NAGpO+;(V2K9?G5!lmaZ{N*jZs*JQg5^F`OG$l!76qZ%lRa zorw5$6C<$g+t5`qY2CSi^ zqLx(Esn?)UlM`p1I_JC_F)DfS)~k2k`{1KbL4pk$T<{@;7*gaY2w@ss^b|vkF(q`G z&~!rWgc2!b&XR4`?6S`x$D9h5Pq9UdE53vhOR8L@V*6KDJ=IWSP0chcrDmHp*L({t zw$!oKx^&yMyY74Fv8Ua&&DB@e%$svRyJj}mhGTY?^H0|xd;e&{jBujEGdPC04#)j) z01KLjXG<{F@^Ef=wnWCJP=;$phdI>@$KarChP9jByQgzM`bKJh+sXinm&&QY5-h3&*DQyGzhWPE z;~en&oPJed9Yuz%$}KrnpB7yevRHe$E*!lsqd0;d_Cj-YeQ2fh(AGEjY5YE?KNUF5 zrD5-_9pNW2W1D8mD>nz2DMr;6o+KF{m!wCGJ!Ur_dKSSEW}h|P;QNw48tQ4l8a;&~ zt=ONqo?@j7Tu*bl!1WX>UEq3}({;YDSm^@SQ>=7>>uF9GxSnFA3tUfgy1?}mD_!7v ziiz%VeqyByTu-qQe`x#D1+J%9=}ve(=5!~#9l1^bN=C5{{@YD$ZD~;zh+7%ken1j#F9b^Dvft z*3LtvDbFKX*u^Uv-Kl)k=o6zE8vUX&PNlro{{xZ!2Tm)vgT`$o zZvX%Q24YJ`L;(K)x&Q%;={KVQ000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jmI^ z2qpm3$(H8;004hUL_t(o!()6fFXR88PcIk-0hW5!4bO3t0eKZZwJPok$Nih5wD9iaI7yxLo7Ho)MH;@1T002ovPDHLk FV1ilUW5xgg literal 0 HcmV?d00001