summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extranodes/aspirin.lua41
-rw-r--r--extranodes/depends.txt3
-rw-r--r--extranodes/extramesecons.lua63
-rw-r--r--extranodes/extratubes.lua241
-rw-r--r--extranodes/init.lua84
-rw-r--r--extranodes/lox.lua194
-rw-r--r--extranodes/textures/mesecons_switch_locked_frame.pngbin0 -> 178 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_input_off.pngbin0 -> 665 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_input_on.pngbin0 -> 682 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_output_off.pngbin0 -> 665 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_output_on.pngbin0 -> 682 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_side_off.pngbin0 -> 933 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_side_on.pngbin0 -> 741 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_top_off.pngbin0 -> 940 bytes
-rw-r--r--extranodes/textures/pipeworks_conductor_one_way_tube_top_on.pngbin0 -> 746 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_input.pngbin0 -> 349 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_output.pngbin0 -> 349 bytes
-rw-r--r--extranodes/textures/pipeworks_straight_tube_side.pngbin0 -> 925 bytes
-rw-r--r--extranodes/textures/pipeworks_tube_valve_side_off.pngbin0 -> 1053 bytes
-rw-r--r--extranodes/textures/pipeworks_tube_valve_side_on.pngbin0 -> 1058 bytes
-rw-r--r--extranodes/textures/technic_aspirin_bottle.pngbin0 -> 569 bytes
-rw-r--r--extranodes/textures/technic_aspirin_pill.pngbin0 -> 292 bytes
-rw-r--r--extranodes/textures/technic_cottonseed_oil.pngbin0 -> 363 bytes
-rw-r--r--extranodes/textures/technic_fbomb.pngbin0 -> 2099 bytes
-rw-r--r--extranodes/textures/technic_fbombact.pngbin0 -> 2427 bytes
-rw-r--r--extranodes/textures/technic_lox.pngbin0 -> 352 bytes
-rw-r--r--extranodes/textures/technic_snowflake.pngbin0 -> 635 bytes
-rw-r--r--extranodes/trampoline.lua94
-rw-r--r--technic/crafts.lua15
-rw-r--r--technic/depends.txt2
-rw-r--r--technic/items.lua6
-rw-r--r--technic/machines/HV/compressor.lua12
-rw-r--r--technic/machines/HV/electric_furnace.lua17
-rw-r--r--technic/machines/HV/grinder.lua13
-rw-r--r--technic/machines/HV/init.lua4
-rw-r--r--technic/machines/LV/cnc.lua100
-rw-r--r--technic/machines/LV/cnc_api.lua185
-rw-r--r--technic/machines/LV/cnc_nodes.lua357
-rw-r--r--technic/machines/LV/geothermal.lua10
-rw-r--r--technic/machines/LV/init.lua1
-rw-r--r--technic/machines/LV/lamp.lua250
-rw-r--r--technic/machines/MV/centrifuge.lua2
-rw-r--r--technic/machines/MV/init.lua4
-rw-r--r--technic/machines/init.lua2
-rw-r--r--technic/machines/register/alloy_recipes.lua27
-rw-r--r--technic/machines/register/centrifuge_recipes.lua20
-rw-r--r--technic/machines/register/common.lua32
-rw-r--r--technic/machines/register/compressor_recipes.lua63
-rw-r--r--technic/machines/register/extractor_recipes.lua82
-rw-r--r--technic/machines/register/grinder_recipes.lua62
-rw-r--r--technic/models/technic_arch_216.obj190
-rw-r--r--technic/models/technic_arch_216_flange.obj134
-rw-r--r--technic/models/technic_beam_216.obj50
-rw-r--r--technic/models/technic_beam_216_cross.obj114
-rw-r--r--technic/models/technic_beam_216_cross_column.obj169
-rw-r--r--technic/models/technic_beam_216_tee.obj91
-rw-r--r--technic/models/technic_block_fluted.obj826
-rw-r--r--technic/models/technic_cylinder_fluted.obj919
-rw-r--r--technic/models/technic_cylinder_half.obj188
-rw-r--r--technic/models/technic_cylinder_half_corner.obj638
-rw-r--r--technic/models/technic_diagonal_truss.obj74
-rw-r--r--technic/models/technic_diagonal_truss_cross.obj164
-rw-r--r--technic/models/technic_inner_curved_edge.obj137
-rw-r--r--technic/models/technic_opposed_curved_edge.obj244
-rw-r--r--technic/models/technic_sphere_half.obj1210
-rw-r--r--technic/models/technic_sphere_quarter.obj699
-rw-r--r--technic/models/technic_tile_beveled.obj66
-rw-r--r--technic/sounds/technic_lawn_trimmer.oggbin0 -> 53548 bytes
-rw-r--r--technic/sounds/technic_walking_tractor.oggbin0 -> 12176 bytes
-rw-r--r--technic/sounds/trampoline_boing.oggbin0 -> 7565 bytes
-rw-r--r--technic/textures/technic_chainsaw_mini.pngbin0 -> 546 bytes
-rw-r--r--technic/textures/technic_chainsaw_mk2.pngbin0 -> 541 bytes
-rw-r--r--technic/textures/technic_cnc_arch216.pngbin0 -> 5406 bytes
-rw-r--r--technic/textures/technic_cnc_arch216_flange.pngbin0 -> 4561 bytes
-rw-r--r--technic/textures/technic_cnc_beam216.pngbin0 -> 4183 bytes
-rw-r--r--technic/textures/technic_cnc_beam216_cross.pngbin0 -> 5777 bytes
-rw-r--r--technic/textures/technic_cnc_beam216_cross_column.pngbin0 -> 7628 bytes
-rw-r--r--technic/textures/technic_cnc_beam216_tee.pngbin0 -> 5448 bytes
-rw-r--r--technic/textures/technic_cnc_block_fluted.pngbin0 -> 4981 bytes
-rw-r--r--technic/textures/technic_cnc_cylinder_fluted.pngbin0 -> 10070 bytes
-rw-r--r--technic/textures/technic_cnc_cylinder_half.pngbin0 -> 6647 bytes
-rw-r--r--technic/textures/technic_cnc_cylinder_half_corner.pngbin0 -> 5500 bytes
-rw-r--r--technic/textures/technic_cnc_diagonal_truss.pngbin0 -> 5067 bytes
-rw-r--r--technic/textures/technic_cnc_diagonal_truss_cross.pngbin0 -> 7356 bytes
-rw-r--r--technic/textures/technic_cnc_innercurvededge.pngbin0 -> 7463 bytes
-rw-r--r--technic/textures/technic_cnc_opposedcurvededge.pngbin0 -> 7385 bytes
-rw-r--r--technic/textures/technic_cnc_sphere_half.pngbin0 -> 8677 bytes
-rw-r--r--technic/textures/technic_cnc_sphere_quarter.pngbin0 -> 7746 bytes
-rw-r--r--technic/textures/technic_cnc_tile_beveled.pngbin0 -> 3806 bytes
-rw-r--r--technic/textures/technic_control_logic_unit_adv.pngbin0 -> 623 bytes
-rw-r--r--technic/textures/technic_cornbread.pngbin0 -> 441 bytes
-rw-r--r--technic/textures/technic_cornmeal.pngbin0 -> 226 bytes
-rw-r--r--technic/textures/technic_diamond_seed.pngbin0 -> 352 bytes
-rw-r--r--technic/textures/technic_fall_dampener_bottom.pngbin0 -> 263 bytes
-rw-r--r--technic/textures/technic_fall_dampener_side.pngbin0 -> 571 bytes
-rw-r--r--technic/textures/technic_fall_dampener_top.pngbin0 -> 629 bytes
-rw-r--r--technic/textures/technic_hv_compressor_bottom.pngbin0 -> 2049 bytes
-rw-r--r--technic/textures/technic_hv_compressor_front.pngbin0 -> 2539 bytes
-rw-r--r--technic/textures/technic_hv_compressor_front_active.pngbin0 -> 2573 bytes
-rw-r--r--technic/textures/technic_hv_compressor_side.pngbin0 -> 2542 bytes
-rw-r--r--technic/textures/technic_hv_compressor_side_tube.pngbin0 -> 2565 bytes
-rw-r--r--technic/textures/technic_hv_compressor_top.pngbin0 -> 2323 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_bottom.pngbin0 -> 2049 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_front.pngbin0 -> 2527 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_front_active.pngbin0 -> 2573 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_side.pngbin0 -> 2542 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_side_tube.pngbin0 -> 2565 bytes
-rw-r--r--technic/textures/technic_hv_electric_furnace_top.pngbin0 -> 2323 bytes
-rw-r--r--technic/textures/technic_hv_grinder_bottom.pngbin862 -> 2049 bytes
-rw-r--r--technic/textures/technic_hv_grinder_front.pngbin716 -> 2639 bytes
-rw-r--r--technic/textures/technic_hv_grinder_front_active.pngbin733 -> 2507 bytes
-rw-r--r--technic/textures/technic_hv_grinder_side.pngbin753 -> 2542 bytes
-rw-r--r--technic/textures/technic_hv_grinder_side_tube.pngbin791 -> 2565 bytes
-rw-r--r--technic/textures/technic_hv_grinder_top.pngbin616 -> 2323 bytes
-rw-r--r--technic/textures/technic_latex_foam.pngbin0 -> 3841 bytes
-rw-r--r--technic/textures/technic_lawn_trimmer.pngbin0 -> 407 bytes
-rw-r--r--technic/textures/technic_lv_lamp_bottom.pngbin0 -> 1217 bytes
-rw-r--r--technic/textures/technic_lv_lamp_side.pngbin0 -> 1153 bytes
-rw-r--r--technic/textures/technic_lv_lamp_top.pngbin0 -> 1017 bytes
-rw-r--r--technic/textures/technic_lv_led.pngbin0 -> 961 bytes
-rw-r--r--technic/textures/technic_lv_led_inv.pngbin0 -> 632 bytes
-rw-r--r--technic/textures/technic_planter.pngbin0 -> 468 bytes
-rw-r--r--technic/textures/technic_trampoline_side.pngbin0 -> 628 bytes
-rw-r--r--technic/textures/technic_trampoline_top.pngbin0 -> 625 bytes
-rw-r--r--technic/textures/technic_walking_tractor.pngbin0 -> 378 bytes
-rw-r--r--technic/textures/technicx32/technic_cornbread.pngbin0 -> 13813 bytes
-rw-r--r--technic/tools/chainsaw.lua326
-rw-r--r--technic/tools/init.lua4
-rw-r--r--technic/tools/lawn_trimmer.lua176
-rw-r--r--technic/tools/planter.lua265
-rw-r--r--technic/tools/prospector.lua2
-rw-r--r--technic/tools/sonic_screwdriver.lua3
-rw-r--r--technic/tools/walking_tractor.lua263
133 files changed, 8829 insertions, 109 deletions
diff --git a/extranodes/aspirin.lua b/extranodes/aspirin.lua
new file mode 100644
index 0000000..a9ddad8
--- /dev/null
+++ b/extranodes/aspirin.lua
@@ -0,0 +1,41 @@
+-- aspirin
+
+-- makes any sence only when there is hunger as a separate status of the player
+-- also it uses willow twigs - ethereal dependency
+-- A bottle of aspirin pills heals the player immediately.
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("hunger") and minetest.get_modpath("ethereal") then
+
+ minetest.register_craftitem(":technic:aspirin_pill", {
+ description = S("Aspirin pill"),
+ inventory_image = "technic_aspirin_pill.png",
+ on_use = function(itemstack, user, pointed_thing)
+ user:set_hp(user:get_hp() + 2)
+ itemstack:take_item()
+ return itemstack
+ end
+ })
+
+ minetest.register_craftitem(":technic:aspirin_bottle", {
+ description = S("Aspirin pills"),
+ inventory_image = "technic_aspirin_bottle.png",
+ on_use = function(itemstack, user, pointed_thing)
+ user:set_hp(20)
+ itemstack:take_item()
+ return itemstack
+ end
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = "technic:aspirin_bottle",
+ recipe = {"technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "technic:aspirin_pill",
+ "technic:aspirin_pill", "vessels:glass_bottle"}
+ })
+
+end
+
diff --git a/extranodes/depends.txt b/extranodes/depends.txt
index 15b9ef5..fa27879 100644
--- a/extranodes/depends.txt
+++ b/extranodes/depends.txt
@@ -1,4 +1,7 @@
default
+technic?
+pipeworks?
+mesecons?
technic_worldgen
concrete
unifieddyes?
diff --git a/extranodes/extramesecons.lua b/extranodes/extramesecons.lua
new file mode 100644
index 0000000..05581c5
--- /dev/null
+++ b/extranodes/extramesecons.lua
@@ -0,0 +1,63 @@
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("mesecons") then
+
+ mesecon.register_node("extranodes:mesecon_switch_protected", {
+ paramtype2="facedir",
+ description="Switch (protected)",
+ is_ground_content = false,
+ sounds = default.node_sound_stone_defaults(),
+ after_place_node = function(pos, placer, itemstack, pointed_thing)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ end,
+ on_rightclick = function (pos, node, player)
+ local meta = minetest.get_meta(pos)
+ local owner = meta:get_string("owner")
+ local pname = player:get_player_name();
+ if owner ~= pname then
+ minetest.chat_send_player(pname, "This switch can only be used by " .. owner)
+ return
+ end
+ if(mesecon.flipstate(pos, node) == "on") then
+ mesecon.receptor_on(pos)
+ else
+ mesecon.receptor_off(pos)
+ end
+ minetest.sound_play("mesecons_switch", {pos=pos})
+ end
+ },{
+ groups = {dig_immediate=2},
+ tiles = { "mesecons_switch_side.png",
+ "mesecons_switch_side.png",
+ "mesecons_switch_side.png^default_key.png^[transformR180",
+ "mesecons_switch_side.png^default_key.png^[transformR180FX",
+ "mesecons_switch_side.png",
+ "mesecons_switch_off.png^mesecons_switch_locked_frame.png"},
+ mesecons = {receptor = { state = mesecon.state.off }}
+ },{
+ groups = {dig_immediate=2, not_in_creative_inventory=1},
+ tiles = { "mesecons_switch_side.png",
+ "mesecons_switch_side.png",
+ "mesecons_switch_side.png^default_key.png^[transformR180",
+ "mesecons_switch_side.png^default_key.png^[transformR180FX",
+ "mesecons_switch_side.png",
+ "mesecons_switch_on.png^mesecons_switch_locked_frame.png"},
+ mesecons = {receptor = { state = mesecon.state.on }}
+ })
+
+ minetest.register_craft({
+ output = "extranodes:mesecon_switch_protected_off 2",
+ recipe = {
+ {"default:steel_ingot", "default:cobble", "default:steel_ingot"},
+ {"group:mesecon_conductor_craftable","default:skeleton_key", "group:mesecon_conductor_craftable"},
+ }
+ })
+
+ minetest.register_craft({
+ output = "extranodes:mesecon_switch_protected_off",
+ type = "shapeless",
+ recipe = {"default:skeleton_key", "mesecons_switch:mesecon_switch_off"}
+ })
+
+end \ No newline at end of file
diff --git a/extranodes/extratubes.lua b/extranodes/extratubes.lua
new file mode 100644
index 0000000..e624c87
--- /dev/null
+++ b/extranodes/extratubes.lua
@@ -0,0 +1,241 @@
+-- EXTRATUBES
+-- This files add some new tube types, to widen the pipeworks mod assortment of
+-- available parts in order to better meet the needs of expansive automation
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+if minetest.get_modpath("pipeworks") then
+
+ ---------------------------------------------------------------------
+ -- straight-only pipe
+ -- does not connect side-wise, allows items in both directions
+ -- a counterpart to straight-only pipe, and a cheap alternative
+ -- to one-way tube for long segments of parallel pipes
+ ---------------------------------------------------------------------
+
+ minetest.register_node(":pipeworks:straight_tube", {
+ description = S("Straight-only Tube"),
+ tiles = {"pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_straight_tube_side.png",
+ "pipeworks_straight_tube_side.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ local opdir = vector.multiply(dir, -1)
+ return vector.equals(dir, direction) or vector.equals(opdir, direction)
+ end,
+ priority = 60 -- Higher than normal tubes, but lower than one-way tubes
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:straight_tube 3",
+ recipe = {
+ { "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" },
+ },
+ })
+
+
+ ---------------------------------------------------------------------
+ -- conducting one-way tube - to stop making those ugly shunting wires
+ ---------------------------------------------------------------------
+
+
+ if pipeworks.enable_one_way_tube and pipeworks.enable_conductor_tube then
+ minetest.register_node(":pipeworks:conductor_one_way_tube_on", {
+ description = S("One-way Conducting Tube"),
+ tiles = {"pipeworks_conductor_one_way_tube_top_on.png",
+ "pipeworks_conductor_one_way_tube_top_on.png",
+ "pipeworks_conductor_one_way_tube_output_on.png",
+ "pipeworks_conductor_one_way_tube_input_on.png",
+ "pipeworks_conductor_one_way_tube_side_on.png",
+ "pipeworks_conductor_one_way_tube_top_on.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2, not_in_creative_inventory = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ return vector.equals(dir, direction)
+ end,
+ priority = 75 -- Higher than normal tubes, but lower than receivers
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ conductor = {state = mesecon.state.on,
+ rules = pipeworks.mesecons_rules,
+ onstate = "pipeworks:conductor_one_way_tube_on",
+ offstate = "pipeworks:conductor_one_way_tube_off"
+ }
+ },
+ drop = "pipeworks:conductor_one_way_tube_off",
+ })
+
+ minetest.register_node(":pipeworks:conductor_one_way_tube_off", {
+ description = S("One-way Conducting Tube"),
+ tiles = {"pipeworks_conductor_one_way_tube_top_off.png",
+ "pipeworks_conductor_one_way_tube_top_off.png",
+ "pipeworks_conductor_one_way_tube_output_off.png",
+ "pipeworks_conductor_one_way_tube_input_off.png",
+ "pipeworks_conductor_one_way_tube_side_off.png",
+ "pipeworks_conductor_one_way_tube_top_off.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ return vector.equals(dir, direction)
+ end,
+ priority = 75 -- Higher than normal tubes, but lower than receivers
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ conductor = {state = mesecon.state.off,
+ rules = pipeworks.mesecons_rules,
+ onstate = "pipeworks:conductor_one_way_tube_on",
+ offstate = "pipeworks:conductor_one_way_tube_off"
+ }
+ },
+ drop = "pipeworks:conductor_one_way_tube_off",
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:conductor_one_way_tube_off",
+ recipe = {
+ { "pipeworks:one_way_tube", "mesecons:wire_00000000_off"}
+ },
+ })
+ end
+
+ ---------------------------------------------------------------------
+ -- mesecon-controlled valve (bidirectional)
+ ---------------------------------------------------------------------
+
+ minetest.register_node(":pipeworks:tube_valve_on", {
+ description = S("Tube Valve"),
+ tiles = {"pipeworks_tube_valve_side_on.png",
+ "pipeworks_tube_valve_side_on.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_tube_valve_side_on.png",
+ "pipeworks_tube_valve_side_on.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2, not_in_creative_inventory = 1},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local dir = pipeworks.facedir_to_right_dir(node.param2)
+ local opdir = vector.multiply(dir, -1)
+ return vector.equals(dir, direction) or vector.equals(opdir, direction)
+ end,
+ priority = 50 -- regular tube
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ effector = {
+ rules = pipeworks.mesecons_rules,
+ action_on = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_on", param2 = node.param2 })
+ end,
+ action_off = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_off", param2 = node.param2 })
+ end,
+ }
+ },
+ drop = "pipeworks:tube_valve_off",
+ })
+
+ minetest.register_node(":pipeworks:tube_valve_off", {
+ description = S("Tube Valve"),
+ tiles = {"pipeworks_tube_valve_side_off.png",
+ "pipeworks_tube_valve_side_off.png",
+ "pipeworks_straight_tube_output.png",
+ "pipeworks_straight_tube_input.png",
+ "pipeworks_tube_valve_side_off.png",
+ "pipeworks_tube_valve_side_off.png"},
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {type = "fixed",
+ fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, mesecon = 2},
+ sounds = default.node_sound_wood_defaults(),
+ tube = {
+ connect_sides = {left = 1, right = 1},
+ can_go = function(pos, node, velocity, stack)
+ return {velocity}
+ end,
+ can_insert = function(pos, node, stack, direction)
+ return false
+ end,
+ priority = 50 -- regular tube
+ },
+ after_place_node = pipeworks.after_place,
+ after_dig_node = pipeworks.after_dig,
+ mesecons = {
+ effector = {
+ rules = pipeworks.mesecons_rules,
+ action_on = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_on", param2 = node.param2 })
+ end,
+ action_off = function (pos, node)
+ minetest.swap_node(pos, {name = "pipeworks:tube_valve_off", param2 = node.param2 })
+ end,
+ }
+ },
+ drop = "pipeworks:tube_valve_off",
+ })
+
+ minetest.register_craft({
+ output = "pipeworks:tube_valve_off 2",
+ recipe = {
+ { "pipeworks:tube_1", "homedecor:plastic_sheeting", "pipeworks:tube_1"},
+ { "", "mesecons:wire_00000000_off", ""}
+ },
+ })
+
+
+end \ No newline at end of file
diff --git a/extranodes/init.lua b/extranodes/init.lua
index eb54067..69cb820 100644
--- a/extranodes/init.lua
+++ b/extranodes/init.lua
@@ -3,6 +3,23 @@
-- Boilerplate to support localized strings if intllib mod is installed.
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+-- some extras to the extras
+local path = string.gsub(technic.modpath, "technic/technic", "technic/extranodes")
+dofile(path.."/aspirin.lua")
+dofile(path.."/trampoline.lua")
+dofile(path.."/extratubes.lua")
+dofile(path.."/extramesecons.lua")
+dofile(path.."/lox.lua")
+
+if minetest.get_modpath("bakedclay") then
+ -- bring back them sticks
+ minetest.register_craft( {
+ type = "shapeless",
+ output = "default:stick",
+ recipe = {"default:dry_shrub"}
+ })
+end
+
if minetest.get_modpath("moreblocks") then
-- register stairsplus/circular_saw nodes
@@ -107,6 +124,7 @@ local iclip_def = {
drawtype = "mesh",
mesh = "technic_insulator_clip.obj",
tiles = {"technic_insulator_clip.png"},
+ paramtype2 = "facedir",
is_ground_content = false,
groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1 },
sounds = default.node_sound_stone_defaults(),
@@ -185,3 +203,69 @@ minetest.register_craft({
{ "technic:raw_latex", "default:fence_wood", "technic:raw_latex"},
}
})
+
+-- Artificial diamonds
+
+minetest.register_craftitem(":technic:diamond_seed", {
+ description = S("Diamond Seed"),
+ inventory_image = "technic_diamond_seed.png",
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:diamond_seed",
+ recipe = "technic:graphite"
+})
+
+-- Cotton seed oil: fuel and fertilizer
+
+if minetest.get_modpath("farming") then
+ if minetest.get_modpath("bonemeal") then
+ minetest.register_craftitem(":technic:cottonseed_oil", {
+ description = S("Cottonseed Oil"),
+ inventory_image = "technic_cottonseed_oil.png",
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return
+ end
+ if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
+ return
+ end
+ if not is_creative(user:get_player_name()) then
+ itemstack:take_item()
+ end
+ bonemeal:on_use(pointed_thing.under, 4)
+ return itemstack
+ end,
+ })
+ else
+ minetest.register_craftitem(":technic:cottonseed_oil", {
+ description = S("Cottonseed Oil"),
+ inventory_image = "technic_cottonseed_oil.png",
+ })
+ end
+
+ minetest.register_craft({
+ type = "fuel",
+ recipe = "technic:cottonseed_oil",
+ burntime = 20,
+ })
+
+end
+
+
+-- -- Additional recipe for straw blocks out of straw mat from cottages (if present)
+-- -- not to let the centifuge output go to waste, since farming:straw can be used with a saw...
+--
+-- if minetest.get_modpath("cottages") and minetest.get_modpath("farming") then
+-- minetest.register_craft({
+-- output = "farming:straw 2",
+-- recipe = {
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- { "cottages:straw_mat", "cottages:straw_mat", "cottages:straw_mat" },
+-- }
+-- })
+-- end
+
+
diff --git a/extranodes/lox.lua b/extranodes/lox.lua
new file mode 100644
index 0000000..3aaadee
--- /dev/null
+++ b/extranodes/lox.lua
@@ -0,0 +1,194 @@
+-- An small arsenal of tools to battle the lava craters
+
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+local freezing_rules = {
+ ["default:water_source"] = "default:ice",
+ ["default:water_flowing"] = "default:snowblock",
+ ["default:river_water_source"] = "default:ice",
+ ["default:river_water_flowing"] = "default:snowblock",
+ ["default:lava_source"] = "default:obsidian",
+ ["default:lava_flowing"] = "default:stone",
+ ["fire:basic_flame"] = "air",
+ ["default:dirt"] = "default:dirt_with_snow",
+ ["ethereal:fiery_dirt"] = "default:dirt_with_snow",
+ ["ethereal:mushroom_dirt"] = "default:dirt_with_snow",
+}
+
+local function freeze(user, pos, radius)
+
+ -- if the function is used by a node: user is a string
+ -- if it's called by an item, user is a PlayerRef
+
+ if type(user) == 'string' then
+ if minetest.is_protected(pos, user) then
+ minetest.record_protection_violation(pos, user)
+ return
+ end
+ else
+ if minetest.is_protected(pos, user:get_player_name()) then
+ minetest.record_protection_violation(pos, user:get_player_name())
+ return
+ end
+ end
+
+ local loc = {}
+ local wrk = false
+ -- R = 2, d = 3
+ -- R = 10, d = 5
+ local depth = math.floor(0.25*radius+2.5)
+
+ for y = 0,depth,1 do
+ for x = -radius,radius,1 do
+ for z = -radius,radius,1 do
+ loc = {x = pos.x - x, y = pos.y - y, z = pos.z - z}
+ if freezing_rules[minetest.get_node(loc).name] then
+ wrk = true
+ minetest.swap_node(loc, {name = freezing_rules[minetest.get_node(loc).name]})
+ end
+ if math.random(1,5) == 5 then
+ if minetest.get_node({x = loc.x, y = loc.y+1, z = loc.z}).name == "air"
+ and minetest.get_node(loc).name ~= "air"
+ and minetest.get_node(loc).name ~= "stairs:slab_snowblock" then
+ minetest.set_node({x = loc.x, y = loc.y+1, z = loc.z}, {name = "stairs:slab_snowblock"})
+ end
+ end
+ end
+ end
+ end
+
+ if wrk then
+ minetest.sound_play("default_cool_lava", {gain = 1, pos = pos})
+ end
+
+ return true
+
+end
+
+minetest.register_craftitem(":technic:lox", {
+ description = S("Liquid Oxygen"),
+ tiles = {"technic_lox.png"},
+ inventory_image = "technic_lox.png",
+ wield_image = "technic_lox.png",
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ liquids_pointable = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
+ sounds = default.node_sound_defaults(),
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+
+ itemstack:take_item()
+
+ freeze(user, pointed_thing.under, 2)
+
+ local uinv = user:get_inventory()
+ if uinv:room_for_item("main", "vessels:steel_bottle 1") then
+ uinv:add_item("main", "vessels:steel_bottle 1")
+ else
+ minetest.item_drop(ItemStack("vessels:steel_bottle 1"), user, user:getpos())
+ end
+
+ user:set_hp(user:get_hp() - 1)
+
+ return itemstack
+ end
+})
+
+minetest.register_node(":technic:fbomb", {
+ description = S("F-Bomb"),
+ tiles = {"technic_fbomb.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {dig_immediate = 2, falling_node = 1},
+ sounds = default.node_sound_defaults(),
+ on_punch = function(pos, node, player, pointed_thing)
+ minetest.remove_node(pos)
+ minetest.place_node(pos, {name="technic:fbombact"})
+ local nm = minetest.get_meta(pos)
+ nm:set_string("player", player:get_player_name())
+ end
+})
+
+minetest.register_node(":technic:fbombact", {
+ description = S("F-Bomb Active"),
+ tiles = {"technic_fbombact.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ walkable = false,
+ light_source = 3,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
+ },
+ groups = {falling_node = 1, cracky = 1, not_in_creative_inventory = 1},
+ sounds = default.node_sound_defaults(),
+ on_construct = function(pos)
+ local nm = minetest.get_meta(pos)
+ local id = minetest.add_particlespawner({
+ amount = 30,
+ time = 0,
+ minpos = pos,
+ maxpos = pos,
+ minvel = {x=-2, y=0, z=-2},
+ maxvel = {x=2, y=0, z=2},
+ minacc = {x=0, y=0, z=0},
+ maxacc = {x=0.5, y=0, z=0.5},
+ minexptime = 1,
+ maxexptime = 5,
+ minsize = 1,
+ maxsize = 4,
+ collisiondetection = false,
+ vertical = false,
+ texture = "technic_snowflake.png",
+ glow = 2
+ })
+ nm:set_int("id", id)
+ local tm = minetest.get_node_timer(pos)
+ tm:start(5)
+ end,
+ on_timer = function(pos, elapsed)
+ local nm = minetest.get_meta(pos)
+ local pn = nm:get_string("player")
+ freeze(pn, pos, 10)
+ minetest.remove_node(pos)
+ return false
+ end,
+ on_destruct = function(pos)
+ local nm = minetest.get_meta(pos)
+ if (nm:get_int("id")) then
+ minetest.delete_particlespawner(nm:get_int("id"))
+ end
+ end,
+ drop = "technic:fbomb"
+
+})
+
+minetest.register_craft({
+ output = "technic:fbomb 3",
+ recipe = {
+ { "technic:lox", "tnt:tnt", "technic:lox"},
+ { "tnt:tnt", "technic:lox", "tnt:tnt"},
+ { "technic:lox", "tnt:tnt", "technic:lox"}
+ },
+ })
+
+-- since there will be a significant surplus of snow slabs, a recipe for recycling is in order
+minetest.register_craft({
+ output = "default:snowblock",
+ type = "shapeless",
+ recipe = { "stairs:slab_snowblock", "stairs:slab_snowblock" },
+ }) \ No newline at end of file
diff --git a/extranodes/textures/mesecons_switch_locked_frame.png b/extranodes/textures/mesecons_switch_locked_frame.png
new file mode 100644
index 0000000..239f97e
--- /dev/null
+++ b/extranodes/textures/mesecons_switch_locked_frame.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png
new file mode 100644
index 0000000..8f77487
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_input_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png
new file mode 100644
index 0000000..85b20aa
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_input_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png
new file mode 100644
index 0000000..8f77487
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_output_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png
new file mode 100644
index 0000000..85b20aa
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_output_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png
new file mode 100644
index 0000000..beab600
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_side_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png
new file mode 100644
index 0000000..c0150e2
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_side_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png b/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png
new file mode 100644
index 0000000..36c7684
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_top_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png b/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png
new file mode 100644
index 0000000..080c09c
--- /dev/null
+++ b/extranodes/textures/pipeworks_conductor_one_way_tube_top_on.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_input.png b/extranodes/textures/pipeworks_straight_tube_input.png
new file mode 100644
index 0000000..8490858
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_input.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_output.png b/extranodes/textures/pipeworks_straight_tube_output.png
new file mode 100644
index 0000000..8490858
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_output.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_straight_tube_side.png b/extranodes/textures/pipeworks_straight_tube_side.png
new file mode 100644
index 0000000..4e03b3d
--- /dev/null
+++ b/extranodes/textures/pipeworks_straight_tube_side.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_tube_valve_side_off.png b/extranodes/textures/pipeworks_tube_valve_side_off.png
new file mode 100644
index 0000000..56186e6
--- /dev/null
+++ b/extranodes/textures/pipeworks_tube_valve_side_off.png
Binary files differ
diff --git a/extranodes/textures/pipeworks_tube_valve_side_on.png b/extranodes/textures/pipeworks_tube_valve_side_on.png
new file mode 100644
index 0000000..f25ad9c
--- /dev/null
+++ b/extranodes/textures/pipeworks_tube_valve_side_on.png
Binary files differ
diff --git a/extranodes/textures/technic_aspirin_bottle.png b/extranodes/textures/technic_aspirin_bottle.png
new file mode 100644
index 0000000..64c2b03
--- /dev/null
+++ b/extranodes/textures/technic_aspirin_bottle.png
Binary files differ
diff --git a/extranodes/textures/technic_aspirin_pill.png b/extranodes/textures/technic_aspirin_pill.png
new file mode 100644
index 0000000..f7fccb8
--- /dev/null
+++ b/extranodes/textures/technic_aspirin_pill.png
Binary files differ
diff --git a/extranodes/textures/technic_cottonseed_oil.png b/extranodes/textures/technic_cottonseed_oil.png
new file mode 100644
index 0000000..be4550e
--- /dev/null
+++ b/extranodes/textures/technic_cottonseed_oil.png
Binary files differ
diff --git a/extranodes/textures/technic_fbomb.png b/extranodes/textures/technic_fbomb.png
new file mode 100644
index 0000000..edae1a1
--- /dev/null
+++ b/extranodes/textures/technic_fbomb.png
Binary files differ
diff --git a/extranodes/textures/technic_fbombact.png b/extranodes/textures/technic_fbombact.png
new file mode 100644
index 0000000..061f23f
--- /dev/null
+++ b/extranodes/textures/technic_fbombact.png
Binary files differ
diff --git a/extranodes/textures/technic_lox.png b/extranodes/textures/technic_lox.png
new file mode 100644
index 0000000..341cba3
--- /dev/null
+++ b/extranodes/textures/technic_lox.png
Binary files differ
diff --git a/extranodes/textures/technic_snowflake.png b/extranodes/textures/technic_snowflake.png
new file mode 100644
index 0000000..1e039af
--- /dev/null
+++ b/extranodes/textures/technic_snowflake.png
Binary files differ
diff --git a/extranodes/trampoline.lua b/extranodes/trampoline.lua
new file mode 100644
index 0000000..d36e356
--- /dev/null
+++ b/extranodes/trampoline.lua
@@ -0,0 +1,94 @@
+-- bouncy-bouncy
+-- this adds two useful kinds of nodes. Two fall damage dampeners (50% and 100%)
+-- and a trampoline. Unlike on the mushroom spores from ethereal, players can
+-- freely jump on the dampeners.
+-- The latex foam adds use to sulphur, and may be employed for something else later.
+
+local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
+
+
+minetest.register_craftitem(":technic:latex_foam", {
+ description = S("Latex Foam"),
+ inventory_image = "technic_latex_foam.png",
+})
+
+minetest.register_node(":technic:fall_dampener_50", {
+ description = S("Fall Dampener 50%"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5,-0.5,-0.5,0.5,0,0.5}
+ },
+ tiles = { "technic_fall_dampener_top.png",
+ "technic_fall_dampener_bottom.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png"},
+ groups = {crumbly = 3, fall_damage_add_percent = -50},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node(":technic:fall_dampener_100", {
+ description = S("Fall Dampener 100%"),
+ drawtype = "normal",
+ tiles = {"technic_fall_dampener_top.png",
+ "technic_fall_dampener_bottom.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png",
+ "technic_fall_dampener_side.png"},
+ groups = {crumbly = 3, fall_damage_add_percent = -100},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node(":technic:trampoline", {
+ description = S("Trampoline"),
+ drawtype = "normal",
+ tiles = {"technic_trampoline_top.png",
+ "technic_fall_dampener_bottom.png", -- cost cuts
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png",
+ "technic_trampoline_side.png"},
+ groups = {crumbly = 3, bouncy = 100, fall_damage_add_percent = -100},
+ sounds = {footstep = {name = "trampoline_boing", gain = 1.0}}
+})
+
+
+minetest.register_craft({
+ output = "technic:fall_dampener_50",
+ recipe = {
+ { "", "", ""},
+ { "technic:raw_latex", "technic:raw_latex", "technic:raw_latex"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ }
+})
+
+minetest.register_craft({
+ output = "technic:fall_dampener_100",
+ recipe = {
+ { "technic:raw_latex", "technic:raw_latex", "technic:raw_latex"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ { "technic:latex_foam", "technic:latex_foam", "technic:latex_foam"},
+ }
+})
+
+minetest.register_craft({
+ output = "technic:trampoline",
+ recipe = {
+ { "dye:green", "dye:green", "dye:green"},
+ { "technic:rubber", "technic:rubber", "technic:rubber"},
+ { "technic:rubber", "technic:rubber", "technic:rubber"},
+ }
+})
+
+
diff --git a/technic/crafts.lua b/technic/crafts.lua
index 14bafd3..4c8b799 100644
--- a/technic/crafts.lua
+++ b/technic/crafts.lua
@@ -8,6 +8,12 @@ minetest.clear_craft({
output = "default:bronze_ingot"
})
+minetest.register_craft({
+ type = "shapeless",
+ output = "default:bronze_ingot 9" ,
+ recipe = {"default:bronzeblock"}
+})
+
-- Accelerator tube
if pipeworks.enable_accelerator_tube then
minetest.clear_craft({
@@ -160,6 +166,15 @@ minetest.register_craft({
})
minetest.register_craft({
+ output = 'technic:control_logic_unit_adv',
+ recipe = {
+ {'technic:fine_gold_wire', 'technic:fine_gold_wire', 'technic:fine_gold_wire'},
+ {'technic:silicon_wafer', 'technic:silicon_wafer', 'technic:silicon_wafer'},
+ {'default:copper_ingot', 'technic:chromium_ingot', 'default:copper_ingot'},
+ }
+})
+
+minetest.register_craft({
output = 'technic:mixed_metal_ingot 9',
recipe = {
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
diff --git a/technic/depends.txt b/technic/depends.txt
index 5bf9f9f..c052452 100644
--- a/technic/depends.txt
+++ b/technic/depends.txt
@@ -9,4 +9,4 @@ digilines?
digiline_remote?
intllib?
unified_inventory?
-vector_extras?
+vector_extras? \ No newline at end of file
diff --git a/technic/items.lua b/technic/items.lua
index a0edb96..ec12a8f 100644
--- a/technic/items.lua
+++ b/technic/items.lua
@@ -115,6 +115,12 @@ minetest.register_craftitem( "technic:control_logic_unit", {
inventory_image = "technic_control_logic_unit.png",
})
+minetest.register_craftitem( "technic:control_logic_unit_adv", {
+ description = S("Advanced Control Logic Unit"),
+ inventory_image = "technic_control_logic_unit_adv.png",
+})
+
+
minetest.register_craftitem("technic:mixed_metal_ingot", {
description = S("Mixed Metal Ingot"),
inventory_image = "technic_mixed_metal_ingot.png",
diff --git a/technic/machines/HV/compressor.lua b/technic/machines/HV/compressor.lua
new file mode 100644
index 0000000..12e165b
--- /dev/null
+++ b/technic/machines/HV/compressor.lua
@@ -0,0 +1,12 @@
+-- HV compressor
+
+minetest.register_craft({
+ output = 'technic:hv_compressor',
+ recipe = {
+ {'technic:carbon_plate', 'technic:mv_compressor', 'technic:composite_plate'},
+ {'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'},
+ {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
+ }
+})
+
+technic.register_compressor({tier = "HV", demand = {1500, 1000, 750}, speed = 5, upgrade = 1, tube = 1})
diff --git a/technic/machines/HV/electric_furnace.lua b/technic/machines/HV/electric_furnace.lua
new file mode 100644
index 0000000..c4a72fb
--- /dev/null
+++ b/technic/machines/HV/electric_furnace.lua
@@ -0,0 +1,17 @@
+-- HV Electric Furnace
+-- This is a faster version of the stone furnace which runs on EUs
+-- In addition to this it can be upgraded with microcontrollers and batteries
+-- This new version uses the batteries to lower the power consumption of the machine
+-- Also in addition this furnace can be attached to the pipe system from the pipeworks mod.
+
+minetest.register_craft({
+ output = 'technic:hv_electric_furnace',
+ recipe = {
+ {'technic:carbon_plate', 'technic:mv_electric_furnace', 'technic:composite_plate'},
+ {'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'},
+ {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
+ }
+})
+
+technic.register_electric_furnace({tier="HV", upgrade=1, tube=1, demand={4000, 2500, 1500}, speed=12})
+
diff --git a/technic/machines/HV/grinder.lua b/technic/machines/HV/grinder.lua
new file mode 100644
index 0000000..89dfc31
--- /dev/null
+++ b/technic/machines/HV/grinder.lua
@@ -0,0 +1,13 @@
+-- HV grinder
+
+minetest.register_craft({
+ output = 'technic:hv_grinder',
+ recipe = {
+ {'technic:carbon_plate', 'technic:mv_grinder', 'technic:composite_plate'},
+ {'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'},
+ {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
+ }
+})
+
+technic.register_grinder({tier="HV", demand={1200, 900, 600}, speed=5, upgrade=1, tube=1})
+
diff --git a/technic/machines/HV/init.lua b/technic/machines/HV/init.lua
index d7136b4..93cd7b7 100644
--- a/technic/machines/HV/init.lua
+++ b/technic/machines/HV/init.lua
@@ -15,4 +15,8 @@ dofile(path.."/generator.lua")
-- Machines
dofile(path.."/quarry.lua")
dofile(path.."/forcefield.lua")
+dofile(path.."/electric_furnace.lua")
+dofile(path.."/grinder.lua")
+dofile(path.."/compressor.lua")
+
diff --git a/technic/machines/LV/cnc.lua b/technic/machines/LV/cnc.lua
index 58ec6ba..e5e2e3f 100644
--- a/technic/machines/LV/cnc.lua
+++ b/technic/machines/LV/cnc.lua
@@ -28,8 +28,11 @@ local onesize_products = {
pyramid = 2,
spike = 1,
cylinder = 2,
+ cylinder_fluted = 2,
oblate_spheroid = 1,
sphere = 1,
+ sphere_half = 2,
+ sphere_quarter = 4,
stick = 8,
slope_upsdown = 2,
slope_edge_upsdown = 1,
@@ -38,6 +41,20 @@ local onesize_products = {
slope_lying = 2,
onecurvededge = 1,
twocurvededge = 1,
+ innercurvededge = 1,
+ opposedcurvededge = 1,
+ block_fluted = 1,
+ tile_beveled = 9,
+ arch216 = 1,
+ arch216_flange = 1,
+ cylinder_half = 4,
+ cylinder_half_corner = 4,
+ beam216 = 8,
+ beam216_cross = 2,
+ beam216_tee = 2,
+ beam216_cross_column = 1,
+ diagonal_truss = 6,
+ diagonal_truss_cross = 4,
}
local twosize_products = {
element_straight = 4,
@@ -48,43 +65,60 @@ local twosize_products = {
}
local cnc_formspec =
- "invsize[9,11;]"..
- "label[1,0;"..S("Choose Milling Program:").."]"..
- "image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]"..
- "image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
- "image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
- "image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
- "image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]"..
- "image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
- "image_button[7,0.5;1,1;technic_cnc_oblate_spheroid.png;oblate_spheroid; ]"..
- "image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]"..
-
- "image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]"..
- "image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]"..
- "image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]"..
- "image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
- "image_button[5,1.5;1,1;technic_cnc_sphere.png;sphere; ]"..
+ "invsize[11,11;]"..
+ "label[0,0;"..S("Choose Milling Program:").."]"..
+ "image_button[0,0.5;1,1;technic_cnc_slope.png;slope; ]"..
+ "image_button[1,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
+ "image_button[2,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
+ "image_button[3,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
+ "image_button[4,0.5;1,1;technic_cnc_spike.png;spike; ]"..
+ "image_button[5,0.5;1,1;technic_cnc_tile_beveled.png;tile_beveled; ]"..
+ "image_button[6,0.5;1,1;technic_cnc_stick.png;stick; ]"..
+ "image_button[7,0.5;1,1;technic_cnc_beam216.png;beam216; ]"..
+ "image_button[8,0.5;1,1;technic_cnc_beam216_cross.png;beam216_cross; ]"..
+ "image_button[9,0.5;1,1;technic_cnc_beam216_tee.png;beam216_tee; ]"..
+ "image_button[10,0.5;1,1;technic_cnc_beam216_cross_column.png;beam216_cross_column; ]"..
- "image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
- "image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
- "image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
+ "image_button[0,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]"..
+ "image_button[1,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]"..
+ "image_button[2,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]"..
+ "image_button[3,1.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
+ "image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
+ "image_button[5,1.5;1,1;technic_cnc_cylinder_half.png;cylinder_half; ]"..
+ "image_button[6,1.5;1,1;technic_cnc_cylinder_half_corner.png;cylinder_half_corner; ]"..
+ "image_button[7,1.5;1,1;technic_cnc_oblate_spheroid.png;oblate_spheroid; ]"..
+ "image_button[8,1.5;1,1;technic_cnc_sphere.png;sphere; ]"..
+ "image_button[9,1.5;1,1;technic_cnc_sphere_half.png;sphere_half; ]"..
+ "image_button[10,1.5;1,1;technic_cnc_sphere_quarter.png;sphere_quarter; ]"..
+
+ "image_button[0,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
+ "image_button[1,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
+ "image_button[2,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
+ "image_button[3,2.5;1,1;technic_cnc_innercurvededge.png;innercurvededge; ]"..
+ "image_button[4,2.5;1,1;technic_cnc_opposedcurvededge.png;opposedcurvededge; ]"..
+ "image_button[5,2.5;1,1;technic_cnc_block_fluted.png;block_fluted; ]"..
+ "image_button[6,2.5;1,1;technic_cnc_cylinder_fluted.png;cylinder_fluted; ]"..
+ "image_button[7,2.5;1,1;technic_cnc_arch216.png;arch216; ]"..
+ "image_button[8,2.5;1,1;technic_cnc_arch216_flange.png;arch216_flange; ]"..
+ "image_button[9,2.5;1,1;technic_cnc_diagonal_truss.png;diagonal_truss; ]"..
+ "image_button[10,2.5;1,1;technic_cnc_diagonal_truss_cross.png;diagonal_truss_cross; ]"..
- "label[1,3.5;"..S("Slim Elements half / normal height:").."]"..
+ "label[0,3.5;"..S("Slim Elements half / normal height:").."]"..
- "image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
- "image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"..
- "image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
- "image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]"..
- "image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
- "image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]"..
- "image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
+ "image_button[0,4;1,0.5;technic_cnc_full.png;full; ]"..
+ "image_button[0,4.5;1,0.5;technic_cnc_half.png;half; ]"..
+ "image_button[1,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
+ "image_button[2,4;1,1;technic_cnc_element_end.png;element_end; ]"..
+ "image_button[3,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
+ "image_button[4,4;1,1;technic_cnc_element_t.png;element_t; ]"..
+ "image_button[5,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
- "label[0, 5.5;"..S("In:").."]"..
- "list[current_name;src;0.5,5.5;1,1;]"..
- "label[4, 5.5;"..S("Out:").."]"..
- "list[current_name;dst;5,5.5;4,1;]"..
+ "label[1, 5.5;"..S("In:").."]"..
+ "list[current_name;src;1.5,5.5;1,1;]"..
+ "label[4.5, 5.5;"..S("Out:").."]"..
+ "list[current_name;dst;5.5,5.5;4,1;]"..
- "list[current_player;main;0,7;8,4;]"..
+ "list[current_player;main;1.5,7;8,4;]"..
"listring[current_name;dst]"..
"listring[current_player;main]"..
"listring[current_name;src]"..
@@ -171,7 +205,7 @@ local run = function(pos, node)
meta:set_int("src_time", meta:get_int("src_time") + 1)
if meta:get_int("src_time") >= 3 then -- 3 ticks per output
meta:set_int("src_time", 0)
- srcstack = inv:get_stack("src", 1)
+ local srcstack = inv:get_stack("src", 1)
srcstack:take_item()
inv:set_stack("src", 1, srcstack)
inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier"))
diff --git a/technic/machines/LV/cnc_api.lua b/technic/machines/LV/cnc_api.lua
index f5aae5c..6fdd35b 100644
--- a/technic/machines/LV/cnc_api.lua
+++ b/technic/machines/LV/cnc_api.lua
@@ -99,6 +99,29 @@ technic.cnc.programs = {
model = "technic_sphere.obj",
desc = S("Sphere")
},
+
+
+ { suffix = "technic_cnc_sphere_half",
+ model = "technic_sphere_half.obj",
+ desc = S("Half Sphere"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_sphere_quarter",
+ model = "technic_sphere_quarter.obj",
+ desc = S("Quarter Sphere"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, 0, 0 },
+ }
+ }
+ },
{ suffix = "technic_cnc_cylinder_horizontal",
model = "technic_cylinder_horizontal.obj",
@@ -109,7 +132,39 @@ technic.cnc.programs = {
model = "technic_cylinder.obj",
desc = S("Cylinder")
},
+
+ { suffix = "technic_cnc_cylinder_half",
+ model = "technic_cylinder_half.obj",
+ desc = S("Half Cylinder"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_cylinder_half_corner",
+ model = "technic_cylinder_half_corner.obj",
+ desc = S("Half Cylinder Corner"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
+ }
+ }
+ },
+ { suffix = "technic_cnc_cylinder_fluted",
+ model = "technic_cylinder_fluted.obj",
+ desc = S("Fluted Cylinder Column")
+ },
+
+ { suffix = "technic_cnc_block_fluted",
+ model = "technic_block_fluted.obj",
+ desc = S("Fluted Square Column")
+ },
+
{ suffix = "technic_cnc_twocurvededge",
model = "technic_two_curved_edge.obj",
desc = S("Two Curved Edge/Corner Block")
@@ -119,7 +174,130 @@ technic.cnc.programs = {
model = "technic_one_curved_edge.obj",
desc = S("One Curved Edge Block")
},
-
+
+ { suffix = "technic_cnc_innercurvededge",
+ model = "technic_inner_curved_edge.obj",
+ desc = S("Inner Curved Edge Block")
+ },
+
+ { suffix = "technic_cnc_opposedcurvededge",
+ model = "technic_opposed_curved_edge.obj",
+ desc = S("Opposed Curved Edges Block")
+ },
+
+ -- 4/16 Diagonal truss
+
+ { suffix = "technic_cnc_diagonal_truss",
+ model = "technic_diagonal_truss.obj",
+ desc = S("Diagonal Truss"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.25, 0.5, 0.5, 0.25 },
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_diagonal_truss_cross",
+ model = "technic_diagonal_truss_cross.obj",
+ desc = S("Diagonal Truss Cross"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.25, 0.5, 0.5, 0.25 },
+ }
+ }
+ },
+
+ -- 2/16 Beams
+
+ { suffix = "technic_cnc_beam216",
+ model = "technic_beam_216.obj",
+ desc = S("2/16 Beam"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {0.5, 0.5, 0.065, -0.5, 0, -0.065},
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_beam216_cross",
+ model = "technic_beam_216_cross.obj",
+ desc = S("2/16 Beam Cross"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {0.5, 0.5, 0.5, -0.5, 0, -0.5},
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_beam216_tee",
+ model = "technic_beam_216_tee.obj",
+ desc = S("2/16 Beam T"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {-0.5, 0.5, -0.5, 0.5, 0, 0.0625},
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_beam216_cross_column",
+ model = "technic_beam_216_cross_column.obj",
+ desc = S("2/16 Beam Cross with Column"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {0.5, 0.5, 0.5, -0.5, -0.5, -0.5},
+ }
+ }
+ },
+
+ -- 2/16 Arch
+
+ { suffix = "technic_cnc_arch216",
+ model = "technic_arch_216.obj",
+ desc = S("2/16 Arch"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {0.4375, -0.5, -0.5, 0.5, -0.1875, 0.5},
+ {-0.5, 0.4375, -0.5, -0.1875, 0.5, 0.5},
+ {-0.1875, 0.25, -0.5, 0, 0.4375, 0.5},
+ {0.25, -0.1875, -0.5, 0.4375, 0, 0.5},
+ {-0.0625, 0.1875, -0.5, 0.125, 0.3125, 0.5},
+ {0.1875, -0.0625, -0.5, 0.3125, 0.125, 0.5},
+ {0.0625, 0.0625, -0.5, 0.25, 0.25, 0.5},
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_arch216_flange",
+ model = "technic_arch_216_flange.obj",
+ desc = S("2/16 Arch Flange"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5},
+ {0.4375, -0.5, -0.5, 0.5, 0.5, 0.5},
+ {0.0625, 0.0625, -0.5, 0.4375, 0.4375, 0.5},
+ }
+ }
+ },
+
+ { suffix = "technic_cnc_tile_beveled",
+ model = "technic_tile_beveled.obj",
+ desc = S("Beveled Tile"),
+ cbox = {
+ type = "fixed",
+ fixed = {
+ { -1/2, -1/2, -1/2, 1/2, -2/5, 1/2 },
+ }
+ }
+ },
+
{ suffix = "technic_cnc_spike",
model = "technic_pyramid_spike.obj",
desc = S("Spike"),
@@ -303,7 +481,8 @@ function technic.cnc.register_program(recipeitem, suffix, model, groups, images,
walkable = true,
groups = groups,
selection_box = sbox,
- collision_box = cbox
+ collision_box = cbox,
+ light_source = groups.light_source,
})
end
@@ -343,7 +522,7 @@ function technic.cnc.register_slope_edge_etc(recipeitem, groups, images, desc_sl
technic.cnc.register_spike(recipeitem, groups, images, desc_spike)
technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
- technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
+ technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
technic.cnc.register_spheroid(recipeitem, groups, images, desc_spheroid)
technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
diff --git a/technic/machines/LV/cnc_nodes.lua b/technic/machines/LV/cnc_nodes.lua
index 05be9af..e6c586f 100644
--- a/technic/machines/LV/cnc_nodes.lua
+++ b/technic/machines/LV/cnc_nodes.lua
@@ -1,7 +1,7 @@
-- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS:
-----------------------------------------------------------
-local S = technic.getter
+local S=technic.getter
-- DIRT
-------
@@ -15,18 +15,77 @@ technic.cnc.register_all("default:wood",
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
{"default_wood.png"},
S("Wooden"))
+
+technic.cnc.register_all("default:junglewood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"default_junglewood.png"},
+ S("Junglewood"))
+
+technic.cnc.register_all("default:pine_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"default_pine_wood.png"},
+ S("Pine"))
+
+technic.cnc.register_all("default:acacia_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"default_acacia_wood.png"},
+ S("Acacia"))
+
+technic.cnc.register_all("default:aspen_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"default_aspen_wood.png"},
+ S("Aspen"))
+
-- STONE
--------
technic.cnc.register_all("default:stone",
- {cracky=3, not_in_creative_inventory=1},
+ {cracky=3, stone=1, not_in_creative_inventory=1},
{"default_stone.png"},
S("Stone"))
+
+technic.cnc.register_all("default:stonebrick",
+ {crumbly=2, cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_stone_brick.png"},
+ S("Stone Brick"))
+
+technic.cnc.register_all("default:stone_block",
+ {crumbly=2, cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_stone_block.png"},
+ S("Stone Block"))
+
+
+technic.cnc.register_all("default:desert_stone",
+ {cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_desert_stone.png"},
+ S("Desert Stone"))
+
+technic.cnc.register_all("default:desert_stonebrick",
+ {crumbly=2, cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_desert_stone_brick.png"},
+ S("Desert Stone Brick"))
+
+technic.cnc.register_all("default:desert_stone_block",
+ {crumbly=2, cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_desert_stone_block.png"},
+ S("Desert Stone Block"))
+
-- COBBLE
---------
technic.cnc.register_all("default:cobble",
- {cracky=3, not_in_creative_inventory=1},
+ {cracky=3, stone=1, not_in_creative_inventory=1},
{"default_cobble.png"},
S("Cobble"))
+
+technic.cnc.register_all("default:mossycobble",
+ {cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_mossycobble.png"},
+ S("Mossy Cobblestone"))
+
+technic.cnc.register_all("default:desert_cobble",
+ {cracky=3, stone=1, not_in_creative_inventory=1},
+ {"default_desert_cobble.png"},
+ S("Desert Cobble"))
+
-- BRICK
--------
technic.cnc.register_all("default:brick",
@@ -34,6 +93,7 @@ technic.cnc.register_all("default:brick",
{"default_brick.png"},
S("Brick"))
+
-- SANDSTONE
------------
technic.cnc.register_all("default:sandstone",
@@ -41,12 +101,50 @@ technic.cnc.register_all("default:sandstone",
{"default_sandstone.png"},
S("Sandstone"))
--- LEAVES
----------
-technic.cnc.register_all("default:leaves",
- {snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1},
- {"default_leaves.png"},
- S("Leaves"))
+technic.cnc.register_all("default:sandstonebrick",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_sandstone_brick.png"},
+ S("Sandstone Brick"))
+
+technic.cnc.register_all("default:sandstone_block",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_sandstone_block.png"},
+ S("Sandstone Block"))
+
+
+technic.cnc.register_all("default:desert_sandstone",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_desert_sandstone.png"},
+ S("Desert Sandstone"))
+
+technic.cnc.register_all("default:desert_sandstone_brick",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_desert_sandstone_brick.png"},
+ S("Desert Sandstone Brick"))
+
+technic.cnc.register_all("default:desert_sandstone_block",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_desert_sandstone_block.png"},
+ S("Desert Sandstone Block"))
+
+
+technic.cnc.register_all("default:silver_sandstone",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_silver_sandstone.png"},
+ S("Silver Sandstone"))
+
+technic.cnc.register_all("default:silver_sandstone_brick",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_silver_sandstone_brick.png"},
+ S("Silver Sandstone Brick"))
+
+technic.cnc.register_all("default:silver_sandstone_block",
+ {crumbly=2, cracky=3, not_in_creative_inventory=1},
+ {"default_silver_sandstone_block.png"},
+ S("Silver Sandstone Block"))
+
+
+
-- TREE
-------
technic.cnc.register_all("default:tree",
@@ -54,6 +152,22 @@ technic.cnc.register_all("default:tree",
{"default_tree.png"},
S("Tree"))
+-- ICE
+-------
+technic.cnc.register_all("default:ice",
+ {cracky=3, puts_out_fire=1, cools_lava=1, not_in_creative_inventory=1},
+ {"default_ice.png"},
+ S("Ice"))
+
+
+-- OBSIDIAN
+-----------
+technic.cnc.register_all("default:obsidian_block",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"default_obsidian_block.png"},
+ S("Obsidian"))
+
+
-- WROUGHT IRON
---------------
technic.cnc.register_all("default:steelblock",
@@ -68,13 +182,63 @@ technic.cnc.register_all("default:bronzeblock",
{"default_bronze_block.png"},
S("Bronze"))
--- Stainless Steel
+-- Zinc
--------
+technic.cnc.register_all("technic:zinc_block",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"technic_zinc_block.png"},
+ S("Zinc"))
+
+-- Cast Iron
+------------
+technic.cnc.register_all("technic:cast_iron_block",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"technic_cast_iron_block.png"},
+ S("Cast Iron"))
+
+-- Stainless Steel
+------------------
technic.cnc.register_all("technic:stainless_steel_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"technic_stainless_steel_block.png"},
S("Stainless Steel"))
+-- Carbon steel
+---------------
+technic.cnc.register_all("technic:carbon_steel_block",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"technic_carbon_steel_block.png"},
+ S("Carbon Steel"))
+
+-- Brass
+--------
+technic.cnc.register_all("technic:brass_block",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"technic_brass_block.png"},
+ S("Brass"))
+
+-- Copper
+---------
+technic.cnc.register_all("default:copperblock",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"default_copper_block.png"},
+ S("Copper"))
+
+-- Tin
+------
+technic.cnc.register_all("default:tinblock",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"default_tin_block.png"},
+ S("Tin"))
+
+-- Gold
+-------
+technic.cnc.register_all("default:goldblock",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"default_gold_block.png"},
+ S("Gold"))
+
+
-- Marble
------------
technic.cnc.register_all("technic:marble",
@@ -89,3 +253,176 @@ technic.cnc.register_all("technic:granite",
{"technic_granite.png"},
S("Granite"))
+
+if minetest.get_modpath("ethereal") then
+ -- Glostone
+ ------------
+ technic.cnc.register_all("ethereal:glostone",
+ {cracky=1, not_in_creative_inventory=1, light_source=13},
+ {"glostone.png"},
+ S("Glo Stone"))
+
+end
+
+
+if minetest.get_modpath("ethereal") then
+ -- Glostone
+ ------------
+ technic.cnc.register_all("ethereal:glostone",
+ {cracky=1, not_in_creative_inventory=1, light_source=13},
+ {"glostone.png"},
+ S("Glo Stone"))
+
+ -- Crystal block
+ ----------------
+ technic.cnc.register_all("ethereal:crystal_block",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"crystal_block.png"},
+ S("Crystal"))
+
+ -- Misc. Wood types
+ -------------------
+ technic.cnc.register_all("ethereal:banana_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"banana_wood.png"},
+ S("Banana Wood"))
+
+ technic.cnc.register_all("ethereal:birch_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"moretrees_birch_wood.png"},
+ S("Birch Wood"))
+
+ technic.cnc.register_all("ethereal:frost_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"frost_wood.png"},
+ S("Frost Wood"))
+
+ technic.cnc.register_all("ethereal:palm_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"moretrees_palm_wood.png"},
+ S("Palm Wood"))
+
+ technic.cnc.register_all("ethereal:willow_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"willow_wood.png"},
+ S("Willow Wood"))
+
+ technic.cnc.register_all("ethereal:yellow_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"yellow_wood.png"},
+ S("Healing Tree Wood"))
+
+ technic.cnc.register_all("ethereal:redwood_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"redwood_wood.png"},
+ S("Redwood"))
+
+ -- Glorious bamboo
+ -------------------
+ technic.cnc.register_all("ethereal:bamboo_floor",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"bamboo_floor.png"},
+ S("Bamboo"))
+end
+
+
+if minetest.get_modpath("moreblocks") then
+ -- Tiles
+ ------------
+ technic.cnc.register_all("moreblocks:stone_tile",
+ {stone=1, cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_stone_tile.png"},
+ S("Stone Tile"))
+
+ technic.cnc.register_all("moreblocks:split_stone_tile",
+ {stone=1, cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_split_stone_tile.png"},
+ S("Split Stone Tile"))
+
+ technic.cnc.register_all("moreblocks:checker_stone_tile",
+ {stone=1, cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_checker_stone_tile.png"},
+ S("Checker Stone Tile"))
+
+ technic.cnc.register_all("moreblocks:cactus_checker",
+ {stone=1, cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_cactus_checker.png"},
+ S("Cactus Checker"))
+
+ -- Bricks
+ ------------
+ technic.cnc.register_all("moreblocks:cactus_brick",
+ {cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_cactus_brick.png"},
+ S("Cactus Brick"))
+
+ technic.cnc.register_all("moreblocks:grey_bricks",
+ {cracky=3, not_in_creative_inventory=1},
+ {"moreblocks_grey_bricks.png"},
+ S("Grey Bricks"))
+
+ -- Metals
+ ------------
+ technic.cnc.register_all("moreblocks:copperpatina",
+ {cracky=1, level=2, not_in_creative_inventory=1},
+ {"moreblocks_copperpatina.png"},
+ S("Copper Patina"))
+
+ if not minetest.get_modpath("bakedclay") then
+ -- Clay
+ ------------
+ technic.cnc.register_all("bakedclay:red",
+ {cracky=3, not_in_creative_inventory=1},
+ {"baked_clay_red.png"},
+ S("Red Clay"))
+
+ technic.cnc.register_all("bakedclay:orange",
+ {cracky=3, not_in_creative_inventory=1},
+ {"baked_clay_orange.png"},
+ S("Orange Clay"))
+
+ technic.cnc.register_all("bakedclay:grey",
+ {cracky=3, not_in_creative_inventory=1},
+ {"baked_clay_grey.png"},
+ S("Grey Clay"))
+ end
+
+end
+
+
+if minetest.get_modpath("maple") then
+ technic.cnc.register_all("maple:maple_wood",
+ {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ {"maple_wood.png"},
+ S("Maple"))
+end
+
+
+if minetest.get_modpath("bakedclay") then
+
+ local clay = {
+ {"white", "White"},
+ {"grey", "Grey"},
+ {"black", "Black"},
+ {"red", "Red"},
+ {"yellow", "Yellow"},
+ {"green", "Green"},
+ {"cyan", "Cyan"},
+ {"blue", "Blue"},
+ {"magenta", "Magenta"},
+ {"orange", "Orange"},
+ {"violet", "Violet"},
+ {"brown", "Brown"},
+ {"pink", "Pink"},
+ {"dark_grey", "Dark Grey"},
+ {"dark_green", "Dark Green"},
+ }
+
+ for _,c in ipairs(clay) do
+ technic.cnc.register_all("bakedclay:" .. c[1],
+ {cracky=3, not_in_creative_inventory=1},
+ {"baked_clay_" .. c[1] .. ".png"},
+ S(c[2] .. " Clay"))
+ end
+
+end \ No newline at end of file
diff --git a/technic/machines/LV/geothermal.lua b/technic/machines/LV/geothermal.lua
index 27f4abc..3282fb8 100644
--- a/technic/machines/LV/geothermal.lua
+++ b/technic/machines/LV/geothermal.lua
@@ -1,7 +1,7 @@
-- A geothermal EU generator
-- Using hot lava and water this device can create energy from steam
-- The machine is only producing LV EUs and can thus not drive more advanced equipment
--- The output is a little more than the coal burning generator (max 300EUs)
+-- The output is 4 times that of the coal burning generator (max 800EUs)
minetest.register_alias("geothermal", "technic:geothermal")
@@ -56,10 +56,10 @@ local run = function(pos, node)
if check == 2 then lava_nodes = lava_nodes + 1 end
end
- if water_nodes == 1 and lava_nodes == 1 then production_level = 25; eu_supply = 50 end
- if water_nodes == 2 and lava_nodes == 1 then production_level = 50; eu_supply = 100 end
- if water_nodes == 1 and lava_nodes == 2 then production_level = 75; eu_supply = 200 end
- if water_nodes == 2 and lava_nodes == 2 then production_level = 100; eu_supply = 300 end
+ if water_nodes == 1 and lava_nodes == 1 then production_level = 25; eu_supply = 200 end
+ if water_nodes == 2 and lava_nodes == 1 then production_level = 50; eu_supply = 400 end
+ if water_nodes == 1 and lava_nodes == 2 then production_level = 75; eu_supply = 600 end
+ if water_nodes == 2 and lava_nodes == 2 then production_level = 100; eu_supply = 800 end
if production_level > 0 then
meta:set_int("LV_EU_supply", eu_supply)
diff --git a/technic/machines/LV/init.lua b/technic/machines/LV/init.lua
index 30523c9..447fb21 100644
--- a/technic/machines/LV/init.lua
+++ b/technic/machines/LV/init.lua
@@ -27,3 +27,4 @@ dofile(path.."/cnc.lua")
dofile(path.."/cnc_api.lua")
dofile(path.."/cnc_nodes.lua")
+dofile(path.."/lamp.lua") \ No newline at end of file
diff --git a/technic/machines/LV/lamp.lua b/technic/machines/LV/lamp.lua
new file mode 100644
index 0000000..5e8ee8c
--- /dev/null
+++ b/technic/machines/LV/lamp.lua
@@ -0,0 +1,250 @@
+-- LV LED and LV LED Lamp
+-- LED - a weak light source, intended primarily as a core component for LED lamps
+-- LED Lamp - a powerful light source, illuminating a 7x7x3(H) volume below itself
+-- with light bright as the sun.
+
+local S = technic.getter
+
+
+local illuminate = function(pos, mode)
+ local loc = {}
+-- loc.x, loc.y, loc.z = pos.x, pos.y, pos.z
+ for y=1,3,1 do
+ for x=-3,3,1 do
+ for z = -3,3,1 do
+ loc = {x = pos.x - x, y = pos.y - y, z = pos.z - z}
+ if mode then
+ if minetest.get_node(loc).name == "air" then
+ minetest.swap_node(loc, {name = "technic:dummy_light_source"})
+ end
+ else
+ if minetest.get_node(loc).name == "technic:dummy_light_source" then
+ minetest.swap_node(loc, {name = "air"})
+ end
+ end
+ end
+ end
+ end
+end
+
+
+local led_on = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ local eu_input = meta:get_int("LV_EU_input")
+ local machine_name = S("%s LED"):format("LV")
+ local machine_node = "technic:lv_led"
+ local demand = 5
+
+ if eu_input < demand then
+ technic.swap_node(pos, machine_node)
+ meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
+ elseif eu_input >= demand then
+ technic.swap_node(pos, machine_node.."_active")
+ meta:set_string("infotext", S("%s Active"):format(machine_name))
+ end
+ meta:set_int("LV_EU_demand", demand)
+end
+
+local led_off = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ local eu_input = meta:get_int("LV_EU_input")
+ local machine_name = S("%s LED"):format("LV")
+ local machine_node = "technic:lv_led"
+
+ technic.swap_node(pos, machine_node)
+ meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
+
+ meta:set_int("LV_EU_demand", 0)
+end
+
+
+
+local lamp_on = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ local eu_input = meta:get_int("LV_EU_input")
+ local machine_name = S("%s Lamp"):format("LV")
+ local machine_node = "technic:lv_lamp"
+ local demand = 50
+
+ if eu_input < demand then
+ technic.swap_node(pos, machine_node)
+ meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
+ illuminate(pos, false)
+ elseif eu_input >= demand then
+ technic.swap_node(pos, machine_node.."_active")
+ meta:set_string("infotext", S("%s Active"):format(machine_name))
+ illuminate(pos, true)
+ end
+ meta:set_int("LV_EU_demand", demand)
+end
+
+local lamp_off = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ local eu_input = meta:get_int("LV_EU_input")
+ local machine_name = S("%s Lamp"):format("LV")
+ local machine_node = "technic:lv_lamp"
+
+ illuminate(pos, false)
+ technic.swap_node(pos, machine_node)
+ meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
+ meta:set_int("LV_EU_demand", 0)
+end
+
+
+minetest.register_node("technic:dummy_light_source", {
+ description = S("Dummy light source node"),
+ node_box = {
+ type = "fixed",
+ fixed = {}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {}
+ },
+ drawtype = "airlike",
+ buildable_to = true,
+ light_source = 14,
+ sunlight_propagates = true,
+ diggable = false,
+ walkable = false,
+ groups = { not_in_creative_inventory = 1 }
+})
+
+minetest.register_node("technic:lv_led", {
+ description = S("LV LED"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ tiles = {"technic_lv_led.png"},
+ inventory_image = "technic_lv_led_inv.png",
+ sunlight_propagates = true,
+ groups = {cracky=2, technic_machine=1, technic_lv=1},
+ connect_sides = {"front", "back", "left", "right", "top", "bottom"},
+ can_dig = technic.machine_can_dig,
+ technic_run = led_on,
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("infotext", S("%s LED"):format("LV"))
+ end,
+ drop = "technic:lv_led"
+})
+
+minetest.register_node("technic:lv_led_active", {
+ description = S("LV LED Active"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {0.2,0.2,0.2,-0.2,-0.2,-0.2}
+ },
+ tiles = {"technic_lv_led.png"},
+ light_source = 9,
+ sunlight_propagates = true,
+ groups = {cracky=2, technic_machine=1, technic_lv=1, not_in_creative_inventory=1},
+ connect_sides = {"front", "back", "left", "right", "top", "bottom"},
+ can_dig = technic.machine_can_dig,
+ technic_run = led_on,
+ technic_on_disable = led_off,
+ drop = "technic:lv_led"
+})
+
+
+minetest.register_node("technic:lv_lamp", {
+ description = S("%s Lamp"):format("LV"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ tiles = {"technic_lv_lamp_top.png", "technic_lv_lamp_bottom.png", "technic_lv_lamp_side.png",
+ "technic_lv_lamp_side.png", "technic_lv_lamp_side.png", "technic_lv_lamp_side.png"},
+ groups = {cracky=2, technic_machine=1, technic_lv=1},
+ connect_sides = {"front", "back", "left", "right", "top",},
+ can_dig = technic.machine_can_dig,
+ technic_run = lamp_on,
+ on_destruct = lamp_off,
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("infotext", S("%s Lamp"):format("LV"))
+ end,
+})
+
+
+minetest.register_node("technic:lv_lamp_active", {
+ description = S("%s Lamp Active"):format("LV"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ collision_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {0.5,0.5,0.5,-0.5,-0.2,-0.5}
+ },
+ tiles = {"technic_lv_lamp_top.png", "technic_lv_lamp_bottom.png", "technic_lv_lamp_side.png",
+ "technic_lv_lamp_side.png", "technic_lv_lamp_side.png", "technic_lv_lamp_side.png"},
+ groups = {cracky=2, technic_machine=1, technic_lv=1, not_in_creative_inventory=1},
+ connect_sides = {"front", "back", "left", "right", "top"},
+ light_source = 1,
+ can_dig = technic.machine_can_dig,
+ technic_run = lamp_on,
+ on_destruct = lamp_off,
+ technic_on_disable = lamp_off,
+})
+
+minetest.register_craft({
+ output = 'technic:lv_led 2',
+ recipe = {
+ {'', 'homedecor:plastic_sheeting', ''},
+ {'homedecor:plastic_sheeting', 'technic:doped_silicon_wafer', 'homedecor:plastic_sheeting'},
+ {'', 'technic:fine_silver_wire', ''},
+ },
+})
+
+minetest.register_craft({
+ output = 'technic:lv_lamp',
+ recipe = {
+ {'default:glass', 'default:glass', 'default:glass'},
+ {'technic:lv_led', 'technic:lv_led', 'technic:lv_led'},
+ {'mesecons_materials:glue', 'technic:lv_cable', 'mesecons_materials:glue'},
+ },
+})
+
+technic.register_machine("LV", "technic:lv_lamp", technic.receiver)
+technic.register_machine("LV", "technic:lv_lamp_active", technic.receiver)
+
+technic.register_machine("LV", "technic:lv_led", technic.receiver)
+technic.register_machine("LV", "technic:lv_led_active", technic.receiver)
diff --git a/technic/machines/MV/centrifuge.lua b/technic/machines/MV/centrifuge.lua
index a0aad64..d386265 100644
--- a/technic/machines/MV/centrifuge.lua
+++ b/technic/machines/MV/centrifuge.lua
@@ -9,7 +9,7 @@ minetest.register_craft({
technic.register_centrifuge({
tier = "MV",
- demand = { 8000, 7000, 6000 },
+ demand = { 8000, 6500, 5000 },
speed = 2,
upgrade = 1,
tube = 1,
diff --git a/technic/machines/MV/init.lua b/technic/machines/MV/init.lua
index 72a98b6..66e2d45 100644
--- a/technic/machines/MV/init.lua
+++ b/technic/machines/MV/init.lua
@@ -27,6 +27,6 @@ dofile(path.."/tool_workshop.lua")
-- The power radiator supplies appliances with inductive coupled power:
-- Lighting and associated textures is taken directly from VanessaE's homedecor and made electric.
-- This is currently useless, slow, and mostly copied
---dofile(path.."/power_radiator.lua")
---dofile(path.."/lighting.lua")
+-- dofile(path.."/power_radiator.lua")
+-- dofile(path.."/lighting.lua")
diff --git a/technic/machines/init.lua b/technic/machines/init.lua
index f2e31c9..57cb9a9 100644
--- a/technic/machines/init.lua
+++ b/technic/machines/init.lua
@@ -7,6 +7,8 @@ dofile(path.."/LV/init.lua")
dofile(path.."/MV/init.lua")
dofile(path.."/HV/init.lua")
+
+
dofile(path.."/switching_station.lua")
dofile(path.."/power_monitor.lua")
dofile(path.."/supply_converter.lua")
diff --git a/technic/machines/register/alloy_recipes.lua b/technic/machines/register/alloy_recipes.lua
index bd09bd6..0d40b77 100644
--- a/technic/machines/register/alloy_recipes.lua
+++ b/technic/machines/register/alloy_recipes.lua
@@ -28,8 +28,35 @@ local recipes = {
-- The highest volume use of carbon black is as a reinforcing filler in rubber products, especially tires.
-- "[Compounding a] pure gum vulcanizate … with 50% of its weight of carbon black improves its tensile strength and wear resistance …"
{"technic:raw_latex 4", "technic:coal_dust 2", "technic:rubber 6", 2},
+ {"technic:raw_latex 3", "technic:sulfur_dust 1", "technic:latex_foam", 2},
}
+if minetest.get_modpath("ethereal") then
+ table.insert(recipes, {"ethereal:crystal_spike", "ethereal:fire_dust 2", "default:mese_crystal 2"})
+ if not minetest.get_modpath("bakedclay") then
+ table.insert(recipes, {"default:clay", "dye:red", "bakedclay:red"})
+ table.insert(recipes, {"default:clay", "dye:orange", "bakedclay:orange"})
+ table.insert(recipes, {"default:clay", "dye:grey", "bakedclay:grey"})
+ end
+ if minetest.get_modpath("bonemeal") then
+ table.insert(recipes, {"default:sand", "bonemeal:mulch", "ethereal:sandy 2"})
+ table.insert(recipes, {"default:sand", "bonemeal:bonemeal", "ethereal:sandy"})
+ end
+end
+
+if minetest.get_modpath("bakedclay") then
+
+ local clay = {"white", "grey", "black", "red", "yellow",
+ "green", "cyan", "blue", "magenta", "orange",
+ "violet", "brown", "pink", "dark_grey", "dark_green"}
+
+ -- the recipe of the bakedclay mod yields 8 blocks, so we'll do two times better
+ for _,c in ipairs(clay) do
+ table.insert(recipes, {"default:clay 8", "dye:" .. c, "bakedclay:" .. c .. " 16"})
+ end
+
+end
+
for _, data in pairs(recipes) do
technic.register_alloy_recipe({input = {data[1], data[2]}, output = data[3], time = data[4]})
end
diff --git a/technic/machines/register/centrifuge_recipes.lua b/technic/machines/register/centrifuge_recipes.lua
index 4684ba0..fb16d0c 100644
--- a/technic/machines/register/centrifuge_recipes.lua
+++ b/technic/machines/register/centrifuge_recipes.lua
@@ -15,7 +15,7 @@ local recipes = {
{ "technic:stainless_steel_dust 4", "technic:wrought_iron_dust 3", "technic:chromium_dust" },
{ "technic:brass_dust 3", "technic:copper_dust 2", "technic:zinc_dust" },
{ "technic:chernobylite_dust", "default:sand", "technic:uranium3_dust" },
- { "default:dirt 4", "default:sand", "default:gravel", "default:clay_lump 2" },
+ { "default:dirt 4", "default:sand", "default:gravel", "default:clay_lump 4" },
}
local function uranium_dust(p)
@@ -32,9 +32,25 @@ if minetest.get_modpath("bushes_classic") then
end
if minetest.get_modpath("farming") then
- table.insert(recipes, { "farming:wheat 4", "farming:seed_wheat 3", "default:dry_shrub 1" })
+ if minetest.get_modpath("cottages") then
+ -- work as a mechanized threshing floor
+ table.insert(recipes, { "farming:wheat", "farming:seed_wheat", "cottages:straw_mat" })
+ table.insert(recipes, { "farming:barley", "farming:seed_barley", "cottages:straw_mat" })
+ else
+ -- work in a less fancy and less efficient manner
+ table.insert(recipes, { "farming:wheat 4", "farming:seed_wheat 3", "default:dry_shrub 1" })
+ table.insert(recipes, { "farming:barley 4", "farming:seed_barley 3", "default:dry_shrub 1" })
+ end
+end
+
+-- using centfuge as a sorting machine for grass seeds
+table.insert(recipes, { "default:grass_1 99", "default:dry_grass_1 80", "default:dry_shrub 7", "default:junglegrass 12" })
+if minetest.get_modpath("ethereal") then
+ table.insert(recipes, { "default:junglegrass 99", "ethereal:dry_shrub 10", "ethereal:crystalgrass 5", "ethereal:snowygrass 5" })
+ table.insert(recipes, { "default:dry_grass_1 99", "ethereal:fern 5" })
end
+
for _, data in pairs(recipes) do
technic.register_separating_recipe({ input = { data[1] }, output = { data[2], data[3], data[4] } })
end
diff --git a/technic/machines/register/common.lua b/technic/machines/register/common.lua
index dfa2948..f872fa2 100644
--- a/technic/machines/register/common.lua
+++ b/technic/machines/register/common.lua
@@ -19,16 +19,20 @@ function technic.handle_machine_upgrades(meta)
if upg_item1 == "technic:control_logic_unit" then
tube_upgrade = tube_upgrade + 1
+ elseif upg_item1 == "technic:control_logic_unit_adv" then
+ tube_upgrade = tube_upgrade + 6
elseif upg_item1 == "technic:battery" then
EU_upgrade = EU_upgrade + 1
end
if upg_item2 == "technic:control_logic_unit" then
tube_upgrade = tube_upgrade + 1
+ elseif upg_item2 == "technic:control_logic_unit_adv" then
+ tube_upgrade = tube_upgrade + 6
elseif upg_item2 == "technic:battery" then
EU_upgrade = EU_upgrade + 1
end
-
+
return EU_upgrade, tube_upgrade
end
@@ -39,6 +43,7 @@ local function on_machine_upgrade(meta, stack)
meta:set_int("public", 1)
return 1
elseif stack_name ~= "technic:control_logic_unit"
+ and stack_name ~= "technic:control_logic_unit_adv"
and stack_name ~= "technic:battery" then
return 0
end
@@ -60,7 +65,7 @@ local function on_machine_downgrade(meta, stack, list)
end
-function technic.send_items(pos, x_velocity, z_velocity, output_name)
+function technic.send_items(pos, x_velocity, z_velocity, output_name, full)
-- Send items on their way in the pipe system.
if output_name == nil then
output_name = "dst"
@@ -68,20 +73,28 @@ function technic.send_items(pos, x_velocity, z_velocity, output_name)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
+
local i = 0
for _, stack in ipairs(inv:get_list(output_name)) do
i = i + 1
if stack then
local item0 = stack:to_table()
if item0 then
- item0["count"] = "1"
- technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0)
- stack:take_item(1)
+ if full then
+ technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0)
+ stack:clear()
+ else
+ item0["count"] = "1"
+ technic.tube_inject_item(pos, pos, vector.new(x_velocity, 0, z_velocity), item0)
+ stack:take_item(1)
+ end
inv:set_stack(output_name, i, stack)
return
end
end
end
+
+
end
@@ -128,11 +141,18 @@ function technic.handle_machine_pipeworks(pos, tube_upgrade, send_function)
if minetest.get_item_group(node1.name, "tubedevice") > 0 then
output_tube_connected = true
end
+
+ local send_stack = false
+ if tube_upgrade > 2 then
+ send_stack = true
+ tube_upgrade = tube_upgrade % 5
+ end
+
local tube_time = meta:get_int("tube_time") + tube_upgrade
if tube_time >= 2 then
tube_time = 0
if output_tube_connected then
- send_function(pos, x_velocity, z_velocity)
+ send_function(pos, x_velocity, z_velocity, nil, send_stack)
end
end
meta:set_int("tube_time", tube_time)
diff --git a/technic/machines/register/compressor_recipes.lua b/technic/machines/register/compressor_recipes.lua
index a625f1a..b36936c 100644
--- a/technic/machines/register/compressor_recipes.lua
+++ b/technic/machines/register/compressor_recipes.lua
@@ -11,22 +11,69 @@ end
local recipes = {
{"default:snowblock", "default:ice"},
{"default:sand 2", "default:sandstone"},
+ {"default:silver_sand 2", "default:silver_sandstone"},
{"default:desert_sand", "default:desert_stone"},
{"technic:mixed_metal_ingot", "technic:composite_plate"},
{"default:copper_ingot 5", "technic:copper_plate"},
{"technic:coal_dust 4", "technic:graphite"},
{"technic:carbon_cloth", "technic:carbon_plate"},
{"technic:uranium35_ingot 5", "technic:uranium_fuel"},
+ {"technic:diamond_seed 25", "default:diamond"}
}
--- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner
-minetest.clear_craft({
- output = "default:sandstone",
- recipe = {
- {'group:sand', 'group:sand'},
- {'group:sand', 'group:sand'}
- },
-})
+
+if minetest.get_modpath("ethereal") then
+
+ -- compressing most copious leaves into more compact fuel
+ -- this conversion is based on the burn time (1 vs. 10) + some overhead
+ table.insert(recipes, {"default:acacia_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"default:aspen_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"default:leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"default:jungleleaves 15", "ethereal:charcoal_lump 1"})
+
+ -- the density of charcoal is ~1/10 of coal, otherwise it's pure carbon
+ table.insert(recipes, {"ethereal:charcoal_lump 10", "default:coal_lump 1"})
+ -- + some leaves which are most often left over in large amounts
+ table.insert(recipes, {"ethereal:willow_twig 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:redwood_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:frost_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:yellowleaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:birch_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:bamboo_leaves 15", "ethereal:charcoal_lump 1"})
+ table.insert(recipes, {"ethereal:orange_leaves 15", "ethereal:charcoal_lump 1"})
+
+ if minetest.get_modpath("technic_worldgen") or minetest.get_modpath("moretrees") then
+ table.insert(recipes, {"moretrees:rubber_tree_leaves 15", "ethereal:charcoal_lump 1"})
+ end
+
+end
+
+-- liquid oxygen
+table.insert(recipes, {"vessels:steel_bottle", "technic:lox"})
+
+
+-- defuse the default sandstone recipe, since we have the compressor to take over in a
+-- more realistic manner. It also uses groups instead of proper sand, which is even more
+-- important, given there are many types of sand and sandstone.
+-- minetest.clear_craft({
+-- output = "default:sandstone",
+-- recipe = {
+-- {'group:sand', 'group:sand'},
+-- {'group:sand', 'group:sand'}
+-- },
+-- })
+--
+-- -- provide an alternative recipe for sandstone, which demands the default sand in particular
+-- -- the compressing recipe offered by technic is still offering superior performance
+-- minetest.register_craft({
+-- output = "default:sandstone",
+-- recipe = {
+-- {'default:sand', 'default:sand'},
+-- {'default:sand', 'default:sand'}
+-- },
+-- })
+-- UPD: the above changes were made obsolete by default game development
+
for _, data in pairs(recipes) do
technic.register_compressor_recipe({input = {data[1]}, output = data[2]})
diff --git a/technic/machines/register/extractor_recipes.lua b/technic/machines/register/extractor_recipes.lua
index 1de0ba0..e052971 100644
--- a/technic/machines/register/extractor_recipes.lua
+++ b/technic/machines/register/extractor_recipes.lua
@@ -29,6 +29,57 @@ if minetest.get_modpath("dye") then
{"bushes:blueberry", unifieddyes and "unifieddyes:magenta_s50 4" or "dye:magenta 4"},
}
+ if minetest.get_modpath("hunger") and minetest.get_modpath("ethereal") then
+ table.insert(dye_recipes, {"ethereal:willow_twig 12", "technic:aspirin_pill"})
+ end
+
+ if minetest.get_modpath("farming") then
+ -- Cottonseed oil: a fuel and a potent fertilizer (irl: pesticide) ---
+ -- hemp oil calls for 8 seeds, but extractor recipes are normally twice as potent
+ table.insert(dye_recipes, {"farming:seed_cotton 4", "technic:cottonseed_oil"})
+
+ -- Dyes ---
+ -- better recipes for farming's crafting methods (twice the output)
+ table.insert(dye_recipes, {"farming:chili_pepper", "dye:red 4"})
+ table.insert(dye_recipes, {"farming:beans", "dye:green 4"})
+ table.insert(dye_recipes, {"farming:grapes", "dye:violet 4"})
+ table.insert(dye_recipes, {"farming:cocoa_beans", "dye:brown 4"})
+ -- Some extra recipes:
+ -- Himalayan rhubarb root can give yellow dye IRL
+ table.insert(dye_recipes, {"farming:rhubarb", "dye:yellow 4"})
+ table.insert(dye_recipes, {"farming:onion", "dye:yellow 4"})
+ table.insert(dye_recipes, {"farming:blueberries", "dye:blue 4"})
+ table.insert(dye_recipes, {"farming:raspberries", "dye:red 4"})
+ end
+
+ if minetest.get_modpath("ethereal") then
+ table.insert(dye_recipes, {"ethereal:seaweed", "dye:dark_green 6"})
+ table.insert(dye_recipes, {"ethereal:coral2", "dye:cyan 6"})
+ table.insert(dye_recipes, {"ethereal:coral3", "dye:orange 6"})
+ table.insert(dye_recipes, {"ethereal:coral4", "dye:pink 6"})
+ table.insert(dye_recipes, {"ethereal:coral5", "dye:green 6"})
+ table.insert(dye_recipes, {"ethereal:fern", "dye:dark_green 4"})
+ table.insert(dye_recipes, {"ethereal:snowygrass", "dye:grey 4"})
+ table.insert(dye_recipes, {"ethereal:crystalgrass", "dye:blue 4"})
+ end
+
+ if minetest.get_modpath("bakedclay") then
+ table.insert(dye_recipes, {"bakedclay:delphinium", "dye:cyan 6"})
+ table.insert(dye_recipes, {"bakedclay:thistle", "dye:magenta 6"})
+ table.insert(dye_recipes, {"bakedclay:lazarus", "dye:pink 6"})
+ table.insert(dye_recipes, {"bakedclay:mannagrass", "dye:dark_green 6"})
+ end
+
+ if minetest.get_modpath("wine") then
+ table.insert(dye_recipes, {"wine:blue_agave", "dye:cyan 6"})
+ end
+
+ if minetest.get_modpath("bonemeal") then
+ table.insert(dye_recipes, {"bonemeal:bone", "dye:white 8"})
+ table.insert(dye_recipes, {"bonemeal:bonemeal", "dye:white 4"})
+ end
+
+
for _, data in ipairs(dye_recipes) do
technic.register_extractor_recipe({input = {data[1]}, output = data[2]})
end
@@ -43,6 +94,37 @@ if minetest.get_modpath("dye") then
})
end
+
+ -- When the recipe for 4 default:sand out of 1 default:sandstone is defused in the
+ -- grinder recipes, some dyed wool becomes broken. This is a known bug and it's in
+ -- the game itself. However, by re-declaring the recipes for corrupted wool+dye
+ -- combinations here, we can alleviate this situation. Or so it seeems.
+ -- The following code snippet is abridged from wool mod in the minetest_game:
+
+ if minetest.get_modpath("wool") then
+
+ local dyes = {
+ {"violet", "Violet", "excolor_violet"},
+ {"brown", "Brown", "unicolor_dark_orange"},
+ {"pink", "Pink", "unicolor_light_red"},
+ {"dark_grey", "Dark Grey", "unicolor_darkgrey"},
+ {"dark_green", "Dark Green", "unicolor_dark_green"},
+ }
+
+ for i = 1, #dyes do
+ local name, desc, craft_color_group = unpack(dyes[i])
+ minetest.register_craft{
+ type = "shapeless",
+ output = "wool:" .. name,
+ recipe = {"group:dye," .. craft_color_group, "group:wool"},
+ }
+ end
+
+ end
+
+ -- end of remedial dye workaround
+
+
minetest.register_craft({
type = "shapeless",
output = "dye:black 1",
diff --git a/technic/machines/register/grinder_recipes.lua b/technic/machines/register/grinder_recipes.lua
index fa55e7a..84fbeb7 100644
--- a/technic/machines/register/grinder_recipes.lua
+++ b/technic/machines/register/grinder_recipes.lua
@@ -22,22 +22,80 @@ local recipes = {
{"technic:sulfur_lump", "technic:sulfur_dust 2"},
{"default:stone", "technic:stone_dust"},
{"default:sand", "technic:stone_dust"},
+ -- recycle some items:
+ {"xpanes:pane_flat 8", "vessels:glass_fragments 3"},
+ {"doors:door_glass", "vessels:glass_fragments 6"},
+ {"doors:door_wood", "technic:sawdust 24"},
+ {"doors:trapdoor", "technic:sawdust 12"},
+ {"doors:trapdoor_steel", "technic:wrought_iron_dust 4"},
+ {"doors:door_obsidian_glass", "default:obsidian_shard 6"},
+ {"doors:door_steel", "technic:wrought_iron_dust 6"},
+ {"default:sign_wall_steel", "technic:wrought_iron_dust 2"},
+ {"default:sign_wall_wood", "technic:sawdust 8"},
-- Other
{"default:cobble", "default:gravel"},
{"default:gravel", "default:sand"},
{"default:sandstone", "default:sand 2"}, -- reverse recipe can be found in the compressor
+ {"technic:stone_dust", "default:silver_sand"}
}
+if minetest.get_modpath("ethereal") then
+ -- the density of charcoal is ~1/10 of coal, otherwise it's the same graphitic carbon
+ table.insert(recipes, {"ethereal:charcoal_lump 5", "technic:coal_dust 1"})
+end
+
+if minetest.get_modpath("bonemeal") then
+ table.insert(recipes, {"bonemeal:bone", "bonemeal:bonemeal 8"})
+end
+
+if minetest.get_modpath("moreblocks") then
+ table.insert(recipes, {"moreblocks:cobble_compressed", "default:gravel 9"})
+ -- there is no other place to throw in the cooking recipe
+ minetest.register_craft({
+ type = "cooking",
+ cooktime = 5,
+ output = "default:stone 9",
+ recipe = "moreblocks:cobble_compressed"
+ })
+end
+
+
-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe)
+-- this snippet, when executed, also corrupts some dye+wool combinations. A remedial
+-- workaround is included in extractor recipes, since it's where we work with dyes.
minetest.clear_craft({
recipe = {
- {'default:sandstone'}
- },
+ {"default:sandstone"}
+ }
})
if minetest.get_modpath("farming") then
table.insert(recipes, {"farming:seed_wheat", "farming:flour 1"})
+ table.insert(recipes, {"farming:seed_barley", "farming:flour 1"})
+
+ -- added by dhausmig
+ if minetest.registered_items["farming:corn"] ~= nil then
+ minetest.register_craftitem("technic:cornmeal", {
+ description = S("Corn Meal"),
+ inventory_image = "technic_cornmeal.png",
+ })
+ minetest.register_craftitem("technic:cornbread", {
+ description = S("Cornbread"),
+ inventory_image = "technic_cornbread.png",
+ on_use = minetest.item_eat(8),
+ })
+
+ minetest.register_craft({
+ type = "cooking",
+ cooktime = 10,
+ output = "technic:cornbread",
+ recipe = "technic:cornmeal"
+ })
+
+ table.insert(recipes, {"farming:corn", "technic:cornmeal 2"})
+ -- end of dhausmig's addition
+ end
end
if minetest.get_modpath("moreores") then
diff --git a/technic/models/technic_arch_216.obj b/technic/models/technic_arch_216.obj
new file mode 100644
index 0000000..f2f3e5a
--- /dev/null
+++ b/technic/models/technic_arch_216.obj
@@ -0,0 +1,190 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_arch_216.mtl
+o Cylinder_Cylinder.007
+v -0.500000 -0.499999 -0.500000
+v -0.500000 -0.499999 0.500000
+v -0.480785 -0.304909 0.500000
+v -0.480785 -0.304909 -0.500000
+v -0.423879 -0.117316 0.500000
+v -0.423879 -0.117316 -0.500000
+v -0.331469 0.055571 0.500000
+v -0.331469 0.055571 -0.500000
+v -0.207106 0.207108 0.500000
+v -0.207106 0.207108 -0.500000
+v -0.055569 0.331470 0.500000
+v -0.055569 0.331470 -0.500000
+v 0.117318 0.423880 0.500000
+v 0.117318 0.423880 -0.500000
+v 0.304911 0.480786 0.500000
+v 0.304911 0.480786 -0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 0.500000 -0.500000
+v -0.375000 -0.499999 -0.500000
+v -0.358187 -0.329295 -0.500000
+v -0.358187 -0.329295 0.500000
+v -0.375000 -0.499999 0.500000
+v -0.308394 -0.165151 -0.500000
+v -0.308394 -0.165151 0.500000
+v -0.227535 -0.013875 -0.500000
+v -0.227535 -0.013875 0.500000
+v -0.118718 0.118719 -0.500000
+v -0.118718 0.118719 0.500000
+v 0.013877 0.227537 -0.500000
+v 0.013877 0.227537 0.500000
+v 0.165153 0.308395 -0.500000
+v 0.165153 0.308395 0.500000
+v 0.329297 0.358187 -0.500000
+v 0.329297 0.358187 0.500000
+v 0.500000 0.375000 -0.500000
+v 0.500000 0.375000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.080477
+vt 0.000000 0.080477
+vt 1.000000 0.182905
+vt 0.000000 0.182905
+vt 1.000000 0.303347
+vt 0.000000 0.303347
+vt 1.000000 0.437175
+vt 0.000000 0.437175
+vt 1.000000 0.579246
+vt 0.000000 0.579247
+vt 1.000000 0.724101
+vt 0.000000 0.724101
+vt 1.000000 0.866172
+vt 0.000000 0.866173
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 1.000000 0.000000
+vt 1.000000 0.080477
+vt 0.000000 0.080477
+vt 0.000000 0.000000
+vt 1.000000 0.182905
+vt 0.000000 0.182905
+vt 1.000000 0.303347
+vt 0.000000 0.303347
+vt 1.000000 0.437175
+vt 0.000000 0.437175
+vt 1.000000 0.579247
+vt 0.000000 0.579247
+vt 1.000000 0.724101
+vt 0.000000 0.724101
+vt 1.000000 0.866173
+vt 0.000000 0.866173
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.875009
+vt 0.999929 0.875009
+vt 0.999929 1.000000
+vt 0.999929 0.875009
+vt 0.999929 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.875009
+vt 0.804911 0.980785
+vt 1.000000 0.875000
+vt 0.617318 0.923880
+vt 0.829297 0.858187
+vt 0.444431 0.831470
+vt 0.665153 0.808395
+vt 0.292894 0.707107
+vt 0.513877 0.727536
+vt 0.195089 0.980785
+vt 0.000000 0.875000
+vt 0.381282 0.618719
+vt 0.168531 0.555571
+vt 0.272465 0.486125
+vt 0.076121 0.382684
+vt 0.191606 0.334849
+vt 0.019215 0.195091
+vt 0.141813 0.170704
+vt -0.000000 0.000000
+vt 0.125000 0.000000
+vt 0.170703 0.858187
+vt 0.382682 0.923880
+vt 0.334847 0.808395
+vt 0.555569 0.831470
+vt 0.486123 0.727536
+vt 0.707106 0.707107
+vt 0.618718 0.618719
+vt 0.831469 0.555571
+vt 0.727535 0.486124
+vt 0.923879 0.382684
+vt 0.808394 0.334848
+vt 0.980785 0.195091
+vt 0.858187 0.170704
+vt 1.000000 0.000000
+vt 0.875000 0.000000
+vn -0.9952 0.0980 0.0000
+vn -0.9569 0.2903 0.0000
+vn -0.8819 0.4714 0.0000
+vn -0.7730 0.6344 0.0000
+vn -0.6344 0.7730 0.0000
+vn -0.4714 0.8819 0.0000
+vn -0.2903 0.9569 0.0000
+vn -0.0980 0.9952 0.0000
+vn 0.9952 -0.0980 -0.0000
+vn 0.9569 -0.2903 -0.0000
+vn 0.8819 -0.4714 -0.0000
+vn 0.7730 -0.6344 -0.0000
+vn 0.6344 -0.7730 -0.0000
+vn 0.4714 -0.8819 -0.0000
+vn 0.2903 -0.9569 -0.0000
+vn 0.0980 -0.9952 -0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 1.0000
+vn -0.0000 0.0000 -1.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/4/2 3/3/2 5/5/2 6/6/2
+f 6/6/3 5/5/3 7/7/3 8/8/3
+f 8/8/4 7/7/4 9/9/4 10/10/4
+f 10/10/5 9/9/5 11/11/5 12/12/5
+f 12/12/6 11/11/6 13/13/6 14/14/6
+f 14/14/7 13/13/7 15/15/7 16/16/7
+f 16/16/8 15/15/8 17/17/8 18/18/8
+f 19/19/9 20/20/9 21/21/9 22/22/9
+f 20/20/10 23/23/10 24/24/10 21/21/10
+f 23/23/11 25/25/11 26/26/11 24/24/11
+f 25/25/12 27/27/12 28/28/12 26/26/12
+f 27/27/13 29/29/13 30/30/13 28/28/13
+f 29/29/14 31/31/14 32/32/14 30/30/14
+f 31/31/15 33/33/15 34/34/15 32/32/15
+f 33/33/16 35/35/16 36/36/16 34/34/16
+f 1/37/17 19/38/17 22/39/17 2/40/17
+f 17/41/18 36/42/18 35/43/18 18/44/18
+f 15/45/19 36/46/19 17/17/19
+f 13/47/19 34/48/19 15/45/19
+f 34/48/19 36/46/19 15/45/19
+f 13/47/19 11/49/19 32/50/19
+f 34/48/19 13/47/19 32/50/19
+f 9/51/19 30/52/19 11/49/19
+f 16/53/20 18/18/20 35/54/20
+f 9/51/19 28/55/19 30/52/19
+f 7/56/19 28/55/19 9/51/19
+f 7/56/19 26/57/19 28/55/19
+f 5/58/19 26/57/19 7/56/19
+f 5/58/19 24/59/19 26/57/19
+f 3/60/19 24/59/19 5/58/19
+f 3/60/19 21/61/19 24/59/19
+f 2/62/19 21/61/19 3/60/19
+f 2/62/19 22/63/19 21/61/19
+f 30/52/19 32/50/19 11/49/19
+f 35/54/20 33/64/20 16/53/20
+f 14/65/20 33/64/20 31/66/20
+f 12/67/20 14/65/20 31/66/20
+f 31/66/20 29/68/20 12/67/20
+f 33/64/20 14/65/20 16/53/20
+f 10/69/20 29/68/20 27/70/20
+f 8/71/20 10/69/20 27/70/20
+f 8/71/20 27/70/20 25/72/20
+f 6/73/20 8/71/20 25/72/20
+f 6/73/20 25/72/20 23/74/20
+f 4/75/20 6/73/20 23/74/20
+f 4/75/20 23/74/20 20/76/20
+f 1/77/20 4/75/20 20/76/20
+f 1/77/20 20/76/20 19/78/20
+f 29/68/20 10/69/20 12/67/20
diff --git a/technic/models/technic_arch_216_flange.obj b/technic/models/technic_arch_216_flange.obj
new file mode 100644
index 0000000..6bfb97c
--- /dev/null
+++ b/technic/models/technic_arch_216_flange.obj
@@ -0,0 +1,134 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_arch_216_flange.mtl
+o Cylinder_Cylinder.003
+v -0.375000 -0.499999 -0.500000
+v -0.358187 -0.329295 -0.500000
+v -0.358187 -0.329295 0.500000
+v -0.375000 -0.499999 0.500000
+v -0.308394 -0.165151 -0.500000
+v -0.308394 -0.165151 0.500000
+v -0.227535 -0.013875 -0.500000
+v -0.227535 -0.013875 0.500000
+v -0.118718 0.118719 -0.500000
+v -0.118718 0.118719 0.500000
+v 0.013877 0.227537 -0.500000
+v 0.013877 0.227537 0.500000
+v 0.165153 0.308395 -0.500000
+v 0.165153 0.308395 0.500000
+v 0.329297 0.358187 -0.500000
+v 0.329297 0.358187 0.500000
+v 0.500000 0.375000 -0.500000
+v 0.500000 0.375000 0.500000
+v -0.500000 -0.499999 -0.500000
+v -0.500000 -0.499999 0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 0.500000 -0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 0.500000 -0.500000
+vt 0.513877 0.727537
+vt 0.665153 0.808395
+vt 0.000000 1.000000
+vt 0.191606 0.334848
+vt 0.272465 0.486124
+vt 0.000000 0.000000
+vt 0.125000 0.000000
+vt 0.141813 0.170704
+vt 1.000000 1.000000
+vt 0.829297 0.858187
+vt 1.000000 0.875000
+vt 0.381282 0.618719
+vt 0.808394 0.334848
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.858187 0.170704
+vt 0.875000 0.000000
+vt 0.334847 0.808395
+vt 0.486123 0.727537
+vt 0.170703 0.858187
+vt 0.000000 1.000000
+vt 0.000000 0.875000
+vt 0.618718 0.618719
+vt 0.727535 0.486124
+vt 1.000000 0.000000
+vt 1.000000 0.080477
+vt 0.000000 0.080477
+vt 0.000000 0.000000
+vt 1.000000 0.182905
+vt 0.000000 0.182905
+vt 1.000000 0.303347
+vt 0.000000 0.303347
+vt 1.000000 0.437175
+vt 0.000000 0.437175
+vt 1.000000 0.579247
+vt 0.000000 0.579247
+vt 1.000000 0.724101
+vt 0.000000 0.724101
+vt 1.000000 0.866173
+vt 0.000000 0.866173
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.999929 0.000000
+vt 0.999929 0.124991
+vt 0.000000 0.124991
+vt 1.000000 0.875009
+vt 1.000000 1.000000
+vt 0.000071 1.000000
+vt 0.000071 0.875009
+vt 0.999900 0.999900
+vt 0.000100 0.999900
+vt 0.000099 0.000100
+vt 0.999900 0.000100
+vt 0.999900 0.999900
+vt 0.000100 0.999900
+vt 0.000100 0.000100
+vt 0.999900 0.000100
+vn -0.0000 0.0000 1.0000
+vn -0.0000 0.0000 -1.0000
+vn 0.9952 -0.0980 -0.0000
+vn 0.9569 -0.2903 -0.0000
+vn 0.8819 -0.4714 -0.0000
+vn 0.7730 -0.6344 -0.0000
+vn 0.6344 -0.7730 -0.0000
+vn 0.4714 -0.8819 -0.0000
+vn 0.2903 -0.9569 -0.0000
+vn 0.0980 -0.9952 -0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s off
+f 12/1/1 14/2/1 23/3/1
+f 6/4/1 8/5/1 23/3/1
+f 20/6/1 4/7/1 3/8/1
+f 20/6/1 3/8/1 6/4/1
+f 14/2/1 21/9/1 23/3/1
+f 16/10/1 18/11/1 21/9/1
+f 14/2/1 16/10/1 21/9/1
+f 10/12/1 12/1/1 23/3/1
+f 8/5/1 10/12/1 23/3/1
+f 5/13/2 19/14/2 24/15/2
+f 19/14/2 2/16/2 1/17/2
+f 19/14/2 5/13/2 2/16/2
+f 13/18/2 11/19/2 24/15/2
+f 15/20/2 22/21/2 17/22/2
+f 13/18/2 22/21/2 15/20/2
+f 20/6/1 6/4/1 23/3/1
+f 22/21/2 13/18/2 24/15/2
+f 9/23/2 24/15/2 11/19/2
+f 7/24/2 24/15/2 9/23/2
+f 7/24/2 5/13/2 24/15/2
+s 1
+f 1/25/3 2/26/3 3/27/3 4/28/3
+f 2/26/4 5/29/4 6/30/4 3/27/4
+f 5/29/5 7/31/5 8/32/5 6/30/5
+f 7/31/6 9/33/6 10/34/6 8/32/6
+f 9/33/7 11/35/7 12/36/7 10/34/7
+f 11/35/8 13/37/8 14/38/8 12/36/8
+f 13/37/9 15/39/9 16/40/9 14/38/9
+f 15/39/10 17/41/10 18/42/10 16/40/10
+f 19/43/11 1/44/11 4/45/11 20/6/11
+f 21/46/12 18/47/12 17/48/12 22/49/12
+f 23/50/13 24/51/13 19/52/13 20/53/13
+f 21/54/14 22/55/14 24/56/14 23/57/14
diff --git a/technic/models/technic_beam_216.obj b/technic/models/technic_beam_216.obj
new file mode 100644
index 0000000..77e8a38
--- /dev/null
+++ b/technic/models/technic_beam_216.obj
@@ -0,0 +1,50 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_beam_216.mtl
+o Cube_Cube.004
+v 0.500000 -0.000000 0.062500
+v 0.500000 0.500000 0.062500
+v -0.500000 0.500000 0.062500
+v -0.500000 -0.000000 0.062500
+v -0.500000 0.500000 -0.062500
+v -0.500000 0.000000 -0.062500
+v 0.500000 0.500000 -0.062500
+v 0.500000 0.000000 -0.062500
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vn 0.0000 -0.0000 1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/5/2 3/6/2 5/7/2 6/8/2
+f 6/9/3 5/10/3 7/11/3 8/12/3
+f 8/13/4 7/14/4 2/15/4 1/16/4
+f 4/17/5 6/18/5 8/19/5 1/20/5
+f 5/21/6 3/22/6 2/23/6 7/24/6
diff --git a/technic/models/technic_beam_216_cross.obj b/technic/models/technic_beam_216_cross.obj
new file mode 100644
index 0000000..6c67668
--- /dev/null
+++ b/technic/models/technic_beam_216_cross.obj
@@ -0,0 +1,114 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_beam_216_cross.mtl
+o Cube_Cube.001
+v -0.062500 -0.000000 0.500000
+v -0.062500 0.500000 0.500000
+v -0.062500 0.500000 -0.500000
+v -0.062500 0.000000 -0.500000
+v -0.062500 0.000000 -0.063364
+v -0.062500 -0.000000 0.061980
+v 0.062500 0.500000 -0.500000
+v 0.062500 0.000000 -0.500000
+v 0.062500 0.500000 0.500000
+v 0.062500 -0.000000 0.500000
+v 0.062500 -0.000000 0.063047
+v 0.062500 0.000000 -0.062118
+v 0.500000 -0.000000 0.062500
+v 0.500000 0.500000 0.062500
+v 0.063194 0.500000 0.062500
+v -0.062064 0.500000 0.062500
+v -0.500000 0.500000 0.062500
+v -0.500000 -0.000000 0.062500
+v -0.500000 0.500000 -0.062500
+v -0.500000 0.000000 -0.062500
+v -0.062059 0.500000 -0.062500
+v 0.062716 0.500000 -0.062500
+v 0.500000 0.500000 -0.062500
+v 0.500000 0.000000 -0.062500
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.436649 0.500100
+vt 0.561968 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.436966 0.500100
+vt 0.562106 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.562068 1.000000
+vt 0.563134 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 0.437994 0.875025
+vt 0.436749 1.000000
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.563181 1.000000
+vt 0.437949 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.562047 1.000000
+vt 0.437297 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.562803 1.000000
+vt 0.563281 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 0.438049 0.875025
+vt 0.438053 1.000000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 1.0000 -0.0000 0.0000
+vn 0.0000 0.0000 1.0000
+vn -0.0000 -1.0000 -0.0000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1
+f 4/7/2 3/8/2 7/9/2 8/10/2
+f 8/11/3 7/12/3 9/13/3 10/14/3 11/15/3 12/16/3
+f 10/17/4 9/18/4 2/19/4 1/20/4
+f 6/21/5 11/22/5 10/23/5 1/24/5
+f 7/25/6 3/26/6 2/27/6 9/28/6
+f 4/29/5 8/30/5 12/31/5 5/32/5
+f 13/33/4 14/34/4 15/35/4 16/36/4 17/37/4 18/38/4
+f 18/39/1 17/40/1 19/41/1 20/42/1
+f 20/43/2 19/44/2 21/45/2 22/46/2 23/47/2 24/48/2
+f 24/49/3 23/50/3 14/51/3 13/52/3
+f 18/53/5 20/54/5 24/55/5 13/56/5
+f 22/57/6 15/58/6 14/59/6 23/60/6
+f 19/61/6 17/62/6 16/63/6 21/64/6
diff --git a/technic/models/technic_beam_216_cross_column.obj b/technic/models/technic_beam_216_cross_column.obj
new file mode 100644
index 0000000..dca738e
--- /dev/null
+++ b/technic/models/technic_beam_216_cross_column.obj
@@ -0,0 +1,169 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_beam_216_cross_column.mtl
+o Cube_Cube.007
+v -0.150000 -0.500000 0.150000
+v -0.150000 0.500000 0.150000
+v -0.150000 0.500000 -0.150000
+v -0.150000 -0.500000 -0.150000
+v 0.150000 0.500000 -0.150000
+v 0.150000 -0.500000 -0.150000
+v 0.150000 0.500000 0.150000
+v 0.150000 -0.500000 0.150000
+v -0.062500 -0.000000 0.500000
+v -0.062500 0.500000 0.500000
+v -0.062500 0.500000 0.150733
+v -0.062500 0.500000 -0.148528
+v -0.062500 0.500000 -0.500000
+v -0.062500 0.000000 -0.500000
+v 0.062500 0.500000 -0.500000
+v 0.062500 0.000000 -0.500000
+v 0.062500 0.500000 -0.150975
+v 0.062500 0.500000 0.149916
+v 0.062500 0.500000 0.500000
+v 0.062500 -0.000000 0.500000
+v 0.500000 -0.000000 0.062500
+v 0.500000 0.500000 0.062500
+v 0.149910 0.500000 0.062500
+v -0.149935 0.500000 0.062500
+v -0.500000 0.500000 0.062500
+v -0.500000 -0.000000 0.062500
+v -0.500000 0.500000 -0.062500
+v -0.500000 0.000000 -0.062500
+v -0.148506 0.500000 -0.062500
+v 0.151055 0.500000 -0.062500
+v 0.500000 0.500000 -0.062500
+v 0.500000 0.000000 -0.062500
+vt 0.649970 0.000100
+vt 0.649970 0.999900
+vt 0.350030 0.999900
+vt 0.350030 0.000100
+vt 0.649970 0.000100
+vt 0.649970 0.999900
+vt 0.350030 0.999900
+vt 0.350030 0.000100
+vt 0.649970 0.000100
+vt 0.649970 0.999900
+vt 0.350030 0.999900
+vt 0.350030 0.000100
+vt 0.649970 0.000100
+vt 0.649970 0.999900
+vt 0.350030 0.999900
+vt 0.350030 0.000100
+vt 0.350030 0.350030
+vt 0.649970 0.350030
+vt 0.649970 0.649970
+vt 0.350030 0.649970
+vt 0.350030 0.649970
+vt 0.350030 0.350030
+vt 0.649970 0.350030
+vt 0.649970 0.649970
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.650702 1.000000
+vt 0.351502 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.650945 1.000000
+vt 0.350114 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.649986 1.000000
+vt 0.650802 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 0.351602 0.875025
+vt 0.349155 1.000000
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.649880 1.000000
+vt 0.350095 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.648476 1.000000
+vt 0.348975 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.651125 1.000000
+vt 0.649980 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 0.350195 0.875025
+vt 0.351624 1.000000
+vn -1.0000 -0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -0.0000 1.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn -0.5774 -0.5774 0.5774
+vn -0.5774 0.5774 0.5774
+vn -0.8937 0.4487 0.0000
+vn -0.8966 0.4428 0.0000
+vn -0.5774 0.5774 -0.5774
+vn -0.5774 -0.5774 -0.5774
+vn 0.5774 0.5774 -0.5774
+vn 0.5774 -0.5774 -0.5774
+vn 0.8922 0.4517 0.0000
+vn 0.8952 0.4457 0.0000
+vn 0.5774 0.5774 0.5774
+vn 0.5774 -0.5774 0.5774
+vn 0.0000 0.4451 0.8955
+vn 0.0000 0.4498 0.8931
+vn 0.0000 0.4446 -0.8957
+vn 0.0000 0.4493 -0.8934
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/5/2 3/6/2 5/7/2 6/8/2
+f 6/9/3 5/10/3 7/11/3 8/12/3
+f 8/13/4 7/14/4 2/15/4 1/16/4
+f 4/17/5 6/18/5 8/19/5 1/20/5
+f 2/21/6 7/22/6 5/23/6 3/24/6
+s 1
+f 9/25/7 10/26/8 11/27/9 12/28/10 13/29/11 14/30/12
+f 14/31/12 13/32/11 15/33/13 16/34/14
+f 16/35/14 15/36/13 17/37/15 18/38/16 19/39/17 20/40/18
+f 20/41/18 19/42/17 10/43/8 9/44/7
+f 14/45/12 16/46/14 20/47/18 9/48/7
+f 18/49/16 11/50/9 10/51/8 19/52/17
+f 15/53/13 13/54/11 12/55/10 17/56/15
+f 21/57/18 22/58/17 23/59/19 24/60/20 25/61/8 26/62/7
+f 26/63/7 25/64/8 27/65/11 28/66/12
+f 28/67/12 27/68/11 29/69/21 30/70/22 31/71/13 32/72/14
+f 32/73/14 31/74/13 22/75/17 21/76/18
+f 26/77/7 28/78/12 32/79/14 21/80/18
+f 30/81/22 23/82/19 22/83/17 31/84/13
+f 27/85/11 25/86/8 24/87/20 29/88/21
diff --git a/technic/models/technic_beam_216_tee.obj b/technic/models/technic_beam_216_tee.obj
new file mode 100644
index 0000000..9a76eaf
--- /dev/null
+++ b/technic/models/technic_beam_216_tee.obj
@@ -0,0 +1,91 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_beam_216_tee.mtl
+o Cube_Cube.002
+v 0.500000 -0.000000 0.062500
+v 0.500000 0.500000 0.062500
+v -0.500000 0.500000 0.062500
+v -0.500000 -0.000000 0.062500
+v -0.500000 0.500000 -0.062500
+v -0.500000 0.000000 -0.062500
+v 0.500000 0.500000 -0.062500
+v 0.500000 0.000000 -0.062500
+v -0.062500 0.000000 0.000000
+v -0.062500 0.500000 0.000000
+v -0.062500 0.500000 -0.063387
+v -0.062500 0.500000 -0.500000
+v -0.062500 0.000000 -0.500000
+v -0.062500 0.000000 -0.062645
+v 0.062500 0.500000 -0.500000
+v 0.062500 0.000000 -0.500000
+v 0.062500 0.000000 -0.062253
+v 0.062500 0.500000 -0.063564
+v 0.062500 0.500000 0.000000
+v 0.062500 0.000000 0.000000
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.500100
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.000200 1.000000
+vt 0.000200 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.500000 0.500100
+vt 0.500000 1.000000
+vt 0.436625 1.000000
+vt 0.000100 1.000000
+vt 0.000100 0.500100
+vt 0.437367 0.500100
+vt 0.124975 0.500100
+vt 0.124975 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500100
+vt 0.562340 1.000000
+vt 0.562733 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.563475 1.000000
+vt 0.563651 0.875025
+vt 1.000000 0.875025
+vt 1.000000 1.000000
+vt 0.999900 0.500100
+vt 0.999900 1.000000
+vt 0.563551 1.000000
+vt 0.500000 1.000000
+vt 0.500000 0.500100
+vt 0.562240 0.500100
+vn 0.0000 -0.0000 1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/5/2 3/6/2 5/7/2 6/8/2
+f 6/9/3 5/10/3 7/11/3 8/12/3
+f 8/13/4 7/14/4 2/15/4 1/16/4
+f 4/17/5 6/18/5 8/19/5 1/20/5
+f 5/21/6 3/22/6 2/23/6 7/24/6
+f 9/25/2 10/26/2 11/27/2 12/28/2 13/29/2 14/30/2
+f 13/31/3 12/32/3 15/33/3 16/34/3
+f 17/35/5 14/36/5 13/37/5 16/38/5
+f 11/39/6 18/40/6 15/41/6 12/42/6
+f 16/43/4 15/44/4 18/45/4 19/46/4 20/47/4 17/48/4
diff --git a/technic/models/technic_block_fluted.obj b/technic/models/technic_block_fluted.obj
new file mode 100644
index 0000000..7a2a2af
--- /dev/null
+++ b/technic/models/technic_block_fluted.obj
@@ -0,0 +1,826 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_block_fluted.mtl
+o Cube_Cube.003
+v -0.214286 -0.500000 -0.500000
+v -0.214286 0.500000 -0.500000
+v -0.071429 0.500000 -0.500000
+v -0.071429 -0.500000 -0.500000
+v 0.214286 -0.500000 0.500000
+v 0.214286 0.500000 0.500000
+v 0.071429 0.500000 0.500000
+v 0.071429 -0.500000 0.500000
+v -0.500000 0.500000 0.214286
+v -0.500000 0.500000 0.071429
+v -0.500000 -0.500000 0.071429
+v -0.500000 -0.500000 0.214286
+v -0.500000 0.500000 0.500000
+v -0.500000 0.500000 0.357143
+v -0.500000 -0.500000 0.357143
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.357143
+v -0.500000 0.500000 -0.357143
+v -0.500000 0.500000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 -0.071429
+v -0.500000 0.500000 -0.071429
+v -0.500000 0.500000 -0.214286
+v -0.500000 -0.500000 -0.214286
+v -0.450000 0.500000 0.357143
+v -0.450000 -0.500000 0.357143
+v -0.450000 0.500000 0.214286
+v -0.450000 -0.500000 0.214286
+v -0.450000 -0.500000 0.071429
+v -0.450000 0.500000 0.071429
+v -0.450000 0.500000 -0.071429
+v -0.450000 -0.500000 -0.071429
+v -0.450000 -0.500000 -0.214286
+v -0.450000 0.500000 -0.214286
+v -0.450000 0.500000 -0.357143
+v -0.450000 -0.500000 -0.357143
+v 0.500000 -0.500000 -0.214286
+v 0.500000 0.500000 -0.214286
+v 0.500000 0.500000 -0.071429
+v 0.500000 -0.500000 -0.071429
+v 0.450000 -0.500000 -0.357143
+v 0.450000 0.500000 -0.357143
+v 0.450000 0.500000 -0.214286
+v 0.450000 -0.500000 -0.214286
+v 0.450000 0.500000 -0.071429
+v 0.450000 -0.500000 -0.071429
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 -0.357143
+v 0.500000 -0.500000 -0.357143
+v 0.500000 -0.500000 0.357143
+v 0.500000 0.500000 0.357143
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.071429
+v 0.500000 0.500000 0.071429
+v 0.500000 0.500000 0.214286
+v 0.500000 -0.500000 0.214286
+v 0.450000 -0.500000 0.214286
+v 0.450000 0.500000 0.214286
+v 0.450000 0.500000 0.357143
+v 0.450000 -0.500000 0.357143
+v 0.450000 0.500000 0.071429
+v 0.450000 -0.500000 0.071429
+v -0.071429 0.500000 0.500000
+v -0.071429 -0.500000 0.500000
+v -0.071429 -0.500000 0.450000
+v -0.071429 0.500000 0.450000
+v 0.357143 -0.500000 0.450000
+v 0.357143 0.500000 0.450000
+v 0.214286 0.500000 0.450000
+v 0.214286 -0.500000 0.450000
+v 0.357143 0.500000 0.500000
+v 0.357143 -0.500000 0.500000
+v -0.357143 0.500000 0.500000
+v -0.357143 -0.500000 0.500000
+v -0.357143 -0.500000 0.450000
+v -0.357143 0.500000 0.450000
+v -0.214286 0.500000 0.500000
+v -0.214286 -0.500000 0.500000
+v -0.214286 -0.500000 0.450000
+v -0.214286 0.500000 0.450000
+v 0.071429 -0.500000 0.450000
+v 0.071429 0.500000 0.450000
+v 0.357143 0.500000 -0.500000
+v 0.357143 -0.500000 -0.500000
+v 0.357143 -0.500000 -0.450000
+v 0.357143 0.500000 -0.450000
+v -0.357143 -0.500000 -0.450000
+v -0.357143 0.500000 -0.450000
+v -0.214286 0.500000 -0.450000
+v -0.214286 -0.500000 -0.450000
+v 0.214286 -0.500000 -0.500000
+v 0.214286 0.500000 -0.500000
+v 0.214286 0.500000 -0.450000
+v 0.214286 -0.500000 -0.450000
+v -0.071429 0.500000 -0.450000
+v -0.071429 -0.500000 -0.450000
+v -0.357143 0.500000 -0.500000
+v -0.357143 -0.500000 -0.500000
+v 0.071429 -0.500000 -0.500000
+v 0.071429 0.500000 -0.500000
+v 0.071429 0.500000 -0.450000
+v 0.071429 -0.500000 -0.450000
+v -0.500000 -0.500000 0.357143
+v -0.450000 -0.500000 0.357143
+v -0.357143 -0.500000 0.450000
+v -0.357143 -0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.357143 0.500000 -0.500000
+v 0.357143 0.500000 -0.450000
+v 0.450000 0.500000 -0.357143
+v 0.500000 0.500000 -0.357143
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 -0.071429
+v 0.500000 0.500000 -0.214286
+v 0.450000 0.500000 -0.214286
+v 0.450000 0.500000 -0.071429
+v 0.500000 0.500000 0.214286
+v 0.500000 0.500000 0.071429
+v 0.450000 0.500000 0.071429
+v 0.450000 0.500000 0.214286
+v 0.500000 0.500000 0.500000
+v 0.500000 0.500000 0.357143
+v 0.450000 0.500000 0.357143
+v 0.357143 0.500000 0.450000
+v 0.357143 0.500000 0.500000
+v 0.071429 0.500000 0.500000
+v 0.214286 0.500000 0.500000
+v 0.214286 0.500000 0.450000
+v 0.071429 0.500000 0.450000
+v -0.071429 0.500000 0.500000
+v -0.071429 0.500000 0.450000
+v -0.214286 0.500000 0.450000
+v -0.214286 0.500000 0.500000
+v -0.357143 0.500000 0.500000
+v -0.357143 0.500000 0.450000
+v -0.450000 0.500000 0.357143
+v -0.500000 0.500000 0.357143
+v -0.500000 0.500000 0.500000
+v -0.500000 0.500000 0.214286
+v -0.450000 0.500000 0.214286
+v -0.450000 0.500000 0.071429
+v -0.500000 0.500000 0.071429
+v -0.500000 0.500000 -0.071429
+v -0.450000 0.500000 -0.071429
+v -0.450000 0.500000 -0.214286
+v -0.500000 0.500000 -0.214286
+v -0.500000 0.500000 -0.357143
+v -0.450000 0.500000 -0.357143
+v -0.357143 0.500000 -0.450000
+v -0.357143 0.500000 -0.500000
+v -0.500000 0.500000 -0.500000
+v -0.071429 0.500000 -0.500000
+v -0.214286 0.500000 -0.500000
+v -0.214286 0.500000 -0.450000
+v -0.071429 0.500000 -0.450000
+v 0.214286 0.500000 -0.500000
+v 0.071429 0.500000 -0.500000
+v 0.071429 0.500000 -0.450000
+v 0.214286 0.500000 -0.450000
+v -0.450000 -0.500000 0.214286
+v -0.500000 -0.500000 0.214286
+v -0.500000 -0.500000 0.071429
+v -0.450000 -0.500000 0.071429
+v -0.450000 -0.500000 -0.071429
+v -0.500000 -0.500000 -0.071429
+v -0.500000 -0.500000 -0.214286
+v -0.450000 -0.500000 -0.214286
+v -0.071429 -0.500000 0.450000
+v -0.071429 -0.500000 0.500000
+v -0.214286 -0.500000 0.500000
+v -0.214286 -0.500000 0.450000
+v 0.214286 -0.500000 0.450000
+v 0.214286 -0.500000 0.500000
+v 0.071429 -0.500000 0.500000
+v 0.071429 -0.500000 0.450000
+v -0.450000 -0.500000 -0.357143
+v -0.500000 -0.500000 -0.357143
+v -0.500000 -0.500000 -0.500000
+v -0.357143 -0.500000 -0.500000
+v -0.357143 -0.500000 -0.450000
+v 0.450000 -0.500000 0.357143
+v 0.500000 -0.500000 0.357143
+v 0.500000 -0.500000 0.500000
+v 0.357143 -0.500000 0.500000
+v 0.357143 -0.500000 0.450000
+v 0.450000 -0.500000 0.071429
+v 0.500000 -0.500000 0.071429
+v 0.500000 -0.500000 0.214286
+v 0.450000 -0.500000 0.214286
+v 0.450000 -0.500000 -0.214286
+v 0.500000 -0.500000 -0.214286
+v 0.500000 -0.500000 -0.071429
+v 0.450000 -0.500000 -0.071429
+v -0.214286 -0.500000 -0.450000
+v -0.214286 -0.500000 -0.500000
+v -0.071429 -0.500000 -0.500000
+v -0.071429 -0.500000 -0.450000
+v 0.071429 -0.500000 -0.450000
+v 0.071429 -0.500000 -0.500000
+v 0.214286 -0.500000 -0.500000
+v 0.214286 -0.500000 -0.450000
+v 0.357143 -0.500000 -0.450000
+v 0.357143 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.357143
+v 0.450000 -0.500000 -0.357143
+vt 0.703261 0.000176
+vt 0.703260 0.999999
+vt 0.593390 0.999999
+vt 0.593390 0.000176
+vt 0.703261 0.000176
+vt 0.703261 1.000000
+vt 0.593390 1.000000
+vt 0.593390 0.000176
+vt 0.703174 0.999823
+vt 0.593303 0.999824
+vt 0.593303 0.000000
+vt 0.703173 0.000000
+vt 0.999825 0.999823
+vt 0.889954 0.999823
+vt 0.889954 0.000000
+vt 0.999825 0.000000
+vt 0.109871 0.000001
+vt 0.109872 0.999824
+vt 0.000001 0.999825
+vt 0.000000 0.000001
+vt 0.406522 0.000000
+vt 0.406523 0.999824
+vt 0.296652 0.999824
+vt 0.296651 0.000001
+vt 0.851499 0.999823
+vt 0.851499 0.000000
+vt 0.741628 0.999823
+vt 0.741628 0.000000
+vt 0.554848 0.000000
+vt 0.554848 0.999824
+vt 0.444977 0.999824
+vt 0.444977 0.000000
+vt 0.258196 0.000001
+vt 0.258197 0.999824
+vt 0.148327 0.999824
+vt 0.148326 0.000001
+vt 0.703554 0.000088
+vt 0.703554 0.999911
+vt 0.593684 0.999911
+vt 0.593683 0.000088
+vt 0.851879 0.000088
+vt 0.851879 0.999911
+vt 0.742009 0.999911
+vt 0.742009 0.000088
+vt 0.555229 0.999911
+vt 0.555228 0.000088
+vt 1.000205 0.000087
+vt 1.000205 0.999911
+vt 0.890334 0.999911
+vt 0.890334 0.000088
+vt 0.110251 0.000088
+vt 0.110252 0.999912
+vt 0.000382 0.999913
+vt 0.000380 0.000089
+vt 0.406902 0.000088
+vt 0.406903 0.999912
+vt 0.297032 0.999912
+vt 0.297031 0.000088
+vt 0.258577 0.000088
+vt 0.258578 0.999912
+vt 0.148707 0.999912
+vt 0.148706 0.000088
+vt 0.445358 0.999911
+vt 0.445357 0.000088
+vt 0.406609 1.000000
+vt 0.406610 0.000176
+vt 0.445064 0.000176
+vt 0.445064 1.000000
+vt 0.851587 0.000177
+vt 0.851586 1.000000
+vt 0.741715 1.000000
+vt 0.741716 0.000176
+vt 0.999912 0.000177
+vt 0.999911 1.000000
+vt 0.890041 1.000000
+vt 0.890041 0.000177
+vt 0.109959 1.000000
+vt 0.109959 0.000176
+vt 0.148413 0.000176
+vt 0.148413 1.000000
+vt 0.000088 1.000000
+vt 0.000088 0.000176
+vt 0.296739 1.000000
+vt 0.296739 0.000176
+vt 0.258284 0.000176
+vt 0.258284 1.000000
+vt 0.554936 0.000176
+vt 0.554935 1.000000
+vt 0.109958 0.999999
+vt 0.109959 0.000175
+vt 0.148413 0.000175
+vt 0.148413 0.999999
+vt 0.851587 0.000176
+vt 0.851585 1.000000
+vt 0.741715 1.000000
+vt 0.741716 0.000176
+vt 0.296739 0.000176
+vt 0.296738 0.999999
+vt 0.258283 0.999999
+vt 0.258284 0.000176
+vt 0.554935 0.999999
+vt 0.554936 0.000176
+vt 0.999912 0.000177
+vt 0.999911 1.000000
+vt 0.890040 1.000000
+vt 0.890041 0.000177
+vt 0.000088 0.999999
+vt 0.000088 0.000175
+vt 0.406610 0.000176
+vt 0.406609 0.999999
+vt 0.445063 0.999999
+vt 0.445064 0.000176
+vt 0.999900 0.142928
+vt 0.949910 0.142928
+vt 0.857071 0.050090
+vt 0.857071 0.000100
+vt 0.999900 0.000100
+vt 0.142857 0.000000
+vt 0.142857 0.050000
+vt 0.050000 0.142857
+vt 0.000000 0.142857
+vt 0.000000 0.000000
+vt 0.000000 0.428571
+vt 0.000000 0.285714
+vt 0.050000 0.285714
+vt 0.050000 0.428571
+vt 0.000000 0.714286
+vt 0.000000 0.571429
+vt 0.050000 0.571429
+vt 0.050000 0.714286
+vt 0.000000 1.000000
+vt 0.000000 0.857143
+vt 0.050000 0.857143
+vt 0.142857 0.950000
+vt 0.142857 1.000000
+vt 0.428571 1.000000
+vt 0.285714 1.000000
+vt 0.285714 0.950000
+vt 0.428571 0.950000
+vt 0.571429 1.000000
+vt 0.571429 0.950000
+vt 0.714286 0.950000
+vt 0.714286 1.000000
+vt 0.857143 1.000000
+vt 0.857143 0.950000
+vt 0.950000 0.857143
+vt 1.000000 0.857143
+vt 1.000000 1.000000
+vt 1.000000 0.714286
+vt 0.950000 0.714286
+vt 0.950000 0.571429
+vt 1.000000 0.571429
+vt 1.000000 0.428571
+vt 0.950000 0.428571
+vt 0.950000 0.285714
+vt 1.000000 0.285714
+vt 1.000000 0.142857
+vt 0.950000 0.142857
+vt 0.857143 0.050000
+vt 0.857143 0.000000
+vt 1.000000 0.000000
+vt 0.571429 0.000000
+vt 0.714286 0.000000
+vt 0.714286 0.050000
+vt 0.571429 0.050000
+vt 0.285714 0.000000
+vt 0.428571 0.000000
+vt 0.428571 0.050000
+vt 0.285714 0.050000
+vt 0.949910 0.285757
+vt 0.999899 0.285757
+vt 0.999900 0.428585
+vt 0.949910 0.428585
+vt 0.949910 0.571414
+vt 0.999900 0.571414
+vt 0.999900 0.714242
+vt 0.949910 0.714242
+vt 0.571414 0.050090
+vt 0.571414 0.000100
+vt 0.714243 0.000100
+vt 0.714243 0.050090
+vt 0.285757 0.050090
+vt 0.285757 0.000100
+vt 0.428585 0.000100
+vt 0.428585 0.050090
+vt 0.949910 0.857071
+vt 0.999900 0.857071
+vt 0.999900 0.999899
+vt 0.857072 0.999899
+vt 0.857072 0.949909
+vt 0.050090 0.142929
+vt 0.000100 0.142929
+vt 0.000100 0.000100
+vt 0.142928 0.000100
+vt 0.142928 0.050090
+vt 0.050090 0.428586
+vt 0.000100 0.428586
+vt 0.000100 0.285757
+vt 0.050090 0.285757
+vt 0.050090 0.714243
+vt 0.000100 0.714243
+vt 0.000100 0.571415
+vt 0.050090 0.571415
+vt 0.714243 0.949909
+vt 0.714243 0.999899
+vt 0.571415 0.999899
+vt 0.571415 0.949910
+vt 0.428586 0.949910
+vt 0.428586 0.999900
+vt 0.285757 0.999900
+vt 0.285757 0.949910
+vt 0.142929 0.949910
+vt 0.142929 0.999900
+vt 0.000100 0.999900
+vt 0.000100 0.857072
+vt 0.050090 0.857072
+vt 0.256468 0.326048
+vt 0.256468 0.256468
+vt 0.256468 0.256468
+vt 0.256468 0.326048
+vt 0.481599 0.628810
+vt 0.481599 0.615929
+vt 0.481599 0.615929
+vt 0.481599 0.628810
+vt 0.604371 0.719179
+vt 0.604371 0.743532
+vt 0.604371 0.743532
+vt 0.604371 0.719179
+vt 0.371190 0.592007
+vt 0.371190 0.628810
+vt 0.371190 0.628810
+vt 0.371190 0.592007
+vt 0.534790 0.743532
+vt 0.534790 0.719179
+vt 0.534790 0.719179
+vt 0.534790 0.743532
+vt 0.615929 0.518401
+vt 0.615929 0.481599
+vt 0.615929 0.481599
+vt 0.615929 0.518401
+vt 0.256468 0.604371
+vt 0.256468 0.534790
+vt 0.256468 0.534790
+vt 0.256468 0.604371
+vt 0.673952 0.743532
+vt 0.673952 0.719179
+vt 0.673952 0.719179
+vt 0.673952 0.743532
+vt 0.673952 0.256468
+vt 0.743532 0.256468
+vt 0.743532 0.256468
+vt 0.673952 0.256468
+vt 0.518401 0.615929
+vt 0.518401 0.628810
+vt 0.518401 0.628810
+vt 0.518401 0.615929
+vt 0.534790 0.256468
+vt 0.604371 0.256468
+vt 0.604371 0.256468
+vt 0.534790 0.256468
+vt 0.719179 0.326048
+vt 0.719179 0.395629
+vt 0.719179 0.395629
+vt 0.719179 0.326048
+vt 0.615929 0.592007
+vt 0.615929 0.555204
+vt 0.615929 0.555204
+vt 0.615929 0.592007
+vt 0.481599 0.371190
+vt 0.444796 0.371190
+vt 0.444796 0.371190
+vt 0.481599 0.371190
+vt 0.465210 0.280821
+vt 0.534790 0.280821
+vt 0.534790 0.280821
+vt 0.465210 0.280821
+vt 0.628810 0.518401
+vt 0.628810 0.518401
+vt 0.743532 0.534790
+vt 0.743532 0.604371
+vt 0.743532 0.604371
+vt 0.743532 0.534790
+vt 0.395629 0.256468
+vt 0.465210 0.256468
+vt 0.465210 0.256468
+vt 0.395629 0.256468
+vt 0.743532 0.395629
+vt 0.743532 0.395629
+vt 0.371190 0.444796
+vt 0.371190 0.481599
+vt 0.371190 0.481599
+vt 0.371190 0.444796
+vt 0.628810 0.444796
+vt 0.615929 0.444796
+vt 0.615929 0.444796
+vt 0.628810 0.444796
+vt 0.719179 0.604371
+vt 0.719179 0.604371
+vt 0.719179 0.673952
+vt 0.743532 0.673952
+vt 0.743532 0.673952
+vt 0.719179 0.673952
+vt 0.615929 0.407993
+vt 0.628810 0.407993
+vt 0.628810 0.407993
+vt 0.615929 0.407993
+vt 0.384071 0.407993
+vt 0.384071 0.444796
+vt 0.384071 0.444796
+vt 0.384071 0.407993
+vt 0.555204 0.371190
+vt 0.518401 0.371190
+vt 0.518401 0.371190
+vt 0.555204 0.371190
+vt 0.743532 0.326048
+vt 0.743532 0.326048
+vt 0.280821 0.534790
+vt 0.280821 0.465210
+vt 0.280821 0.465210
+vt 0.280821 0.534790
+vt 0.628810 0.481599
+vt 0.628810 0.481599
+vt 0.280821 0.673952
+vt 0.280821 0.604371
+vt 0.280821 0.604371
+vt 0.280821 0.673952
+vt 0.407993 0.371190
+vt 0.371190 0.371190
+vt 0.371190 0.371190
+vt 0.407993 0.371190
+vt 0.743532 0.465210
+vt 0.719179 0.465210
+vt 0.719179 0.465210
+vt 0.743532 0.465210
+vt 0.384071 0.481599
+vt 0.384071 0.518401
+vt 0.384071 0.518401
+vt 0.384071 0.481599
+vt 0.604371 0.280821
+vt 0.673952 0.280821
+vt 0.673952 0.280821
+vt 0.604371 0.280821
+vt 0.628810 0.555204
+vt 0.628810 0.555204
+vt 0.384071 0.555204
+vt 0.384071 0.592007
+vt 0.384071 0.592007
+vt 0.384071 0.555204
+vt 0.628810 0.592007
+vt 0.628810 0.592007
+vt 0.407993 0.384071
+vt 0.407993 0.384071
+vt 0.592007 0.628810
+vt 0.628810 0.628810
+vt 0.628810 0.628810
+vt 0.592007 0.628810
+vt 0.465210 0.743532
+vt 0.395629 0.743532
+vt 0.395629 0.743532
+vt 0.465210 0.743532
+vt 0.444796 0.384071
+vt 0.444796 0.384071
+vt 0.555204 0.628810
+vt 0.555204 0.628810
+vt 0.280821 0.395629
+vt 0.280821 0.326048
+vt 0.280821 0.326048
+vt 0.280821 0.395629
+vt 0.326048 0.743532
+vt 0.256468 0.743532
+vt 0.256468 0.743532
+vt 0.326048 0.743532
+vt 0.465210 0.719179
+vt 0.465210 0.719179
+vt 0.518401 0.384071
+vt 0.481599 0.384071
+vt 0.481599 0.384071
+vt 0.518401 0.384071
+vt 0.256468 0.673952
+vt 0.256468 0.673952
+vt 0.256468 0.395629
+vt 0.256468 0.395629
+vt 0.326048 0.280821
+vt 0.395629 0.280821
+vt 0.395629 0.280821
+vt 0.326048 0.280821
+vt 0.444796 0.628810
+vt 0.444796 0.628810
+vt 0.592007 0.384071
+vt 0.555204 0.384071
+vt 0.555204 0.384071
+vt 0.592007 0.384071
+vt 0.371190 0.555204
+vt 0.371190 0.555204
+vt 0.371190 0.407993
+vt 0.371190 0.407993
+vt 0.326048 0.256468
+vt 0.326048 0.256468
+vt 0.395629 0.719179
+vt 0.326048 0.719179
+vt 0.326048 0.719179
+vt 0.395629 0.719179
+vt 0.371190 0.518401
+vt 0.371190 0.518401
+vt 0.444796 0.615929
+vt 0.444796 0.615929
+vt 0.256468 0.465210
+vt 0.256468 0.465210
+vt 0.555204 0.615929
+vt 0.592007 0.615929
+vt 0.592007 0.615929
+vt 0.555204 0.615929
+vt 0.743532 0.743532
+vt 0.743532 0.743532
+vt 0.592007 0.371190
+vt 0.592007 0.371190
+vt 0.719179 0.534790
+vt 0.719179 0.534790
+vt 0.628810 0.371190
+vt 0.628810 0.371190
+vt 0.407993 0.615929
+vt 0.407993 0.615929
+vt 0.407993 0.628810
+vt 0.407993 0.628810
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 1.0000 -0.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/5/2 6/6/2 7/7/2 8/8/2
+f 9/9/3 10/10/3 11/11/3 12/12/3
+f 13/13/3 14/14/3 15/15/3 16/16/3
+f 17/17/3 18/18/3 19/19/3 20/20/3
+f 21/21/3 22/22/3 23/23/3 24/24/3
+f 15/15/1 14/14/1 25/25/1 26/26/1
+f 25/25/3 27/27/3 28/28/3 26/26/3
+f 29/29/3 30/30/3 31/31/3 32/32/3
+f 33/33/3 34/34/3 35/35/3 36/36/3
+f 18/18/2 17/17/2 36/36/2 35/35/2
+f 11/11/1 10/10/1 30/30/1 29/29/1
+f 22/22/2 21/21/2 32/32/2 31/31/2
+f 9/9/2 12/12/2 28/28/2 27/27/2
+f 24/24/1 23/23/1 34/34/1 33/33/1
+f 37/37/4 38/38/4 39/39/4 40/40/4
+f 41/41/4 42/42/4 43/43/4 44/44/4
+f 40/40/2 39/39/2 45/45/2 46/46/2
+f 47/47/4 48/48/4 49/49/4 50/50/4
+f 38/38/1 37/37/1 44/44/1 43/43/1
+f 51/51/4 52/52/4 53/53/4 54/54/4
+f 50/50/2 49/49/2 42/42/2 41/41/2
+f 55/55/4 56/56/4 57/57/4 58/58/4
+f 59/59/4 60/60/4 61/61/4 62/62/4
+f 46/46/4 45/45/4 63/63/4 64/64/4
+f 56/56/1 55/55/1 64/64/1 63/63/1
+f 58/58/2 57/57/2 60/60/2 59/59/2
+f 52/52/1 51/51/1 62/62/1 61/61/1
+f 65/65/4 66/66/4 67/67/4 68/68/4
+f 69/69/2 70/70/2 71/71/2 72/72/2
+f 6/6/4 5/5/4 72/72/4 71/71/4
+f 54/73/2 53/74/2 73/75/2 74/76/2
+f 75/77/4 76/78/4 77/79/4 78/80/4
+f 76/78/2 75/77/2 13/81/2 16/82/2
+f 66/66/2 65/65/2 79/83/2 80/84/2
+f 81/85/2 82/86/2 78/80/2 77/79/2
+f 83/87/2 84/88/2 68/68/2 67/67/2
+f 80/84/3 79/83/3 82/86/3 81/85/3
+f 74/76/3 73/75/3 70/70/3 69/69/3
+f 8/8/3 7/7/3 84/88/3 83/87/3
+f 85/89/3 86/90/3 87/91/3 88/92/3
+f 89/93/1 90/94/1 91/95/1 92/96/1
+f 93/97/4 94/98/4 95/99/4 96/100/4
+f 4/4/4 3/3/4 97/101/4 98/102/4
+f 20/103/1 19/104/1 99/105/1 100/106/1
+f 86/90/1 85/89/1 48/107/1 47/108/1
+f 101/109/1 102/110/1 94/98/1 93/97/1
+f 96/100/1 95/99/1 88/92/1 87/91/1
+f 98/102/1 97/101/1 103/111/1 104/112/1
+f 100/106/4 99/105/4 90/94/4 89/93/4
+f 102/110/3 101/109/3 104/112/3 103/111/3
+f 2/2/3 1/1/3 92/96/3 91/95/3
+f 105/113/5 106/114/5 107/115/5 108/116/5 109/117/5
+f 110/118/6 111/119/6 112/120/6 113/121/6 114/122/6
+f 115/123/6 116/124/6 117/125/6 118/126/6
+f 119/127/6 120/128/6 121/129/6 122/130/6
+f 123/131/6 124/132/6 125/133/6 126/134/6 127/135/6
+f 128/136/6 129/137/6 130/138/6 131/139/6
+f 132/140/6 133/141/6 134/142/6 135/143/6
+f 136/144/6 137/145/6 138/146/6 139/147/6 140/148/6
+f 141/149/6 142/150/6 143/151/6 144/152/6
+f 145/153/6 146/154/6 147/155/6 148/156/6
+f 149/157/6 150/158/6 151/159/6 152/160/6 153/161/6
+f 154/162/6 155/163/6 156/164/6 157/165/6
+f 158/166/6 159/167/6 160/168/6 161/169/6
+f 147/155/6 146/154/6 143/151/6 142/150/6 138/146/6 137/145/6 134/142/6 133/141/6 131/139/6 130/138/6 126/134/6 125/133/6 122/130/6 121/129/6 118/126/6 117/125/6 112/120/6 111/119/6 161/169/6 160/168/6 157/165/6 156/164/6 151/159/6 150/158/6
+f 162/170/5 163/171/5 164/172/5 165/173/5
+f 166/174/5 167/175/5 168/176/5 169/177/5
+f 170/178/5 171/179/5 172/180/5 173/181/5
+f 174/182/5 175/183/5 176/184/5 177/185/5
+f 178/186/5 179/187/5 180/188/5 181/189/5 182/190/5
+f 183/191/5 184/192/5 185/193/5 186/194/5 187/195/5
+f 188/196/5 189/197/5 190/198/5 191/199/5
+f 192/200/5 193/201/5 194/202/5 195/203/5
+f 196/204/5 197/205/5 198/206/5 199/207/5
+f 200/208/5 201/209/5 202/210/5 203/211/5
+f 204/212/5 205/213/5 206/214/5 207/215/5 208/216/5
+f 208/216/5 192/200/5 195/203/5 188/196/5 191/199/5 183/191/5 187/195/5 174/182/5 177/185/5 170/178/5 173/181/5 107/115/5 106/114/5 162/170/5 165/173/5 166/174/5 169/177/5 178/186/5 182/190/5 196/204/5 199/207/5 200/208/5 203/211/5 204/212/5
+f 17/217/2 20/218/2 180/219/2 179/220/2
+f 65/221/2 68/222/2 133/223/2 132/224/2
+f 72/225/2 5/226/2 175/227/2 174/228/2
+f 14/229/2 13/230/2 140/231/2 139/232/2
+f 8/233/2 83/234/2 177/235/2 176/236/2
+f 63/237/2 45/238/2 118/239/2 121/240/2
+f 12/241/2 11/242/2 164/243/2 163/244/2
+f 74/245/2 69/246/2 187/247/2 186/248/2
+f 86/249/2 47/250/2 206/251/2 205/252/2
+f 84/253/2 7/254/2 128/255/2 131/256/2
+f 101/257/2 93/258/2 202/259/2 201/260/2
+f 41/261/2 44/262/2 192/263/2 208/264/2
+f 61/265/2 60/266/2 122/267/2 125/268/2
+f 3/269/2 2/270/2 155/271/2 154/272/2
+f 98/273/2 104/274/2 200/275/2 199/276/2
+f 56/277/2 63/237/2 121/240/2 120/278/2
+f 55/279/2 58/280/2 190/281/2 189/282/2
+f 1/283/2 4/284/2 198/285/2 197/286/2
+f 44/262/2 37/287/2 193/288/2 192/263/2
+f 23/289/2 22/290/2 145/291/2 148/292/2
+f 38/293/2 43/294/2 117/295/2 116/296/2
+f 58/280/2 59/297/2 191/298/2 190/281/2
+f 62/299/2 51/300/2 184/301/2 183/302/2
+f 42/303/2 49/304/2 113/305/2 112/306/2
+f 35/307/2 34/308/2 147/309/2 150/310/2
+f 94/311/2 102/312/2 159/313/2 158/314/2
+f 50/315/2 41/261/2 208/264/2 207/316/2
+f 29/317/2 32/318/2 166/319/2 165/320/2
+f 45/238/2 39/321/2 115/322/2 118/239/2
+f 26/323/2 28/324/2 162/325/2 106/326/2
+f 99/327/2 19/328/2 153/329/2 152/330/2
+f 40/331/2 46/332/2 195/333/2 194/334/2
+f 31/335/2 30/336/2 143/337/2 146/338/2
+f 96/339/2 87/340/2 204/341/2 203/342/2
+f 60/266/2 57/343/2 119/344/2 122/267/2
+f 27/345/2 25/346/2 138/347/2 142/348/2
+f 52/349/2 61/265/2 125/268/2 124/350/2
+f 90/351/2 99/327/2 152/330/2 151/352/2
+f 73/353/2 53/354/2 123/355/2 127/356/2
+f 66/357/2 80/358/2 172/359/2 171/360/2
+f 91/361/2 90/351/2 151/352/2 156/362/2
+f 7/254/2 6/363/2 129/364/2 128/255/2
+f 33/365/2 36/366/2 178/367/2 169/368/2
+f 76/369/2 16/370/2 109/371/2 108/372/2
+f 5/226/2 8/233/2 176/236/2 175/227/2
+f 83/234/2 67/373/2 170/374/2 177/235/2
+f 103/375/2 97/376/2 157/377/2 160/378/2
+f 25/346/2 14/229/2 139/232/2 138/347/2
+f 15/379/2 26/323/2 106/326/2 105/380/2
+f 24/381/2 33/365/2 169/368/2 168/382/2
+f 89/383/2 92/384/2 196/385/2 182/386/2
+f 79/387/2 65/221/2 132/224/2 135/388/2
+f 36/366/2 17/217/2 179/220/2 178/367/2
+f 88/389/2 95/390/2 161/391/2 111/392/2
+f 9/393/2 27/345/2 142/348/2 141/394/2
+f 18/395/2 35/307/2 150/310/2 149/396/2
+f 100/397/2 89/383/2 182/386/2 181/398/2
+f 81/399/2 77/400/2 107/401/2 173/402/2
+f 30/336/2 10/403/2 144/404/2 143/337/2
+f 2/270/2 91/361/2 156/362/2 155/271/2
+f 11/242/2 29/317/2 165/320/2 164/243/2
+f 97/376/2 3/269/2 154/272/2 157/377/2
+f 82/405/2 79/387/2 135/388/2 134/406/2
+f 32/318/2 21/407/2 167/408/2 166/319/2
+f 4/284/2 98/273/2 199/276/2 198/285/2
+f 22/290/2 31/335/2 146/338/2 145/291/2
+f 92/384/2 1/283/2 197/286/2 196/385/2
+f 71/409/2 70/410/2 126/411/2 130/412/2
+f 28/324/2 12/241/2 163/244/2 162/325/2
+f 95/390/2 94/311/2 158/314/2 161/391/2
+f 34/308/2 23/289/2 148/292/2 147/309/2
+f 93/258/2 96/339/2 203/342/2 202/259/2
+f 51/300/2 54/413/2 185/414/2 184/301/2
+f 87/340/2 86/249/2 205/252/2 204/341/2
+f 85/415/2 88/389/2 111/392/2 110/416/2
+f 68/222/2 84/253/2 131/256/2 133/223/2
+f 104/274/2 101/257/2 201/260/2 200/275/2
+f 16/370/2 15/379/2 105/380/2 109/371/2
+f 102/312/2 103/375/2 160/378/2 159/313/2
+f 46/332/2 64/417/2 188/418/2 195/333/2
+f 19/328/2 18/395/2 149/396/2 153/329/2
+f 69/246/2 72/225/2 174/228/2 187/247/2
+f 49/304/2 48/419/2 114/420/2 113/305/2
+f 20/218/2 100/397/2 181/398/2 180/219/2
+f 78/421/2 82/405/2 134/406/2 137/422/2
+f 39/321/2 38/293/2 116/296/2 115/322/2
+f 48/419/2 85/415/2 110/416/2 114/420/2
+f 57/343/2 56/277/2 120/278/2 119/344/2
+f 47/250/2 50/315/2 207/316/2 206/251/2
+f 80/358/2 81/399/2 173/402/2 172/359/2
+f 43/294/2 42/303/2 112/306/2 117/295/2
+f 53/354/2 52/349/2 124/350/2 123/355/2
+f 77/400/2 76/369/2 108/372/2 107/401/2
+f 37/287/2 40/331/2 194/334/2 193/288/2
+f 75/423/2 78/421/2 137/422/2 136/424/2
+f 64/417/2 55/279/2 189/282/2 188/418/2
+f 54/413/2 74/245/2 186/248/2 185/414/2
+f 6/363/2 71/409/2 130/412/2 129/364/2
+f 13/230/2 75/423/2 136/424/2 140/231/2
+f 70/410/2 73/353/2 127/356/2 126/411/2
+f 59/297/2 62/299/2 183/302/2 191/298/2
+f 21/407/2 24/381/2 168/382/2 167/408/2
+f 67/373/2 66/357/2 171/360/2 170/374/2
+f 10/403/2 9/393/2 141/394/2 144/404/2
diff --git a/technic/models/technic_cylinder_fluted.obj b/technic/models/technic_cylinder_fluted.obj
new file mode 100644
index 0000000..bcc4efd
--- /dev/null
+++ b/technic/models/technic_cylinder_fluted.obj
@@ -0,0 +1,919 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_cylinder_fluted.mtl
+o Cylinder_Cylinder.005
+v 0.443505 -0.500000 -0.230874
+v 0.397106 -0.500000 -0.212245
+v 0.354204 -0.500000 -0.277994
+v 0.389943 -0.500000 -0.312962
+v 0.498097 -0.500000 -0.043579
+v 0.448100 -0.500000 -0.044124
+v 0.433625 -0.500000 -0.121286
+v 0.480025 -0.500000 -0.139915
+v -0.212245 -0.500000 -0.397106
+v -0.121286 -0.500000 -0.433625
+v -0.044123 -0.500000 -0.448101
+v 0.053888 -0.500000 -0.447031
+v 0.130715 -0.500000 -0.430876
+v 0.220858 -0.500000 -0.392381
+v 0.285655 -0.500000 -0.348055
+v 0.447031 -0.500000 0.053888
+v 0.430875 -0.500000 0.130716
+v 0.392381 -0.500000 0.220858
+v 0.348055 -0.500000 0.285655
+v 0.277994 -0.500000 0.354202
+v 0.212245 -0.500000 0.397105
+v 0.121285 -0.500000 0.433624
+v 0.044123 -0.500000 0.448100
+v -0.053888 -0.500000 0.447030
+v -0.130717 -0.500000 0.430876
+v -0.220858 -0.500000 0.392381
+v -0.285656 -0.500000 0.348054
+v -0.354204 -0.500000 0.277994
+v -0.397106 -0.500000 0.212244
+v -0.433626 -0.500000 0.121285
+v -0.448101 -0.500000 0.044123
+v -0.447031 -0.500000 -0.053889
+v -0.430876 -0.500000 -0.130717
+v -0.392381 -0.500000 -0.220858
+v -0.348054 -0.500000 -0.285655
+v -0.277993 -0.500000 -0.354204
+v 0.476858 -0.500000 0.150353
+v 0.497028 -0.500000 0.054433
+v 0.383023 -0.500000 0.321394
+v 0.438363 -0.500000 0.240495
+v 0.230874 -0.500000 0.443505
+v 0.312961 -0.500000 0.389942
+v 0.043577 -0.500000 0.498097
+v 0.139914 -0.500000 0.480024
+v -0.150354 -0.500000 0.476858
+v -0.054434 -0.500000 0.497027
+v -0.321394 -0.500000 0.383022
+v -0.240495 -0.500000 0.438363
+v -0.443506 -0.500000 0.230873
+v -0.389943 -0.500000 0.312962
+v -0.498098 -0.500000 0.043578
+v -0.480026 -0.500000 0.139914
+v -0.476858 -0.500000 -0.150354
+v -0.497028 -0.500000 -0.054435
+v -0.383022 -0.500000 -0.321394
+v -0.438363 -0.500000 -0.240495
+v -0.312961 -0.500000 -0.389943
+v -0.230874 -0.500000 -0.443505
+v -0.043578 -0.500000 -0.498098
+v -0.139915 -0.500000 -0.480025
+v 0.150352 -0.500000 -0.476859
+v 0.054433 -0.500000 -0.497028
+v 0.321394 -0.500000 -0.383023
+v 0.240495 -0.500000 -0.438363
+v -0.139915 -0.500000 -0.480025
+v -0.139915 0.500000 -0.480025
+v -0.043578 0.500000 -0.498098
+v -0.043578 -0.500000 -0.498098
+v -0.150354 0.500000 0.476858
+v -0.054434 0.500000 0.497027
+v -0.054434 0.500000 0.497027
+v -0.053888 0.500000 0.447030
+v -0.130717 0.500000 0.430876
+v -0.150354 0.500000 0.476858
+v 0.054433 -0.500000 -0.497028
+v 0.054433 0.500000 -0.497028
+v 0.150352 0.500000 -0.476859
+v 0.150352 -0.500000 -0.476859
+v 0.240495 -0.500000 -0.438363
+v 0.240495 0.500000 -0.438363
+v 0.321394 0.500000 -0.383023
+v 0.321394 -0.500000 -0.383023
+v 0.389943 -0.500000 -0.312962
+v 0.389943 0.500000 -0.312962
+v 0.443505 0.500000 -0.230874
+v 0.443505 -0.500000 -0.230874
+v 0.480025 -0.500000 -0.139915
+v 0.480025 0.500000 -0.139915
+v 0.498097 0.500000 -0.043579
+v 0.498097 -0.500000 -0.043579
+v 0.285655 0.500000 -0.348055
+v 0.321394 0.500000 -0.383023
+v 0.240495 0.500000 -0.438363
+v 0.220858 0.500000 -0.392381
+v 0.497028 -0.500000 0.054433
+v 0.497028 0.500000 0.054433
+v 0.476858 0.500000 0.150353
+v 0.476858 -0.500000 0.150353
+v 0.438363 -0.500000 0.240495
+v 0.438363 0.500000 0.240495
+v 0.383023 0.500000 0.321394
+v 0.383023 -0.500000 0.321394
+v 0.312961 -0.500000 0.389942
+v 0.312961 0.500000 0.389942
+v 0.230874 0.500000 0.443505
+v 0.230874 -0.500000 0.443505
+v 0.139914 -0.500000 0.480024
+v 0.139914 0.500000 0.480024
+v 0.043577 0.500000 0.498097
+v 0.043577 -0.500000 0.498097
+v -0.054434 -0.500000 0.497027
+v -0.150354 -0.500000 0.476858
+v -0.240495 -0.500000 0.438363
+v -0.240495 0.500000 0.438363
+v -0.321394 0.500000 0.383022
+v -0.321394 -0.500000 0.383022
+v -0.389943 -0.500000 0.312962
+v -0.389943 0.500000 0.312962
+v -0.443506 0.500000 0.230873
+v -0.443506 -0.500000 0.230873
+v -0.480026 -0.500000 0.139914
+v -0.480026 0.500000 0.139914
+v -0.498098 0.500000 0.043578
+v -0.498098 -0.500000 0.043578
+v -0.497028 -0.500000 -0.054435
+v -0.497028 0.500000 -0.054435
+v -0.476858 0.500000 -0.150354
+v -0.476858 -0.500000 -0.150354
+v -0.438363 -0.500000 -0.240495
+v -0.438363 0.500000 -0.240495
+v -0.383022 0.500000 -0.321394
+v -0.383022 -0.500000 -0.321394
+v -0.312961 -0.500000 -0.389943
+v -0.312961 0.500000 -0.389943
+v -0.230874 0.500000 -0.443505
+v -0.230874 -0.500000 -0.443505
+v 0.054433 0.500000 -0.497028
+v 0.053888 0.500000 -0.447031
+v 0.130715 0.500000 -0.430876
+v 0.150352 0.500000 -0.476859
+v -0.438363 0.500000 -0.240495
+v -0.392381 0.500000 -0.220858
+v -0.348054 0.500000 -0.285655
+v -0.383022 0.500000 -0.321394
+v -0.285656 0.500000 0.348054
+v -0.321394 0.500000 0.383022
+v -0.240495 0.500000 0.438363
+v -0.220858 0.500000 0.392381
+v -0.389943 0.500000 0.312962
+v -0.354204 0.500000 0.277994
+v -0.397106 0.500000 0.212244
+v -0.443506 0.500000 0.230873
+v 0.312961 0.500000 0.389942
+v 0.277994 0.500000 0.354203
+v 0.212245 0.500000 0.397105
+v 0.230874 0.500000 0.443505
+v -0.480026 0.500000 0.139914
+v -0.433626 0.500000 0.121285
+v -0.448101 0.500000 0.044123
+v -0.498098 0.500000 0.043578
+v -0.312961 0.500000 -0.389943
+v -0.277993 0.500000 -0.354204
+v -0.212245 0.500000 -0.397106
+v -0.230874 0.500000 -0.443505
+v 0.044123 0.500000 0.448100
+v 0.043577 0.500000 0.498097
+v 0.139914 0.500000 0.480024
+v 0.121286 0.500000 0.433624
+v -0.139915 0.500000 -0.480025
+v -0.121286 0.500000 -0.433625
+v -0.044123 0.500000 -0.448101
+v -0.043578 0.500000 -0.498098
+v -0.497028 0.500000 -0.054435
+v -0.447031 0.500000 -0.053889
+v -0.430876 0.500000 -0.130717
+v -0.476858 0.500000 -0.150354
+v 0.354204 0.500000 -0.277994
+v 0.389943 0.500000 -0.312962
+v 0.397106 0.500000 -0.212245
+v 0.433625 0.500000 -0.121286
+v 0.443505 0.500000 -0.230874
+v 0.480025 0.500000 -0.139915
+v 0.448100 0.500000 -0.044124
+v 0.447031 0.500000 0.053888
+v 0.498097 0.500000 -0.043579
+v 0.497028 0.500000 0.054433
+v 0.430875 0.500000 0.130716
+v 0.392381 0.500000 0.220858
+v 0.476858 0.500000 0.150353
+v 0.438363 0.500000 0.240495
+v 0.348055 0.500000 0.285655
+v 0.383023 0.500000 0.321394
+vt 0.736839 0.943094
+vt 0.717612 0.896676
+vt 0.783205 0.852849
+vt 0.818731 0.888375
+vt 0.549247 1.000000
+vt 0.549246 0.949758
+vt 0.626618 0.934368
+vt 0.645845 0.980785
+vt 0.896675 0.282387
+vt 0.934367 0.373381
+vt 0.949757 0.450753
+vt 0.949757 0.549244
+vt 0.934367 0.626616
+vt 0.896676 0.717611
+vt 0.852849 0.783204
+vt 0.450755 0.949758
+vt 0.373382 0.934367
+vt 0.282388 0.896677
+vt 0.216795 0.852850
+vt 0.147152 0.783206
+vt 0.103323 0.717613
+vt 0.065633 0.626619
+vt 0.050242 0.549246
+vt 0.050242 0.450755
+vt 0.065631 0.373383
+vt 0.103322 0.282389
+vt 0.147150 0.216795
+vt 0.216793 0.147151
+vt 0.282387 0.103323
+vt 0.373381 0.065632
+vt 0.450752 0.050242
+vt 0.549245 0.050242
+vt 0.626617 0.065632
+vt 0.717610 0.103323
+vt 0.783204 0.147151
+vt 0.852848 0.216795
+vt 0.354156 0.980785
+vt 0.450755 1.000000
+vt 0.181269 0.888376
+vt 0.263161 0.943095
+vt 0.056906 0.736840
+vt 0.111625 0.818732
+vt 0.000000 0.549246
+vt 0.019215 0.645846
+vt 0.019214 0.354156
+vt 0.000000 0.450755
+vt 0.111624 0.181269
+vt 0.056905 0.263162
+vt 0.263160 0.056906
+vt 0.181267 0.111625
+vt 0.450752 0.000000
+vt 0.354154 0.019215
+vt 0.645843 0.019215
+vt 0.549245 0.000000
+vt 0.818730 0.111625
+vt 0.736837 0.056905
+vt 0.888374 0.181269
+vt 0.943093 0.263160
+vt 0.999999 0.450753
+vt 0.980784 0.354154
+vt 0.980785 0.645843
+vt 0.999999 0.549244
+vt 0.888376 0.818730
+vt 0.943094 0.736838
+vt 0.625001 -0.000000
+vt 0.625001 1.000000
+vt 0.562501 1.000000
+vt 0.562501 -0.000000
+vt 0.980786 0.354156
+vt 1.000000 0.450755
+vt 1.000000 0.450755
+vt 0.949758 0.450755
+vt 0.934369 0.373383
+vt 0.980786 0.354156
+vt 0.500001 -0.000000
+vt 0.500001 1.000000
+vt 0.437501 1.000000
+vt 0.437501 -0.000000
+vt 0.375001 -0.000000
+vt 0.375001 1.000000
+vt 0.312501 1.000000
+vt 0.312501 -0.000000
+vt 0.250001 -0.000000
+vt 0.250001 1.000000
+vt 0.187501 1.000000
+vt 0.187501 -0.000000
+vt 0.125001 -0.000000
+vt 0.125001 1.000000
+vt 0.062501 1.000000
+vt 0.062501 -0.000000
+vt 0.147150 0.783204
+vt 0.111624 0.818730
+vt 0.111624 0.818730
+vt 0.056905 0.736838
+vt 0.056905 0.736838
+vt 0.103323 0.717611
+vt 0.963545 -0.000000
+vt 0.963545 1.000000
+vt 0.903532 1.000000
+vt 0.903531 -0.000000
+vt 0.843518 -0.000000
+vt 0.843518 1.000000
+vt 0.783504 1.000000
+vt 0.783504 0.000000
+vt 0.723491 0.000000
+vt 0.723491 1.000000
+vt 0.663477 1.000000
+vt 0.663477 0.000000
+vt 0.603463 0.000000
+vt 0.603463 1.000000
+vt 0.543450 1.000000
+vt 0.543450 0.000000
+vt 0.483436 0.000000
+vt 0.483436 1.000000
+vt 0.423422 1.000000
+vt 0.423422 0.000000
+vt 0.363409 0.000000
+vt 0.363409 1.000000
+vt 0.303395 1.000000
+vt 0.303395 0.000000
+vt 0.243382 0.000000
+vt 0.243382 1.000000
+vt 0.183368 1.000000
+vt 0.183368 0.000000
+vt 0.123354 0.000000
+vt 0.123354 1.000000
+vt 0.063341 1.000000
+vt 0.063341 0.000000
+vt 1.000000 -0.000000
+vt 1.000000 1.000000
+vt 0.937500 1.000000
+vt 0.937500 -0.000000
+vt 0.875001 -0.000000
+vt 0.875001 1.000000
+vt 0.812500 1.000000
+vt 0.812500 -0.000000
+vt 0.750000 -0.000000
+vt 0.750000 1.000000
+vt 0.687501 1.000000
+vt 0.687501 -0.000000
+vt 0.019214 0.645843
+vt 0.000000 0.549244
+vt 0.000000 0.549244
+vt 0.050242 0.549244
+vt 0.065632 0.626616
+vt 0.019214 0.645843
+vt 0.181269 0.111625
+vt 0.263162 0.056905
+vt 0.263162 0.056905
+vt 0.282389 0.103323
+vt 0.216796 0.147151
+vt 0.181269 0.111625
+vt 0.852850 0.216795
+vt 0.888376 0.181269
+vt 0.888376 0.181269
+vt 0.943095 0.263162
+vt 0.943095 0.263162
+vt 0.896678 0.282389
+vt 0.736839 0.056906
+vt 0.818733 0.111625
+vt 0.818733 0.111625
+vt 0.783206 0.147151
+vt 0.717613 0.103323
+vt 0.736839 0.056906
+vt 0.943094 0.736840
+vt 0.888375 0.818732
+vt 0.888375 0.818732
+vt 0.852848 0.783206
+vt 0.896677 0.717613
+vt 0.943094 0.736840
+vt 0.549247 0.000000
+vt 0.645846 0.019215
+vt 0.645846 0.019215
+vt 0.626619 0.065632
+vt 0.549247 0.050242
+vt 0.549247 0.000000
+vt 0.111625 0.181269
+vt 0.111625 0.181269
+vt 0.147151 0.216795
+vt 0.103324 0.282387
+vt 0.056907 0.263160
+vt 0.056907 0.263160
+vt 0.949758 0.549246
+vt 1.000000 0.549246
+vt 1.000000 0.549246
+vt 0.980785 0.645846
+vt 0.980785 0.645846
+vt 0.934367 0.626619
+vt 0.000000 0.450753
+vt 0.019215 0.354154
+vt 0.019215 0.354154
+vt 0.065632 0.373381
+vt 0.050242 0.450753
+vt 0.000000 0.450753
+vt 0.354156 0.019215
+vt 0.450755 0.000000
+vt 0.450755 0.000000
+vt 0.450755 0.050242
+vt 0.373383 0.065632
+vt 0.354156 0.019215
+vt 0.690965 -0.000000
+vt 0.690965 1.000000
+vt 0.621536 1.000000
+vt 0.621536 -0.000000
+vt 0.687501 1.000000
+vt 0.687501 -0.000000
+vt 0.625001 -0.000000
+vt 0.625001 1.000000
+vt 0.565965 -0.000000
+vt 0.565965 1.000000
+vt 0.496536 1.000000
+vt 0.496536 -0.000000
+vt 0.562501 1.000000
+vt 0.562501 -0.000000
+vt 0.500001 -0.000000
+vt 0.500001 1.000000
+vt 0.440966 -0.000000
+vt 0.440966 1.000000
+vt 0.371536 1.000000
+vt 0.371536 -0.000000
+vt 0.437501 1.000000
+vt 0.437501 -0.000000
+vt 0.375001 -0.000000
+vt 0.375001 1.000000
+vt 0.315966 -0.000000
+vt 0.315965 1.000000
+vt 0.246536 1.000000
+vt 0.246536 -0.000000
+vt 0.312501 1.000000
+vt 0.312501 -0.000000
+vt 0.250001 -0.000000
+vt 0.250001 1.000000
+vt 0.190965 -0.000000
+vt 0.190965 1.000000
+vt 0.121536 1.000000
+vt 0.121536 -0.000000
+vt 0.187501 1.000000
+vt 0.187501 -0.000000
+vt 0.125001 -0.000000
+vt 0.125001 1.000000
+vt 0.065966 -0.000000
+vt 0.065966 1.000000
+vt -0.003464 1.000000
+vt -0.003464 -0.000000
+vt 0.062501 1.000000
+vt 0.062501 -0.000000
+vt 0.963545 -0.000000
+vt 0.960218 -0.000000
+vt 0.960218 1.000000
+vt 0.963545 1.000000
+vt 0.906858 -0.000000
+vt 0.906858 1.000000
+vt 0.840191 1.000000
+vt 0.840191 0.000000
+vt 0.903532 1.000000
+vt 0.903531 -0.000000
+vt 0.843518 -0.000000
+vt 0.843518 1.000000
+vt 0.786831 0.000000
+vt 0.786831 1.000000
+vt 0.720164 1.000000
+vt 0.720164 0.000000
+vt 0.783504 1.000000
+vt 0.783504 0.000000
+vt 0.723491 0.000000
+vt 0.723491 1.000000
+vt 0.666804 0.000000
+vt 0.666804 1.000000
+vt 0.600137 1.000000
+vt 0.600137 0.000000
+vt 0.663477 1.000000
+vt 0.663477 0.000000
+vt 0.603463 0.000000
+vt 0.603463 1.000000
+vt 0.546776 0.000000
+vt 0.546776 1.000000
+vt 0.480109 1.000000
+vt 0.480109 0.000000
+vt 0.543450 1.000000
+vt 0.543450 0.000000
+vt 0.483436 0.000000
+vt 0.483436 1.000000
+vt 0.426749 0.000000
+vt 0.426749 1.000000
+vt 0.360082 1.000000
+vt 0.360082 0.000000
+vt 0.423422 1.000000
+vt 0.423422 0.000000
+vt 0.363409 0.000000
+vt 0.363409 1.000000
+vt 0.306722 0.000000
+vt 0.306722 1.000000
+vt 0.240055 1.000000
+vt 0.240055 0.000000
+vt 0.303395 1.000000
+vt 0.303395 0.000000
+vt 0.243382 0.000000
+vt 0.243382 1.000000
+vt 0.186694 0.000000
+vt 0.186694 1.000000
+vt 0.120027 1.000000
+vt 0.120027 0.000000
+vt 0.183368 1.000000
+vt 0.183368 0.000000
+vt 0.123354 0.000000
+vt 0.123354 1.000000
+vt 0.066668 0.000000
+vt 0.066668 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 0.063341 1.000000
+vt 0.063341 0.000000
+vt 1.000000 -0.000000
+vt 0.996535 -0.000000
+vt 0.996535 1.000000
+vt 1.000000 1.000000
+vt 0.940965 -0.000000
+vt 0.940965 1.000000
+vt 0.871536 1.000000
+vt 0.871536 -0.000000
+vt 0.937500 1.000000
+vt 0.937500 -0.000000
+vt 0.875001 -0.000000
+vt 0.875001 1.000000
+vt 0.815965 -0.000000
+vt 0.815965 1.000000
+vt 0.746535 1.000000
+vt 0.746535 -0.000000
+vt 0.812500 1.000000
+vt 0.812500 -0.000000
+vt 0.750000 -0.000000
+vt 0.750000 1.000000
+vt 0.783204 0.852850
+vt 0.818731 0.888376
+vt 0.818731 0.888376
+vt 0.736839 0.943095
+vt 0.736839 0.943095
+vt 0.717612 0.896677
+vt 0.626617 0.934367
+vt 0.645844 0.980785
+vt 0.645844 0.980785
+vt 0.549245 1.000000
+vt 0.549245 1.000000
+vt 0.549245 0.949758
+vt 0.450753 0.949758
+vt 0.450753 1.000000
+vt 0.450753 1.000000
+vt 0.354154 0.980785
+vt 0.354154 0.980785
+vt 0.373381 0.934368
+vt 0.282388 0.896676
+vt 0.263161 0.943094
+vt 0.263161 0.943094
+vt 0.181268 0.888375
+vt 0.181268 0.888375
+vt 0.216794 0.852849
+vt 0.437496 0.000014
+vt 0.437501 0.999993
+vt 0.437501 0.999993
+vt 0.437496 0.000014
+vt 0.937498 -0.000000
+vt 0.937498 0.999998
+vt 0.937498 0.999998
+vt 0.937498 -0.000000
+vt 0.250003 0.999994
+vt 0.249997 0.000018
+vt 0.249997 0.000018
+vt 0.250003 0.999994
+vt 0.874997 0.999998
+vt 0.874997 -0.000000
+vt 0.874997 -0.000000
+vt 0.874997 0.999998
+vt 0.874997 0.999998
+vt 0.874997 -0.000000
+vt 0.874997 -0.000000
+vt 0.874997 0.999998
+vt 0.937498 -0.000000
+vt 0.937498 0.999998
+vt 0.937498 0.999998
+vt 0.937498 -0.000000
+vt 0.125004 0.999996
+vt 0.124999 0.000021
+vt 0.124999 0.000021
+vt 0.125004 0.999996
+vt 0.375002 0.999993
+vt 0.374997 0.000015
+vt 0.374997 0.000015
+vt 0.375002 0.999993
+vt 0.187498 0.000020
+vt 0.187503 0.999995
+vt 0.187503 0.999995
+vt 0.187498 0.000020
+vt 0.499996 0.999997
+vt 0.499995 0.000005
+vt 0.499995 0.000005
+vt 0.499996 0.999997
+vt 0.125004 0.999996
+vt 0.124999 0.000021
+vt 0.124999 0.000021
+vt 0.125004 0.999996
+vt 0.624997 0.999997
+vt 0.624995 0.000003
+vt 0.624995 0.000003
+vt 0.624997 0.999997
+vt 0.437496 0.000014
+vt 0.437501 0.999993
+vt 0.437501 0.999993
+vt 0.437496 0.000014
+vt 0.687496 0.000002
+vt 0.687497 0.999998
+vt 0.687497 0.999998
+vt 0.687496 0.000002
+vt 0.062500 0.000023
+vt 0.062505 0.999996
+vt 0.062505 0.999996
+vt 0.062500 0.000023
+vt 0.812497 0.000001
+vt 0.812497 0.999998
+vt 0.812497 0.999998
+vt 0.812497 0.000001
+vt 0.687496 0.000002
+vt 0.687497 0.999998
+vt 0.687497 0.999998
+vt 0.687496 0.000002
+vt 0.624997 0.999997
+vt 0.624995 0.000003
+vt 0.624995 0.000003
+vt 0.624997 0.999997
+vt 0.187498 0.000020
+vt 0.187503 0.999995
+vt 0.187503 0.999995
+vt 0.187498 0.000020
+vt 0.499996 0.999997
+vt 0.499995 0.000005
+vt 0.499995 0.000005
+vt 0.499996 0.999997
+vt 0.562495 0.000004
+vt 0.562496 0.999997
+vt 0.562496 0.999997
+vt 0.562495 0.000004
+vt 0.999998 0.999998
+vt 0.999998 -0.000000
+vt 0.999998 -0.000000
+vt 0.999998 0.999998
+vt 0.562495 0.000004
+vt 0.562496 0.999997
+vt 0.562496 0.999997
+vt 0.562495 0.000004
+vt 0.062500 0.000023
+vt 0.062505 0.999996
+vt 0.062505 0.999996
+vt 0.062500 0.000023
+vt 0.749997 0.999998
+vt 0.749997 0.000001
+vt 0.749997 0.000001
+vt 0.749997 0.999998
+vt 0.312497 0.000017
+vt 0.312502 0.999994
+vt 0.312502 0.999994
+vt 0.312497 0.000017
+vt 0.812497 0.000001
+vt 0.812497 0.999998
+vt 0.812497 0.999998
+vt 0.812497 0.000001
+vt 0.749997 0.999998
+vt 0.749997 0.000001
+vt 0.749997 0.000001
+vt 0.749997 0.999998
+vt 0.999998 0.999998
+vt 0.999998 -0.000000
+vt 0.999998 -0.000000
+vt 0.999998 0.999998
+vt 0.312497 0.000017
+vt 0.312502 0.999994
+vt 0.312502 0.999994
+vt 0.312497 0.000017
+vt 0.250003 0.999994
+vt 0.249997 0.000018
+vt 0.249997 0.000018
+vt 0.250003 0.999994
+vt 0.375002 0.999993
+vt 0.374997 0.000015
+vt 0.374997 0.000015
+vt 0.375002 0.999993
+vn 0.0000 -1.0000 0.0000
+vn -0.9957 0.0000 0.0926
+vn -0.1813 0.9833 0.0169
+vn -0.0924 0.4491 0.8887
+vn 0.5752 0.5753 0.5815
+vn 0.2982 0.9045 0.3048
+vn -0.3957 0.9045 0.1589
+vn -0.6180 0.6720 0.4081
+vn 0.9946 0.0000 0.1034
+vn 0.2015 0.9793 0.0210
+vn 0.9553 0.0000 0.2955
+vn 0.4861 0.8609 0.1503
+vn 0.8793 0.0000 0.4762
+vn 0.6064 0.7241 0.3284
+vn 0.7695 -0.0000 0.6386
+vn 0.6059 0.6165 0.5028
+vn 0.4264 0.9045 0.0047
+vn 0.3323 0.4751 0.8148
+vn -0.1589 0.9045 -0.3957
+vn 0.6302 -0.0000 0.7765
+vn 0.5298 0.5414 0.6528
+vn 0.4666 -0.0000 0.8845
+vn 0.4062 0.4921 0.7700
+vn 0.2851 -0.0000 0.9585
+vn 0.2527 0.4625 0.8498
+vn 0.0926 -0.0000 0.9957
+vn 0.0827 0.4488 0.8898
+vn -0.1034 -0.0000 0.9946
+vn -0.2955 -0.0000 0.9553
+vn -0.2618 0.4637 0.8464
+vn -0.4762 -0.0000 0.8793
+vn -0.4140 0.4943 0.7644
+vn -0.6386 0.0000 0.7695
+vn -0.5355 0.5448 0.6453
+vn -0.7765 0.0000 0.6302
+vn -0.6083 0.6216 0.4937
+vn -0.8845 0.0000 0.4666
+vn -0.6034 0.7311 0.3183
+vn -0.9585 0.0000 0.2851
+vn -0.4747 0.8687 0.1412
+vn -0.5794 0.5795 0.5731
+vn -0.2982 0.9045 -0.3048
+vn 0.3957 0.9045 -0.1589
+vn 0.4727 0.5140 0.7158
+vn -0.1785 0.4546 0.8726
+vn 0.0047 0.9045 -0.4264
+vn 0.5649 0.7903 0.2376
+vn -0.4264 0.9045 -0.0046
+vn -0.5581 0.7980 0.2276
+vn 0.1589 0.9045 0.3957
+vn -0.0047 0.9045 0.4264
+vn -0.3921 0.9045 -0.1675
+vn -0.3483 0.9349 0.0673
+vn 0.5649 0.7902 0.2376
+vn -0.1675 0.9045 0.3921
+vn -0.4795 0.5167 0.7093
+vn 0.1691 0.4538 0.8749
+vn 0.0109 0.9999 0.0001
+vn -0.3408 0.4768 0.8103
+vn -0.4264 0.9045 -0.0047
+vn 0.1675 0.9045 -0.3921
+vn 0.6180 0.6660 0.4178
+vn -0.3048 0.9045 0.2982
+vn 0.6180 0.6659 0.4178
+vn 0.3921 0.9045 0.1675
+vn 0.3048 0.9045 -0.2982
+vn -0.0049 0.4472 0.8944
+vn 0.3645 0.9282 0.0746
+vn 0.3927 0.0000 -0.9197
+vn -0.9196 0.0000 -0.3927
+vn 0.8284 0.0000 0.5601
+vn -0.5601 -0.0000 0.8284
+vn 0.7148 0.0000 -0.6994
+vn -0.6994 0.0000 -0.7148
+vn 0.7032 0.0000 0.7110
+vn -0.7110 0.0000 0.7032
+vn 0.9280 0.0000 -0.3726
+vn -0.3726 0.0000 -0.9280
+vn 0.5510 -0.0000 0.8345
+vn -0.8345 0.0000 0.5510
+vn 0.9999 -0.0000 0.0109
+vn 0.0109 0.0000 -0.9999
+vn 0.3776 -0.0000 0.9260
+vn -0.9260 0.0000 0.3776
+vn 0.9197 -0.0000 0.3927
+vn 0.3927 0.0000 -0.9196
+vn 0.1897 -0.0000 0.9818
+vn -0.9818 0.0000 0.1897
+vn 0.6994 -0.0000 0.7148
+vn -0.0055 -0.0000 1.0000
+vn 0.0000 0.0000 0.0000
+vn 0.3726 -0.0000 0.9280
+vn -0.2004 -0.0000 0.9797
+vn 0.9797 0.0000 0.2004
+vn -0.0109 -0.0000 0.9999
+vn -0.3877 -0.0000 0.9218
+vn 0.9218 0.0000 0.3877
+vn -0.3927 -0.0000 0.9196
+vn 0.9196 -0.0000 0.3927
+vn -0.7148 -0.0000 0.6993
+vn 0.6993 -0.0000 0.7148
+vn -0.9280 -0.0000 0.3726
+vn -0.9999 0.0000 -0.0109
+vn -0.9259 0.0000 0.3776
+vn -0.9197 -0.0000 -0.3927
+vn -0.3927 -0.0000 0.9197
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/5/1 6/6/1 7/7/1 8/8/1
+f 9/9/1 10/10/1 11/11/1 12/12/1 13/13/1 14/14/1 15/15/1 3/3/1 2/2/1 7/7/1 6/6/1 16/16/1 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 31/31/1 32/32/1 33/33/1 34/34/1 35/35/1 36/36/1
+f 37/37/1 17/17/1 16/16/1 38/38/1
+f 39/39/1 19/19/1 18/18/1 40/40/1
+f 41/41/1 21/21/1 20/20/1 42/42/1
+f 43/43/1 23/23/1 22/22/1 44/44/1
+f 45/45/1 25/25/1 24/24/1 46/46/1
+f 47/47/1 27/27/1 26/26/1 48/48/1
+f 49/49/1 29/29/1 28/28/1 50/50/1
+f 51/51/1 31/31/1 30/30/1 52/52/1
+f 53/53/1 33/33/1 32/32/1 54/54/1
+f 55/55/1 35/35/1 34/34/1 56/56/1
+f 36/36/1 57/57/1 58/58/1 9/9/1
+f 59/59/1 11/11/1 10/10/1 60/60/1
+f 61/61/1 13/13/1 12/12/1 62/62/1
+f 63/63/1 15/15/1 14/14/1 64/64/1
+s 1
+f 65/65/2 66/66/3 67/67/3 68/68/2
+f 69/69/4 70/70/4 71/71/5 72/72/6 73/73/7 74/74/8
+f 75/75/9 76/76/10 77/77/10 78/78/9
+f 79/79/11 80/80/12 81/81/12 82/82/11
+f 83/83/13 84/84/14 85/85/14 86/86/13
+f 87/87/15 88/88/16 89/89/16 90/90/15
+f 91/91/17 92/92/18 81/93/12 80/94/12 93/95/8 94/96/19
+f 95/97/20 96/98/21 97/99/21 98/100/20
+f 99/101/22 100/102/23 101/103/23 102/104/22
+f 103/105/24 104/106/25 105/107/25 106/108/24
+f 107/109/26 108/110/27 109/111/27 110/112/26
+f 111/113/28 70/114/4 69/115/4 112/116/28
+f 113/117/29 114/118/30 115/119/30 116/120/29
+f 117/121/31 118/122/32 119/123/32 120/124/31
+f 121/125/33 122/126/34 123/127/34 124/128/33
+f 125/129/35 126/130/36 127/131/36 128/132/35
+f 129/133/37 130/134/38 131/135/38 132/136/37
+f 133/137/39 134/138/40 135/139/40 136/140/39
+f 77/141/10 76/142/10 137/143/41 138/144/42 139/145/43 140/146/44
+f 131/147/38 130/148/38 141/149/45 142/150/7 143/151/46 144/152/47
+f 145/153/48 146/154/49 115/155/30 114/156/30 147/157/44 148/158/50
+f 119/159/32 118/160/32 149/161/18 150/162/51 151/163/52 152/164/53
+f 105/165/25 104/166/25 153/167/54 154/168/17 155/169/55 156/170/56
+f 123/171/34 122/172/34 157/173/57 158/174/55 159/175/42 160/176/58
+f 134/177/40 161/178/59 162/179/60 163/180/61 164/181/62 135/182/40
+f 165/183/63 166/184/41 109/185/27 108/186/27 167/187/64 168/188/65
+f 67/189/3 66/190/3 169/191/56 170/192/52 171/193/66 172/194/5
+f 127/195/36 126/196/36 173/197/67 174/198/63 175/199/19 176/200/68
+f 9/201/69 163/202/61 170/203/52 10/204/70
+f 164/205/62 163/202/61 9/201/69 58/206/71
+f 60/207/72 10/204/70 170/203/52 169/208/56
+f 11/209/73 171/210/66 138/211/42 12/212/74
+f 172/213/5 171/210/66 11/209/73 59/214/75
+f 62/215/76 12/212/74 138/211/42 137/216/41
+f 13/217/77 139/218/43 94/219/19 14/220/78
+f 140/221/44 139/218/43 13/217/77 61/222/79
+f 64/223/80 14/220/78 94/219/19 93/224/8
+f 15/225/81 91/226/17 177/227/46 3/228/82
+f 92/229/18 91/226/17 15/225/81 63/230/83
+f 4/231/84 3/228/82 177/227/46 178/232/49
+f 2/233/85 179/234/65 180/235/61 7/236/86
+f 181/237/57 179/234/65 2/233/85 1/238/87
+f 8/239/88 7/236/86 180/235/61 182/240/53
+f 6/241/89 183/242/6 184/243/66 16/244/73
+f 185/245/67 183/242/6 6/241/89 5/246/90
+f 38/247/91 16/248/73 184/249/66 186/250/91
+f 17/251/92 187/252/50 188/253/43 18/254/77
+f 189/255/45 187/252/50 17/251/92 37/256/93
+f 40/257/94 18/254/77 188/253/43 190/258/68
+f 19/259/95 191/260/51 154/261/17 20/262/81
+f 192/263/59 191/260/51 19/259/95 39/264/96
+f 42/265/97 20/262/81 154/261/17 153/266/54
+f 21/267/98 155/268/55 168/269/65 22/270/99
+f 156/271/56 155/268/55 21/267/98 41/272/72
+f 44/273/71 22/270/99 168/269/65 167/274/64
+f 23/275/100 165/276/63 72/277/6 24/278/101
+f 166/279/41 165/276/63 23/275/100 43/280/76
+f 46/281/75 24/278/101 72/277/6 71/282/5
+f 25/283/102 73/284/7 148/285/50 26/286/92
+f 74/287/8 73/284/7 25/283/102 45/288/80
+f 48/289/79 26/286/92 148/285/50 147/290/44
+f 27/291/103 145/292/48 150/293/51 28/294/95
+f 146/295/49 145/292/48 27/291/103 47/296/104
+f 50/297/83 28/294/95 150/293/51 149/298/18
+f 29/299/105 151/300/52 158/301/55 30/302/106
+f 152/303/53 151/300/52 29/299/105 49/304/88
+f 52/305/87 30/302/106 158/301/55 157/306/57
+f 31/307/74 159/308/42 174/309/63 32/310/100
+f 160/311/58 159/308/42 31/307/74 51/312/91
+f 54/313/90 32/314/100 174/315/63 173/316/67
+f 33/317/78 175/318/19 142/319/7 34/320/102
+f 176/321/68 175/318/19 33/317/78 53/322/94
+f 56/323/93 34/320/102 142/319/7 141/324/45
+f 35/325/82 143/326/46 162/327/60 36/328/103
+f 144/329/47 143/326/46 35/325/82 55/330/97
+f 57/331/96 36/328/103 162/327/60 161/332/59
+f 191/333/51 192/334/59 101/335/23 100/336/23 190/337/68 188/338/43
+f 187/339/50 189/340/45 97/341/21 96/342/21 186/343/91 184/344/66
+f 183/345/6 185/346/67 89/347/16 88/348/16 182/349/53 180/350/61
+f 179/351/65 181/352/57 85/353/14 84/354/14 178/355/49 177/356/46
+f 94/96/19 139/145/43 138/144/42 171/193/66 170/192/52 163/180/61 162/179/60 143/151/46 142/150/7 175/199/19 174/198/63 159/175/42 158/174/55 151/163/52 150/162/51 145/153/48 148/158/50 73/73/7 72/72/6 165/183/63 168/188/65 155/169/55 154/168/17 191/333/51 188/338/43 187/339/50 184/344/66 183/345/6 180/350/61 179/351/65 177/356/46 91/91/17
+f 134/357/40 133/358/39 57/359/96 161/360/59
+f 118/361/32 117/362/31 50/363/83 149/364/18
+f 98/365/20 97/366/21 189/367/45 37/368/93
+f 116/369/29 115/370/30 146/371/49 47/372/104
+f 82/373/11 81/374/12 92/375/18 63/376/83
+f 84/377/14 83/378/13 4/379/84 178/380/49
+f 124/381/33 123/382/34 160/383/58 51/384/91
+f 102/385/22 101/386/23 192/387/59 39/388/96
+f 126/389/36 125/390/35 54/391/90 173/392/67
+f 106/393/24 105/394/25 156/395/56 41/396/72
+f 90/397/15 89/398/16 185/399/67 5/400/90
+f 68/401/2 67/402/3 172/403/5 59/404/75
+f 104/405/25 103/406/24 42/407/97 153/408/54
+f 70/409/4 111/410/28 46/411/75 71/412/5
+f 122/413/34 121/414/33 52/415/87 157/416/57
+f 80/417/12 79/418/11 64/419/80 93/420/8
+f 76/421/10 75/422/9 62/423/76 137/424/41
+f 110/425/26 109/426/27 166/427/41 43/428/76
+f 96/429/21 95/430/20 38/431/91 186/432/91
+f 136/433/39 135/434/40 164/435/62 58/436/71
+f 66/437/3 65/438/2 60/439/72 169/440/56
+f 120/441/31 119/442/32 152/443/53 49/444/88
+f 108/445/27 107/446/26 44/447/71 167/448/64
+f 88/449/16 87/450/15 8/451/88 182/452/53
+f 112/453/28 69/454/4 74/455/8 45/456/80
+f 130/457/38 129/458/37 56/459/93 141/460/45
+f 114/461/30 113/462/29 48/463/79 147/464/44
+f 78/465/9 77/466/10 140/467/44 61/468/79
+f 86/469/13 85/470/14 181/471/57 1/472/87
+f 100/473/23 99/474/22 40/475/94 190/476/68
+f 128/477/35 127/478/36 176/479/68 53/480/94
+f 132/481/37 131/482/38 144/483/47 55/484/97
diff --git a/technic/models/technic_cylinder_half.obj b/technic/models/technic_cylinder_half.obj
new file mode 100644
index 0000000..90206f5
--- /dev/null
+++ b/technic/models/technic_cylinder_half.obj
@@ -0,0 +1,188 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_cylinder_half.mtl
+o Cylinder_Cylinder.001
+v 0.500000 -0.402455 -0.490393
+v 0.500000 -0.500000 -0.000000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.308658 -0.461940
+v 0.500000 -0.222215 -0.415735
+v 0.500000 -0.146447 -0.353553
+v 0.500000 -0.084265 -0.277785
+v 0.500000 -0.038060 -0.191342
+v 0.500000 -0.009607 -0.097545
+v 0.500000 0.000000 0.000000
+v 0.500000 -0.009607 0.097545
+v 0.500000 -0.038060 0.191342
+v 0.500000 -0.084265 0.277785
+v 0.500000 -0.146447 0.353553
+v 0.500000 -0.222215 0.415735
+v 0.500000 -0.308658 0.461940
+v 0.500000 -0.402455 0.490393
+v -0.500000 -0.500000 -0.000000
+v -0.500000 -0.402455 -0.490393
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.308658 -0.461940
+v -0.500000 -0.222215 -0.415735
+v -0.500000 -0.146447 -0.353554
+v -0.500000 -0.084265 -0.277785
+v -0.500000 -0.038060 -0.191342
+v -0.500000 -0.009607 -0.097545
+v -0.500000 0.000000 0.000000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.402455 0.490392
+v -0.500000 -0.009607 0.097545
+v -0.500000 -0.038060 0.191341
+v -0.500000 -0.084265 0.277785
+v -0.500000 -0.146447 0.353553
+v -0.500000 -0.222215 0.415735
+v -0.500000 -0.308658 0.461940
+vt 0.990253 0.097533
+vt 0.499929 0.000000
+vt 0.999858 0.000002
+vt 0.961804 0.191316
+vt 0.915605 0.277747
+vt 0.853432 0.353503
+vt 0.777675 0.415676
+vt 0.691244 0.461875
+vt 0.597461 0.490324
+vt 0.499929 0.499929
+vt 0.402398 0.490324
+vt 0.308615 0.461875
+vt 0.222184 0.415677
+vt 0.146427 0.353504
+vt 0.084254 0.277747
+vt 0.038055 0.191316
+vt 0.009606 0.097533
+vt 0.499929 0.000000
+vt 0.009606 0.097533
+vt 0.000000 0.000001
+vt 0.000000 0.000002
+vt 0.038055 0.191316
+vt 0.084253 0.277746
+vt 0.146426 0.353503
+vt 0.222184 0.415676
+vt 0.308614 0.461875
+vt 0.402398 0.490324
+vt 0.499929 0.499930
+vt 0.999859 0.000001
+vt 0.990252 0.097533
+vt 0.597460 0.490324
+vt 0.691243 0.461875
+vt 0.777675 0.415677
+vt 0.853432 0.353504
+vt 0.915605 0.277747
+vt 0.961803 0.191316
+vt 0.992769 0.999840
+vt 0.004584 0.999840
+vt 0.004584 0.937351
+vt 0.992769 0.937350
+vt 0.004584 0.874861
+vt 0.992769 0.874860
+vt 0.004583 0.812371
+vt 0.992769 0.812370
+vt 0.004583 0.749882
+vt 0.992769 0.749880
+vt 0.004583 0.687391
+vt 0.992768 0.687390
+vt 0.004583 0.624902
+vt 0.992768 0.624900
+vt 0.004583 0.562412
+vt 0.992768 0.562410
+vt 0.004582 0.499922
+vt 0.992767 0.499920
+vt 0.004582 0.437432
+vt 0.992767 0.437430
+vt 0.004581 0.374943
+vt 0.992767 0.374940
+vt 0.004581 0.312453
+vt 0.992766 0.312450
+vt 0.004581 0.249963
+vt 0.992766 0.249960
+vt 0.004580 0.187473
+vt 0.992765 0.187470
+vt 0.004580 0.124983
+vt 0.992765 0.124980
+vt 0.004579 0.062493
+vt 0.992765 0.062490
+vt 0.004579 0.000004
+vt 0.992764 0.000000
+vt 0.000100 0.999900
+vt 0.000100 0.500000
+vt 0.000100 0.000100
+vt 0.999900 0.000100
+vt 0.999900 0.500000
+vt 0.999900 0.999900
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -0.6716 -0.7409
+vn 0.0000 0.1951 -0.9808
+vn 0.0000 0.3827 -0.9239
+vn 0.0000 0.5556 -0.8315
+vn 0.0000 0.7071 -0.7071
+vn 0.0000 0.8315 -0.5556
+vn 0.0000 0.9239 -0.3827
+vn 0.0000 0.9808 -0.1951
+vn 0.0000 1.0000 0.0000
+vn -0.0000 0.9808 0.1951
+vn -0.0000 0.9239 0.3827
+vn -0.0000 0.8315 0.5556
+vn 0.0000 0.7071 0.7071
+vn 0.0000 0.5556 0.8315
+vn -0.0000 0.3827 0.9239
+vn -0.0000 0.1951 0.9808
+vn -0.0000 -0.6716 0.7410
+vn 0.0000 -1.0000 -0.0000
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1
+f 4/4/1 2/2/1 1/1/1
+f 5/5/1 2/2/1 4/4/1
+f 6/6/1 2/2/1 5/5/1
+f 7/7/1 2/2/1 6/6/1
+f 8/8/1 2/2/1 7/7/1
+f 9/9/1 2/2/1 8/8/1
+f 10/10/1 2/2/1 9/9/1
+f 11/11/1 2/2/1 10/10/1
+f 11/11/1 12/12/1 2/2/1
+f 2/2/1 12/12/1 13/13/1
+f 2/2/1 14/14/1 15/15/1
+f 2/2/1 15/15/1 16/16/1
+f 2/2/1 16/16/1 17/17/1
+f 18/18/2 19/19/2 20/20/2
+f 21/21/1 2/2/1 17/17/1
+f 2/2/1 13/13/1 14/14/1
+f 18/18/2 22/22/2 19/19/2
+f 18/18/2 23/23/2 22/22/2
+f 18/18/2 24/24/2 23/23/2
+f 18/18/2 25/25/2 24/24/2
+f 18/18/2 26/26/2 25/25/2
+f 18/18/2 27/27/2 26/26/2
+f 18/18/2 28/28/2 27/27/2
+f 18/18/2 29/29/2 30/30/2
+f 31/31/2 18/18/2 32/32/2
+f 32/32/2 18/18/2 33/33/2
+f 33/33/2 18/18/2 34/34/2
+f 34/34/2 18/18/2 35/35/2
+f 35/35/2 18/18/2 36/36/2
+f 36/36/2 18/18/2 30/30/2
+f 31/31/2 28/28/2 18/18/2
+s 1
+f 3/37/3 20/38/3 19/39/4 1/40/4
+f 1/40/4 19/39/4 22/41/5 4/42/5
+f 4/42/5 22/41/5 23/43/6 5/44/6
+f 5/44/6 23/43/6 24/45/7 6/46/7
+f 6/46/7 24/45/7 25/47/8 7/48/8
+f 7/48/8 25/47/8 26/49/9 8/50/9
+f 8/50/9 26/49/9 27/51/10 9/52/10
+f 9/52/10 27/51/10 28/53/11 10/54/11
+f 10/54/11 28/53/11 31/55/12 11/56/12
+f 11/56/12 31/55/12 32/57/13 12/58/13
+f 12/58/13 32/57/13 33/59/14 13/60/14
+f 13/60/14 33/59/14 34/61/15 14/62/15
+f 14/62/15 34/61/15 35/63/16 15/64/16
+f 15/64/16 35/63/16 36/65/17 16/66/17
+f 16/66/17 36/65/17 30/67/18 17/68/18
+f 17/68/18 30/67/18 29/69/19 21/70/19
+f 29/71/19 18/72/20 20/73/3 3/74/3 2/75/20 21/76/19
diff --git a/technic/models/technic_cylinder_half_corner.obj b/technic/models/technic_cylinder_half_corner.obj
new file mode 100644
index 0000000..ebbc5a1
--- /dev/null
+++ b/technic/models/technic_cylinder_half_corner.obj
@@ -0,0 +1,638 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_cylinder_half_corner.mtl
+o Cylinder_Cylinder.012
+v -0.500000 -0.500000 -0.000000
+v -0.500000 -0.500000 -0.500000
+v 0.000000 -0.500000 -0.500000
+v 0.000000 -0.500000 -0.000000
+v -0.500000 -0.500000 0.500000
+v 0.000000 -0.500000 0.500000
+v -0.490393 -0.402455 -0.500000
+v 0.000000 -0.500000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.461940 -0.308658 -0.500000
+v -0.415735 -0.222215 -0.500000
+v -0.353553 -0.146447 -0.500000
+v -0.277785 -0.084265 -0.500000
+v -0.191342 -0.038060 -0.500000
+v -0.097545 -0.009607 -0.500000
+v 0.000000 0.000000 -0.500000
+v 0.097545 -0.009607 -0.500000
+v 0.191342 -0.038060 -0.500000
+v 0.277785 -0.084265 -0.500000
+v 0.353553 -0.146447 -0.500000
+v 0.415735 -0.222215 -0.500000
+v 0.461940 -0.308658 -0.500000
+v 0.490393 -0.402455 -0.500000
+v 0.500000 -0.500000 -0.500000
+v -0.500000 -0.402455 -0.490393
+v -0.500000 -0.308658 -0.461940
+v -0.500000 -0.222215 -0.415735
+v -0.500000 -0.146447 -0.353554
+v -0.500000 -0.084265 -0.277785
+v -0.500000 -0.038060 -0.191342
+v -0.500000 -0.009607 -0.097545
+v -0.500000 0.000000 0.000000
+v -0.500000 -0.402455 0.490392
+v -0.500000 -0.009607 0.097545
+v -0.500000 -0.038060 0.191341
+v -0.500000 -0.084265 0.277785
+v -0.500000 -0.146447 0.353553
+v -0.500000 -0.222215 0.415735
+v -0.500000 -0.308658 0.461940
+v 0.490392 -0.402455 -0.000000
+v 0.500000 -0.500000 -0.000000
+v 0.461940 -0.308658 -0.000000
+v 0.415735 -0.222215 -0.000000
+v 0.353553 -0.146447 -0.000000
+v 0.277785 -0.084265 -0.000000
+v 0.191341 -0.038060 -0.000000
+v 0.097545 -0.009607 -0.000000
+v 0.000000 0.000000 0.000000
+v -0.097545 -0.009607 -0.000000
+v -0.191342 -0.038060 -0.000000
+v -0.277785 -0.084265 -0.000000
+v -0.353554 -0.146447 -0.000000
+v -0.415735 -0.222215 -0.000000
+v -0.461940 -0.308658 -0.000000
+v -0.490393 -0.402455 -0.000000
+v -0.500000 -0.500000 -0.000000
+v 0.000000 -0.402455 -0.490393
+v 0.000000 -0.308658 -0.461940
+v 0.000000 -0.222215 -0.415735
+v 0.000000 -0.146447 -0.353554
+v 0.000000 -0.084265 -0.277785
+v 0.000000 -0.038060 -0.191342
+v 0.000000 -0.009607 -0.097545
+v 0.000000 0.000000 0.000000
+v 0.000000 -0.009607 0.097545
+v 0.000000 -0.038060 0.191341
+v 0.000000 -0.084265 0.277785
+v 0.000000 -0.146447 0.353553
+v 0.000000 -0.222215 0.415735
+v 0.000000 -0.308658 0.461940
+v 0.000000 -0.402455 0.490392
+v 0.000000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.000000
+v 0.490393 -0.500000 0.097545
+v 0.097545 -0.500000 0.490393
+v 0.461940 -0.500000 0.191342
+v 0.415735 -0.500000 0.277785
+v 0.353553 -0.500000 0.353553
+v 0.277785 -0.500000 0.415735
+v 0.191342 -0.500000 0.461940
+v 0.490393 -0.402455 -0.000000
+v 0.480970 -0.402455 0.095671
+v 0.461940 -0.308658 -0.000000
+v 0.415735 -0.222215 -0.000000
+v 0.407747 -0.222215 0.081106
+v 0.453064 -0.308658 0.090120
+v 0.353554 -0.146447 -0.000000
+v 0.277785 -0.084265 -0.000000
+v 0.272448 -0.084265 0.054193
+v 0.346760 -0.146447 0.068975
+v 0.191342 -0.038060 -0.000000
+v 0.097545 -0.009607 -0.000000
+v 0.095671 -0.009607 0.019030
+v 0.187665 -0.038060 0.037329
+v 0.453064 -0.402455 0.187665
+v 0.384089 -0.222215 0.159095
+v 0.426777 -0.308658 0.176777
+v 0.256640 -0.084265 0.106304
+v 0.326641 -0.146447 0.135299
+v 0.090120 -0.009607 0.037329
+v 0.176777 -0.038060 0.073223
+v 0.407747 -0.402455 0.272448
+v 0.345671 -0.222215 0.230970
+v 0.384089 -0.308658 0.256640
+v 0.230970 -0.084265 0.154329
+v 0.293969 -0.146447 0.196424
+v 0.081106 -0.009607 0.054193
+v 0.159095 -0.038060 0.106304
+v 0.346760 -0.402455 0.346760
+v 0.293969 -0.222215 0.293969
+v 0.326641 -0.308658 0.326641
+v 0.196424 -0.084265 0.196424
+v 0.250000 -0.146447 0.250000
+v 0.068975 -0.009607 0.068975
+v 0.135299 -0.038060 0.135299
+v 0.272448 -0.402455 0.407746
+v 0.230970 -0.222215 0.345671
+v 0.256640 -0.308658 0.384089
+v 0.154329 -0.084265 0.230970
+v 0.196424 -0.146447 0.293969
+v 0.054193 -0.009607 0.081106
+v 0.106304 -0.038060 0.159095
+v 0.187665 -0.402455 0.453064
+v 0.159095 -0.222215 0.384089
+v 0.176777 -0.308658 0.426777
+v 0.106304 -0.084265 0.256640
+v 0.135299 -0.146447 0.326641
+v 0.037329 -0.009607 0.090120
+v 0.073223 -0.038060 0.176777
+v 0.095671 -0.402455 0.480970
+v 0.081106 -0.222215 0.407746
+v 0.090120 -0.308658 0.453064
+v 0.054193 -0.084265 0.272448
+v 0.068975 -0.146447 0.346760
+v 0.019030 -0.009607 0.095671
+v 0.037329 -0.038060 0.187665
+v 0.000000 -0.402455 0.490392
+v 0.000000 -0.222215 0.415735
+v 0.000000 -0.308658 0.461940
+v 0.000000 -0.084265 0.277785
+v 0.000000 -0.146447 0.353553
+v 0.000000 -0.009607 0.097545
+v 0.000000 -0.038060 0.191342
+v 0.002569 -0.004804 0.012914
+v 0.000000 -0.004804 0.013167
+v 0.005039 -0.004804 0.012165
+v 0.007316 -0.004804 0.010948
+v 0.009311 -0.004804 0.009311
+v 0.010948 -0.004804 0.007315
+v 0.012165 -0.004804 0.005039
+v 0.012915 -0.004804 0.002569
+v 0.013168 -0.004804 -0.000000
+v 0.013156 -0.004804 0.000118
+v -0.000072 -0.004804 0.000096
+vt 0.000000 0.496029
+vt 0.000000 0.000000
+vt 0.496029 0.000000
+vt 0.496029 0.496029
+vt 0.000000 0.992058
+vt 0.496029 0.992058
+vt 0.990253 0.097533
+vt 0.499929 0.000000
+vt 0.999858 0.000002
+vt 0.961804 0.191316
+vt 0.915605 0.277747
+vt 0.853432 0.353503
+vt 0.777675 0.415676
+vt 0.691244 0.461875
+vt 0.597461 0.490324
+vt 0.499929 0.499929
+vt 0.402398 0.490324
+vt 0.308615 0.461875
+vt 0.222184 0.415677
+vt 0.146427 0.353504
+vt 0.084254 0.277747
+vt 0.038055 0.191316
+vt 0.009606 0.097533
+vt 0.000000 0.000002
+vt 0.499929 0.000000
+vt 0.009606 0.097533
+vt 0.038055 0.191316
+vt 0.084253 0.277746
+vt 0.146426 0.353503
+vt 0.222184 0.415676
+vt 0.308614 0.461875
+vt 0.402398 0.490324
+vt 0.499929 0.499930
+vt 0.999859 0.000001
+vt 0.990252 0.097533
+vt 0.597460 0.490324
+vt 0.691243 0.461875
+vt 0.777675 0.415677
+vt 0.853432 0.353504
+vt 0.915605 0.277747
+vt 0.961803 0.191316
+vt 0.992058 0.496029
+vt 0.982527 0.592799
+vt 0.592799 0.982527
+vt 0.954300 0.685851
+vt 0.908462 0.771608
+vt 0.846774 0.846774
+vt 0.771608 0.908462
+vt 0.685851 0.954300
+vt 0.992058 0.000000
+vt 0.992765 0.062490
+vt 0.498672 0.062491
+vt 0.498672 0.000002
+vt 0.992764 0.000000
+vt 0.992765 0.124980
+vt 0.498673 0.124982
+vt 0.992765 0.187470
+vt 0.498673 0.187472
+vt 0.992766 0.249960
+vt 0.498673 0.249961
+vt 0.992766 0.312450
+vt 0.498673 0.312451
+vt 0.992767 0.374940
+vt 0.498674 0.374941
+vt 0.992767 0.437430
+vt 0.498674 0.437431
+vt 0.992767 0.499920
+vt 0.498674 0.499921
+vt 0.992768 0.562410
+vt 0.498675 0.562411
+vt 0.992768 0.624900
+vt 0.498675 0.624901
+vt 0.992768 0.687390
+vt 0.498675 0.687391
+vt 0.992769 0.749880
+vt 0.498676 0.749881
+vt 0.992769 0.812370
+vt 0.498676 0.812371
+vt 0.992769 0.874860
+vt 0.498677 0.874861
+vt 0.992769 0.937350
+vt 0.498677 0.937351
+vt 0.992769 0.999840
+vt 0.498677 0.999840
+vt 0.498677 0.999840
+vt 0.004584 0.999840
+vt 0.004584 0.937351
+vt 0.498677 0.937351
+vt 0.004584 0.874861
+vt 0.498677 0.874861
+vt 0.004583 0.812371
+vt 0.498676 0.812371
+vt 0.004583 0.749882
+vt 0.498676 0.749881
+vt 0.004583 0.687391
+vt 0.498675 0.687391
+vt 0.004583 0.624902
+vt 0.498675 0.624901
+vt 0.004583 0.562412
+vt 0.498675 0.562411
+vt 0.004582 0.499922
+vt 0.498674 0.499921
+vt 0.004582 0.437432
+vt 0.498674 0.437431
+vt 0.004581 0.374943
+vt 0.498674 0.374941
+vt 0.004581 0.312453
+vt 0.498673 0.312451
+vt 0.004581 0.249963
+vt 0.498673 0.249961
+vt 0.004580 0.187473
+vt 0.498673 0.187472
+vt 0.004580 0.124983
+vt 0.498673 0.124982
+vt 0.004579 0.062493
+vt 0.498672 0.062491
+vt 0.004579 0.000004
+vt 0.498672 0.000002
+vt 0.437500 0.500000
+vt 0.437500 0.562500
+vt 0.375000 0.562500
+vt 0.375000 0.500000
+vt 0.437500 0.625000
+vt 0.437500 0.687500
+vt 0.375000 0.687500
+vt 0.375000 0.625000
+vt 0.437500 0.750000
+vt 0.437500 0.812500
+vt 0.375000 0.812500
+vt 0.375000 0.750000
+vt 0.437500 0.875000
+vt 0.437500 0.937500
+vt 0.375000 0.937500
+vt 0.375000 0.875000
+vt 0.312500 0.562500
+vt 0.312500 0.500000
+vt 0.312500 0.687500
+vt 0.312500 0.625000
+vt 0.312500 0.812500
+vt 0.312500 0.750000
+vt 0.312500 0.937500
+vt 0.312500 0.875000
+vt 0.250000 0.562500
+vt 0.250000 0.500000
+vt 0.250000 0.687500
+vt 0.250000 0.625000
+vt 0.250000 0.812500
+vt 0.250000 0.750000
+vt 0.250000 0.937500
+vt 0.250000 0.875000
+vt 0.187500 0.562500
+vt 0.187500 0.500000
+vt 0.187500 0.687500
+vt 0.187500 0.625000
+vt 0.187500 0.812500
+vt 0.187500 0.750000
+vt 0.187500 0.937500
+vt 0.187500 0.875000
+vt 0.125000 0.562500
+vt 0.125000 0.500000
+vt 0.125000 0.687500
+vt 0.125000 0.625000
+vt 0.125000 0.812500
+vt 0.125000 0.750000
+vt 0.125000 0.937500
+vt 0.125000 0.875000
+vt 0.062500 0.562500
+vt 0.062500 0.500000
+vt 0.062500 0.687500
+vt 0.062500 0.625000
+vt 0.062500 0.812500
+vt 0.062500 0.750000
+vt 0.062500 0.937500
+vt 0.062500 0.875000
+vt 0.000000 0.562500
+vt 0.000000 0.500000
+vt 0.000000 0.687500
+vt 0.000000 0.625000
+vt 0.000000 0.812500
+vt 0.000000 0.750000
+vt 0.000000 0.937500
+vt 0.000000 0.875000
+vt 1.000000 0.500000
+vt 1.000000 0.562500
+vt 0.937500 0.562500
+vt 0.937500 0.500000
+vt 1.000000 0.625000
+vt 1.000000 0.687500
+vt 0.937500 0.687500
+vt 0.937500 0.625000
+vt 1.000000 0.750000
+vt 1.000000 0.812500
+vt 0.937500 0.812500
+vt 0.937500 0.750000
+vt 1.000000 0.875000
+vt 1.000000 0.937500
+vt 0.937500 0.937500
+vt 0.937500 0.875000
+vt 1.000000 1.000000
+vt 0.937500 1.000000
+vt 0.062500 1.000000
+vt -0.000000 1.000000
+vt 0.125000 1.000000
+vt 0.187500 1.000000
+vt 0.250000 1.000000
+vt 0.312500 1.000000
+vt 0.375000 1.000000
+vt 0.437500 1.000000
+vt 0.434642 1.000000
+vt 0.031579 0.968990
+vt 0.061841 0.974844
+vt 0.062439 0.968769
+vt 0.061841 0.962695
+vt 0.060069 0.956854
+vt 0.057192 0.951471
+vt 0.053319 0.946753
+vt 0.048601 0.942881
+vt 0.043218 0.940004
+vt 0.037644 0.938313
+vn 0.0000 -1.0000 -0.0000
+vn 0.0000 0.0000 -1.0000
+vn -1.0000 0.0000 0.0000
+vn 0.9808 0.1951 0.0000
+vn 0.9952 0.0980 0.0000
+vn 0.9239 0.3827 0.0000
+vn 0.8315 0.5556 0.0000
+vn 0.7071 0.7071 0.0000
+vn 0.5556 0.8315 0.0000
+vn 0.3827 0.9239 0.0000
+vn 0.1951 0.9808 0.0000
+vn 0.0000 1.0000 0.0000
+vn -0.1951 0.9808 0.0000
+vn -0.3827 0.9239 0.0000
+vn -0.5556 0.8315 -0.0000
+vn -0.7071 0.7071 -0.0000
+vn -0.8315 0.5556 -0.0000
+vn -0.9239 0.3827 0.0000
+vn -0.9808 0.1951 0.0000
+vn -0.9952 0.0980 0.0000
+vn 0.0000 0.0980 -0.9952
+vn 0.0000 0.1951 -0.9808
+vn 0.0000 0.3827 -0.9239
+vn 0.0000 0.5556 -0.8315
+vn 0.0000 0.7071 -0.7071
+vn 0.0000 0.8315 -0.5556
+vn 0.0000 0.9239 -0.3827
+vn 0.0000 0.9808 -0.1951
+vn 0.0000 0.9808 0.1951
+vn 0.0000 0.9239 0.3827
+vn 0.0000 0.8315 0.5556
+vn 0.0000 0.7071 0.7071
+vn 0.0000 0.5556 0.8315
+vn 0.0000 0.3827 0.9239
+vn 0.0000 0.1951 0.9808
+vn 0.0000 0.0980 0.9952
+vn 0.9904 0.0975 0.0975
+vn 0.9765 0.1930 0.0962
+vn 0.9622 0.1939 0.1914
+vn 0.9761 0.0980 0.1942
+vn 0.9210 0.3790 0.0907
+vn 0.8305 0.5509 0.0818
+vn 0.8173 0.5528 0.1626
+vn 0.9070 0.3805 0.1804
+vn 0.7084 0.7023 0.0698
+vn 0.5589 0.8274 0.0550
+vn 0.5490 0.8286 0.1092
+vn 0.6965 0.7041 0.1385
+vn 0.3876 0.9210 0.0382
+vn 0.1819 0.9831 0.0179
+vn 0.1785 0.9833 0.0355
+vn 0.3804 0.9217 0.0757
+vn 0.9063 0.1939 0.3754
+vn 0.9194 0.0980 0.3808
+vn 0.7699 0.5528 0.3189
+vn 0.8544 0.3805 0.3539
+vn 0.5172 0.8286 0.2142
+vn 0.6561 0.7041 0.2718
+vn 0.1681 0.9833 0.0696
+vn 0.3584 0.9217 0.1484
+vn 0.8157 0.1939 0.5450
+vn 0.8275 0.0980 0.5529
+vn 0.6929 0.5528 0.4630
+vn 0.7689 0.3805 0.5138
+vn 0.4654 0.8286 0.3110
+vn 0.5905 0.7041 0.3945
+vn 0.1513 0.9833 0.1011
+vn 0.3225 0.9217 0.2155
+vn 0.6937 0.1939 0.6937
+vn 0.7037 0.0980 0.7037
+vn 0.5893 0.5528 0.5893
+vn 0.6539 0.3805 0.6539
+vn 0.3958 0.8286 0.3958
+vn 0.5021 0.7041 0.5021
+vn 0.1287 0.9833 0.1287
+vn 0.2743 0.9217 0.2743
+vn 0.5450 0.1939 0.8157
+vn 0.5529 0.0980 0.8275
+vn 0.4630 0.5528 0.6929
+vn 0.5138 0.3805 0.7689
+vn 0.3110 0.8286 0.4654
+vn 0.3945 0.7041 0.5905
+vn 0.1011 0.9833 0.1513
+vn 0.2155 0.9217 0.3225
+vn 0.3754 0.1939 0.9063
+vn 0.3808 0.0980 0.9194
+vn 0.3189 0.5528 0.7699
+vn 0.3539 0.3805 0.8544
+vn 0.2142 0.8286 0.5172
+vn 0.2718 0.7041 0.6561
+vn 0.0696 0.9833 0.1681
+vn 0.1484 0.9217 0.3584
+vn 0.1914 0.1939 0.9622
+vn 0.1941 0.0980 0.9761
+vn 0.1626 0.5528 0.8173
+vn 0.1804 0.3805 0.9070
+vn 0.1092 0.8286 0.5490
+vn 0.1385 0.7041 0.6965
+vn 0.0355 0.9833 0.1785
+vn 0.0757 0.9217 0.3804
+vn 0.0962 0.1930 0.9765
+vn 0.0975 0.0976 0.9904
+vn 0.0818 0.5509 0.8305
+vn 0.0907 0.3790 0.9210
+vn 0.0550 0.8274 0.5589
+vn 0.0698 0.7023 0.7084
+vn 0.0179 0.9831 0.1819
+vn 0.0382 0.9210 0.3876
+vn 0.0059 0.9995 0.0296
+vn 0.0030 0.9995 0.0301
+vn 0.0116 0.9995 0.0279
+vn 0.0168 0.9995 0.0251
+vn 0.0214 0.9995 0.0214
+vn 0.0251 0.9995 0.0168
+vn 0.0279 0.9995 0.0116
+vn 0.0296 0.9995 0.0059
+vn 0.0568 0.9984 0.0056
+vn 0.0387 0.9992 0.0038
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/5/1 1/1/1 4/4/1 6/6/1
+f 7/7/2 8/8/2 9/9/2
+f 10/10/2 8/8/2 7/7/2
+f 11/11/2 8/8/2 10/10/2
+f 12/12/2 8/8/2 11/11/2
+f 13/13/2 8/8/2 12/12/2
+f 14/14/2 8/8/2 13/13/2
+f 15/15/2 8/8/2 14/14/2
+f 16/16/2 8/8/2 15/15/2
+f 17/17/2 8/8/2 16/16/2
+f 17/17/2 18/18/2 8/8/2
+f 8/8/2 18/18/2 19/19/2
+f 8/8/2 20/20/2 21/21/2
+f 8/8/2 21/21/2 22/22/2
+f 8/8/2 22/22/2 23/23/2
+f 24/24/2 8/8/2 23/23/2
+f 8/8/2 19/19/2 20/20/2
+f 1/25/3 25/26/3 2/2/3
+f 1/25/3 26/27/3 25/26/3
+f 1/25/3 27/28/3 26/27/3
+f 1/25/3 28/29/3 27/28/3
+f 1/25/3 29/30/3 28/29/3
+f 1/25/3 30/31/3 29/30/3
+f 1/25/3 31/32/3 30/31/3
+f 1/25/3 32/33/3 31/32/3
+f 1/25/3 5/34/3 33/35/3
+f 34/36/3 1/25/3 35/37/3
+f 35/37/3 1/25/3 36/38/3
+f 36/38/3 1/25/3 37/39/3
+f 37/39/3 1/25/3 38/40/3
+f 38/40/3 1/25/3 39/41/3
+f 39/41/3 1/25/3 33/35/3
+f 34/36/3 32/33/3 1/25/3
+f 73/42/1 74/43/1 4/4/1
+f 4/4/1 75/44/1 6/6/1
+f 4/4/1 76/45/1 77/46/1
+f 4/4/1 77/46/1 78/47/1
+f 4/4/1 78/47/1 79/48/1
+f 4/4/1 79/48/1 80/49/1
+f 4/4/1 80/49/1 75/44/1
+f 4/4/1 74/43/1 76/45/1
+f 4/4/1 3/3/1 24/50/1 73/42/1
+s 1
+f 23/51/4 40/52/4 41/53/5 24/54/5
+f 22/55/6 42/56/6 40/52/4 23/51/4
+f 21/57/7 43/58/7 42/56/6 22/55/6
+f 20/59/8 44/60/8 43/58/7 21/57/7
+f 19/61/9 45/62/9 44/60/8 20/59/8
+f 18/63/10 46/64/10 45/62/9 19/61/9
+f 17/65/11 47/66/11 46/64/10 18/63/10
+f 16/67/12 48/68/12 47/66/11 17/65/11
+f 15/69/13 49/70/13 48/68/12 16/67/12
+f 14/71/14 50/72/14 49/70/13 15/69/13
+f 13/73/15 51/74/15 50/72/14 14/71/14
+f 12/75/16 52/76/16 51/74/15 13/73/15
+f 11/77/17 53/78/17 52/76/16 12/75/16
+f 10/79/18 54/80/18 53/78/17 11/77/17
+f 7/81/19 55/82/19 54/80/18 10/79/18
+f 9/83/20 56/84/20 55/82/19 7/81/19
+f 3/85/21 2/86/21 25/87/22 57/88/22
+f 57/88/22 25/87/22 26/89/23 58/90/23
+f 58/90/23 26/89/23 27/91/24 59/92/24
+f 59/92/24 27/91/24 28/93/25 60/94/25
+f 60/94/25 28/93/25 29/95/26 61/96/26
+f 61/96/26 29/95/26 30/97/27 62/98/27
+f 62/98/27 30/97/27 31/99/28 63/100/28
+f 63/100/28 31/99/28 32/101/12 64/102/12
+f 64/102/12 32/101/12 34/103/29 65/104/29
+f 65/104/29 34/103/29 35/105/30 66/106/30
+f 66/106/30 35/105/30 36/107/31 67/108/31
+f 67/108/31 36/107/31 37/109/32 68/110/32
+f 68/110/32 37/109/32 38/111/33 69/112/33
+f 69/112/33 38/111/33 39/113/34 70/114/34
+f 70/114/34 39/113/34 33/115/35 71/116/35
+f 71/116/35 33/115/35 5/117/36 72/118/36
+f 73/119/37 81/120/38 82/121/39 74/122/40
+f 83/123/41 84/124/42 85/125/43 86/126/44
+f 87/127/45 88/128/46 89/129/47 90/130/48
+f 91/131/49 92/132/50 93/133/51 94/134/52
+f 81/120/38 83/123/41 86/126/44 82/121/39
+f 84/124/42 87/127/45 90/130/48 85/125/43
+f 88/128/46 91/131/49 94/134/52 89/129/47
+f 74/122/40 82/121/39 95/135/53 76/136/54
+f 86/126/44 85/125/43 96/137/55 97/138/56
+f 90/130/48 89/129/47 98/139/57 99/140/58
+f 94/134/52 93/133/51 100/141/59 101/142/60
+f 82/121/39 86/126/44 97/138/56 95/135/53
+f 85/125/43 90/130/48 99/140/58 96/137/55
+f 89/129/47 94/134/52 101/142/60 98/139/57
+f 76/136/54 95/135/53 102/143/61 77/144/62
+f 97/138/56 96/137/55 103/145/63 104/146/64
+f 99/140/58 98/139/57 105/147/65 106/148/66
+f 101/142/60 100/141/59 107/149/67 108/150/68
+f 95/135/53 97/138/56 104/146/64 102/143/61
+f 96/137/55 99/140/58 106/148/66 103/145/63
+f 98/139/57 101/142/60 108/150/68 105/147/65
+f 77/144/62 102/143/61 109/151/69 78/152/70
+f 104/146/64 103/145/63 110/153/71 111/154/72
+f 106/148/66 105/147/65 112/155/73 113/156/74
+f 108/150/68 107/149/67 114/157/75 115/158/76
+f 102/143/61 104/146/64 111/154/72 109/151/69
+f 103/145/63 106/148/66 113/156/74 110/153/71
+f 105/147/65 108/150/68 115/158/76 112/155/73
+f 78/152/70 109/151/69 116/159/77 79/160/78
+f 111/154/72 110/153/71 117/161/79 118/162/80
+f 113/156/74 112/155/73 119/163/81 120/164/82
+f 115/158/76 114/157/75 121/165/83 122/166/84
+f 109/151/69 111/154/72 118/162/80 116/159/77
+f 110/153/71 113/156/74 120/164/82 117/161/79
+f 112/155/73 115/158/76 122/166/84 119/163/81
+f 79/160/78 116/159/77 123/167/85 80/168/86
+f 118/162/80 117/161/79 124/169/87 125/170/88
+f 120/164/82 119/163/81 126/171/89 127/172/90
+f 122/166/84 121/165/83 128/173/91 129/174/92
+f 116/159/77 118/162/80 125/170/88 123/167/85
+f 117/161/79 120/164/82 127/172/90 124/169/87
+f 119/163/81 122/166/84 129/174/92 126/171/89
+f 80/168/86 123/167/85 130/175/93 75/176/94
+f 125/170/88 124/169/87 131/177/95 132/178/96
+f 127/172/90 126/171/89 133/179/97 134/180/98
+f 129/174/92 128/173/91 135/181/99 136/182/100
+f 123/167/85 125/170/88 132/178/96 130/175/93
+f 124/169/87 127/172/90 134/180/98 131/177/95
+f 126/171/89 129/174/92 136/182/100 133/179/97
+f 75/183/94 130/184/93 137/185/101 6/186/102
+f 132/187/96 131/188/95 138/189/103 139/190/104
+f 134/191/98 133/192/97 140/193/105 141/194/106
+f 136/195/100 135/196/99 142/197/107 143/198/108
+f 130/184/93 132/187/96 139/190/104 137/185/101
+f 131/188/95 134/191/98 141/194/106 138/189/103
+f 133/192/97 136/195/100 143/198/108 140/193/105
+f 135/196/99 144/199/109 145/200/110 142/197/107
+f 128/173/91 146/201/111 144/202/109 135/181/99
+f 121/165/83 147/203/112 146/201/111 128/173/91
+f 114/157/75 148/204/113 147/203/112 121/165/83
+f 107/149/67 149/205/114 148/204/113 114/157/75
+f 100/141/59 150/206/115 149/205/114 107/149/67
+f 93/133/51 151/207/116 150/206/115 100/141/59
+f 92/132/50 152/208/117 153/209/118 151/207/116 93/133/51
+f 154/210/12 145/211/110 144/212/109 146/213/111 147/214/112 148/215/113 149/216/114 150/217/115 151/218/116 153/219/118
diff --git a/technic/models/technic_diagonal_truss.obj b/technic/models/technic_diagonal_truss.obj
new file mode 100644
index 0000000..f129494
--- /dev/null
+++ b/technic/models/technic_diagonal_truss.obj
@@ -0,0 +1,74 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_diagonal_truss.mtl
+o Cube_Cube.008
+v -0.500214 -0.323437 -0.125000
+v 0.500003 0.676779 -0.125000
+v 0.500003 0.500003 -0.125000
+v 0.676779 0.500003 -0.125000
+v -0.322989 -0.499766 -0.125000
+v -0.500003 -0.500003 -0.125000
+v -0.500214 -0.323437 0.125000
+v 0.500003 0.676779 0.125000
+v -0.322989 -0.499766 0.125000
+v -0.500003 -0.500003 0.125000
+v 0.676779 0.500003 0.125000
+v 0.500003 0.500003 0.125000
+v 0.500003 0.500003 0.125000
+v 0.500003 0.500003 -0.125000
+vt 0.918999 0.620735
+vt 0.000192 0.620735
+vt 0.081386 0.505909
+vt 0.000192 0.391082
+vt 0.918588 0.391082
+vt 1.000000 0.505909
+vt -0.000005 0.375051
+vt 0.999795 0.375051
+vt 0.999795 0.624949
+vt -0.000005 0.624949
+vt 0.624975 0.615432
+vt 0.499990 0.615432
+vt 0.499990 0.369299
+vt 0.624975 0.369299
+vt 0.000219 0.624856
+vt 0.000219 0.374906
+vt 0.999781 0.374906
+vt 0.999781 0.624856
+vt 0.375025 0.615432
+vt 0.375025 0.369299
+vt 0.081192 0.611726
+vt 0.000192 0.496900
+vt 0.081604 0.382073
+vt 1.000000 0.382073
+vt 0.918806 0.496900
+vt 1.000000 0.611726
+vt 0.492368 0.623067
+vt 0.492368 0.376933
+vt 0.617343 0.376933
+vt 0.617343 0.623067
+vt 0.367392 0.623067
+vt 0.367392 0.376933
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vn -0.0000 0.0000 -1.0000
+vn -0.7071 0.7071 0.0000
+vn 0.0013 -1.0000 0.0000
+vn 0.7071 -0.7071 0.0000
+vn -1.0000 -0.0012 0.0000
+vn 0.0000 -0.0000 1.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 0.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1
+f 7/7/2 8/8/2 2/9/2 1/10/2
+f 9/11/3 10/12/3 6/13/3 5/14/3
+f 9/15/4 5/16/4 4/17/4 11/18/4
+f 10/12/5 7/19/5 1/20/5 6/13/5
+f 7/21/6 10/22/6 9/23/6 11/24/6 12/25/6 8/26/6
+f 12/27/7 3/28/7 2/29/7 8/30/7
+f 3/28/8 12/27/8 11/31/8 4/32/8
+f 13/33/9 14/34/9 3/35/9 12/36/9
diff --git a/technic/models/technic_diagonal_truss_cross.obj b/technic/models/technic_diagonal_truss_cross.obj
new file mode 100644
index 0000000..d3f24f8
--- /dev/null
+++ b/technic/models/technic_diagonal_truss_cross.obj
@@ -0,0 +1,164 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_diagonal_truss_cross.mtl
+o Cube.001_Cube.010
+v 0.323437 -0.500214 -0.125000
+v -0.676779 0.500003 -0.125000
+v -0.500003 0.500003 -0.125000
+v -0.500003 0.676779 -0.125000
+v 0.499766 -0.322989 -0.125000
+v 0.500003 -0.500003 -0.125000
+v 0.323437 -0.500214 0.125000
+v 0.000244 -0.177020 0.125000
+v -0.176187 -0.000589 0.125000
+v -0.676779 0.500003 0.125000
+v 0.499766 -0.322989 0.125000
+v 0.500003 -0.500003 0.125000
+v -0.500003 0.676779 0.125000
+v 0.000029 0.176748 0.125000
+v 0.175892 0.000885 0.125000
+v -0.500003 0.500003 0.125000
+v -0.000554 0.176222 -0.125000
+v 0.500003 0.676779 -0.125000
+v 0.500003 0.500003 -0.125000
+v 0.676779 0.500003 -0.125000
+v 0.175852 -0.000925 -0.125000
+v -0.500213 -0.323437 0.125000
+v 0.500003 0.676779 0.125000
+v -0.176762 0.000014 -0.125000
+v -0.500213 -0.323437 -0.125000
+v -0.322989 -0.499766 0.125000
+v -0.500003 -0.500003 0.125000
+v -0.500003 -0.500003 -0.125000
+v -0.322989 -0.499766 -0.125000
+v -0.001331 -0.178108 -0.125000
+v 0.676779 0.500003 0.125000
+v 0.500003 0.500003 0.125000
+v -0.500003 0.500003 0.125000
+v -0.500003 0.500003 -0.125000
+v 0.500003 0.500003 0.125000
+v 0.500003 0.500003 -0.125000
+vt 0.918999 0.620735
+vt 0.000192 0.620735
+vt 0.081386 0.505909
+vt 0.000192 0.391082
+vt 0.918588 0.391082
+vt 1.000000 0.505909
+vt -0.000005 0.375051
+vt 0.323053 0.375051
+vt 0.499411 0.375051
+vt 0.999795 0.375051
+vt 0.999795 0.624949
+vt -0.000005 0.624949
+vt 0.624975 0.615432
+vt 0.499990 0.615432
+vt 0.499990 0.369299
+vt 0.624975 0.369299
+vt 0.000219 0.624856
+vt 0.000219 0.374906
+vt 0.999781 0.374906
+vt 0.999781 0.624856
+vt 0.499852 0.624856
+vt 0.324026 0.624856
+vt 0.375025 0.615432
+vt 0.375025 0.369299
+vt 0.540151 0.611726
+vt 0.540666 0.382073
+vt 1.000000 0.382073
+vt 0.918806 0.496900
+vt 1.000000 0.611726
+vt 0.492368 0.623067
+vt 0.492368 0.376933
+vt 0.617343 0.376933
+vt 0.617343 0.623067
+vt 0.367392 0.623067
+vt 0.367392 0.376933
+vt 0.081192 0.611726
+vt 0.000192 0.496900
+vt 0.081604 0.382073
+vt 0.379117 0.382073
+vt 0.378081 0.611726
+vt 0.460008 0.620735
+vt 0.000192 0.620735
+vt 0.081386 0.505909
+vt 0.000192 0.391082
+vt 0.460349 0.391082
+vt -0.000005 0.375051
+vt 0.999795 0.375051
+vt 0.999795 0.624949
+vt 0.499446 0.624949
+vt 0.323311 0.624949
+vt -0.000005 0.624949
+vt 0.624975 0.615432
+vt 0.499990 0.615432
+vt 0.499990 0.369299
+vt 0.624975 0.369299
+vt 0.000219 0.624856
+vt 0.000219 0.374906
+vt 0.321810 0.374906
+vt 0.498957 0.374906
+vt 0.999781 0.374906
+vt 0.999781 0.624856
+vt 0.375025 0.615432
+vt 0.375025 0.369299
+vt 0.081192 0.611726
+vt 0.000192 0.496900
+vt 0.081604 0.382073
+vt 1.000000 0.382073
+vt 0.918806 0.496900
+vt 1.000000 0.611726
+vt 0.492368 0.623067
+vt 0.492368 0.376933
+vt 0.617343 0.376933
+vt 0.617343 0.623067
+vt 0.367392 0.623067
+vt 0.367392 0.376933
+vt 0.918999 0.620735
+vt 0.621874 0.620735
+vt 0.623110 0.391082
+vt 0.918588 0.391082
+vt 1.000000 0.505909
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vn -0.0000 0.0000 -1.0000
+vn -0.7071 -0.7071 0.0000
+vn 1.0000 0.0013 0.0000
+vn 0.7071 0.7071 -0.0000
+vn 0.0012 -1.0000 0.0000
+vn -0.0000 -0.0000 1.0000
+vn 0.0000 1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn -0.7071 0.7071 0.0000
+vn 0.0013 -1.0000 0.0000
+vn 0.7071 -0.7071 0.0000
+vn -1.0000 -0.0012 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 0.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1
+f 7/7/2 8/8/2 9/9/2 10/10/2 2/11/2 1/12/2
+f 11/13/3 12/14/3 6/15/3 5/16/3
+f 11/17/4 5/18/4 4/19/4 13/20/4 14/21/4 15/22/4
+f 12/14/5 7/23/5 1/24/5 6/15/5
+f 9/25/6 14/26/6 13/27/6 16/28/6 10/29/6
+f 16/30/7 3/31/7 2/32/7 10/33/7
+f 3/31/8 16/30/8 13/34/8 4/35/8
+f 7/36/6 12/37/6 11/38/6 15/39/6 8/40/6
+f 17/41/1 18/42/1 19/43/1 20/44/1 21/45/1
+f 22/46/9 23/47/9 18/48/9 17/49/9 24/50/9 25/51/9
+f 26/52/10 27/53/10 28/54/10 29/55/10
+f 26/56/11 29/57/11 30/58/11 21/59/11 20/60/11 31/61/11
+f 27/53/12 22/62/12 25/63/12 28/54/12
+f 22/64/6 27/65/6 26/66/6 31/67/6 32/68/6 23/69/6
+f 32/70/13 19/71/13 18/72/13 23/73/13
+f 19/71/7 32/70/7 31/74/7 20/75/7
+f 25/76/1 24/77/1 30/78/1 29/79/1 28/80/1
+f 33/81/14 34/82/14 3/83/14 16/84/14
+f 35/85/14 36/86/14 19/87/14 32/88/14
diff --git a/technic/models/technic_inner_curved_edge.obj b/technic/models/technic_inner_curved_edge.obj
new file mode 100644
index 0000000..66a6c02
--- /dev/null
+++ b/technic/models/technic_inner_curved_edge.obj
@@ -0,0 +1,137 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_inner_curved_edge.mtl
+o Cylinder_Cylinder.000
+v -0.500000 -0.500000 -0.000000
+v -0.500000 -0.402455 -0.009607
+v 0.500000 -0.402455 -0.009607
+v 0.500000 -0.500000 -0.000000
+v -0.500000 -0.308658 -0.038060
+v 0.500000 -0.308658 -0.038060
+v -0.500000 -0.222215 -0.084265
+v 0.500000 -0.222215 -0.084265
+v -0.500000 -0.146446 -0.146447
+v 0.500000 -0.146446 -0.146447
+v -0.500000 -0.084265 -0.222215
+v 0.500000 -0.084265 -0.222215
+v -0.500000 -0.038060 -0.308659
+v 0.500000 -0.038060 -0.308659
+v -0.500000 -0.009607 -0.402455
+v 0.500000 -0.009607 -0.402455
+v -0.500000 0.000000 -0.500000
+v 0.500000 0.000000 -0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 0.500000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v -0.500000 0.500000 0.500000
+vt 1.000000 0.000000
+vt 0.415735 0.277785
+vt 0.461940 0.191342
+vt 0.353553 0.353554
+vt 0.000000 0.000000
+vt 0.584265 0.277785
+vt 0.646447 0.353554
+vt 0.097545 0.490393
+vt 0.000000 1.000000
+vt 0.000000 0.500000
+vt 0.191341 0.461940
+vt 0.277785 0.415735
+vt 0.722215 0.415735
+vt 1.000000 1.000000
+vt 0.500000 0.000000
+vt 0.509607 0.097545
+vt 0.538060 0.191342
+vt 0.902455 0.490393
+vt 1.000000 0.500000
+vt 0.808659 0.461940
+vt 0.490393 0.097545
+vt 0.500000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.115813
+vt 0.000000 0.115813
+vt 0.000000 0.000000
+vt 1.000000 0.244499
+vt 0.000000 0.244499
+vt 1.000000 0.381110
+vt 0.000000 0.381110
+vt 1.000000 0.520399
+vt 0.000000 0.520399
+vt 1.000000 0.657010
+vt 0.000000 0.657010
+vt 1.000000 0.785695
+vt 0.000000 0.785696
+vt 1.000000 0.901509
+vt 0.000000 0.901509
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vt 1.000000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000100 0.999900
+vt 0.000100 0.000100
+vt 0.999900 0.000100
+vt 0.999900 0.999900
+vt 0.000001 1.000000
+vt 1.000000 1.000000
+vt 0.000100 0.999900
+vt 0.000100 0.000100
+vt 0.999900 0.000100
+vt 0.999900 0.999900
+vn -1.0000 0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 -0.0980 -0.9952
+vn 0.0000 -0.2903 -0.9569
+vn 0.0000 -0.4714 -0.8819
+vn 0.0000 -0.6344 -0.7730
+vn 0.0000 -0.7730 -0.6344
+vn 0.0000 -0.8819 -0.4714
+vn 0.0000 -0.9569 -0.2903
+vn 0.0000 -0.9952 -0.0980
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.5774 0.5774 0.5774
+vn 0.4472 0.8944 0.0000
+vn -0.4472 0.8944 0.0000
+vn -0.5774 0.5774 0.5774
+vn 0.4472 -0.0000 0.8944
+vn -0.4472 -0.0000 0.8944
+usemtl None
+s off
+f 20/1/1 7/2/1 5/3/1
+f 20/1/1 9/4/1 7/2/1
+f 19/5/2 8/6/2 10/7/2
+f 15/8/1 21/9/1 17/10/1
+f 13/11/1 21/9/1 15/8/1
+f 11/12/1 21/9/1 13/11/1
+f 10/7/2 12/13/2 22/14/2
+f 19/5/2 4/15/2 3/16/2
+f 19/5/2 3/16/2 6/17/2
+f 19/5/2 6/17/2 8/6/2
+f 11/12/1 9/4/1 21/9/1
+f 16/18/2 18/19/2 22/14/2
+f 14/20/2 16/18/2 22/14/2
+f 12/13/2 14/20/2 22/14/2
+f 19/5/2 10/7/2 22/14/2
+f 20/1/1 5/3/1 2/21/1
+f 20/1/1 2/21/1 1/22/1
+f 9/4/1 20/1/1 21/9/1
+s 1
+f 1/23/3 2/24/3 3/25/3 4/26/3
+f 2/24/4 5/27/4 6/28/4 3/25/4
+f 5/27/5 7/29/5 8/30/5 6/28/5
+f 7/29/6 9/31/6 10/32/6 8/30/6
+f 9/31/7 11/33/7 12/34/7 10/32/7
+f 11/33/8 13/35/8 14/36/8 12/34/8
+f 13/35/9 15/37/9 16/38/9 14/36/9
+f 15/37/10 17/39/10 18/40/10 16/38/10
+f 4/41/11 19/5/11 20/1/11 1/42/11
+f 18/43/12 17/44/12 21/45/12 22/46/12
+f 23/47/13 22/48/14 21/49/15 24/50/16
+f 22/14/14 23/51/13 19/5/17
+f 21/9/15 20/1/18 24/52/16
+f 24/53/16 20/54/18 19/55/17 23/56/13
diff --git a/technic/models/technic_opposed_curved_edge.obj b/technic/models/technic_opposed_curved_edge.obj
new file mode 100644
index 0000000..ccb4562
--- /dev/null
+++ b/technic/models/technic_opposed_curved_edge.obj
@@ -0,0 +1,244 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_opposed_curved_edge.mtl
+o Cylinder_Cylinder.006
+v 0.500000 0.097545 -0.490393
+v 0.500000 0.000000 0.000000
+v 0.500000 0.000000 -0.500000
+v 0.500000 0.191342 -0.461940
+v 0.500000 0.277785 -0.415735
+v 0.500000 0.353553 -0.353553
+v 0.500000 0.415735 -0.277785
+v 0.500000 0.461940 -0.191342
+v 0.500000 0.490393 -0.097545
+v 0.500000 0.500000 0.000000
+v 0.500000 0.490393 0.097545
+v 0.500000 0.461940 0.191342
+v 0.500000 0.415735 0.277785
+v 0.500000 0.353553 0.353553
+v 0.500000 0.277785 0.415735
+v 0.500000 0.191342 0.461940
+v 0.500000 0.097545 0.490393
+v -0.500000 0.000000 0.000000
+v -0.500000 0.097545 -0.490393
+v -0.500000 0.000000 -0.500000
+v 0.500000 -0.000000 0.500000
+v -0.500000 0.191342 -0.461940
+v -0.500000 0.277785 -0.415735
+v -0.500000 0.353553 -0.353554
+v -0.500000 0.415735 -0.277785
+v -0.500000 0.461940 -0.191342
+v -0.500000 0.490393 -0.097545
+v -0.500000 0.500000 0.000000
+v -0.500000 -0.000000 0.500000
+v -0.500000 0.097545 0.490392
+v -0.500000 0.490393 0.097545
+v -0.500000 0.461940 0.191341
+v -0.500000 0.415735 0.277785
+v -0.500000 0.353553 0.353553
+v -0.500000 0.277785 0.415735
+v -0.500000 0.191342 0.461940
+v -0.500000 0.000000 0.000000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.000000 0.500000
+v 0.500000 0.000000 0.000000
+v 0.500000 -0.000000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+vt 0.985658 0.594688
+vt 0.497610 0.497610
+vt 0.995219 0.497610
+vt 0.957341 0.688037
+vt 0.911357 0.774067
+vt 0.849473 0.849473
+vt 0.774067 0.911357
+vt 0.688037 0.957341
+vt 0.594688 0.985659
+vt 0.497610 0.995219
+vt 0.400531 0.985658
+vt 0.307182 0.957341
+vt 0.221153 0.911357
+vt 0.145747 0.849473
+vt 0.083862 0.774067
+vt 0.037878 0.688037
+vt 0.009561 0.594688
+vt 0.498675 0.495551
+vt 0.012646 0.592228
+vt 0.003124 0.495551
+vt 0.000000 0.497610
+vt 0.040846 0.685190
+vt 0.086639 0.770864
+vt 0.148267 0.845958
+vt 0.223362 0.907586
+vt 0.309036 0.953380
+vt 0.401998 0.981580
+vt 0.498675 0.991101
+vt 0.994226 0.495551
+vt 0.984703 0.592228
+vt 0.595352 0.981580
+vt 0.688313 0.953380
+vt 0.773988 0.907586
+vt 0.849082 0.845958
+vt 0.910710 0.770864
+vt 0.956504 0.685190
+vt 0.498675 0.495551
+vt 0.003124 0.495551
+vt 0.003124 0.000000
+vt 0.994226 0.000000
+vt 0.994226 0.495551
+vt 0.497610 0.497610
+vt 0.000000 0.497610
+vt 0.000000 0.000000
+vt 0.995219 0.000000
+vt 0.995219 0.497610
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.561068
+vt 1.000000 0.561069
+vt 1.000000 0.672944
+vt 0.000000 0.672944
+vt 1.000000 0.785357
+vt 0.000000 0.785357
+vt 1.000000 0.893983
+vt 0.000000 0.893983
+vt 1.000000 0.994651
+vt 0.000000 0.994651
+vt 0.000063 0.001043
+vt 0.999937 0.001045
+vt 0.999937 0.125904
+vt 0.000063 0.125903
+vt 0.999937 0.250762
+vt 0.000063 0.250761
+vt 0.999937 0.375621
+vt 0.000063 0.375620
+vt 0.999937 0.495596
+vt 0.000063 0.495596
+vt 0.999937 0.496417
+vt 0.000063 0.496416
+vt 0.000063 0.376706
+vt 0.999937 0.376707
+vt 0.000063 0.251138
+vt 0.999937 0.251138
+vt 0.000063 0.125569
+vt 0.999937 0.125569
+vt 0.000063 0.000000
+vt 0.999937 0.000000
+vt 0.999732 1.003611
+vt 0.000000 1.003610
+vt 0.000000 0.893370
+vt 0.999732 0.893371
+vt 0.000000 0.783130
+vt 0.999732 0.783130
+vt 0.000000 0.672890
+vt 0.999732 0.672890
+vt 0.000000 0.562651
+vt 0.999732 0.562650
+vt 0.999733 0.562350
+vt 0.000000 0.562350
+vt 0.000000 0.000000
+vt 0.999733 0.000000
+vt 1.000000 0.561068
+vt 0.000000 0.561068
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.000000 0.000000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 0.0000 0.0000
+vn 0.0000 0.9988 0.0491
+vn 0.0000 0.1951 -0.9808
+vn 0.0000 0.3827 -0.9239
+vn 0.0000 0.5556 -0.8315
+vn 0.0000 0.7071 -0.7071
+vn 0.0000 0.8315 -0.5556
+vn 0.0000 0.9239 -0.3827
+vn 0.0000 0.9808 -0.1951
+vn 0.0000 1.0000 0.0000
+vn -0.0000 0.9808 0.1951
+vn -0.0000 0.9239 0.3827
+vn -0.0000 0.8315 0.5556
+vn 0.0000 0.7071 0.7071
+vn 0.0000 0.5556 0.8315
+vn -0.0000 0.3827 0.9239
+vn -0.0000 0.1951 0.9808
+vn -0.0000 0.0491 0.9988
+vn 0.0000 -0.0000 1.0000
+vn 0.0000 -0.7071 0.7071
+vn -0.7071 0.0000 0.7071
+vn 0.7071 0.0000 0.7071
+vn 0.0000 -0.7071 -0.7071
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1
+f 4/4/1 2/2/1 1/1/1
+f 5/5/1 2/2/1 4/4/1
+f 6/6/1 2/2/1 5/5/1
+f 7/7/1 2/2/1 6/6/1
+f 8/8/1 2/2/1 7/7/1
+f 9/9/1 2/2/1 8/8/1
+f 10/10/1 2/2/1 9/9/1
+f 11/11/1 2/2/1 10/10/1
+f 11/11/1 12/12/1 2/2/1
+f 2/2/1 12/12/1 13/13/1
+f 2/2/1 14/14/1 15/15/1
+f 2/2/1 15/15/1 16/16/1
+f 2/2/1 16/16/1 17/17/1
+f 18/18/2 19/19/2 20/20/2
+f 21/21/1 2/2/1 17/17/1
+f 2/2/1 13/13/1 14/14/1
+f 18/18/2 22/22/2 19/19/2
+f 18/18/2 23/23/2 22/22/2
+f 18/18/2 24/24/2 23/23/2
+f 18/18/2 25/25/2 24/24/2
+f 18/18/2 26/26/2 25/25/2
+f 18/18/2 27/27/2 26/26/2
+f 18/18/2 28/28/2 27/27/2
+f 18/18/2 29/29/2 30/30/2
+f 31/31/2 18/18/2 32/32/2
+f 32/32/2 18/18/2 33/33/2
+f 33/33/2 18/18/2 34/34/2
+f 34/34/2 18/18/2 35/35/2
+f 35/35/2 18/18/2 36/36/2
+f 36/36/2 18/18/2 30/30/2
+f 31/31/2 28/28/2 18/18/2
+f 37/37/2 38/38/2 39/39/2 40/40/2 41/41/2
+f 42/42/1 43/43/1 44/44/1 45/45/1 46/46/1
+f 29/47/3 18/48/3 37/49/3 41/50/3
+f 3/51/3 2/52/3 42/53/3 46/54/3
+f 2/52/3 21/55/3 43/56/3 42/53/3
+f 18/48/3 20/57/3 38/58/3 37/49/3
+s 1
+f 3/59/4 20/60/4 19/61/5 1/62/5
+f 1/62/5 19/61/5 22/63/6 4/64/6
+f 4/64/6 22/63/6 23/65/7 5/66/7
+f 5/66/7 23/65/7 24/67/8 6/68/8
+f 6/69/8 24/70/8 25/71/9 7/72/9
+f 7/72/9 25/71/9 26/73/10 8/74/10
+f 8/74/10 26/73/10 27/75/11 9/76/11
+f 9/76/11 27/75/11 28/77/12 10/78/12
+f 10/79/12 28/80/12 31/81/13 11/82/13
+f 11/82/13 31/81/13 32/83/14 12/84/14
+f 12/84/14 32/83/14 33/85/15 13/86/15
+f 13/86/15 33/85/15 34/87/16 14/88/16
+f 14/89/16 34/90/16 35/91/17 15/92/17
+f 15/92/17 35/91/17 36/93/18 16/94/18
+f 16/94/18 36/93/18 30/95/19 17/96/19
+f 17/96/19 30/95/19 29/97/20 21/98/20
+f 43/99/21 41/100/21 40/101/22 44/102/22
+f 38/103/23 46/104/24 45/105/25 39/106/25
+f 21/55/20 29/47/20 41/50/21 43/56/21
+f 20/57/4 3/51/4 46/54/24 38/58/23
+f 40/101/22 39/107/25 45/105/25 44/44/22
diff --git a/technic/models/technic_sphere_half.obj b/technic/models/technic_sphere_half.obj
new file mode 100644
index 0000000..ee7e667
--- /dev/null
+++ b/technic/models/technic_sphere_half.obj
@@ -0,0 +1,1210 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_sphere_half.mtl
+o Sphere.001
+v -0.353553 -0.146447 -0.000000
+v -0.277785 -0.084265 -0.000000
+v -0.272448 -0.084265 -0.054193
+v -0.346760 -0.146447 -0.068975
+v -0.191342 -0.038060 -0.000000
+v -0.097545 -0.009607 -0.000000
+v -0.095671 -0.009607 -0.019030
+v -0.187665 -0.038060 -0.037329
+v -0.490393 -0.402455 -0.000000
+v -0.461940 -0.308658 -0.000000
+v -0.453064 -0.308658 -0.090120
+v -0.480970 -0.402455 -0.095671
+v -0.415735 -0.222215 -0.000000
+v -0.407747 -0.222215 -0.081106
+v -0.500000 -0.500000 -0.000000
+v -0.490393 -0.500000 -0.097545
+v -0.453064 -0.402455 -0.187665
+v -0.461940 -0.500000 -0.191342
+v -0.384089 -0.222215 -0.159095
+v -0.426777 -0.308658 -0.176777
+v -0.256640 -0.084265 -0.106304
+v -0.326641 -0.146447 -0.135299
+v -0.090120 -0.009607 -0.037329
+v -0.176777 -0.038060 -0.073223
+v -0.407746 -0.402455 -0.272448
+v -0.415735 -0.500000 -0.277785
+v -0.345671 -0.222215 -0.230970
+v -0.384089 -0.308658 -0.256640
+v -0.230970 -0.084265 -0.154329
+v -0.293969 -0.146447 -0.196424
+v -0.081106 -0.009607 -0.054193
+v -0.159095 -0.038060 -0.106304
+v -0.346760 -0.402455 -0.346760
+v -0.353553 -0.500000 -0.353554
+v -0.293969 -0.222215 -0.293969
+v -0.326641 -0.308658 -0.326641
+v -0.196424 -0.084265 -0.196424
+v -0.250000 -0.146447 -0.250000
+v -0.068975 -0.009607 -0.068975
+v -0.135299 -0.038060 -0.135299
+v -0.272447 -0.402455 -0.407747
+v -0.277785 -0.500000 -0.415735
+v -0.230970 -0.222215 -0.345671
+v -0.256640 -0.308658 -0.384089
+v -0.154329 -0.084265 -0.230970
+v -0.196424 -0.146447 -0.293969
+v -0.054193 -0.009607 -0.081106
+v -0.106304 -0.038060 -0.159095
+v -0.187665 -0.402455 -0.453064
+v -0.191342 -0.500000 -0.461940
+v -0.159095 -0.222215 -0.384089
+v -0.176777 -0.308658 -0.426777
+v -0.106304 -0.084265 -0.256640
+v -0.135299 -0.146447 -0.326641
+v -0.037329 -0.009607 -0.090120
+v -0.073223 -0.038060 -0.176777
+v -0.095671 -0.402455 -0.480970
+v -0.097545 -0.500000 -0.490393
+v -0.081106 -0.222215 -0.407747
+v -0.090120 -0.308658 -0.453064
+v -0.054193 -0.084265 -0.272448
+v -0.068975 -0.146447 -0.346760
+v -0.019030 -0.009607 -0.095671
+v -0.037329 -0.038060 -0.187665
+v 0.000000 -0.402455 -0.490393
+v 0.000000 -0.500000 -0.500000
+v 0.000000 -0.222215 -0.415735
+v 0.000000 -0.308658 -0.461940
+v 0.000000 -0.084265 -0.277785
+v 0.000000 -0.146447 -0.353553
+v 0.000000 -0.009607 -0.097545
+v 0.000000 -0.038060 -0.191342
+v 0.095671 -0.402455 -0.480970
+v 0.097545 -0.500000 -0.490393
+v 0.081106 -0.222215 -0.407747
+v 0.090120 -0.308658 -0.453064
+v 0.054193 -0.084265 -0.272448
+v 0.068975 -0.146447 -0.346760
+v 0.019030 -0.009607 -0.095671
+v 0.037329 -0.038060 -0.187665
+v 0.187665 -0.402455 -0.453064
+v 0.191342 -0.500000 -0.461940
+v 0.159095 -0.222215 -0.384089
+v 0.176777 -0.308658 -0.426777
+v 0.106304 -0.084265 -0.256640
+v 0.135299 -0.146447 -0.326641
+v 0.037329 -0.009607 -0.090120
+v 0.073224 -0.038060 -0.176777
+v 0.272448 -0.402455 -0.407747
+v 0.277785 -0.500000 -0.415735
+v 0.230970 -0.222215 -0.345671
+v 0.256640 -0.308658 -0.384089
+v 0.154329 -0.084265 -0.230970
+v 0.196424 -0.146447 -0.293969
+v 0.054193 -0.009607 -0.081106
+v 0.106304 -0.038060 -0.159095
+v 0.346760 -0.402455 -0.346760
+v 0.353554 -0.500000 -0.353553
+v 0.293969 -0.222215 -0.293969
+v 0.326641 -0.308658 -0.326641
+v 0.196424 -0.084265 -0.196424
+v 0.250000 -0.146447 -0.250000
+v 0.068975 -0.009607 -0.068975
+v 0.135299 -0.038060 -0.135299
+v 0.407747 -0.402455 -0.272447
+v 0.415735 -0.500000 -0.277785
+v 0.345671 -0.222215 -0.230970
+v 0.384089 -0.308658 -0.256640
+v 0.230970 -0.084265 -0.154329
+v 0.293969 -0.146447 -0.196424
+v 0.081106 -0.009607 -0.054193
+v 0.159095 -0.038060 -0.106304
+v 0.453064 -0.402455 -0.187665
+v 0.461940 -0.500000 -0.191342
+v 0.384089 -0.222215 -0.159095
+v 0.426777 -0.308658 -0.176777
+v 0.256640 -0.084265 -0.106304
+v 0.326641 -0.146447 -0.135299
+v 0.090120 -0.009607 -0.037329
+v 0.176777 -0.038060 -0.073223
+v 0.480970 -0.402455 -0.095671
+v 0.490393 -0.500000 -0.097545
+v 0.407747 -0.222215 -0.081106
+v 0.453064 -0.308658 -0.090120
+v 0.272448 -0.084265 -0.054193
+v 0.346760 -0.146447 -0.068975
+v 0.095671 -0.009607 -0.019030
+v 0.187665 -0.038060 -0.037329
+v 0.490393 -0.402455 -0.000000
+v 0.500000 -0.500000 -0.000000
+v 0.415735 -0.222215 -0.000000
+v 0.461940 -0.308658 -0.000000
+v 0.277785 -0.084265 -0.000000
+v 0.353554 -0.146447 -0.000000
+v 0.097545 -0.009607 -0.000000
+v 0.191342 -0.038060 -0.000000
+v 0.480970 -0.402455 0.095671
+v 0.490393 -0.500000 0.097545
+v 0.407747 -0.222215 0.081106
+v 0.453064 -0.308658 0.090120
+v 0.272448 -0.084265 0.054193
+v 0.346760 -0.146447 0.068975
+v 0.095671 -0.009607 0.019030
+v 0.187665 -0.038060 0.037329
+v 0.453064 -0.402455 0.187665
+v 0.461940 -0.500000 0.191342
+v 0.384089 -0.222215 0.159095
+v 0.426777 -0.308658 0.176777
+v 0.256640 -0.084265 0.106304
+v 0.326641 -0.146447 0.135299
+v 0.090120 -0.009607 0.037329
+v 0.176777 -0.038060 0.073223
+v 0.407747 -0.402455 0.272448
+v 0.415735 -0.500000 0.277785
+v 0.345671 -0.222215 0.230970
+v 0.384089 -0.308658 0.256640
+v 0.230970 -0.084265 0.154329
+v 0.293969 -0.146447 0.196424
+v 0.081106 -0.009607 0.054193
+v 0.159095 -0.038060 0.106304
+v 0.346760 -0.402455 0.346760
+v 0.353553 -0.500000 0.353553
+v 0.293969 -0.222215 0.293969
+v 0.326641 -0.308658 0.326641
+v 0.196424 -0.084265 0.196424
+v 0.250000 -0.146447 0.250000
+v 0.068975 -0.009607 0.068975
+v 0.135299 -0.038060 0.135299
+v 0.272448 -0.402455 0.407746
+v 0.277785 -0.500000 0.415735
+v 0.230970 -0.222215 0.345671
+v 0.256640 -0.308658 0.384089
+v 0.154329 -0.084265 0.230970
+v 0.196424 -0.146447 0.293969
+v 0.054193 -0.009607 0.081106
+v 0.106304 -0.038060 0.159095
+v 0.187665 -0.402455 0.453064
+v 0.191342 -0.500000 0.461940
+v 0.159095 -0.222215 0.384089
+v 0.176777 -0.308658 0.426777
+v 0.106304 -0.084265 0.256640
+v 0.135299 -0.146447 0.326641
+v 0.037329 -0.009607 0.090120
+v 0.073223 -0.038060 0.176777
+v 0.095671 -0.402455 0.480970
+v 0.097545 -0.500000 0.490393
+v 0.081106 -0.222215 0.407746
+v 0.090120 -0.308658 0.453064
+v 0.054193 -0.084265 0.272448
+v 0.068975 -0.146447 0.346760
+v 0.019030 -0.009607 0.095671
+v 0.037329 -0.038060 0.187665
+v 0.000000 -0.402455 0.490392
+v 0.000000 -0.500000 0.500000
+v 0.000000 -0.222215 0.415735
+v 0.000000 -0.308658 0.461940
+v 0.000000 -0.084265 0.277785
+v 0.000000 -0.146447 0.353553
+v 0.000000 -0.009607 0.097545
+v 0.000000 -0.038060 0.191342
+v -0.095671 -0.402455 0.480970
+v -0.097545 -0.500000 0.490393
+v -0.081106 -0.222215 0.407746
+v -0.090120 -0.308658 0.453064
+v -0.054193 -0.084265 0.272448
+v -0.068975 -0.146447 0.346760
+v -0.019030 -0.009607 0.095671
+v -0.037329 -0.038060 0.187665
+v -0.187665 -0.402455 0.453063
+v -0.191342 -0.500000 0.461940
+v -0.159095 -0.222215 0.384089
+v -0.176777 -0.308658 0.426777
+v -0.106304 -0.084265 0.256640
+v -0.135299 -0.146447 0.326641
+v -0.037329 -0.009607 0.090120
+v -0.073223 -0.038060 0.176777
+v -0.272447 -0.402455 0.407746
+v -0.277785 -0.500000 0.415735
+v -0.230970 -0.222215 0.345671
+v -0.256640 -0.308658 0.384089
+v -0.154329 -0.084265 0.230970
+v -0.196424 -0.146447 0.293969
+v -0.054193 -0.009607 0.081106
+v -0.106304 -0.038060 0.159095
+v -0.346760 -0.402455 0.346760
+v -0.353553 -0.500000 0.353553
+v -0.293969 -0.222215 0.293969
+v -0.326641 -0.308658 0.326641
+v -0.196424 -0.084265 0.196424
+v -0.250000 -0.146447 0.250000
+v -0.068975 -0.009607 0.068975
+v -0.135299 -0.038060 0.135299
+v -0.407746 -0.402455 0.272447
+v -0.415735 -0.500000 0.277785
+v -0.345671 -0.222215 0.230970
+v -0.384089 -0.308658 0.256640
+v -0.230970 -0.084265 0.154329
+v -0.293969 -0.146447 0.196424
+v -0.081106 -0.009607 0.054193
+v -0.159095 -0.038060 0.106304
+v -0.453063 -0.402455 0.187665
+v -0.461939 -0.500000 0.191342
+v -0.384089 -0.222215 0.159095
+v -0.426776 -0.308658 0.176777
+v -0.256640 -0.084265 0.106304
+v -0.326641 -0.146447 0.135299
+v -0.090120 -0.009607 0.037329
+v -0.176776 -0.038060 0.073223
+v -0.480969 -0.402455 0.095671
+v -0.490392 -0.500000 0.097545
+v -0.407746 -0.222215 0.081106
+v -0.453063 -0.308658 0.090120
+v -0.272447 -0.084265 0.054193
+v -0.346760 -0.146447 0.068975
+v -0.095671 -0.009607 0.019030
+v -0.187665 -0.038060 0.037329
+v -0.012914 -0.004804 0.002569
+v -0.013167 -0.004804 -0.000000
+v -0.012165 -0.004804 0.005039
+v -0.010948 -0.004804 0.007315
+v -0.009311 -0.004804 0.009311
+v -0.007315 -0.004804 0.010948
+v -0.005039 -0.004804 0.012165
+v -0.002569 -0.004804 0.012914
+v 0.000000 -0.004804 0.013167
+v 0.002569 -0.004804 0.012914
+v 0.005039 -0.004804 0.012165
+v 0.007316 -0.004804 0.010948
+v 0.009311 -0.004804 0.009311
+v 0.010948 -0.004804 0.007315
+v 0.012165 -0.004804 0.005039
+v 0.012915 -0.004804 0.002569
+v 0.013168 -0.004804 -0.000000
+v 0.012915 -0.004804 -0.002569
+v 0.012165 -0.004804 -0.005039
+v 0.010948 -0.004804 -0.007315
+v 0.009311 -0.004804 -0.009311
+v 0.007316 -0.004804 -0.010948
+v 0.005039 -0.004804 -0.012165
+v 0.002569 -0.004804 -0.012914
+v 0.000000 -0.004804 -0.013167
+v -0.002569 -0.004804 -0.012914
+v -0.005039 -0.004804 -0.012165
+v -0.007315 -0.004804 -0.010948
+v -0.009311 -0.004804 -0.009311
+v -0.010948 -0.004804 -0.007315
+v -0.012165 -0.004804 -0.005039
+v -0.012914 -0.004804 -0.002569
+vt 0.437500 0.750000
+vt 0.437500 0.812500
+vt 0.375000 0.812500
+vt 0.375000 0.750000
+vt 0.437500 0.875000
+vt 0.437500 0.937500
+vt 0.375000 0.937500
+vt 0.375000 0.875000
+vt 0.437500 0.562500
+vt 0.437500 0.625000
+vt 0.375000 0.625000
+vt 0.375000 0.562500
+vt 0.437500 0.687500
+vt 0.375000 0.687500
+vt 0.437500 0.500000
+vt 0.375000 0.500000
+vt 0.312500 0.562500
+vt 0.312500 0.500000
+vt 0.312500 0.687500
+vt 0.312500 0.625000
+vt 0.312500 0.812500
+vt 0.312500 0.750000
+vt 0.312500 0.937500
+vt 0.312500 0.875000
+vt 0.250000 0.562500
+vt 0.250000 0.500000
+vt 0.250000 0.687500
+vt 0.250000 0.625000
+vt 0.250000 0.812500
+vt 0.250000 0.750000
+vt 0.250000 0.937500
+vt 0.250000 0.875000
+vt 0.187500 0.562500
+vt 0.187500 0.500000
+vt 0.187500 0.687500
+vt 0.187500 0.625000
+vt 0.187500 0.812500
+vt 0.187500 0.750000
+vt 0.187500 0.937500
+vt 0.187500 0.875000
+vt 0.125000 0.562500
+vt 0.125000 0.500000
+vt 0.125000 0.687500
+vt 0.125000 0.625000
+vt 0.125000 0.812500
+vt 0.125000 0.750000
+vt 0.125000 0.937500
+vt 0.125000 0.875000
+vt 0.062500 0.562500
+vt 0.062500 0.500000
+vt 0.062500 0.687500
+vt 0.062500 0.625000
+vt 0.062500 0.812500
+vt 0.062500 0.750000
+vt 0.062500 0.937500
+vt 0.062500 0.875000
+vt 0.000000 0.562500
+vt 0.000000 0.500000
+vt 0.000000 0.687500
+vt 0.000000 0.625000
+vt 0.000000 0.812500
+vt 0.000000 0.750000
+vt 0.000000 0.937500
+vt 0.000000 0.875000
+vt 1.000000 0.500000
+vt 1.000000 0.562500
+vt 0.937500 0.562500
+vt 0.937500 0.500000
+vt 1.000000 0.625000
+vt 1.000000 0.687500
+vt 0.937500 0.687500
+vt 0.937500 0.625000
+vt 1.000000 0.750000
+vt 1.000000 0.812500
+vt 0.937500 0.812500
+vt 0.937500 0.750000
+vt 1.000000 0.875000
+vt 1.000000 0.937500
+vt 0.937500 0.937500
+vt 0.937500 0.875000
+vt 0.875000 0.562500
+vt 0.875000 0.500000
+vt 0.875000 0.687500
+vt 0.875000 0.625000
+vt 0.875000 0.812500
+vt 0.875000 0.750000
+vt 0.875000 0.937500
+vt 0.875000 0.875000
+vt 0.812500 0.562500
+vt 0.812500 0.500000
+vt 0.812500 0.687500
+vt 0.812500 0.625000
+vt 0.812500 0.812500
+vt 0.812500 0.750000
+vt 0.812500 0.937500
+vt 0.812500 0.875000
+vt 0.750000 0.562500
+vt 0.750000 0.500000
+vt 0.750000 0.687500
+vt 0.750000 0.625000
+vt 0.750000 0.812500
+vt 0.750000 0.750000
+vt 0.750000 0.937500
+vt 0.750000 0.875000
+vt 0.687500 0.562500
+vt 0.687500 0.500000
+vt 0.687500 0.687500
+vt 0.687500 0.625000
+vt 0.687500 0.812500
+vt 0.687500 0.750000
+vt 0.687500 0.937500
+vt 0.687500 0.875000
+vt 0.625000 0.562500
+vt 0.625000 0.500000
+vt 0.625000 0.687500
+vt 0.625000 0.625000
+vt 0.625000 0.812500
+vt 0.625000 0.750000
+vt 0.625000 0.937500
+vt 0.625000 0.875000
+vt 0.562500 0.562500
+vt 0.562500 0.500000
+vt 0.562500 0.687500
+vt 0.562500 0.625000
+vt 0.562500 0.812500
+vt 0.562500 0.750000
+vt 0.562500 0.937500
+vt 0.562500 0.875000
+vt 0.500000 0.562500
+vt 0.500000 0.500000
+vt 0.500000 0.687500
+vt 0.500000 0.625000
+vt 0.500000 0.812500
+vt 0.500000 0.750000
+vt 0.500000 0.937500
+vt 0.500000 0.875000
+vt 0.437500 0.562500
+vt 0.437500 0.500000
+vt 0.437500 0.687500
+vt 0.437500 0.625000
+vt 0.437500 0.812500
+vt 0.437500 0.750000
+vt 0.437500 0.937500
+vt 0.437500 0.875000
+vt 0.375000 0.562500
+vt 0.375000 0.500000
+vt 0.375000 0.687500
+vt 0.375000 0.625000
+vt 0.375000 0.812500
+vt 0.375000 0.750000
+vt 0.375000 0.937500
+vt 0.375000 0.875000
+vt 0.312500 0.562500
+vt 0.312500 0.500000
+vt 0.312500 0.687500
+vt 0.312500 0.625000
+vt 0.312500 0.812500
+vt 0.312500 0.750000
+vt 0.312500 0.937500
+vt 0.312500 0.875000
+vt 0.250000 0.562500
+vt 0.250000 0.500000
+vt 0.250000 0.687500
+vt 0.250000 0.625000
+vt 0.250000 0.812500
+vt 0.250000 0.750000
+vt 0.250000 0.937500
+vt 0.250000 0.875000
+vt 0.187500 0.562500
+vt 0.187500 0.500000
+vt 0.187500 0.687500
+vt 0.187500 0.625000
+vt 0.187500 0.812500
+vt 0.187500 0.750000
+vt 0.187500 0.937500
+vt 0.187500 0.875000
+vt 0.125000 0.562500
+vt 0.125000 0.500000
+vt 0.125000 0.687500
+vt 0.125000 0.625000
+vt 0.125000 0.812500
+vt 0.125000 0.750000
+vt 0.125000 0.937500
+vt 0.125000 0.875000
+vt 0.062500 0.562500
+vt 0.062500 0.500000
+vt 0.062500 0.687500
+vt 0.062500 0.625000
+vt 0.062500 0.812500
+vt 0.062500 0.750000
+vt 0.062500 0.937500
+vt 0.062500 0.875000
+vt 0.000000 0.562500
+vt 0.000000 0.500000
+vt 0.000000 0.687500
+vt 0.000000 0.625000
+vt 0.000000 0.812500
+vt 0.000000 0.750000
+vt 0.000000 0.937500
+vt 0.000000 0.875000
+vt 1.000000 0.500000
+vt 1.000000 0.562500
+vt 0.937500 0.562500
+vt 0.937500 0.500000
+vt 1.000000 0.625000
+vt 1.000000 0.687500
+vt 0.937500 0.687500
+vt 0.937500 0.625000
+vt 1.000000 0.750000
+vt 1.000000 0.812500
+vt 0.937500 0.812500
+vt 0.937500 0.750000
+vt 1.000000 0.875000
+vt 1.000000 0.937500
+vt 0.937500 0.937500
+vt 0.937500 0.875000
+vt 0.875000 0.562500
+vt 0.875000 0.500000
+vt 0.875000 0.687500
+vt 0.875000 0.625000
+vt 0.875000 0.812500
+vt 0.875000 0.750000
+vt 0.875000 0.937500
+vt 0.875000 0.875000
+vt 0.812500 0.562500
+vt 0.812500 0.500000
+vt 0.812500 0.687500
+vt 0.812500 0.625000
+vt 0.812500 0.812500
+vt 0.812500 0.750000
+vt 0.812500 0.937500
+vt 0.812500 0.875000
+vt 0.750000 0.562500
+vt 0.750000 0.500000
+vt 0.750000 0.687500
+vt 0.750000 0.625000
+vt 0.750000 0.812500
+vt 0.750000 0.750000
+vt 0.750000 0.937500
+vt 0.750000 0.875000
+vt 0.687500 0.562500
+vt 0.687500 0.500000
+vt 0.687500 0.687500
+vt 0.687500 0.625000
+vt 0.687500 0.812500
+vt 0.687500 0.750000
+vt 0.687500 0.937500
+vt 0.687500 0.875000
+vt 0.625000 0.562500
+vt 0.625000 0.500000
+vt 0.625000 0.687500
+vt 0.625000 0.625000
+vt 0.625000 0.812500
+vt 0.625000 0.750000
+vt 0.625000 0.937500
+vt 0.625000 0.875000
+vt 0.562500 0.562500
+vt 0.562500 0.500000
+vt 0.562500 0.687500
+vt 0.562500 0.625000
+vt 0.562500 0.812500
+vt 0.562500 0.750000
+vt 0.562500 0.937500
+vt 0.562500 0.875000
+vt 0.500000 0.562500
+vt 0.500000 0.500000
+vt 0.500000 0.687500
+vt 0.500000 0.625000
+vt 0.500000 0.812500
+vt 0.500000 0.750000
+vt 0.500000 0.937500
+vt 0.500000 0.875000
+vt 0.500000 1.000000
+vt 0.437500 1.000000
+vt 0.562500 1.000000
+vt 0.625000 1.000000
+vt 0.687500 1.000000
+vt 0.750000 1.000000
+vt 0.812500 1.000000
+vt 0.875000 1.000000
+vt 0.937500 1.000000
+vt 1.000000 1.000000
+vt 0.062500 1.000000
+vt -0.000000 1.000000
+vt 0.125000 1.000000
+vt 0.187500 1.000000
+vt 0.250000 1.000000
+vt 0.312500 1.000000
+vt 0.375000 1.000000
+vt 0.437500 1.000000
+vt 0.500000 1.000000
+vt 0.562500 1.000000
+vt 0.625000 1.000000
+vt 0.687500 1.000000
+vt 0.750000 1.000000
+vt 0.812500 1.000000
+vt 0.875000 1.000000
+vt 0.937500 1.000000
+vt 1.000000 1.000000
+vt 0.062500 1.000000
+vt -0.000000 1.000000
+vt 0.125000 1.000000
+vt 0.187500 1.000000
+vt 0.250000 1.000000
+vt 0.312500 1.000000
+vt 0.375000 1.000000
+vt 0.031303 0.999906
+vt 0.037377 0.999307
+vt 0.043218 0.997535
+vt 0.048601 0.994658
+vt 0.053319 0.990786
+vt 0.057192 0.986068
+vt 0.060069 0.980685
+vt 0.061841 0.974844
+vt 0.062439 0.968769
+vt 0.061841 0.962695
+vt 0.060069 0.956854
+vt 0.057192 0.951471
+vt 0.053319 0.946753
+vt 0.048601 0.942881
+vt 0.043218 0.940004
+vt 0.037377 0.938232
+vt 0.031303 0.937633
+vt 0.025229 0.938232
+vt 0.019388 0.940004
+vt 0.014005 0.942881
+vt 0.009286 0.946753
+vt 0.005414 0.951471
+vt 0.002537 0.956854
+vt 0.000765 0.962695
+vt 0.000167 0.968770
+vt 0.000765 0.974844
+vt 0.002537 0.980685
+vt 0.005414 0.986068
+vt 0.009286 0.990786
+vt 0.014005 0.994658
+vt 0.019388 0.997535
+vt 0.025229 0.999307
+vt 0.025591 0.500000
+vt 0.034706 0.407448
+vt 0.061703 0.318451
+vt 0.105543 0.236433
+vt 0.164543 0.164542
+vt 0.236433 0.105543
+vt 0.318451 0.061703
+vt 0.407448 0.034706
+vt 0.500000 0.025591
+vt 0.592552 0.034706
+vt 0.681548 0.061703
+vt 0.763567 0.105543
+vt 0.835458 0.164543
+vt 0.894457 0.236433
+vt 0.938297 0.318451
+vt 0.965294 0.407448
+vt 0.974409 0.500000
+vt 0.965294 0.592552
+vt 0.938297 0.681548
+vt 0.894457 0.763567
+vt 0.835457 0.835457
+vt 0.763567 0.894457
+vt 0.681548 0.938297
+vt 0.592552 0.965294
+vt 0.500000 0.974409
+vt 0.407448 0.965294
+vt 0.318451 0.938297
+vt 0.236433 0.894457
+vt 0.164543 0.835457
+vt 0.105543 0.763567
+vt 0.061704 0.681548
+vt 0.034708 0.592552
+vn -0.7101 0.7041 0.0000
+vn -0.5598 0.8286 0.0000
+vn -0.5490 0.8286 -0.1092
+vn -0.6965 0.7041 -0.1385
+vn -0.3879 0.9217 0.0000
+vn -0.1820 0.9833 0.0000
+vn -0.1785 0.9833 -0.0355
+vn -0.3804 0.9217 -0.0757
+vn -0.9810 0.1939 0.0000
+vn -0.9248 0.3805 0.0000
+vn -0.9070 0.3805 -0.1804
+vn -0.9622 0.1939 -0.1914
+vn -0.8333 0.5528 0.0000
+vn -0.8173 0.5528 -0.1626
+vn -0.7605 -0.6494 0.0000
+vn -0.7459 -0.6494 -0.1484
+vn -0.9063 0.1939 -0.3754
+vn -0.7026 -0.6494 -0.2910
+vn -0.7699 0.5528 -0.3189
+vn -0.8544 0.3805 -0.3539
+vn -0.5172 0.8286 -0.2142
+vn -0.6561 0.7041 -0.2718
+vn -0.1681 0.9833 -0.0696
+vn -0.3584 0.9217 -0.1484
+vn -0.8157 0.1939 -0.5450
+vn -0.6323 -0.6494 -0.4225
+vn -0.6929 0.5528 -0.4630
+vn -0.7689 0.3805 -0.5138
+vn -0.4654 0.8286 -0.3110
+vn -0.5905 0.7041 -0.3945
+vn -0.1513 0.9833 -0.1011
+vn -0.3225 0.9217 -0.2155
+vn -0.6937 0.1939 -0.6937
+vn -0.5377 -0.6494 -0.5377
+vn -0.5893 0.5528 -0.5893
+vn -0.6539 0.3805 -0.6539
+vn -0.3958 0.8286 -0.3958
+vn -0.5021 0.7041 -0.5021
+vn -0.1287 0.9833 -0.1287
+vn -0.2743 0.9217 -0.2743
+vn -0.5450 0.1939 -0.8157
+vn -0.4225 -0.6494 -0.6323
+vn -0.4630 0.5528 -0.6929
+vn -0.5138 0.3805 -0.7689
+vn -0.3110 0.8286 -0.4654
+vn -0.3945 0.7041 -0.5905
+vn -0.1011 0.9833 -0.1513
+vn -0.2155 0.9217 -0.3225
+vn -0.3754 0.1939 -0.9063
+vn -0.2910 -0.6494 -0.7026
+vn -0.3189 0.5528 -0.7699
+vn -0.3539 0.3805 -0.8544
+vn -0.2142 0.8286 -0.5172
+vn -0.2718 0.7041 -0.6561
+vn -0.0696 0.9833 -0.1681
+vn -0.1484 0.9217 -0.3584
+vn -0.1914 0.1939 -0.9622
+vn -0.1484 -0.6494 -0.7459
+vn -0.1626 0.5528 -0.8173
+vn -0.1804 0.3805 -0.9070
+vn -0.1092 0.8286 -0.5490
+vn -0.1385 0.7041 -0.6965
+vn -0.0355 0.9833 -0.1785
+vn -0.0757 0.9217 -0.3804
+vn 0.0000 0.1939 -0.9810
+vn 0.0000 -0.6494 -0.7605
+vn -0.0000 0.5528 -0.8333
+vn -0.0000 0.3805 -0.9248
+vn 0.0000 0.8286 -0.5598
+vn 0.0000 0.7041 -0.7101
+vn 0.0000 0.9833 -0.1820
+vn 0.0000 0.9217 -0.3879
+vn 0.1914 0.1939 -0.9622
+vn 0.1484 -0.6494 -0.7459
+vn 0.1626 0.5528 -0.8173
+vn 0.1804 0.3805 -0.9070
+vn 0.1092 0.8286 -0.5490
+vn 0.1385 0.7041 -0.6965
+vn 0.0355 0.9833 -0.1785
+vn 0.0757 0.9217 -0.3804
+vn 0.3754 0.1939 -0.9063
+vn 0.2910 -0.6494 -0.7026
+vn 0.3189 0.5528 -0.7699
+vn 0.3539 0.3805 -0.8544
+vn 0.2142 0.8286 -0.5172
+vn 0.2718 0.7041 -0.6561
+vn 0.0696 0.9833 -0.1681
+vn 0.1484 0.9217 -0.3584
+vn 0.5450 0.1939 -0.8157
+vn 0.4225 -0.6494 -0.6323
+vn 0.4630 0.5528 -0.6929
+vn 0.5138 0.3805 -0.7689
+vn 0.3110 0.8286 -0.4654
+vn 0.3945 0.7041 -0.5905
+vn 0.1011 0.9833 -0.1513
+vn 0.2155 0.9217 -0.3225
+vn 0.6937 0.1939 -0.6937
+vn 0.5377 -0.6494 -0.5377
+vn 0.5893 0.5528 -0.5893
+vn 0.6539 0.3805 -0.6539
+vn 0.3958 0.8286 -0.3958
+vn 0.5021 0.7041 -0.5021
+vn 0.1287 0.9833 -0.1287
+vn 0.2743 0.9217 -0.2743
+vn 0.8157 0.1939 -0.5450
+vn 0.6323 -0.6494 -0.4225
+vn 0.6929 0.5528 -0.4630
+vn 0.7689 0.3805 -0.5138
+vn 0.4654 0.8286 -0.3110
+vn 0.5905 0.7041 -0.3945
+vn 0.1513 0.9833 -0.1011
+vn 0.3225 0.9217 -0.2155
+vn 0.9063 0.1939 -0.3754
+vn 0.7026 -0.6494 -0.2910
+vn 0.7699 0.5528 -0.3189
+vn 0.8544 0.3805 -0.3539
+vn 0.5172 0.8286 -0.2142
+vn 0.6561 0.7041 -0.2718
+vn 0.1681 0.9833 -0.0696
+vn 0.3584 0.9217 -0.1484
+vn 0.9622 0.1939 -0.1914
+vn 0.7459 -0.6494 -0.1484
+vn 0.8173 0.5528 -0.1626
+vn 0.9070 0.3805 -0.1804
+vn 0.5490 0.8286 -0.1092
+vn 0.6965 0.7041 -0.1385
+vn 0.1785 0.9833 -0.0355
+vn 0.3804 0.9217 -0.0757
+vn 0.9810 0.1939 0.0000
+vn 0.7605 -0.6494 0.0000
+vn 0.8333 0.5528 0.0000
+vn 0.9248 0.3805 -0.0000
+vn 0.5598 0.8286 -0.0000
+vn 0.7101 0.7041 0.0000
+vn 0.1820 0.9833 0.0000
+vn 0.3879 0.9217 0.0000
+vn 0.9622 0.1939 0.1914
+vn 0.7459 -0.6494 0.1484
+vn 0.8173 0.5528 0.1626
+vn 0.9070 0.3805 0.1804
+vn 0.5490 0.8286 0.1092
+vn 0.6965 0.7041 0.1385
+vn 0.1785 0.9833 0.0355
+vn 0.3804 0.9217 0.0757
+vn 0.9063 0.1939 0.3754
+vn 0.7026 -0.6494 0.2910
+vn 0.7699 0.5528 0.3189
+vn 0.8544 0.3805 0.3539
+vn 0.5172 0.8286 0.2142
+vn 0.6561 0.7041 0.2718
+vn 0.1681 0.9833 0.0696
+vn 0.3584 0.9217 0.1484
+vn 0.8157 0.1939 0.5450
+vn 0.6323 -0.6494 0.4225
+vn 0.6929 0.5528 0.4630
+vn 0.7689 0.3805 0.5138
+vn 0.4654 0.8286 0.3110
+vn 0.5905 0.7041 0.3945
+vn 0.1513 0.9833 0.1011
+vn 0.3225 0.9217 0.2155
+vn 0.6937 0.1939 0.6937
+vn 0.5377 -0.6494 0.5377
+vn 0.5893 0.5528 0.5893
+vn 0.6539 0.3805 0.6539
+vn 0.3958 0.8286 0.3958
+vn 0.5021 0.7041 0.5021
+vn 0.1287 0.9833 0.1287
+vn 0.2743 0.9217 0.2743
+vn 0.5450 0.1939 0.8157
+vn 0.4225 -0.6494 0.6323
+vn 0.4630 0.5528 0.6929
+vn 0.5138 0.3805 0.7689
+vn 0.3110 0.8286 0.4654
+vn 0.3945 0.7041 0.5905
+vn 0.1011 0.9833 0.1513
+vn 0.2155 0.9217 0.3225
+vn 0.3754 0.1939 0.9063
+vn 0.2910 -0.6494 0.7026
+vn 0.3189 0.5528 0.7699
+vn 0.3539 0.3805 0.8544
+vn 0.2142 0.8286 0.5172
+vn 0.2718 0.7041 0.6561
+vn 0.0696 0.9833 0.1681
+vn 0.1484 0.9217 0.3584
+vn 0.1914 0.1939 0.9622
+vn 0.1484 -0.6494 0.7459
+vn 0.1626 0.5528 0.8173
+vn 0.1804 0.3805 0.9070
+vn 0.1092 0.8286 0.5490
+vn 0.1385 0.7041 0.6965
+vn 0.0355 0.9833 0.1785
+vn 0.0757 0.9217 0.3804
+vn -0.0000 0.1939 0.9810
+vn 0.0000 -0.6494 0.7605
+vn -0.0000 0.5528 0.8333
+vn 0.0000 0.3805 0.9248
+vn 0.0000 0.8286 0.5598
+vn 0.0000 0.7041 0.7101
+vn 0.0000 0.9833 0.1820
+vn -0.0000 0.9217 0.3879
+vn -0.1914 0.1939 0.9622
+vn -0.1484 -0.6494 0.7459
+vn -0.1626 0.5528 0.8173
+vn -0.1804 0.3805 0.9070
+vn -0.1092 0.8286 0.5490
+vn -0.1385 0.7041 0.6965
+vn -0.0355 0.9833 0.1785
+vn -0.0757 0.9217 0.3804
+vn -0.3754 0.1939 0.9063
+vn -0.2910 -0.6494 0.7026
+vn -0.3189 0.5528 0.7699
+vn -0.3539 0.3805 0.8544
+vn -0.2142 0.8286 0.5172
+vn -0.2718 0.7041 0.6561
+vn -0.0696 0.9833 0.1681
+vn -0.1484 0.9217 0.3584
+vn -0.5450 0.1939 0.8157
+vn -0.4225 -0.6494 0.6323
+vn -0.4630 0.5528 0.6929
+vn -0.5138 0.3805 0.7689
+vn -0.3110 0.8286 0.4654
+vn -0.3945 0.7041 0.5905
+vn -0.1011 0.9833 0.1513
+vn -0.2155 0.9217 0.3225
+vn -0.6937 0.1939 0.6937
+vn -0.5377 -0.6494 0.5377
+vn -0.5893 0.5528 0.5893
+vn -0.6539 0.3805 0.6539
+vn -0.3958 0.8286 0.3958
+vn -0.5021 0.7041 0.5021
+vn -0.1287 0.9833 0.1287
+vn -0.2743 0.9217 0.2743
+vn -0.8157 0.1939 0.5450
+vn -0.6323 -0.6494 0.4225
+vn -0.6929 0.5528 0.4630
+vn -0.7689 0.3805 0.5138
+vn -0.4654 0.8286 0.3110
+vn -0.5905 0.7041 0.3945
+vn -0.1513 0.9833 0.1011
+vn -0.3225 0.9217 0.2155
+vn -0.9063 0.1939 0.3754
+vn -0.7026 -0.6494 0.2910
+vn -0.7699 0.5528 0.3189
+vn -0.8544 0.3805 0.3539
+vn -0.5172 0.8286 0.2142
+vn -0.6561 0.7041 0.2718
+vn -0.1681 0.9833 0.0696
+vn -0.3584 0.9217 0.1484
+vn -0.9622 0.1939 0.1914
+vn -0.7459 -0.6494 0.1484
+vn -0.8173 0.5528 0.1626
+vn -0.9070 0.3805 0.1804
+vn -0.5490 0.8286 0.1092
+vn -0.6965 0.7041 0.1385
+vn -0.1785 0.9833 0.0355
+vn -0.3804 0.9217 0.0757
+vn -0.0296 0.9995 0.0059
+vn -0.0302 0.9995 0.0000
+vn -0.0279 0.9995 0.0116
+vn -0.0251 0.9995 0.0168
+vn -0.0214 0.9995 0.0214
+vn -0.0168 0.9995 0.0251
+vn -0.0116 0.9995 0.0279
+vn -0.0059 0.9995 0.0296
+vn 0.0000 0.9995 0.0302
+vn 0.0059 0.9995 0.0296
+vn 0.0116 0.9995 0.0279
+vn 0.0168 0.9995 0.0251
+vn 0.0214 0.9995 0.0214
+vn 0.0251 0.9995 0.0168
+vn 0.0279 0.9995 0.0116
+vn 0.0296 0.9995 0.0059
+vn 0.0302 0.9995 0.0000
+vn 0.0296 0.9995 -0.0059
+vn 0.0279 0.9995 -0.0116
+vn 0.0251 0.9995 -0.0168
+vn 0.0214 0.9995 -0.0214
+vn 0.0168 0.9995 -0.0251
+vn 0.0116 0.9995 -0.0279
+vn 0.0059 0.9995 -0.0296
+vn 0.0000 0.9995 -0.0302
+vn -0.0059 0.9995 -0.0296
+vn -0.0116 0.9995 -0.0279
+vn -0.0168 0.9995 -0.0251
+vn -0.0214 0.9995 -0.0214
+vn -0.0251 0.9995 -0.0168
+vn -0.0279 0.9995 -0.0116
+vn -0.0296 0.9995 -0.0059
+usemtl None
+s 1
+f 1/1/1 2/2/2 3/3/3 4/4/4
+f 5/5/5 6/6/6 7/7/7 8/8/8
+f 9/9/9 10/10/10 11/11/11 12/12/12
+f 13/13/13 1/1/1 4/4/4 14/14/14
+f 2/2/2 5/5/5 8/8/8 3/3/3
+f 15/15/15 9/9/9 12/12/12 16/16/16
+f 10/10/10 13/13/13 14/14/14 11/11/11
+f 16/16/16 12/12/12 17/17/17 18/18/18
+f 11/11/11 14/14/14 19/19/19 20/20/20
+f 4/4/4 3/3/3 21/21/21 22/22/22
+f 8/8/8 7/7/7 23/23/23 24/24/24
+f 12/12/12 11/11/11 20/20/20 17/17/17
+f 14/14/14 4/4/4 22/22/22 19/19/19
+f 3/3/3 8/8/8 24/24/24 21/21/21
+f 18/18/18 17/17/17 25/25/25 26/26/26
+f 20/20/20 19/19/19 27/27/27 28/28/28
+f 22/22/22 21/21/21 29/29/29 30/30/30
+f 24/24/24 23/23/23 31/31/31 32/32/32
+f 17/17/17 20/20/20 28/28/28 25/25/25
+f 19/19/19 22/22/22 30/30/30 27/27/27
+f 21/21/21 24/24/24 32/32/32 29/29/29
+f 26/26/26 25/25/25 33/33/33 34/34/34
+f 28/28/28 27/27/27 35/35/35 36/36/36
+f 30/30/30 29/29/29 37/37/37 38/38/38
+f 32/32/32 31/31/31 39/39/39 40/40/40
+f 25/25/25 28/28/28 36/36/36 33/33/33
+f 27/27/27 30/30/30 38/38/38 35/35/35
+f 29/29/29 32/32/32 40/40/40 37/37/37
+f 34/34/34 33/33/33 41/41/41 42/42/42
+f 36/36/36 35/35/35 43/43/43 44/44/44
+f 38/38/38 37/37/37 45/45/45 46/46/46
+f 40/40/40 39/39/39 47/47/47 48/48/48
+f 33/33/33 36/36/36 44/44/44 41/41/41
+f 35/35/35 38/38/38 46/46/46 43/43/43
+f 37/37/37 40/40/40 48/48/48 45/45/45
+f 42/42/42 41/41/41 49/49/49 50/50/50
+f 44/44/44 43/43/43 51/51/51 52/52/52
+f 46/46/46 45/45/45 53/53/53 54/54/54
+f 48/48/48 47/47/47 55/55/55 56/56/56
+f 41/41/41 44/44/44 52/52/52 49/49/49
+f 43/43/43 46/46/46 54/54/54 51/51/51
+f 45/45/45 48/48/48 56/56/56 53/53/53
+f 50/50/50 49/49/49 57/57/57 58/58/58
+f 52/52/52 51/51/51 59/59/59 60/60/60
+f 54/54/54 53/53/53 61/61/61 62/62/62
+f 56/56/56 55/55/55 63/63/63 64/64/64
+f 49/49/49 52/52/52 60/60/60 57/57/57
+f 51/51/51 54/54/54 62/62/62 59/59/59
+f 53/53/53 56/56/56 64/64/64 61/61/61
+f 58/65/58 57/66/57 65/67/65 66/68/66
+f 60/69/60 59/70/59 67/71/67 68/72/68
+f 62/73/62 61/74/61 69/75/69 70/76/70
+f 64/77/64 63/78/63 71/79/71 72/80/72
+f 57/66/57 60/69/60 68/72/68 65/67/65
+f 59/70/59 62/73/62 70/76/70 67/71/67
+f 61/74/61 64/77/64 72/80/72 69/75/69
+f 66/68/66 65/67/65 73/81/73 74/82/74
+f 68/72/68 67/71/67 75/83/75 76/84/76
+f 70/76/70 69/75/69 77/85/77 78/86/78
+f 72/80/72 71/79/71 79/87/79 80/88/80
+f 65/67/65 68/72/68 76/84/76 73/81/73
+f 67/71/67 70/76/70 78/86/78 75/83/75
+f 69/75/69 72/80/72 80/88/80 77/85/77
+f 74/82/74 73/81/73 81/89/81 82/90/82
+f 76/84/76 75/83/75 83/91/83 84/92/84
+f 78/86/78 77/85/77 85/93/85 86/94/86
+f 80/88/80 79/87/79 87/95/87 88/96/88
+f 73/81/73 76/84/76 84/92/84 81/89/81
+f 75/83/75 78/86/78 86/94/86 83/91/83
+f 77/85/77 80/88/80 88/96/88 85/93/85
+f 82/90/82 81/89/81 89/97/89 90/98/90
+f 84/92/84 83/91/83 91/99/91 92/100/92
+f 86/94/86 85/93/85 93/101/93 94/102/94
+f 88/96/88 87/95/87 95/103/95 96/104/96
+f 81/89/81 84/92/84 92/100/92 89/97/89
+f 83/91/83 86/94/86 94/102/94 91/99/91
+f 85/93/85 88/96/88 96/104/96 93/101/93
+f 90/98/90 89/97/89 97/105/97 98/106/98
+f 92/100/92 91/99/91 99/107/99 100/108/100
+f 94/102/94 93/101/93 101/109/101 102/110/102
+f 96/104/96 95/103/95 103/111/103 104/112/104
+f 89/97/89 92/100/92 100/108/100 97/105/97
+f 91/99/91 94/102/94 102/110/102 99/107/99
+f 93/101/93 96/104/96 104/112/104 101/109/101
+f 98/106/98 97/105/97 105/113/105 106/114/106
+f 100/108/100 99/107/99 107/115/107 108/116/108
+f 102/110/102 101/109/101 109/117/109 110/118/110
+f 104/112/104 103/111/103 111/119/111 112/120/112
+f 97/105/97 100/108/100 108/116/108 105/113/105
+f 99/107/99 102/110/102 110/118/110 107/115/107
+f 101/109/101 104/112/104 112/120/112 109/117/109
+f 106/114/106 105/113/105 113/121/113 114/122/114
+f 108/116/108 107/115/107 115/123/115 116/124/116
+f 110/118/110 109/117/109 117/125/117 118/126/118
+f 112/120/112 111/119/111 119/127/119 120/128/120
+f 105/113/105 108/116/108 116/124/116 113/121/113
+f 107/115/107 110/118/110 118/126/118 115/123/115
+f 109/117/109 112/120/112 120/128/120 117/125/117
+f 114/122/114 113/121/113 121/129/121 122/130/122
+f 116/124/116 115/123/115 123/131/123 124/132/124
+f 118/126/118 117/125/117 125/133/125 126/134/126
+f 120/128/120 119/127/119 127/135/127 128/136/128
+f 113/121/113 116/124/116 124/132/124 121/129/121
+f 115/123/115 118/126/118 126/134/126 123/131/123
+f 117/125/117 120/128/120 128/136/128 125/133/125
+f 122/130/122 121/129/121 129/137/129 130/138/130
+f 124/132/124 123/131/123 131/139/131 132/140/132
+f 126/134/126 125/133/125 133/141/133 134/142/134
+f 128/136/128 127/135/127 135/143/135 136/144/136
+f 121/129/121 124/132/124 132/140/132 129/137/129
+f 123/131/123 126/134/126 134/142/134 131/139/131
+f 125/133/125 128/136/128 136/144/136 133/141/133
+f 130/138/130 129/137/129 137/145/137 138/146/138
+f 132/140/132 131/139/131 139/147/139 140/148/140
+f 134/142/134 133/141/133 141/149/141 142/150/142
+f 136/144/136 135/143/135 143/151/143 144/152/144
+f 129/137/129 132/140/132 140/148/140 137/145/137
+f 131/139/131 134/142/134 142/150/142 139/147/139
+f 133/141/133 136/144/136 144/152/144 141/149/141
+f 138/146/138 137/145/137 145/153/145 146/154/146
+f 140/148/140 139/147/139 147/155/147 148/156/148
+f 142/150/142 141/149/141 149/157/149 150/158/150
+f 144/152/144 143/151/143 151/159/151 152/160/152
+f 137/145/137 140/148/140 148/156/148 145/153/145
+f 139/147/139 142/150/142 150/158/150 147/155/147
+f 141/149/141 144/152/144 152/160/152 149/157/149
+f 146/154/146 145/153/145 153/161/153 154/162/154
+f 148/156/148 147/155/147 155/163/155 156/164/156
+f 150/158/150 149/157/149 157/165/157 158/166/158
+f 152/160/152 151/159/151 159/167/159 160/168/160
+f 145/153/145 148/156/148 156/164/156 153/161/153
+f 147/155/147 150/158/150 158/166/158 155/163/155
+f 149/157/149 152/160/152 160/168/160 157/165/157
+f 154/162/154 153/161/153 161/169/161 162/170/162
+f 156/164/156 155/163/155 163/171/163 164/172/164
+f 158/166/158 157/165/157 165/173/165 166/174/166
+f 160/168/160 159/167/159 167/175/167 168/176/168
+f 153/161/153 156/164/156 164/172/164 161/169/161
+f 155/163/155 158/166/158 166/174/166 163/171/163
+f 157/165/157 160/168/160 168/176/168 165/173/165
+f 162/170/162 161/169/161 169/177/169 170/178/170
+f 164/172/164 163/171/163 171/179/171 172/180/172
+f 166/174/166 165/173/165 173/181/173 174/182/174
+f 168/176/168 167/175/167 175/183/175 176/184/176
+f 161/169/161 164/172/164 172/180/172 169/177/169
+f 163/171/163 166/174/166 174/182/174 171/179/171
+f 165/173/165 168/176/168 176/184/176 173/181/173
+f 170/178/170 169/177/169 177/185/177 178/186/178
+f 172/180/172 171/179/171 179/187/179 180/188/180
+f 174/182/174 173/181/173 181/189/181 182/190/182
+f 176/184/176 175/183/175 183/191/183 184/192/184
+f 169/177/169 172/180/172 180/188/180 177/185/177
+f 171/179/171 174/182/174 182/190/182 179/187/179
+f 173/181/173 176/184/176 184/192/184 181/189/181
+f 178/186/178 177/185/177 185/193/185 186/194/186
+f 180/188/180 179/187/179 187/195/187 188/196/188
+f 182/190/182 181/189/181 189/197/189 190/198/190
+f 184/192/184 183/191/183 191/199/191 192/200/192
+f 177/185/177 180/188/180 188/196/188 185/193/185
+f 179/187/179 182/190/182 190/198/190 187/195/187
+f 181/189/181 184/192/184 192/200/192 189/197/189
+f 186/201/186 185/202/185 193/203/193 194/204/194
+f 188/205/188 187/206/187 195/207/195 196/208/196
+f 190/209/190 189/210/189 197/211/197 198/212/198
+f 192/213/192 191/214/191 199/215/199 200/216/200
+f 185/202/185 188/205/188 196/208/196 193/203/193
+f 187/206/187 190/209/190 198/212/198 195/207/195
+f 189/210/189 192/213/192 200/216/200 197/211/197
+f 194/204/194 193/203/193 201/217/201 202/218/202
+f 196/208/196 195/207/195 203/219/203 204/220/204
+f 198/212/198 197/211/197 205/221/205 206/222/206
+f 200/216/200 199/215/199 207/223/207 208/224/208
+f 193/203/193 196/208/196 204/220/204 201/217/201
+f 195/207/195 198/212/198 206/222/206 203/219/203
+f 197/211/197 200/216/200 208/224/208 205/221/205
+f 202/218/202 201/217/201 209/225/209 210/226/210
+f 204/220/204 203/219/203 211/227/211 212/228/212
+f 206/222/206 205/221/205 213/229/213 214/230/214
+f 208/224/208 207/223/207 215/231/215 216/232/216
+f 201/217/201 204/220/204 212/228/212 209/225/209
+f 203/219/203 206/222/206 214/230/214 211/227/211
+f 205/221/205 208/224/208 216/232/216 213/229/213
+f 210/226/210 209/225/209 217/233/217 218/234/218
+f 212/228/212 211/227/211 219/235/219 220/236/220
+f 214/230/214 213/229/213 221/237/221 222/238/222
+f 216/232/216 215/231/215 223/239/223 224/240/224
+f 209/225/209 212/228/212 220/236/220 217/233/217
+f 211/227/211 214/230/214 222/238/222 219/235/219
+f 213/229/213 216/232/216 224/240/224 221/237/221
+f 218/234/218 217/233/217 225/241/225 226/242/226
+f 220/236/220 219/235/219 227/243/227 228/244/228
+f 222/238/222 221/237/221 229/245/229 230/246/230
+f 224/240/224 223/239/223 231/247/231 232/248/232
+f 217/233/217 220/236/220 228/244/228 225/241/225
+f 219/235/219 222/238/222 230/246/230 227/243/227
+f 221/237/221 224/240/224 232/248/232 229/245/229
+f 226/242/226 225/241/225 233/249/233 234/250/234
+f 228/244/228 227/243/227 235/251/235 236/252/236
+f 230/246/230 229/245/229 237/253/237 238/254/238
+f 232/248/232 231/247/231 239/255/239 240/256/240
+f 225/241/225 228/244/228 236/252/236 233/249/233
+f 227/243/227 230/246/230 238/254/238 235/251/235
+f 229/245/229 232/248/232 240/256/240 237/253/237
+f 234/250/234 233/249/233 241/257/241 242/258/242
+f 236/252/236 235/251/235 243/259/243 244/260/244
+f 238/254/238 237/253/237 245/261/245 246/262/246
+f 240/256/240 239/255/239 247/263/247 248/264/248
+f 233/249/233 236/252/236 244/260/244 241/257/241
+f 235/251/235 238/254/238 246/262/246 243/259/243
+f 237/253/237 240/256/240 248/264/248 245/261/245
+f 242/258/242 241/257/241 249/265/249 250/266/250
+f 244/260/244 243/259/243 251/267/251 252/268/252
+f 246/262/246 245/261/245 253/269/253 254/270/254
+f 248/264/248 247/263/247 255/271/255 256/272/256
+f 241/257/241 244/260/244 252/268/252 249/265/249
+f 243/259/243 246/262/246 254/270/254 251/267/251
+f 245/261/245 248/264/248 256/272/256 253/269/253
+f 250/266/250 249/265/249 9/9/9 15/15/15
+f 252/268/252 251/267/251 13/13/13 10/10/10
+f 254/270/254 253/269/253 2/2/2 1/1/1
+f 256/272/256 255/271/255 6/6/6 5/5/5
+f 249/265/249 252/268/252 10/10/10 9/9/9
+f 251/267/251 254/270/254 1/1/1 13/13/13
+f 253/269/253 256/272/256 5/5/5 2/2/2
+f 255/271/255 257/273/257 258/274/258 6/6/6
+f 247/263/247 259/275/259 257/273/257 255/271/255
+f 239/255/239 260/276/260 259/275/259 247/263/247
+f 231/247/231 261/277/261 260/276/260 239/255/239
+f 223/239/223 262/278/262 261/277/261 231/247/231
+f 215/231/215 263/279/263 262/278/262 223/239/223
+f 207/223/207 264/280/264 263/279/263 215/231/215
+f 199/215/199 265/281/265 264/280/264 207/223/207
+f 191/214/191 266/282/266 265/281/265 199/215/199
+f 183/191/183 267/283/267 266/284/266 191/199/191
+f 175/183/175 268/285/268 267/283/267 183/191/183
+f 167/175/167 269/286/269 268/285/268 175/183/175
+f 159/167/159 270/287/270 269/286/269 167/175/167
+f 151/159/151 271/288/271 270/287/270 159/167/159
+f 143/151/143 272/289/272 271/288/271 151/159/151
+f 135/143/135 273/290/273 272/289/272 143/151/143
+f 127/135/127 274/291/274 273/290/273 135/143/135
+f 119/127/119 275/292/275 274/291/274 127/135/127
+f 111/119/111 276/293/276 275/292/275 119/127/119
+f 103/111/103 277/294/277 276/293/276 111/119/111
+f 95/103/95 278/295/278 277/294/277 103/111/103
+f 87/95/87 279/296/279 278/295/278 95/103/95
+f 79/87/79 280/297/280 279/296/279 87/95/87
+f 71/79/71 281/298/281 280/297/280 79/87/79
+f 63/78/63 282/299/282 281/298/281 71/79/71
+f 55/55/55 283/300/283 282/301/282 63/63/63
+f 47/47/47 284/302/284 283/300/283 55/55/55
+f 39/39/39 285/303/285 284/302/284 47/47/47
+f 31/31/31 286/304/286 285/303/285 39/39/39
+f 23/23/23 287/305/287 286/304/286 31/31/31
+f 7/7/7 288/306/288 287/305/287 23/23/23
+f 6/6/6 258/274/258 288/306/288 7/7/7
+f 257/307/257 259/308/259 260/309/260 261/310/261 262/311/262 263/312/263 264/313/264 265/314/265 266/315/266 267/316/267 268/317/268 269/318/269 270/319/270 271/320/271 272/321/272 273/322/273 274/323/274 275/324/275 276/325/276 277/326/277 278/327/278 279/328/279 280/329/280 281/330/281 282/331/282 283/332/283 284/333/284 285/334/285 286/335/286 287/336/287 288/337/288 258/338/258
+f 15/339/15 16/340/16 18/341/18 26/342/26 34/343/34 42/344/42 50/345/50 58/346/58 66/347/66 74/348/74 82/349/82 90/350/90 98/351/98 106/352/106 114/353/114 122/354/122 130/355/130 138/356/138 146/357/146 154/358/154 162/359/162 170/360/170 178/361/178 186/362/186 194/363/194 202/364/202 210/365/210 218/366/218 226/367/226 234/368/234 242/369/242 250/370/250
diff --git a/technic/models/technic_sphere_quarter.obj b/technic/models/technic_sphere_quarter.obj
new file mode 100644
index 0000000..eed20a2
--- /dev/null
+++ b/technic/models/technic_sphere_quarter.obj
@@ -0,0 +1,699 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_sphere_quarter.mtl
+o Sphere.004
+v 0.013156 -0.004804 -0.499882
+v 0.000000 -0.500000 -0.500000
+v -0.013160 -0.004804 -0.499926
+v 0.097545 -0.009607 -0.500000
+v -0.097545 -0.009607 -0.500000
+v 0.191342 -0.038060 -0.500000
+v -0.191342 -0.038060 -0.500000
+v 0.277785 -0.084265 -0.500000
+v -0.277785 -0.084265 -0.500000
+v 0.353554 -0.146447 -0.500000
+v -0.353553 -0.146447 -0.500000
+v 0.415735 -0.222215 -0.500000
+v -0.415735 -0.222215 -0.500000
+v 0.461940 -0.308658 -0.500000
+v -0.461940 -0.308658 -0.500000
+v 0.490393 -0.402455 -0.500000
+v -0.490393 -0.402455 -0.500000
+v 0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.490392 -0.500000 -0.402455
+v 0.490393 -0.500000 -0.402455
+v 0.097545 -0.500000 -0.009607
+v 0.000000 -0.500000 -0.000000
+v -0.461939 -0.500000 -0.308658
+v 0.461940 -0.500000 -0.308658
+v 0.415735 -0.500000 -0.222215
+v -0.415735 -0.500000 -0.222215
+v 0.353553 -0.500000 -0.146447
+v -0.353553 -0.500000 -0.146447
+v 0.277785 -0.500000 -0.084265
+v -0.277785 -0.500000 -0.084265
+v 0.191342 -0.500000 -0.038060
+v -0.191342 -0.500000 -0.038060
+v -0.097545 -0.500000 -0.009607
+v 0.480970 -0.402455 -0.404329
+v 0.407747 -0.222215 -0.418894
+v 0.453064 -0.308658 -0.409880
+v 0.272448 -0.084265 -0.445807
+v 0.346760 -0.146447 -0.431025
+v 0.095671 -0.009607 -0.480970
+v 0.187665 -0.038060 -0.462671
+v 0.453064 -0.402455 -0.312335
+v 0.384089 -0.222215 -0.340905
+v 0.426777 -0.308658 -0.323223
+v 0.256640 -0.084265 -0.393696
+v 0.326641 -0.146447 -0.364701
+v 0.090120 -0.009607 -0.462671
+v 0.176777 -0.038060 -0.426777
+v 0.407747 -0.402455 -0.227552
+v 0.345671 -0.222215 -0.269030
+v 0.384089 -0.308658 -0.243360
+v 0.230970 -0.084265 -0.345671
+v 0.293969 -0.146447 -0.303576
+v 0.081106 -0.009607 -0.445807
+v 0.159095 -0.038060 -0.393696
+v 0.346760 -0.402455 -0.153240
+v 0.293969 -0.222215 -0.206031
+v 0.326641 -0.308658 -0.173359
+v 0.196424 -0.084265 -0.303576
+v 0.250000 -0.146447 -0.250000
+v 0.068975 -0.009607 -0.431025
+v 0.135299 -0.038060 -0.364701
+v 0.272448 -0.402455 -0.092254
+v 0.230970 -0.222215 -0.154329
+v 0.256640 -0.308658 -0.115911
+v 0.154329 -0.084265 -0.269030
+v 0.196424 -0.146447 -0.206031
+v 0.054193 -0.009607 -0.418894
+v 0.106304 -0.038060 -0.340905
+v 0.187665 -0.402455 -0.046936
+v 0.159095 -0.222215 -0.115911
+v 0.176777 -0.308658 -0.073223
+v 0.106304 -0.084265 -0.243360
+v 0.135299 -0.146447 -0.173359
+v 0.037329 -0.009607 -0.409880
+v 0.073223 -0.038060 -0.323223
+v 0.095671 -0.402455 -0.019030
+v 0.081106 -0.222215 -0.092254
+v 0.090120 -0.308658 -0.046936
+v 0.054193 -0.084265 -0.227552
+v 0.068975 -0.146447 -0.153240
+v 0.019030 -0.009607 -0.404329
+v 0.037329 -0.038060 -0.312335
+v 0.000000 -0.402455 -0.009608
+v 0.000000 -0.222215 -0.084265
+v 0.000000 -0.308658 -0.038060
+v 0.000000 -0.084265 -0.222215
+v 0.000000 -0.146447 -0.146447
+v 0.000000 -0.009607 -0.402455
+v 0.000000 -0.038060 -0.308658
+v -0.095671 -0.402455 -0.019030
+v -0.081106 -0.222215 -0.092254
+v -0.090120 -0.308658 -0.046936
+v -0.054193 -0.084265 -0.227552
+v -0.068975 -0.146447 -0.153240
+v -0.019030 -0.009607 -0.404329
+v -0.037329 -0.038060 -0.312335
+v -0.187665 -0.402455 -0.046937
+v -0.159095 -0.222215 -0.115911
+v -0.176777 -0.308658 -0.073223
+v -0.106304 -0.084265 -0.243360
+v -0.135299 -0.146447 -0.173359
+v -0.037329 -0.009607 -0.409880
+v -0.073223 -0.038060 -0.323223
+v -0.272447 -0.402455 -0.092254
+v -0.230970 -0.222215 -0.154329
+v -0.256640 -0.308658 -0.115911
+v -0.154329 -0.084265 -0.269030
+v -0.196424 -0.146447 -0.206031
+v -0.054193 -0.009607 -0.418894
+v -0.106304 -0.038060 -0.340905
+v -0.346760 -0.402455 -0.153240
+v -0.293969 -0.222215 -0.206031
+v -0.326641 -0.308658 -0.173359
+v -0.196424 -0.084265 -0.303576
+v -0.250000 -0.146447 -0.250000
+v -0.068975 -0.009607 -0.431025
+v -0.135299 -0.038060 -0.364701
+v -0.407746 -0.402455 -0.227553
+v -0.345671 -0.222215 -0.269030
+v -0.384089 -0.308658 -0.243360
+v -0.230970 -0.084265 -0.345671
+v -0.293969 -0.146447 -0.303576
+v -0.081106 -0.009607 -0.445807
+v -0.159095 -0.038060 -0.393696
+v -0.453063 -0.402455 -0.312335
+v -0.384089 -0.222215 -0.340905
+v -0.426776 -0.308658 -0.323223
+v -0.256640 -0.084265 -0.393696
+v -0.326641 -0.146447 -0.364701
+v -0.090120 -0.009607 -0.462671
+v -0.176776 -0.038060 -0.426777
+v -0.480969 -0.402455 -0.404329
+v -0.407746 -0.222215 -0.418894
+v -0.453063 -0.308658 -0.409880
+v -0.272447 -0.084265 -0.445807
+v -0.346760 -0.146447 -0.431025
+v -0.095671 -0.009607 -0.480970
+v -0.187665 -0.038060 -0.462671
+v -0.012914 -0.004804 -0.497431
+v -0.012165 -0.004804 -0.494961
+v -0.010948 -0.004804 -0.492685
+v -0.009311 -0.004804 -0.490689
+v -0.007315 -0.004804 -0.489052
+v -0.005039 -0.004804 -0.487835
+v -0.002569 -0.004804 -0.487086
+v 0.000000 -0.004804 -0.486833
+v 0.002569 -0.004804 -0.487086
+v 0.005039 -0.004804 -0.487835
+v 0.007316 -0.004804 -0.489052
+v 0.009311 -0.004804 -0.490689
+v 0.010948 -0.004804 -0.492685
+v 0.012165 -0.004804 -0.494961
+v 0.012915 -0.004804 -0.497431
+v 0.013168 -0.004804 -0.500000
+vt 0.486844 0.500000
+vt 0.500000 0.000000
+vt 0.513160 0.500000
+vt 0.402455 0.495150
+vt 0.597545 0.495150
+vt 0.308658 0.466421
+vt 0.691342 0.466421
+vt 0.222215 0.419768
+vt 0.777785 0.419768
+vt 0.146446 0.356983
+vt 0.853553 0.356983
+vt 0.084265 0.280480
+vt 0.915735 0.280480
+vt 0.038060 0.193198
+vt 0.961940 0.193198
+vt 0.009607 0.098491
+vt 0.990393 0.098491
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.009608 0.097545
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.990393 0.097545
+vt 0.597545 0.490393
+vt 0.500000 0.500000
+vt 0.038061 0.191342
+vt 0.961940 0.191342
+vt 0.915735 0.277785
+vt 0.084265 0.277785
+vt 0.853553 0.353553
+vt 0.146447 0.353553
+vt 0.777785 0.415735
+vt 0.222215 0.415735
+vt 0.691342 0.461940
+vt 0.308658 0.461940
+vt 0.402455 0.490393
+vt 0.437500 0.500000
+vt 0.437500 0.562500
+vt 0.375000 0.562500
+vt 0.375000 0.500000
+vt 0.437500 0.625000
+vt 0.437500 0.687500
+vt 0.375000 0.687500
+vt 0.375000 0.625000
+vt 0.437500 0.750000
+vt 0.437500 0.812500
+vt 0.375000 0.812500
+vt 0.375000 0.750000
+vt 0.437500 0.875000
+vt 0.437500 0.937500
+vt 0.375000 0.937500
+vt 0.375000 0.875000
+vt 0.312500 0.562500
+vt 0.312500 0.500000
+vt 0.312500 0.687500
+vt 0.312500 0.625000
+vt 0.312500 0.812500
+vt 0.312500 0.750000
+vt 0.312500 0.937500
+vt 0.312500 0.875000
+vt 0.250000 0.562500
+vt 0.250000 0.500000
+vt 0.250000 0.687500
+vt 0.250000 0.625000
+vt 0.250000 0.812500
+vt 0.250000 0.750000
+vt 0.250000 0.937500
+vt 0.250000 0.875000
+vt 0.187500 0.562500
+vt 0.187500 0.500000
+vt 0.187500 0.687500
+vt 0.187500 0.625000
+vt 0.187500 0.812500
+vt 0.187500 0.750000
+vt 0.187500 0.937500
+vt 0.187500 0.875000
+vt 0.125000 0.562500
+vt 0.125000 0.500000
+vt 0.125000 0.687500
+vt 0.125000 0.625000
+vt 0.125000 0.812500
+vt 0.125000 0.750000
+vt 0.125000 0.937500
+vt 0.125000 0.875000
+vt 0.062500 0.562500
+vt 0.062500 0.500000
+vt 0.062500 0.687500
+vt 0.062500 0.625000
+vt 0.062500 0.812500
+vt 0.062500 0.750000
+vt 0.062500 0.937500
+vt 0.062500 0.875000
+vt 0.000000 0.562500
+vt 0.000000 0.500000
+vt 0.000000 0.687500
+vt 0.000000 0.625000
+vt 0.000000 0.812500
+vt 0.000000 0.750000
+vt 0.000000 0.937500
+vt 0.000000 0.875000
+vt 1.000000 0.500000
+vt 1.000000 0.562500
+vt 0.937500 0.562500
+vt 0.937500 0.500000
+vt 1.000000 0.625000
+vt 1.000000 0.687500
+vt 0.937500 0.687500
+vt 0.937500 0.625000
+vt 1.000000 0.750000
+vt 1.000000 0.812500
+vt 0.937500 0.812500
+vt 0.937500 0.750000
+vt 1.000000 0.875000
+vt 1.000000 0.937500
+vt 0.937500 0.937500
+vt 0.937500 0.875000
+vt 0.875000 0.562500
+vt 0.875000 0.500000
+vt 0.875000 0.687500
+vt 0.875000 0.625000
+vt 0.875000 0.812500
+vt 0.875000 0.750000
+vt 0.875000 0.937500
+vt 0.875000 0.875000
+vt 0.812500 0.562500
+vt 0.812500 0.500000
+vt 0.812500 0.687500
+vt 0.812500 0.625000
+vt 0.812500 0.812500
+vt 0.812500 0.750000
+vt 0.812500 0.937500
+vt 0.812500 0.875000
+vt 0.750000 0.562500
+vt 0.750000 0.500000
+vt 0.750000 0.687500
+vt 0.750000 0.625000
+vt 0.750000 0.812500
+vt 0.750000 0.750000
+vt 0.750000 0.937500
+vt 0.750000 0.875000
+vt 0.687500 0.562500
+vt 0.687500 0.500000
+vt 0.687500 0.687500
+vt 0.687500 0.625000
+vt 0.687500 0.812500
+vt 0.687500 0.750000
+vt 0.687500 0.937500
+vt 0.687500 0.875000
+vt 0.625000 0.562500
+vt 0.625000 0.500000
+vt 0.625000 0.687500
+vt 0.625000 0.625000
+vt 0.625000 0.812500
+vt 0.625000 0.750000
+vt 0.625000 0.937500
+vt 0.625000 0.875000
+vt 0.562500 0.562500
+vt 0.562500 0.500000
+vt 0.562500 0.687500
+vt 0.562500 0.625000
+vt 0.562500 0.812500
+vt 0.562500 0.750000
+vt 0.562500 0.937500
+vt 0.562500 0.875000
+vt 0.500000 0.562500
+vt 0.500000 0.500000
+vt 0.500000 0.687500
+vt 0.500000 0.625000
+vt 0.500000 0.812500
+vt 0.500000 0.750000
+vt 0.500000 0.937500
+vt 0.500000 0.875000
+vt 0.437500 0.562500
+vt 0.437500 0.500000
+vt 0.437500 0.687500
+vt 0.437500 0.625000
+vt 0.437500 0.812500
+vt 0.437500 0.750000
+vt 0.437500 0.937500
+vt 0.437500 0.875000
+vt 0.500000 1.000000
+vt 0.437500 1.000000
+vt 0.562500 1.000000
+vt 0.625000 1.000000
+vt 0.687500 1.000000
+vt 0.750000 1.000000
+vt 0.812500 1.000000
+vt 0.875000 1.000000
+vt 0.937500 1.000000
+vt 1.000000 1.000000
+vt 0.062500 1.000000
+vt -0.000000 1.000000
+vt 0.125000 1.000000
+vt 0.187500 1.000000
+vt 0.250000 1.000000
+vt 0.312500 1.000000
+vt 0.375000 1.000000
+vt 0.437500 1.000000
+vt 0.434642 1.000000
+vt 0.031303 0.999906
+vt 0.037377 0.999307
+vt 0.043218 0.997535
+vt 0.048601 0.994658
+vt 0.053319 0.990786
+vt 0.057192 0.986068
+vt 0.060069 0.980685
+vt 0.061841 0.974844
+vt 0.062439 0.968769
+vt 0.061841 0.962695
+vt 0.060069 0.956854
+vt 0.057192 0.951471
+vt 0.053319 0.946753
+vt 0.048601 0.942881
+vt 0.043218 0.940004
+vt 0.037644 0.938313
+vt 0.025579 0.999342
+vn 0.0017 0.0002 -1.0000
+vn -0.0014 0.0003 -1.0000
+vn 0.0009 0.0002 -1.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 -1.0000 0.0000
+vn 0.9904 0.0975 0.0975
+vn 0.9765 0.1930 0.0962
+vn 0.9622 0.1939 0.1914
+vn 0.9761 0.0980 0.1942
+vn 0.9210 0.3790 0.0907
+vn 0.8305 0.5509 0.0818
+vn 0.8173 0.5528 0.1626
+vn 0.9070 0.3805 0.1804
+vn 0.7084 0.7023 0.0698
+vn 0.5589 0.8274 0.0550
+vn 0.5490 0.8286 0.1092
+vn 0.6965 0.7041 0.1385
+vn 0.3876 0.9210 0.0382
+vn 0.1819 0.9831 0.0179
+vn 0.1785 0.9833 0.0355
+vn 0.3804 0.9217 0.0757
+vn 0.9063 0.1939 0.3754
+vn 0.9194 0.0980 0.3808
+vn 0.7699 0.5528 0.3189
+vn 0.8544 0.3805 0.3539
+vn 0.5172 0.8286 0.2142
+vn 0.6561 0.7041 0.2718
+vn 0.1681 0.9833 0.0696
+vn 0.3584 0.9217 0.1484
+vn 0.8157 0.1939 0.5450
+vn 0.8275 0.0980 0.5529
+vn 0.6929 0.5528 0.4630
+vn 0.7689 0.3805 0.5138
+vn 0.4654 0.8286 0.3110
+vn 0.5905 0.7041 0.3945
+vn 0.1513 0.9833 0.1011
+vn 0.3225 0.9217 0.2155
+vn 0.6937 0.1939 0.6937
+vn 0.7037 0.0980 0.7037
+vn 0.5893 0.5528 0.5893
+vn 0.6539 0.3805 0.6539
+vn 0.3958 0.8286 0.3958
+vn 0.5021 0.7041 0.5021
+vn 0.1287 0.9833 0.1287
+vn 0.2743 0.9217 0.2743
+vn 0.5450 0.1939 0.8157
+vn 0.5529 0.0980 0.8275
+vn 0.4630 0.5528 0.6929
+vn 0.5138 0.3805 0.7689
+vn 0.3110 0.8286 0.4654
+vn 0.3945 0.7041 0.5905
+vn 0.1011 0.9833 0.1513
+vn 0.2155 0.9217 0.3225
+vn 0.3754 0.1939 0.9063
+vn 0.3808 0.0980 0.9194
+vn 0.3189 0.5528 0.7699
+vn 0.3539 0.3805 0.8544
+vn 0.2142 0.8286 0.5172
+vn 0.2718 0.7041 0.6561
+vn 0.0696 0.9833 0.1681
+vn 0.1484 0.9217 0.3584
+vn 0.1914 0.1939 0.9622
+vn 0.1941 0.0980 0.9761
+vn 0.1626 0.5528 0.8173
+vn 0.1804 0.3805 0.9070
+vn 0.1092 0.8286 0.5490
+vn 0.1385 0.7041 0.6965
+vn 0.0355 0.9833 0.1785
+vn 0.0757 0.9217 0.3804
+vn 0.0000 0.1939 0.9810
+vn 0.0000 0.0980 0.9952
+vn 0.0000 0.5528 0.8333
+vn 0.0000 0.3805 0.9248
+vn -0.0000 0.8286 0.5598
+vn -0.0000 0.7041 0.7101
+vn 0.0000 0.9833 0.1820
+vn 0.0000 0.9217 0.3879
+vn -0.1914 0.1939 0.9622
+vn -0.1942 0.0980 0.9761
+vn -0.1626 0.5528 0.8173
+vn -0.1804 0.3805 0.9070
+vn -0.1092 0.8286 0.5490
+vn -0.1385 0.7041 0.6965
+vn -0.0355 0.9833 0.1785
+vn -0.0757 0.9217 0.3804
+vn -0.3754 0.1939 0.9063
+vn -0.3808 0.0980 0.9194
+vn -0.3189 0.5528 0.7699
+vn -0.3539 0.3805 0.8544
+vn -0.2142 0.8286 0.5172
+vn -0.2718 0.7041 0.6561
+vn -0.0696 0.9833 0.1681
+vn -0.1484 0.9217 0.3584
+vn -0.5450 0.1939 0.8157
+vn -0.5529 0.0980 0.8275
+vn -0.4630 0.5528 0.6929
+vn -0.5138 0.3805 0.7689
+vn -0.3110 0.8286 0.4654
+vn -0.3945 0.7041 0.5905
+vn -0.1011 0.9833 0.1513
+vn -0.2155 0.9217 0.3225
+vn -0.6937 0.1939 0.6937
+vn -0.7037 0.0980 0.7037
+vn -0.5893 0.5528 0.5893
+vn -0.6539 0.3805 0.6539
+vn -0.3958 0.8286 0.3958
+vn -0.5021 0.7041 0.5021
+vn -0.1287 0.9833 0.1287
+vn -0.2743 0.9217 0.2743
+vn -0.8157 0.1939 0.5450
+vn -0.8275 0.0980 0.5529
+vn -0.6929 0.5528 0.4630
+vn -0.7689 0.3805 0.5138
+vn -0.4654 0.8286 0.3110
+vn -0.5905 0.7041 0.3945
+vn -0.1513 0.9833 0.1011
+vn -0.3225 0.9217 0.2155
+vn -0.9063 0.1939 0.3754
+vn -0.9194 0.0980 0.3808
+vn -0.7699 0.5528 0.3189
+vn -0.8544 0.3805 0.3539
+vn -0.5172 0.8286 0.2142
+vn -0.6561 0.7041 0.2718
+vn -0.1681 0.9833 0.0696
+vn -0.3584 0.9217 0.1484
+vn -0.9622 0.1939 0.1914
+vn -0.9761 0.0980 0.1942
+vn -0.8173 0.5528 0.1626
+vn -0.9070 0.3805 0.1804
+vn -0.5490 0.8286 0.1092
+vn -0.6965 0.7041 0.1385
+vn -0.1785 0.9833 0.0355
+vn -0.3804 0.9217 0.0757
+vn -0.9765 0.1930 0.0962
+vn -0.9904 0.0975 0.0976
+vn -0.8305 0.5509 0.0818
+vn -0.9210 0.3790 0.0907
+vn -0.5589 0.8274 0.0551
+vn -0.7084 0.7023 0.0698
+vn -0.1820 0.9831 0.0179
+vn -0.3876 0.9210 0.0382
+vn -0.0296 0.9995 0.0059
+vn -0.0302 0.9995 0.0030
+vn -0.0279 0.9995 0.0116
+vn -0.0251 0.9995 0.0168
+vn -0.0214 0.9995 0.0214
+vn -0.0168 0.9995 0.0251
+vn -0.0116 0.9995 0.0279
+vn -0.0059 0.9995 0.0296
+vn 0.0000 0.9995 0.0302
+vn 0.0059 0.9995 0.0296
+vn 0.0116 0.9995 0.0279
+vn 0.0168 0.9995 0.0251
+vn 0.0214 0.9995 0.0214
+vn 0.0251 0.9995 0.0168
+vn 0.0279 0.9995 0.0116
+vn 0.0296 0.9995 0.0059
+vn 0.0568 0.9984 0.0056
+vn 0.0387 0.9992 0.0038
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1
+f 4/4/2 2/2/2 1/1/2
+f 2/2/3 5/5/3 3/3/3
+f 6/6/4 2/2/4 4/4/4
+f 2/2/4 7/7/4 5/5/4
+f 8/8/4 2/2/4 6/6/4
+f 2/2/4 9/9/4 7/7/4
+f 10/10/4 2/2/4 8/8/4
+f 2/2/4 11/11/4 9/9/4
+f 12/12/4 2/2/4 10/10/4
+f 2/2/4 13/13/4 11/11/4
+f 14/14/4 2/2/4 12/12/4
+f 2/2/4 15/15/4 13/13/4
+f 16/16/4 2/2/4 14/14/4
+f 2/2/4 17/17/4 15/15/4
+f 18/18/4 2/2/4 16/16/4
+f 2/2/4 19/19/4 17/17/4
+f 20/20/5 19/21/5 2/2/5
+f 18/22/5 21/23/5 2/2/5
+f 2/2/5 22/24/5 23/25/5
+f 20/20/5 2/2/5 24/26/5
+f 2/2/5 25/27/5 26/28/5
+f 24/26/5 2/2/5 27/29/5
+f 2/2/5 26/28/5 28/30/5
+f 27/29/5 2/2/5 29/31/5
+f 2/2/5 28/30/5 30/32/5
+f 29/31/5 2/2/5 31/33/5
+f 2/2/5 30/32/5 32/34/5
+f 31/33/5 2/2/5 33/35/5
+f 2/2/5 32/34/5 22/24/5
+f 33/35/5 2/2/5 34/36/5
+f 34/36/5 2/2/5 23/25/5
+f 2/2/5 21/23/5 25/27/5
+s 1
+f 18/37/6 16/38/7 35/39/8 21/40/9
+f 14/41/10 12/42/11 36/43/12 37/44/13
+f 10/45/14 8/46/15 38/47/16 39/48/17
+f 6/49/18 4/50/19 40/51/20 41/52/21
+f 16/38/7 14/41/10 37/44/13 35/39/8
+f 12/42/11 10/45/14 39/48/17 36/43/12
+f 8/46/15 6/49/18 41/52/21 38/47/16
+f 21/40/9 35/39/8 42/53/22 25/54/23
+f 37/44/13 36/43/12 43/55/24 44/56/25
+f 39/48/17 38/47/16 45/57/26 46/58/27
+f 41/52/21 40/51/20 47/59/28 48/60/29
+f 35/39/8 37/44/13 44/56/25 42/53/22
+f 36/43/12 39/48/17 46/58/27 43/55/24
+f 38/47/16 41/52/21 48/60/29 45/57/26
+f 25/54/23 42/53/22 49/61/30 26/62/31
+f 44/56/25 43/55/24 50/63/32 51/64/33
+f 46/58/27 45/57/26 52/65/34 53/66/35
+f 48/60/29 47/59/28 54/67/36 55/68/37
+f 42/53/22 44/56/25 51/64/33 49/61/30
+f 43/55/24 46/58/27 53/66/35 50/63/32
+f 45/57/26 48/60/29 55/68/37 52/65/34
+f 26/62/31 49/61/30 56/69/38 28/70/39
+f 51/64/33 50/63/32 57/71/40 58/72/41
+f 53/66/35 52/65/34 59/73/42 60/74/43
+f 55/68/37 54/67/36 61/75/44 62/76/45
+f 49/61/30 51/64/33 58/72/41 56/69/38
+f 50/63/32 53/66/35 60/74/43 57/71/40
+f 52/65/34 55/68/37 62/76/45 59/73/42
+f 28/70/39 56/69/38 63/77/46 30/78/47
+f 58/72/41 57/71/40 64/79/48 65/80/49
+f 60/74/43 59/73/42 66/81/50 67/82/51
+f 62/76/45 61/75/44 68/83/52 69/84/53
+f 56/69/38 58/72/41 65/80/49 63/77/46
+f 57/71/40 60/74/43 67/82/51 64/79/48
+f 59/73/42 62/76/45 69/84/53 66/81/50
+f 30/78/47 63/77/46 70/85/54 32/86/55
+f 65/80/49 64/79/48 71/87/56 72/88/57
+f 67/82/51 66/81/50 73/89/58 74/90/59
+f 69/84/53 68/83/52 75/91/60 76/92/61
+f 63/77/46 65/80/49 72/88/57 70/85/54
+f 64/79/48 67/82/51 74/90/59 71/87/56
+f 66/81/50 69/84/53 76/92/61 73/89/58
+f 32/86/55 70/85/54 77/93/62 22/94/63
+f 72/88/57 71/87/56 78/95/64 79/96/65
+f 74/90/59 73/89/58 80/97/66 81/98/67
+f 76/92/61 75/91/60 82/99/68 83/100/69
+f 70/85/54 72/88/57 79/96/65 77/93/62
+f 71/87/56 74/90/59 81/98/67 78/95/64
+f 73/89/58 76/92/61 83/100/69 80/97/66
+f 22/101/63 77/102/62 84/103/70 23/104/71
+f 79/105/65 78/106/64 85/107/72 86/108/73
+f 81/109/67 80/110/66 87/111/74 88/112/75
+f 83/113/69 82/114/68 89/115/76 90/116/77
+f 77/102/62 79/105/65 86/108/73 84/103/70
+f 78/106/64 81/109/67 88/112/75 85/107/72
+f 80/110/66 83/113/69 90/116/77 87/111/74
+f 23/104/71 84/103/70 91/117/78 34/118/79
+f 86/108/73 85/107/72 92/119/80 93/120/81
+f 88/112/75 87/111/74 94/121/82 95/122/83
+f 90/116/77 89/115/76 96/123/84 97/124/85
+f 84/103/70 86/108/73 93/120/81 91/117/78
+f 85/107/72 88/112/75 95/122/83 92/119/80
+f 87/111/74 90/116/77 97/124/85 94/121/82
+f 34/118/79 91/117/78 98/125/86 33/126/87
+f 93/120/81 92/119/80 99/127/88 100/128/89
+f 95/122/83 94/121/82 101/129/90 102/130/91
+f 97/124/85 96/123/84 103/131/92 104/132/93
+f 91/117/78 93/120/81 100/128/89 98/125/86
+f 92/119/80 95/122/83 102/130/91 99/127/88
+f 94/121/82 97/124/85 104/132/93 101/129/90
+f 33/126/87 98/125/86 105/133/94 31/134/95
+f 100/128/89 99/127/88 106/135/96 107/136/97
+f 102/130/91 101/129/90 108/137/98 109/138/99
+f 104/132/93 103/131/92 110/139/100 111/140/101
+f 98/125/86 100/128/89 107/136/97 105/133/94
+f 99/127/88 102/130/91 109/138/99 106/135/96
+f 101/129/90 104/132/93 111/140/101 108/137/98
+f 31/134/95 105/133/94 112/141/102 29/142/103
+f 107/136/97 106/135/96 113/143/104 114/144/105
+f 109/138/99 108/137/98 115/145/106 116/146/107
+f 111/140/101 110/139/100 117/147/108 118/148/109
+f 105/133/94 107/136/97 114/144/105 112/141/102
+f 106/135/96 109/138/99 116/146/107 113/143/104
+f 108/137/98 111/140/101 118/148/109 115/145/106
+f 29/142/103 112/141/102 119/149/110 27/150/111
+f 114/144/105 113/143/104 120/151/112 121/152/113
+f 116/146/107 115/145/106 122/153/114 123/154/115
+f 118/148/109 117/147/108 124/155/116 125/156/117
+f 112/141/102 114/144/105 121/152/113 119/149/110
+f 113/143/104 116/146/107 123/154/115 120/151/112
+f 115/145/106 118/148/109 125/156/117 122/153/114
+f 27/150/111 119/149/110 126/157/118 24/158/119
+f 121/152/113 120/151/112 127/159/120 128/160/121
+f 123/154/115 122/153/114 129/161/122 130/162/123
+f 125/156/117 124/155/116 131/163/124 132/164/125
+f 119/149/110 121/152/113 128/160/121 126/157/118
+f 120/151/112 123/154/115 130/162/123 127/159/120
+f 122/153/114 125/156/117 132/164/125 129/161/122
+f 24/158/119 126/157/118 133/165/126 20/166/127
+f 128/160/121 127/159/120 134/167/128 135/168/129
+f 130/162/123 129/161/122 136/169/130 137/170/131
+f 132/164/125 131/163/124 138/171/132 139/172/133
+f 126/157/118 128/160/121 135/168/129 133/165/126
+f 127/159/120 130/162/123 137/170/131 134/167/128
+f 129/161/122 132/164/125 139/172/133 136/169/130
+f 20/166/127 133/165/126 17/173/134 19/174/135
+f 135/168/129 134/167/128 13/175/136 15/176/137
+f 137/170/131 136/169/130 9/177/138 11/178/139
+f 139/172/133 138/171/132 5/179/140 7/180/141
+f 133/165/126 135/168/129 15/176/137 17/173/134
+f 134/167/128 137/170/131 11/178/139 13/175/136
+f 136/169/130 139/172/133 7/180/141 9/177/138
+f 138/171/132 140/181/142 3/182/143 5/179/140
+f 131/163/124 141/183/144 140/181/142 138/171/132
+f 124/155/116 142/184/145 141/183/144 131/163/124
+f 117/147/108 143/185/146 142/184/145 124/155/116
+f 110/139/100 144/186/147 143/185/146 117/147/108
+f 103/131/92 145/187/148 144/186/147 110/139/100
+f 96/123/84 146/188/149 145/187/148 103/131/92
+f 89/115/76 147/189/150 146/188/149 96/123/84
+f 82/114/68 148/190/151 147/189/150 89/115/76
+f 75/91/60 149/191/152 148/192/151 82/99/68
+f 68/83/52 150/193/153 149/191/152 75/91/60
+f 61/75/44 151/194/154 150/193/153 68/83/52
+f 54/67/36 152/195/155 151/194/154 61/75/44
+f 47/59/28 153/196/156 152/195/155 54/67/36
+f 40/51/20 154/197/157 153/196/156 47/59/28
+f 4/50/19 155/198/158 1/199/159 154/197/157 40/51/20
+f 140/200/142 141/201/144 142/202/145 143/203/146 144/204/147 145/205/148 146/206/149 147/207/150 148/208/151 149/209/152 150/210/153 151/211/154 152/212/155 153/213/156 154/214/157 1/215/159 3/216/143
diff --git a/technic/models/technic_tile_beveled.obj b/technic/models/technic_tile_beveled.obj
new file mode 100644
index 0000000..de7591a
--- /dev/null
+++ b/technic/models/technic_tile_beveled.obj
@@ -0,0 +1,66 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib technic_tile_beveled.mtl
+o Cube_Cube.005
+v 0.450000 -0.400000 -0.450000
+v -0.450000 -0.400000 -0.450000
+v -0.450000 -0.400000 0.450000
+v 0.450000 -0.400000 0.450000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.450000 -0.500000
+v 0.500000 -0.450000 0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.450000 0.500000
+v -0.500000 -0.450000 -0.500000
+v -0.500000 -0.500000 -0.500000
+vt 0.961182 0.961182
+vt 0.038818 0.961182
+vt 0.038818 0.038817
+vt 0.961182 0.038817
+vt 0.999978 0.000022
+vt 0.999978 0.050020
+vt 0.000022 0.050020
+vt 0.000022 0.000023
+vt 0.000022 0.050020
+vt 0.000022 0.000022
+vt 0.999978 0.000022
+vt 0.999978 0.050020
+vt 0.000100 0.000100
+vt 0.999900 0.000100
+vt 0.999900 0.999900
+vt 0.000100 0.999900
+vt 0.000022 0.050020
+vt 0.000022 0.000022
+vt 0.999978 0.000022
+vt 0.999978 0.050020
+vt -0.000402 1.000402
+vt -0.000402 -0.000402
+vt 1.000402 1.000402
+vt 1.000402 -0.000402
+vt 0.999978 0.000022
+vt 0.999978 0.050020
+vt 0.000022 0.050020
+vt 0.000022 0.000023
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+vn 0.0000 0.0000 -1.0000
+vn -0.7071 0.7071 0.0000
+vn 0.0000 0.7071 -0.7071
+vn 0.7071 0.7071 0.0000
+vn 0.0000 0.7071 0.7071
+vn 0.0000 0.0000 1.0000
+usemtl None
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/5/2 6/6/2 7/7/2 8/8/2
+f 9/9/3 10/10/3 11/11/3 12/12/3
+f 12/13/4 5/14/4 8/15/4 9/16/4
+f 12/17/5 11/18/5 6/19/5 5/20/5
+f 3/3/6 2/2/6 11/21/6 10/22/6
+f 2/2/7 1/1/7 6/23/7 11/21/7
+f 1/1/8 4/4/8 7/24/8 6/23/8
+f 4/4/9 3/3/9 10/22/9 7/24/9
+f 8/25/10 7/26/10 10/27/10 9/28/10
diff --git a/technic/sounds/technic_lawn_trimmer.ogg b/technic/sounds/technic_lawn_trimmer.ogg
new file mode 100644
index 0000000..9ec6886
--- /dev/null
+++ b/technic/sounds/technic_lawn_trimmer.ogg
Binary files differ
diff --git a/technic/sounds/technic_walking_tractor.ogg b/technic/sounds/technic_walking_tractor.ogg
new file mode 100644
index 0000000..8c9ebc1
--- /dev/null
+++ b/technic/sounds/technic_walking_tractor.ogg
Binary files differ
diff --git a/technic/sounds/trampoline_boing.ogg b/technic/sounds/trampoline_boing.ogg
new file mode 100644
index 0000000..fb541d4
--- /dev/null
+++ b/technic/sounds/trampoline_boing.ogg
Binary files differ
diff --git a/technic/textures/technic_chainsaw_mini.png b/technic/textures/technic_chainsaw_mini.png
new file mode 100644
index 0000000..b91ca13
--- /dev/null
+++ b/technic/textures/technic_chainsaw_mini.png
Binary files differ
diff --git a/technic/textures/technic_chainsaw_mk2.png b/technic/textures/technic_chainsaw_mk2.png
new file mode 100644
index 0000000..92186f8
--- /dev/null
+++ b/technic/textures/technic_chainsaw_mk2.png
Binary files differ
diff --git a/technic/textures/technic_cnc_arch216.png b/technic/textures/technic_cnc_arch216.png
new file mode 100644
index 0000000..cf274f6
--- /dev/null
+++ b/technic/textures/technic_cnc_arch216.png
Binary files differ
diff --git a/technic/textures/technic_cnc_arch216_flange.png b/technic/textures/technic_cnc_arch216_flange.png
new file mode 100644
index 0000000..0b2be25
--- /dev/null
+++ b/technic/textures/technic_cnc_arch216_flange.png
Binary files differ
diff --git a/technic/textures/technic_cnc_beam216.png b/technic/textures/technic_cnc_beam216.png
new file mode 100644
index 0000000..3611d65
--- /dev/null
+++ b/technic/textures/technic_cnc_beam216.png
Binary files differ
diff --git a/technic/textures/technic_cnc_beam216_cross.png b/technic/textures/technic_cnc_beam216_cross.png
new file mode 100644
index 0000000..31ac2e5
--- /dev/null
+++ b/technic/textures/technic_cnc_beam216_cross.png
Binary files differ
diff --git a/technic/textures/technic_cnc_beam216_cross_column.png b/technic/textures/technic_cnc_beam216_cross_column.png
new file mode 100644
index 0000000..ec1b2d0
--- /dev/null
+++ b/technic/textures/technic_cnc_beam216_cross_column.png
Binary files differ
diff --git a/technic/textures/technic_cnc_beam216_tee.png b/technic/textures/technic_cnc_beam216_tee.png
new file mode 100644
index 0000000..de71f79
--- /dev/null
+++ b/technic/textures/technic_cnc_beam216_tee.png
Binary files differ
diff --git a/technic/textures/technic_cnc_block_fluted.png b/technic/textures/technic_cnc_block_fluted.png
new file mode 100644
index 0000000..e4cf4cb
--- /dev/null
+++ b/technic/textures/technic_cnc_block_fluted.png
Binary files differ
diff --git a/technic/textures/technic_cnc_cylinder_fluted.png b/technic/textures/technic_cnc_cylinder_fluted.png
new file mode 100644
index 0000000..7f0b772
--- /dev/null
+++ b/technic/textures/technic_cnc_cylinder_fluted.png
Binary files differ
diff --git a/technic/textures/technic_cnc_cylinder_half.png b/technic/textures/technic_cnc_cylinder_half.png
new file mode 100644
index 0000000..b776e43
--- /dev/null
+++ b/technic/textures/technic_cnc_cylinder_half.png
Binary files differ
diff --git a/technic/textures/technic_cnc_cylinder_half_corner.png b/technic/textures/technic_cnc_cylinder_half_corner.png
new file mode 100644
index 0000000..1333366
--- /dev/null
+++ b/technic/textures/technic_cnc_cylinder_half_corner.png
Binary files differ
diff --git a/technic/textures/technic_cnc_diagonal_truss.png b/technic/textures/technic_cnc_diagonal_truss.png
new file mode 100644
index 0000000..52174aa
--- /dev/null
+++ b/technic/textures/technic_cnc_diagonal_truss.png
Binary files differ
diff --git a/technic/textures/technic_cnc_diagonal_truss_cross.png b/technic/textures/technic_cnc_diagonal_truss_cross.png
new file mode 100644
index 0000000..b09119b
--- /dev/null
+++ b/technic/textures/technic_cnc_diagonal_truss_cross.png
Binary files differ
diff --git a/technic/textures/technic_cnc_innercurvededge.png b/technic/textures/technic_cnc_innercurvededge.png
new file mode 100644
index 0000000..cdedf88
--- /dev/null
+++ b/technic/textures/technic_cnc_innercurvededge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_opposedcurvededge.png b/technic/textures/technic_cnc_opposedcurvededge.png
new file mode 100644
index 0000000..28a3394
--- /dev/null
+++ b/technic/textures/technic_cnc_opposedcurvededge.png
Binary files differ
diff --git a/technic/textures/technic_cnc_sphere_half.png b/technic/textures/technic_cnc_sphere_half.png
new file mode 100644
index 0000000..97b0980
--- /dev/null
+++ b/technic/textures/technic_cnc_sphere_half.png
Binary files differ
diff --git a/technic/textures/technic_cnc_sphere_quarter.png b/technic/textures/technic_cnc_sphere_quarter.png
new file mode 100644
index 0000000..4b1b72b
--- /dev/null
+++ b/technic/textures/technic_cnc_sphere_quarter.png
Binary files differ
diff --git a/technic/textures/technic_cnc_tile_beveled.png b/technic/textures/technic_cnc_tile_beveled.png
new file mode 100644
index 0000000..ed57d48
--- /dev/null
+++ b/technic/textures/technic_cnc_tile_beveled.png
Binary files differ
diff --git a/technic/textures/technic_control_logic_unit_adv.png b/technic/textures/technic_control_logic_unit_adv.png
new file mode 100644
index 0000000..d5508d5
--- /dev/null
+++ b/technic/textures/technic_control_logic_unit_adv.png
Binary files differ
diff --git a/technic/textures/technic_cornbread.png b/technic/textures/technic_cornbread.png
new file mode 100644
index 0000000..32674f2
--- /dev/null
+++ b/technic/textures/technic_cornbread.png
Binary files differ
diff --git a/technic/textures/technic_cornmeal.png b/technic/textures/technic_cornmeal.png
new file mode 100644
index 0000000..e17bb69
--- /dev/null
+++ b/technic/textures/technic_cornmeal.png
Binary files differ
diff --git a/technic/textures/technic_diamond_seed.png b/technic/textures/technic_diamond_seed.png
new file mode 100644
index 0000000..53d88fb
--- /dev/null
+++ b/technic/textures/technic_diamond_seed.png
Binary files differ
diff --git a/technic/textures/technic_fall_dampener_bottom.png b/technic/textures/technic_fall_dampener_bottom.png
new file mode 100644
index 0000000..993aed1
--- /dev/null
+++ b/technic/textures/technic_fall_dampener_bottom.png
Binary files differ
diff --git a/technic/textures/technic_fall_dampener_side.png b/technic/textures/technic_fall_dampener_side.png
new file mode 100644
index 0000000..3a7a67c
--- /dev/null
+++ b/technic/textures/technic_fall_dampener_side.png
Binary files differ
diff --git a/technic/textures/technic_fall_dampener_top.png b/technic/textures/technic_fall_dampener_top.png
new file mode 100644
index 0000000..59b1b2b
--- /dev/null
+++ b/technic/textures/technic_fall_dampener_top.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_bottom.png b/technic/textures/technic_hv_compressor_bottom.png
new file mode 100644
index 0000000..d6a61ed
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_bottom.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_front.png b/technic/textures/technic_hv_compressor_front.png
new file mode 100644
index 0000000..4f488a9
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_front.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_front_active.png b/technic/textures/technic_hv_compressor_front_active.png
new file mode 100644
index 0000000..60de4f9
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_front_active.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_side.png b/technic/textures/technic_hv_compressor_side.png
new file mode 100644
index 0000000..77e2c1f
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_side.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_side_tube.png b/technic/textures/technic_hv_compressor_side_tube.png
new file mode 100644
index 0000000..a427128
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_side_tube.png
Binary files differ
diff --git a/technic/textures/technic_hv_compressor_top.png b/technic/textures/technic_hv_compressor_top.png
new file mode 100644
index 0000000..5279c81
--- /dev/null
+++ b/technic/textures/technic_hv_compressor_top.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_bottom.png b/technic/textures/technic_hv_electric_furnace_bottom.png
new file mode 100644
index 0000000..d6a61ed
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_bottom.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_front.png b/technic/textures/technic_hv_electric_furnace_front.png
new file mode 100644
index 0000000..de74673
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_front.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_front_active.png b/technic/textures/technic_hv_electric_furnace_front_active.png
new file mode 100644
index 0000000..adff958
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_front_active.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_side.png b/technic/textures/technic_hv_electric_furnace_side.png
new file mode 100644
index 0000000..77e2c1f
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_side.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_side_tube.png b/technic/textures/technic_hv_electric_furnace_side_tube.png
new file mode 100644
index 0000000..a427128
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_side_tube.png
Binary files differ
diff --git a/technic/textures/technic_hv_electric_furnace_top.png b/technic/textures/technic_hv_electric_furnace_top.png
new file mode 100644
index 0000000..5279c81
--- /dev/null
+++ b/technic/textures/technic_hv_electric_furnace_top.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_bottom.png b/technic/textures/technic_hv_grinder_bottom.png
index fa2c135..9212218 100644
--- a/technic/textures/technic_hv_grinder_bottom.png
+++ b/technic/textures/technic_hv_grinder_bottom.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_front.png b/technic/textures/technic_hv_grinder_front.png
index a5bca0a..db9820e 100644
--- a/technic/textures/technic_hv_grinder_front.png
+++ b/technic/textures/technic_hv_grinder_front.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_front_active.png b/technic/textures/technic_hv_grinder_front_active.png
index 4077630..4886bc2 100644
--- a/technic/textures/technic_hv_grinder_front_active.png
+++ b/technic/textures/technic_hv_grinder_front_active.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_side.png b/technic/textures/technic_hv_grinder_side.png
index c3063c4..26873a2 100644
--- a/technic/textures/technic_hv_grinder_side.png
+++ b/technic/textures/technic_hv_grinder_side.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_side_tube.png b/technic/textures/technic_hv_grinder_side_tube.png
index 43bcca5..ac7183d 100644
--- a/technic/textures/technic_hv_grinder_side_tube.png
+++ b/technic/textures/technic_hv_grinder_side_tube.png
Binary files differ
diff --git a/technic/textures/technic_hv_grinder_top.png b/technic/textures/technic_hv_grinder_top.png
index e0df36b..c89511f 100644
--- a/technic/textures/technic_hv_grinder_top.png
+++ b/technic/textures/technic_hv_grinder_top.png
Binary files differ
diff --git a/technic/textures/technic_latex_foam.png b/technic/textures/technic_latex_foam.png
new file mode 100644
index 0000000..aebabb4
--- /dev/null
+++ b/technic/textures/technic_latex_foam.png
Binary files differ
diff --git a/technic/textures/technic_lawn_trimmer.png b/technic/textures/technic_lawn_trimmer.png
new file mode 100644
index 0000000..d44676a
--- /dev/null
+++ b/technic/textures/technic_lawn_trimmer.png
Binary files differ
diff --git a/technic/textures/technic_lv_lamp_bottom.png b/technic/textures/technic_lv_lamp_bottom.png
new file mode 100644
index 0000000..04941a0
--- /dev/null
+++ b/technic/textures/technic_lv_lamp_bottom.png
Binary files differ
diff --git a/technic/textures/technic_lv_lamp_side.png b/technic/textures/technic_lv_lamp_side.png
new file mode 100644
index 0000000..2ea1117
--- /dev/null
+++ b/technic/textures/technic_lv_lamp_side.png
Binary files differ
diff --git a/technic/textures/technic_lv_lamp_top.png b/technic/textures/technic_lv_lamp_top.png
new file mode 100644
index 0000000..701baf2
--- /dev/null
+++ b/technic/textures/technic_lv_lamp_top.png
Binary files differ
diff --git a/technic/textures/technic_lv_led.png b/technic/textures/technic_lv_led.png
new file mode 100644
index 0000000..056a9a4
--- /dev/null
+++ b/technic/textures/technic_lv_led.png
Binary files differ
diff --git a/technic/textures/technic_lv_led_inv.png b/technic/textures/technic_lv_led_inv.png
new file mode 100644
index 0000000..6f8996c
--- /dev/null
+++ b/technic/textures/technic_lv_led_inv.png
Binary files differ
diff --git a/technic/textures/technic_planter.png b/technic/textures/technic_planter.png
new file mode 100644
index 0000000..188f733
--- /dev/null
+++ b/technic/textures/technic_planter.png
Binary files differ
diff --git a/technic/textures/technic_trampoline_side.png b/technic/textures/technic_trampoline_side.png
new file mode 100644
index 0000000..441f81b
--- /dev/null
+++ b/technic/textures/technic_trampoline_side.png
Binary files differ
diff --git a/technic/textures/technic_trampoline_top.png b/technic/textures/technic_trampoline_top.png
new file mode 100644
index 0000000..6a609cc
--- /dev/null
+++ b/technic/textures/technic_trampoline_top.png
Binary files differ
diff --git a/technic/textures/technic_walking_tractor.png b/technic/textures/technic_walking_tractor.png
new file mode 100644
index 0000000..23fcd6c
--- /dev/null
+++ b/technic/textures/technic_walking_tractor.png
Binary files differ
diff --git a/technic/textures/technicx32/technic_cornbread.png b/technic/textures/technicx32/technic_cornbread.png
new file mode 100644
index 0000000..05e0416
--- /dev/null
+++ b/technic/textures/technicx32/technic_cornbread.png
Binary files differ
diff --git a/technic/tools/chainsaw.lua b/technic/tools/chainsaw.lua
index 3653d2d..4f385af 100644
--- a/technic/tools/chainsaw.lua
+++ b/technic/tools/chainsaw.lua
@@ -1,6 +1,8 @@
-- Configuration
-local chainsaw_max_charge = 30000 -- Maximum charge of the saw
+local chainsaw_max_charge_mini = 15000
+local chainsaw_max_charge = 30000 -- Maximum charge of the saw
+local chainsaw_max_charge_mk2 = 120000
-- Gives 2500 nodes on a single charge (about 50 complete normal trees)
local chainsaw_charge_per_node = 12
-- Cut down tree leaves. Leaf decay may cause slowness on large trees
@@ -16,7 +18,7 @@ local timber_nodenames = {
["default:cactus"] = true,
["default:tree"] = true,
["default:apple"] = true,
- ["default:pine_tree"] = true,
+ ["default:pine_tree"] = true,
}
if chainsaw_leaves then
@@ -119,6 +121,49 @@ if minetest.get_modpath("growing_cactus") then
timber_nodenames["growing_cactus:branch_xx"] = true
end
+-- Support ethereal
+if minetest.get_modpath("ethereal") then
+ timber_nodenames["ethereal:willow_trunk"] = true
+ timber_nodenames["ethereal:redwood_trunk"] = true
+ timber_nodenames["ethereal:frost_tree"] = true
+ timber_nodenames["ethereal:yellow_trunk"] = true
+ timber_nodenames["ethereal:birch_trunk"] = true
+ timber_nodenames["ethereal:palm_trunk"] = true
+ timber_nodenames["ethereal:banana_trunk"] = true
+ timber_nodenames["ethereal:bamboo"] = true
+ timber_nodenames["ethereal:mushroom_trunk"] = true
+ timber_nodenames["ethereal:scorched_tree"] = true
+
+ if chainsaw_leaves then
+ timber_nodenames["ethereal:willow_twig"] = true
+ timber_nodenames["ethereal:redwood_leaves"] = true
+ timber_nodenames["ethereal:frost_leaves"] = true
+ timber_nodenames["ethereal:yellowleaves"] = true
+ timber_nodenames["ethereal:birch_leaves"] = true
+ timber_nodenames["ethereal:palmleaves"] = true
+ timber_nodenames["ethereal:bananaleaves"] = true
+ timber_nodenames["ethereal:bamboo_leaves"] = true
+ timber_nodenames["ethereal:mushroom"] = true
+ timber_nodenames["ethereal:mushroom_pore"] = true
+ timber_nodenames["ethereal:orange_leaves"] = true
+ -- fruits
+ timber_nodenames["ethereal:banana"] = true
+ timber_nodenames["ethereal:orange"] = true
+ timber_nodenames["ethereal:coconut"] = true
+ timber_nodenames["ethereal:golden_apple"] = true
+ -- extra
+ timber_nodenames["ethereal:vine"] = true
+ end
+end
+
+-- Support maple
+if minetest.get_modpath("maple") then
+ timber_nodenames["maple:maple_tree"] = true
+ if chainsaw_leaves then
+ timber_nodenames["maple:maple_leaves"] = true
+ end
+end
+
-- Support farming_plus
if minetest.get_modpath("farming_plus") then
if chainsaw_leaves then
@@ -162,7 +207,9 @@ end
local S = technic.getter
+technic.register_power_tool("technic:chainsaw_mini", chainsaw_max_charge_mini)
technic.register_power_tool("technic:chainsaw", chainsaw_max_charge)
+technic.register_power_tool("technic:chainsaw_mk2", chainsaw_max_charge_mk2)
-- Table for saving what was sawed down
local produced = {}
@@ -232,9 +279,59 @@ local function iterSawTries(pos)
end
end
+
+
+local function iterSawTries_mk2(pos)
+ -- Copy position to prevent mangling it
+ local pos = vector.new(pos)
+ local i = 0
+
+ return function()
+ i = i + 1
+ -- Given a (top view) area like so (where 5 is the starting position):
+ -- X -->
+ -- Z 1 2 3 4 5
+ -- | 6 7 8 9 10
+ -- | 11 12 13 14 15
+ -- | 16 17 18 19 20
+ -- V 21 22 23 24 25
+ -- This will return positions 1...21, 2..,22, 3...23 (skip 13), 4...24, 5...25
+ -- and the position above 13.
+ if i == 1 then
+ -- Move to starting position
+ pos.x = pos.x - 2
+ pos.z = pos.z - 2
+ elseif i == 6 or i == 11 or i == 16 or i == 21 then
+ -- Move to next X and back to start of Z when we reach
+ -- the end of a Z line.
+ pos.x = pos.x + 1
+ pos.z = pos.z - 4
+ elseif i == 13 then
+ -- Skip the middle position (we've already run on it)
+ -- and double-increment the counter.
+ pos.z = pos.z + 2
+ i = i + 1
+ elseif i <= 25 then
+ -- Go to next Z.
+ pos.z = pos.z + 1
+ elseif i == 26 then
+ -- Move back to center and up.
+ -- The Y+ position must be last so that we don't dig
+ -- straight upward and notminetest.record_protection_violation(pointed_thing.under, name) come down (since the Y-
+ -- position isn't checked).
+ pos.x = pos.x - 2
+ pos.z = pos.z - 2
+ pos.y = pos.y + 1
+ else
+ return nil
+ end
+ return pos
+ end
+end
+
-- This function does all the hard work. Recursively we dig the node at hand
-- if it is in the table and then search the surroundings for more stuff to dig.
-local function recursive_dig(pos, remaining_charge)
+local function recursive_dig(pos, remaining_charge, mk, username)
if remaining_charge < chainsaw_charge_per_node then
return remaining_charge
end
@@ -243,24 +340,125 @@ local function recursive_dig(pos, remaining_charge)
if not timber_nodenames[node.name] then
return remaining_charge
end
-
+
+ if minetest.is_protected(pos, username) then
+ return remaining_charge
+ end
+
-- Wood found - cut it
handle_drops(minetest.get_node_drops(node.name, ""))
minetest.remove_node(pos)
remaining_charge = remaining_charge - chainsaw_charge_per_node
-- Check surroundings and run recursively if any charge left
- for npos in iterSawTries(pos) do
- if remaining_charge < chainsaw_charge_per_node then
+ if mk == 1 then
+ for npos in iterSawTries(pos) do
+ if remaining_charge < chainsaw_charge_per_node then
+ break
+ end
+ if timber_nodenames[minetest.get_node(npos).name] then
+ remaining_charge = recursive_dig(npos, remaining_charge, mk, username)
+ end
+ end
+ elseif mk == 2 then
+ for npos in iterSawTries_mk2(pos) do
+ if remaining_charge < chainsaw_charge_per_node then
+ break
+ end
+ if timber_nodenames[minetest.get_node(npos).name] then
+ remaining_charge = recursive_dig(npos, remaining_charge, mk, username)
+ else
+ local ct = {{x=-1,z=-1},{x=-1,z=1},{x=1,z=-1},{x=1,z=1}}
+ for _,c in ipairs(ct) do
+ local pos_alt = vector.new(npos)
+ pos_alt.x = pos_alt.x + c.x
+ pos_alt.z = pos_alt.z + c.z
+ pos_alt.y = pos_alt.y + 1
+ if timber_nodenames[minetest.get_node(pos_alt).name] then
+ remaining_charge = recursive_dig(pos_alt, remaining_charge, mk, username)
+ end
+ end
+ end
+ end
+ end
+
+ return remaining_charge
+end
+
+-- a non-recursive version
+local function nonrecursive_dig(pos, remaining_charge, username)
+ if remaining_charge < chainsaw_charge_per_node then
+ return remaining_charge
+ end
+ local node = minetest.get_node(pos)
+
+ if not timber_nodenames[node.name] then
+ return remaining_charge
+ end
+
+ if minetest.is_protected(pos, username) then
+ return remaining_charge
+ end
+
+ local start_pos = {
+ x = pos.x - 1,
+ z = pos.z - 1,
+ y = pos.y
+ }
+ local end_pos = {
+ x = pos.x + 1,
+ z = pos.z + 1,
+ y = pos.y + 30
+ }
+
+ local positions = {}
+
+ for x = 1,-1,-1 do
+ for z = 1,-1,-1 do
+ table.insert(positions, {x = x, z = z})
+ end
+ end
+
+ local h = 40
+
+ -- find where the tree ends (counting from the ground)
+ for y=0,h,1 do
+ local c = 0
+ for _,offset in pairs(positions) do
+ local p = {x = pos.x + offset.x, y = pos.y + y, z = pos.z + offset.z}
+ local n = minetest.get_node(p)
+ if not timber_nodenames[n.name] then
+ c = c + 1
+ end
+ end
+ if c == #positions then
+-- minetest.chat_send_all("tree height: " .. y)
+ h = y
break
end
- if timber_nodenames[minetest.get_node(npos).name] then
- remaining_charge = recursive_dig(npos, remaining_charge)
+ end
+
+ for y=h,0,-1 do
+ for _,offset in pairs(positions) do
+ if remaining_charge < chainsaw_charge_per_node then
+ break
+ end
+ local p = {x = pos.x + offset.x, y = pos.y + y, z = pos.z + offset.z}
+ local n = minetest.get_node(p)
+ if timber_nodenames[n.name] and not minetest.is_protected(p, username) then
+ -- Wood found - cut it
+ handle_drops(minetest.get_node_drops(n.name))
+ minetest.remove_node(p)
+ remaining_charge = remaining_charge - chainsaw_charge_per_node
+ end
end
end
+
return remaining_charge
end
+
+
-- Function to randomize positions for new node drops
local function get_drop_pos(pos)
local drop_pos = {}
@@ -296,9 +494,15 @@ local function get_drop_pos(pos)
end
-- Chainsaw entry point
-local function chainsaw_dig(pos, current_charge)
+local function chainsaw_dig(pos, current_charge, mk, username)
-- Start sawing things down
- local remaining_charge = recursive_dig(pos, current_charge)
+ local remaining_charge
+ if (mk) then
+ remaining_charge = recursive_dig(pos, current_charge, mk, username)
+ else
+ remaining_charge = nonrecursive_dig(pos, current_charge, username)
+ end
+
minetest.sound_play("chainsaw", {pos = pos, gain = 1.0,
max_hear_distance = 10})
@@ -322,6 +526,39 @@ local function chainsaw_dig(pos, current_charge)
end
+local function use_chainsaw(itemstack, user, pointed_thing, mk)
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ if not meta or not meta.charge or
+ meta.charge < chainsaw_charge_per_node then
+ return
+ end
+
+ local name = user:get_player_name()
+ if minetest.is_protected(pointed_thing.under, name) then
+ minetest.record_protection_violation(pointed_thing.under, name)
+ return
+ end
+
+ -- Send current charge to digging function so that the
+ -- chainsaw will stop after digging a number of nodes
+ meta.charge = chainsaw_dig(pointed_thing.under, meta.charge, mk, name)
+ if not technic.creative_mode then
+ if mk == 1 then
+ technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge)
+ elseif mk == 2 then
+ technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge_mk2)
+ else
+ technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge_mini)
+ end
+ itemstack:set_metadata(minetest.serialize(meta))
+ end
+ return itemstack
+end
+
minetest.register_tool("technic:chainsaw", {
description = S("Chainsaw"),
inventory_image = "technic_chainsaw.png",
@@ -329,42 +566,63 @@ minetest.register_tool("technic:chainsaw", {
wear_represents = "technic_RE_charge",
on_refill = technic.refill_RE_charge,
on_use = function(itemstack, user, pointed_thing)
- if pointed_thing.type ~= "node" then
- return itemstack
- end
-
- local meta = minetest.deserialize(itemstack:get_metadata())
- if not meta or not meta.charge or
- meta.charge < chainsaw_charge_per_node then
- return
+ use_chainsaw(itemstack, user, pointed_thing, 1)
+ return(itemstack)
end
+})
- local name = user:get_player_name()
- if minetest.is_protected(pointed_thing.under, name) then
- minetest.record_protection_violation(pointed_thing.under, name)
- return
+minetest.register_tool("technic:chainsaw_mk2", {
+ description = S("Chainsaw Mk2"),
+ inventory_image = "technic_chainsaw_mk2.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ on_use = function(itemstack, user, pointed_thing)
+ use_chainsaw(itemstack, user, pointed_thing, 2)
+ return(itemstack)
end
+})
- -- Send current charge to digging function so that the
- -- chainsaw will stop after digging a number of nodes
- meta.charge = chainsaw_dig(pointed_thing.under, meta.charge)
- if not technic.creative_mode then
- technic.set_RE_wear(itemstack, meta.charge, chainsaw_max_charge)
- itemstack:set_metadata(minetest.serialize(meta))
+minetest.register_tool("technic:chainsaw_mini", {
+ description = S("Chainsaw Mini"),
+ inventory_image = "technic_chainsaw_mini.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ groups = {not_in_creative_inventory = 1},
+ on_use = function(itemstack, user, pointed_thing)
+ use_chainsaw(itemstack, user, pointed_thing, nil)
+ return(itemstack)
end
- return itemstack
- end,
})
-
+
local mesecons_button = minetest.get_modpath("mesecons_button")
local trigger = mesecons_button and "mesecons_button:button_off" or "default:mese_crystal_fragment"
minetest.register_craft({
+ output = "technic:chainsaw_mini",
+ recipe = {
+ {"technic:wrought_iron_ingot", "technic:wrought_iron_ingot", "technic:battery"},
+ {"", "technic:motor", trigger},
+ {"", "", ""},
+ }
+})
+
+minetest.register_craft({
output = "technic:chainsaw",
recipe = {
- {"technic:stainless_steel_ingot", trigger, "technic:battery"},
- {"technic:fine_copper_wire", "technic:motor", "technic:battery"},
- {"", "", "technic:stainless_steel_ingot"},
+ {"technic:stainless_steel_ingot", trigger, "technic:battery"},
+ {"technic:fine_copper_wire", "technic:motor", "technic:battery"},
+ {"", "", "technic:stainless_steel_ingot"},
+ }
+})
+
+minetest.register_craft({
+ output = "technic:chainsaw_mk2",
+ recipe = {
+ {"technic:chainsaw", "technic:stainless_steel_ingot", "technic:stainless_steel_ingot"},
+ {"technic:battery", "technic:battery", ""},
+ {"technic:battery", "dye:green", ""},
}
})
diff --git a/technic/tools/init.lua b/technic/tools/init.lua
index 5e0aa02..db5ac7d 100644
--- a/technic/tools/init.lua
+++ b/technic/tools/init.lua
@@ -16,6 +16,10 @@ dofile(path.."/sonic_screwdriver.lua")
dofile(path.."/prospector.lua")
dofile(path.."/vacuum.lua")
+dofile(path.."/lawn_trimmer.lua")
+dofile(path.."/walking_tractor.lua")
+dofile(path.."/planter.lua")
+
if minetest.get_modpath("screwdriver") then
-- compatibility alias
minetest.register_alias("technic:screwdriver", "screwdriver:screwdriver")
diff --git a/technic/tools/lawn_trimmer.lua b/technic/tools/lawn_trimmer.lua
new file mode 100644
index 0000000..6ba1427
--- /dev/null
+++ b/technic/tools/lawn_trimmer.lua
@@ -0,0 +1,176 @@
+--[[
+ The Lawn Trimmer, also known as Weed Whacker, is a common gardening power
+ tool. In minetest, it has several uses. While it removes all members of
+ 'flora' group and can be used for literally mowing grass or trimming it
+ around vegetable beds, it's not its most important application.
+
+ 1. The tool can be used when searching for plants that can be cultivated
+ in the wilderness. Some of them are hard to see through grass; some of
+ them are hard to tell from the grass; some of them are actually obtained
+ by removing the grass (e.g. barley seeds).
+
+ 2. Producing organic dye pigments. While growing flowers is a matter of
+ fertilizing the soil with bone meal, harvesting them by hand is a chore.
+
+ In both scenarios, the tool will be very handy for the player.
+ It comes with 4 modes of operation, defined by how wide its sweep is:
+ from 0 (at one's feet) to 3 nodes in radius (square radius, as most
+ things in minetest are).
+
+ The sound is an edited fragment from
+ https://www.cutestockfootage.com/sound-effect/9251/grass-trimmer-01
+ used in accordance with its licensing terms (free use for any purpose in
+ an altered form)
+]]
+
+-- Configuration
+-- Intended to hold as much as the chainsaw, 10000 units
+local lawn_trimmer_max_charge = 10000
+-- With 25 units per object can mow 400 'group:flora' blocks
+local lawn_trimmer_charge_per_object = 25
+
+local S = technic.getter
+
+local lawn_trimmer_mode_text = {
+ S("sweep a single block under the user"),
+ S("sweep 1 block around the user"),
+ S("sweep 2 blocks around the user"),
+ S("sweep 3 blocks around the user")
+}
+
+local node_removed
+
+-- Mode switcher for the tool
+local function lawn_trimmer_setmode(user, itemstack, meta)
+ local player_name = user:get_player_name()
+
+ if not meta then
+ meta = {mode = nil}
+ end
+ if not meta.mode then
+ minetest.chat_send_player(player_name,
+ S("Use while sneaking to change Lawn Trimmer modes."))
+ meta.mode = 0
+ end
+
+ meta.mode = meta.mode % 4 + 1
+
+ minetest.chat_send_player(player_name,
+ S("Lawn Trimmer Mode %d"):format(meta.mode) .. ": "
+ .. lawn_trimmer_mode_text[meta.mode])
+ itemstack:set_name("technic:lawn_trimmer_" .. meta.mode);
+ itemstack:set_metadata(minetest.serialize(meta))
+ return itemstack
+end
+
+
+-- Perform the trimming action
+local function trim_the_lawn(itemstack, user, pointed_thing)
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ local keys = user:get_player_control()
+
+ if not meta or not meta.mode or keys.sneak then
+ return lawn_trimmer_setmode(user, itemstack, meta)
+ end
+
+ meta.charge = meta.charge or 0
+
+ if meta.charge < lawn_trimmer_charge_per_object then
+ return -- no charge for even a single node, aborting
+ end
+
+ local pos
+ if user.get_pos ~= nil then
+ pos = user:get_pos()
+ else
+ -- we are held in a node breaker
+ pos = pointed_thing.under
+ end
+
+ minetest.sound_play("technic_lawn_trimmer", {
+-- to_player = user:get_player_name(),
+ pos = pos,
+ gain = 0.4,
+ })
+
+
+ -- Defining the area for the search needs two positions
+ -- The tool has a limited range in the vertical axis, which is capped at +/- 1 node
+ local start_pos = {
+ x = pos.x - meta.mode + 1,
+ z = pos.z - meta.mode + 1,
+ y = pos.y - 1
+ }
+ local end_pos = {
+ x = pos.x + meta.mode - 1,
+ z = pos.z + meta.mode - 1,
+ y = pos.y + 1
+ }
+
+ -- Since nodes sometimes cannot be removed, we cannot rely on repeating
+ -- find_node_near() and removing found nodes
+ local found_flora = minetest.find_nodes_in_area(start_pos, end_pos, {"group:flora"})
+ for _, f in ipairs(found_flora) do
+ node_removed = false
+ -- Callback will set the flag to true if the node is dug successfully,
+ -- otherwise skip to the next one.
+ minetest.node_dig(f, minetest.get_node(f), user)
+ if node_removed then
+ meta.charge = meta.charge - lawn_trimmer_charge_per_object
+ -- Abort if no charge left for another node
+ if meta.charge < lawn_trimmer_charge_per_object then break end
+ end
+ end
+
+ -- The charge won't expire in creative mode, but the tool still
+ -- has to be charged prior to use
+ if not technic.creative_mode then
+ technic.set_RE_wear(itemstack, meta.charge, lawn_trimmer_max_charge)
+ itemstack:set_metadata(minetest.serialize(meta))
+ end
+ return itemstack
+end
+
+function check_removal()
+ node_removed = true
+end
+
+-- Register the tool and its varieties in the game
+technic.register_power_tool("technic:lawn_trimmer", lawn_trimmer_max_charge)
+minetest.register_tool("technic:lawn_trimmer", {
+ description = S("Lawn Trimmer"),
+ inventory_image = "technic_lawn_trimmer.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ on_use = trim_the_lawn,
+ after_use = check_removal
+})
+
+for i = 1, 4 do
+ technic.register_power_tool("technic:lawn_trimmer_" .. i, lawn_trimmer_max_charge)
+ minetest.register_tool("technic:lawn_trimmer_" .. i, {
+ description = S("Lawn Trimmer Mode %d"):format(i),
+ inventory_image = "technic_lawn_trimmer.png^technic_tool_mode" .. i .. ".png",
+ wield_image = "technic_lawn_trimmer.png",
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ groups = {not_in_creative_inventory = 1},
+ on_use = trim_the_lawn,
+ after_use = check_removal
+ })
+end
+
+
+-- Provide a crafting recipe
+local trigger = minetest.get_modpath("mesecons_button") and "mesecons_button:button_off"
+ or "default:mese_crystal_fragment"
+
+minetest.register_craft({
+ output = 'technic:lawn_trimmer',
+ recipe = {
+ {'', 'default:stick', trigger},
+ {'technic:motor', 'default:stick', 'technic:battery'},
+ {'technic:stainless_steel_ingot', '', ''},
+ }
+})
diff --git a/technic/tools/planter.lua b/technic/tools/planter.lua
new file mode 100644
index 0000000..1aefa7c
--- /dev/null
+++ b/technic/tools/planter.lua
@@ -0,0 +1,265 @@
+--[[
+ Planter: a tool for placing rows of objects (primarily, farming plants)
+ Has 6 mods, corresponding to the width of the row (2...7 blocks). 1 block can be
+ always planted by hand.
+]]
+
+-- Configuration
+-- Intended to hold as much as the chainsaw, 20000 units
+local planter_max_charge = 20000
+-- Cost of planting action
+local planter_charge_per_object = 25
+
+
+local S = technic.getter
+
+local planter_mode_text = {
+ S("2 blocks wide planting"),
+ S("3 blocks wide planting"),
+ S("4 blocks wide planting"),
+ S("5 blocks wide planting"),
+ S("6 blocks wide planting"),
+ S("7 blocks wide planting"),
+}
+
+
+-- Mode switcher for the tool
+local function planter_setmode(user, itemstack, meta)
+ local player_name = user:get_player_name()
+
+ if not meta then
+ meta = {
+ mode = nil
+ }
+ end
+ if not meta.mode then
+ minetest.chat_send_player(player_name,
+ S("Use while sneaking to change Planter modes."))
+ meta.mode = 0
+ end
+
+ meta.mode = meta.mode % 6 + 1
+
+ minetest.chat_send_player(player_name,
+ S("Planter Mode %d"):format(meta.mode) .. ": "
+ .. planter_mode_text[meta.mode])
+ itemstack:set_name("technic:planter_" .. meta.mode);
+ itemstack:set_metadata(minetest.serialize(meta))
+ return itemstack
+end
+
+
+-- Perform the trimming action
+local function work_on_soil(itemstack, user, pointed_thing)
+
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ local keys = user:get_player_control()
+
+ if not meta or not meta.mode or keys.sneak then
+ return planter_setmode(user, itemstack, meta)
+ end
+
+ meta.charge = meta.charge or 0
+
+ local offset = meta.mode
+ local offet_l = 0
+ local offet_r = 0
+ if offset % 2 > 0 then
+ offset_r = math.floor(offset/2) + 1
+ offset_l = math.floor(offset/2)
+ else
+ offset_r = offset / 2
+ offset_l = offset / 2
+ end
+
+
+ if meta.charge < planter_charge_per_object * (offset+1) then
+ return -- no charge for a complete row
+ end
+
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+
+ local name = user:get_player_name()
+ if minetest.is_protected(pointed_thing.under, name) then
+ minetest.record_protection_violation(pointed_thing.under, name)
+ return
+ end
+
+ local player_name = user:get_player_name()
+ local inv = user:get_inventory()
+
+ if not inv:contains_item("main", ItemStack({name=meta.selected, count = offset + 1})) then
+ minetest.chat_send_player(player_name, S("Not enough " .. meta.selected .. " to continue!"))
+ return itemstack
+ end
+
+ minetest.sound_play("technic_walking_tractor", {
+-- to_player = user:get_player_name(),
+ pos = user:get_pos(),
+ gain = 0.5,
+ })
+
+ local c = 0
+
+ local ldir = 0
+ local udir = user:get_look_dir()
+ if math.abs(udir.x) > math.abs(udir.z) then
+ if udir.x > 0 then
+ ldir = 0 -- +X
+ else
+ ldir = 1 -- -X
+ end
+ else
+ if udir.z > 0 then
+ ldir = 2 -- +Z
+ else
+ ldir = 3 -- -Z
+ end
+ end
+
+ if ldir == 1 or ldir == 2 then
+ offset_r, offset_l = offset_l, offset_r
+ end
+
+ local work_pos = {}
+ for delta = -offset_l,offset_r,1 do
+
+ if ldir > 1 then
+ -- along z axis value (x changes)
+ work_pos = {
+ type = "node",
+ under = {x = pointed_thing.under.x + delta, y = pointed_thing.under.y, z = pointed_thing.under.z},
+ above = {x = pointed_thing.under.x + delta, y = pointed_thing.under.y + 1, z = pointed_thing.under.z},
+ ref = nil
+ }
+ else
+ -- along x axis value (z changes)
+ work_pos = {
+ type = "node",
+ under = {x = pointed_thing.under.x, y = pointed_thing.under.y, z = pointed_thing.under.z + delta},
+ above = {x = pointed_thing.under.x, y = pointed_thing.under.y + 1, z = pointed_thing.under.z + delta},
+ ref = nil
+ }
+ end
+
+
+ local k = (minetest.registered_items[meta.selected] or {on_place=minetest.item_place}).on_place(ItemStack({name=meta.selected, count=1}), user, work_pos)
+ if k then
+ c = c + 1
+ end
+
+ end
+
+
+ meta.charge = meta.charge - planter_charge_per_object * c
+
+ -- The charge won't expire in creative mode, but the tool still
+ -- has to be charged prior to use
+ if not technic.creative_mode then
+ inv:remove_item("main", ItemStack({name=meta.selected, count = c}))
+ technic.set_RE_wear(itemstack, meta.charge, planter_max_charge)
+ itemstack:set_metadata(minetest.serialize(meta))
+ end
+ return itemstack
+end
+
+local function select_plant(itemstack, user, pointed_thing)
+ if not user or not user:is_player() or user.is_fake_player then return end
+ local meta = minetest.deserialize(itemstack:get_metadata())
+
+ if not meta or not meta.selected then
+ meta = {}
+ meta.selected = "farming:seed_wheat"
+ itemstack:set_metadata(minetest.serialize(meta))
+ end
+
+ minetest.show_formspec(user:get_player_name(), "technic:planter_control",
+ "size[8,5]"..
+ default.gui_bg ..
+ default.gui_bg_img ..
+ default.gui_slots ..
+ "label[0,0;Crops selected:\n(Press to change)]"..
+ "item_image_button[2,0;1,1;" .. meta.selected .. ";change;]" ..
+ "button_exit[3,0;1,1;quit;Cancel]"..
+ "label[5,0; \nChange to:]"..
+ "list[current_player;main;7,0;1,1;31]" ..
+ "list[current_player;main;0,1;8,1;]" ..
+ "list[current_player;main;0,2;8,3;8]" ..
+ default.get_hotbar_bg(0,1))
+ return
+end
+
+
+minetest.register_on_player_receive_fields(function(user, formname, fields)
+
+ if formname ~= "technic:planter_control" then return false end
+ if not user or not user:is_player() or user.is_fake_player then return end
+ local itemstack = user:get_wielded_item()
+ if not string.find(itemstack:get_name(), "^technic:planter") then return true end
+
+ if fields.quit then
+ return true
+ end
+
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ if not meta then
+ meta = {}
+ end
+
+ if fields.change then
+ local inv = user:get_inventory()
+ local item = inv:get_stack("main", 32) -- using the last cell
+ local n = item:get_name()
+ if n and n ~= "" then
+ meta.selected = n
+ end
+ end
+
+ itemstack:set_metadata(minetest.serialize(meta))
+ user:set_wielded_item(itemstack)
+ select_plant(itemstack, user, nil)
+ return true
+end)
+
+
+-- Register the tool and its varieties in the game
+technic.register_power_tool("technic:planter", planter_max_charge)
+minetest.register_tool("technic:planter", {
+ description = S("Planter"),
+ inventory_image = "technic_planter.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ on_use = work_on_soil,
+ on_place = select_plant,
+})
+
+for i = 1, 6 do
+ technic.register_power_tool("technic:planter_" .. i, planter_max_charge)
+ minetest.register_tool("technic:planter_" .. i, {
+ description = S("Planter Mode %d"):format(i),
+ inventory_image = "technic_planter.png^technic_tool_mode" .. i .. ".png",
+ wield_image = "technic_planter.png",
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ groups = {not_in_creative_inventory = 1},
+ on_use = work_on_soil,
+ on_place = select_plant,
+ })
+end
+
+
+-- Provide a crafting recipe
+local trigger = minetest.get_modpath("mesecons_button") and "mesecons_button:button_off"
+ or "default:mese_crystal_fragment"
+
+minetest.register_craft({
+ output = 'technic:planter',
+ recipe = {
+ {'dye:red', 'technic:battery', trigger},
+ {'technic:motor', 'technic:battery', 'default:stick'},
+ {'default:chest', 'technic:stainless_steel_ingot', 'technic:rubber'},
+ }
+})
diff --git a/technic/tools/prospector.lua b/technic/tools/prospector.lua
index b28f1d8..6373e98 100644
--- a/technic/tools/prospector.lua
+++ b/technic/tools/prospector.lua
@@ -1,6 +1,6 @@
local S = technic.getter
-technic.register_power_tool("technic:prospector", 300000)
+technic.register_power_tool("technic:prospector", 650000)
local function get_metadata(toolstack)
local m = minetest.deserialize(toolstack:get_metadata())
diff --git a/technic/tools/sonic_screwdriver.lua b/technic/tools/sonic_screwdriver.lua
index 300d363..366ddaa 100644
--- a/technic/tools/sonic_screwdriver.lua
+++ b/technic/tools/sonic_screwdriver.lua
@@ -1,4 +1,5 @@
local sonic_screwdriver_max_charge = 15000
+local sonic_screwdriver_rotation_cost = 10
local S = technic.getter
@@ -64,7 +65,7 @@ local function screwdriver_handler(itemstack, user, pointed_thing, mode)
minetest.swap_node(pos, node)
if not technic.creative_mode then
- meta1.charge = meta1.charge - 100
+ meta1.charge = meta1.charge - sonic_screwdriver_rotation_cost
itemstack:set_metadata(minetest.serialize(meta1))
technic.set_RE_wear(itemstack, meta1.charge, sonic_screwdriver_max_charge)
end
diff --git a/technic/tools/walking_tractor.lua b/technic/tools/walking_tractor.lua
new file mode 100644
index 0000000..83e464c
--- /dev/null
+++ b/technic/tools/walking_tractor.lua
@@ -0,0 +1,263 @@
+--[[
+ Walking tractor: a dedicated farming tool, a miracle of small mechanization.
+ Replaces hoes and harvests useful plants (fully-grown cultivars, mostly from farming)
+ Has a variable swipe from 3 to 7 nodes, in either case - in a line, perpendicular
+ to the user's direction of sight. For smaller areas there are always hoes.
+ Modes 1-3 are for tilling
+ Modes 4-6 are for harvesting
+]]
+
+-- Configuration
+-- Intended to hold as much as the chainsaw, 10000 units
+local walking_tractor_max_charge = 20000
+-- Can remove a curious number of objects
+local walking_tractor_charge_per_object = 30
+-- For tilling: cost is less but spent regardless of actual success
+local walking_tractor_charge_per_tilled_node = 25
+
+local S = technic.getter
+
+local walking_tractor_mode_text = {
+ S("3 blocks wide tilling"),
+ S("5 blocks wide tilling"),
+ S("7 blocks wide tilling"),
+ S("3 blocks wide harvesting"),
+ S("5 blocks wide harvesting"),
+ S("7 blocks wide harvesting"),
+}
+
+local ripe_for_harvest = {
+ "farming:barley_7",
+ "farming:beanpole_5",
+ "farming:blueberry_4",
+ "farming:carrot_8",
+ "farming:chili_8",
+ "farming:cocoa_4",
+ "farming:coffee_5",
+ "farming:corn_8",
+ "farming:cotton_8",
+ "farming:cucumber_4",
+ "farming:garlic_5",
+ "farming:grapes_8",
+ "farming:hemp_8",
+ "farming:melon_8",
+ "farming:onion_5",
+ "farming:pea_5",
+ "farming:pepper_5",
+ "farming:pineapple_8",
+ "farming:potato_4",
+ "farming:pumpkin_8",
+ "farming:raspberry_4",
+ "farming:rhubarb_3",
+ "farming:tomato_8",
+ "farming:wheat_8",
+ "ethereal:onion_5",
+ "ethereal:strawberry_8",
+ -- also doubles as a snow-plough
+ "default:snowblock",
+ "stairs:slab_snowblock",
+}
+
+local compatible_soils = {
+ "group:soil",
+ "default:dirt_with_snow",
+ "ethereal:dry_dirt"
+}
+
+local node_removed
+
+-- Mode switcher for the tool
+local function walking_tractor_setmode(user, itemstack, meta)
+ local player_name = user:get_player_name()
+
+ if not meta then
+ meta = {mode = nil}
+ end
+ if not meta.mode then
+ minetest.chat_send_player(player_name,
+ S("Use while sneaking to change Walking Tractor modes."))
+ meta.mode = 0
+ end
+
+ meta.mode = meta.mode % 6 + 1
+
+ minetest.chat_send_player(player_name,
+ S("Walking Tractor Mode %d"):format(meta.mode) .. ": "
+ .. walking_tractor_mode_text[meta.mode])
+ itemstack:set_name("technic:walking_tractor_" .. meta.mode);
+ itemstack:set_metadata(minetest.serialize(meta))
+ return itemstack
+end
+
+
+-- Perform the trimming action
+local function work_on_soil(itemstack, user, pointed_thing)
+ local meta = minetest.deserialize(itemstack:get_metadata())
+ local keys = user:get_player_control()
+
+ if not meta or not meta.mode or keys.sneak then
+ return walking_tractor_setmode(user, itemstack, meta)
+ end
+
+ meta.charge = meta.charge or 0
+
+ if meta.charge < walking_tractor_charge_per_object then
+ return -- no charge for even a single node, aborting
+ end
+
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+
+ local name = user:get_player_name()
+ if minetest.is_protected(pointed_thing.under, name) then
+ minetest.record_protection_violation(pointed_thing.under, name)
+ return
+ end
+
+ minetest.sound_play("technic_walking_tractor", {
+-- to_player = user:get_player_name(),
+ pos = user:get_pos(),
+ gain = 0.5,
+ })
+
+ local start_pos = {}
+ local end_pos = {}
+
+ local ldir = 0
+ local udir = user:get_look_dir()
+ if math.abs(udir.x) > math.abs(udir.z) then
+ if udir.x > 0 then
+ ldir = 0 -- +X
+ else
+ ldir = 1 -- -X
+ end
+ else
+ if udir.z > 0 then
+ ldir = 2 -- +Z
+ else
+ ldir = 3 -- -Z
+ end
+ end
+
+ local offset = meta.mode
+ if offset > 3 then
+ offset = offset - 3
+ end
+ offset = offset + 0.1
+
+ if ldir > 1 then
+
+ start_pos = {
+ x = pointed_thing.under.x - offset,
+ z = pointed_thing.under.z,
+ y = pointed_thing.under.y - 0.1
+ }
+ end_pos = {
+ x = pointed_thing.under.x + offset,
+ z = pointed_thing.under.z,
+ y = pointed_thing.under.y + 1.1
+ }
+
+ else
+ start_pos = {
+ x = pointed_thing.under.x,
+ z = pointed_thing.under.z - offset,
+ y = pointed_thing.under.y - 0.1
+ }
+ end_pos = {
+ x = pointed_thing.under.x,
+ z = pointed_thing.under.z + offset,
+ y = pointed_thing.under.y + 1.1
+ }
+
+ end
+
+
+
+ if meta.mode <= 3 then
+ -- tilling
+ local found_obj = minetest.find_nodes_in_area(start_pos, end_pos, compatible_soils)
+ for _, f in ipairs(found_obj) do
+ -- unfortunately, there is no callback to track the node change without
+ -- digging it first
+ if not minetest.is_protected(f, name) then
+ minetest.remove_node(f)
+ minetest.set_node(f, {name = "farming:soil"})
+ meta.charge = meta.charge - walking_tractor_charge_per_tilled_node
+ end
+ -- Abort if no charge left for another node
+ if meta.charge < walking_tractor_charge_per_tilled_node then break end
+ end
+
+ else
+ -- harvesting
+ -- Since nodes sometimes cannot be removed, we cannot rely on repeating
+ -- find_node_near() and removing found nodes
+ local found_obj = minetest.find_nodes_in_area(start_pos, end_pos, ripe_for_harvest)
+ for _, f in ipairs(found_obj) do
+ node_removed = false
+ -- Callback will set the flag to true if the node is dug successfully,
+ -- otherwise skip to the next one.
+ minetest.node_dig(f, minetest.get_node(f), user)
+ if node_removed then
+ meta.charge = meta.charge - walking_tractor_charge_per_object
+ -- Abort if no charge left for another node
+ if meta.charge < walking_tractor_charge_per_object then break end
+ end
+ end
+
+ end
+
+ -- The charge won't expire in creative mode, but the tool still
+ -- has to be charged prior to use
+ if not technic.creative_mode then
+ technic.set_RE_wear(itemstack, meta.charge, walking_tractor_max_charge)
+ itemstack:set_metadata(minetest.serialize(meta))
+ end
+ return itemstack
+end
+
+function check_removal()
+ node_removed = true
+end
+
+-- Register the tool and its varieties in the game
+technic.register_power_tool("technic:walking_tractor", walking_tractor_max_charge)
+minetest.register_tool("technic:walking_tractor", {
+ description = S("Walking Tractor"),
+ inventory_image = "technic_walking_tractor.png",
+ stack_max = 1,
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ on_use = work_on_soil,
+ after_use = check_removal
+})
+
+for i = 1, 6 do
+ technic.register_power_tool("technic:walking_tractor_" .. i, walking_tractor_max_charge)
+ minetest.register_tool("technic:walking_tractor_" .. i, {
+ description = S("Walking Tractor Mode %d"):format(i),
+ inventory_image = "technic_walking_tractor.png^technic_tool_mode" .. i .. ".png",
+ wield_image = "technic_walking_tractor.png",
+ wear_represents = "technic_RE_charge",
+ on_refill = technic.refill_RE_charge,
+ groups = {not_in_creative_inventory = 1},
+ on_use = work_on_soil,
+ after_use = check_removal
+ })
+end
+
+
+-- Provide a crafting recipe
+local trigger = minetest.get_modpath("mesecons_button") and "mesecons_button:button_off"
+ or "default:mese_crystal_fragment"
+
+minetest.register_craft({
+ output = 'technic:walking_tractor',
+ recipe = {
+ {'dye:green', 'technic:battery', trigger},
+ {'technic:motor', 'technic:battery', 'default:stick'},
+ {'technic:diamond_drill_head', 'technic:stainless_steel_ingot', 'technic:rubber'},
+ }
+})