Massive change to the way CNC programs are registered.
authorkpoppel <poulsen.kim@gmail.com>
Tue, 7 May 2013 23:42:22 +0000 (01:42 +0200)
committerkpoppel <poulsen.kim@gmail.com>
Tue, 7 May 2013 23:42:22 +0000 (01:42 +0200)
Now the API is open for adding new nodes and inhibiting some nodes for some materials.
No more recipes outside of the CNC machine.

Code length also greatly reduced.

technic/cnc_api.lua
technic/cnc_nodes.lua

index aecfadbf7d708111c4d11e33c0891081ba37a917..2d5e30536a948850a0b15b780ec01ee2c11a44c4 100644 (file)
@@ -8,851 +8,330 @@ technic_cnc_api.detail_level = 16 -- 16; 1-32
 
 -- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES:
 ------------------------------------------------------
-
--- SLOPE
---------
-function technic_cnc_api.register_slope(recipeitem, groups, images, description)
-
-local slopebox = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        slopebox[i+1]={-0.5, (i/detail)-0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
-end
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopebox,
-        },
-        groups = groups,
-        })
-end
-
-
--- SLOPE Lying
-----------------
-function technic_cnc_api.register_slope_lying(recipeitem, groups, images, description)
-
-local slopeboxlying = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        slopeboxlying[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, (i/detail)-0.5+(1/detail), 0.5 , 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_lying", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopeboxlying,
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_slope_lying 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_slope", ""},
-                        {"", "", ""},           
-                },
-        })
-
-end
-
-
--- SLOPE UPSIDE DOWN
---------------------
-function technic_cnc_api.register_slope_upsdown(recipeitem, groups, images, description)
-
-if subname == "dirt" then
-return
-end
-
-local slopeupdwnbox = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        slopeupdwnbox[i+1]={-0.5, (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_upsdown", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopeupdwnbox,
-        },
-        groups = groups,
-        })
-end
-
-
--- SLOPE EDGE
--------------
-function technic_cnc_api.register_slope_edge(recipeitem, groups, images, description)
-
-local slopeboxedge = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        slopeboxedge[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_edge", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopeboxedge,
-        },
-        groups = groups,
-        })
-end
-
-
--- SLOPE INNER EDGE
--------------------
-function technic_cnc_api.register_slope_inner_edge(recipeitem, groups, images, description)
-   local slopeboxedge = {}
-   local detail = technic_cnc_api.detail_level
-   for i = 0, detail-1 do
-      slopeboxedge[i+1]={(i/detail)-0.5, -0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
-      slopeboxedge[i+detail+1]={-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+local cnc_sphere =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      local sehne
+      for i = 1, detail-1 do
+        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+        nodebox[i]={-sehne, (i/detail)-0.5, -sehne, sehne, (i/detail)+(1/detail)-0.5, sehne}
+      end
+      return nodebox
    end
 
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_inner_edge", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-          type = "fixed",
-          fixed = slopeboxedge,
-        },
-        groups = groups,
-        })
-end
-
-
--- SLOPE EDGE UPSIDE DOWN
--------------------------
-function technic_cnc_api.register_slope_edge_upsdown(recipeitem, groups, images, description)
-
-if recipeitem == "default:dirt" then
-   return
-end
-
-local slopeupdwnboxedge = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        slopeupdwnboxedge[i+1]={(-1*(i/detail))+0.5-(1/detail), (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_edge_upsdown", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopeupdwnboxedge,
-        },
-        groups = groups,
-        })
-end
-
-
--- SLOPE INNER EDGE UPSIDE DOWN
--------------------------------
-function technic_cnc_api.register_slope_inner_edge_upsdown(recipeitem, groups, images, description)
-
-if recipename == "default:dirt" then
-return
-end
-
-local slopeboxedge = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-  slopeboxedge[i+1]={0.5-(i/detail)-(1/detail), (i/detail)-0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
-  slopeboxedge[i+detail+1]={-0.5, (i/detail)-0.5, 0.5-(i/detail)-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
-end
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_slope_inner_edge_upsdown", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = slopeboxedge,
-        },
-        groups = groups,
-        })
-end
-
-
--- PYRAMID
-----------
-function technic_cnc_api.register_pyramid(recipeitem, groups, images, description)
-
-local pyrabox = {}
-local detail = technic_cnc_api.detail_level/2
-for i = 0, detail-1 do
-        pyrabox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail/2)-0.5+(1/detail), 0.5-(i/detail/2)}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_pyramid", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = pyrabox,
-        },
-        groups = groups,
-        })
-end
-
-
--- SPIKE
---------
-function technic_cnc_api.register_spike(recipeitem, groups, images, description)
-
-if recipename == "default:dirt" then
-       return
-end
-
-local spikebox = {}
-local detail = technic_cnc_api.detail_level
-for i = 0, detail-1 do
-        spikebox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail)-0.5+(1/detail), 0.5-(i/detail/2)}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_spike", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = spikebox,
-        },
-        groups = groups,
-        })
-end
-
-
--- Block one curved edge 
-------------------------
-function technic_cnc_api.register_onecurvededge(recipeitem, groups, images, description)
-
-local quartercyclebox = {}
-local detail = technic_cnc_api.detail_level*2
-local sehne
-for i = (detail/2)-1, detail-1 do
-        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
-        quartercyclebox[i]={-0.5, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_onecurvededge", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = quartercyclebox,
-        },
-        groups = groups,
-        })
-end
-
-
--- Block two curved edges 
--------------------------
-function technic_cnc_api.register_twocurvededge(recipeitem, groups, images, description)
-
-local quartercyclebox2 = {}
-local detail = technic_cnc_api.detail_level*2
-local sehne
-for i = (detail/2)-1, detail-1 do
-        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
-        quartercyclebox2[i]={-sehne, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_twocurvededge", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = quartercyclebox2,
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_twocurvededge 3",
-                recipe = {
-                        {"", "", ""},
-                        {recipeitem .. "_technic_cnc_onecurvededge", "", ""},
-                        {recipeitem .. "_technic_cnc_onecurvededge", recipeitem .. "_technic_cnc_onecurvededge", ""},         
-                },
-        })
-
-end
-
--- Cylinder
------------
-function technic_cnc_api.register_cylinder(recipeitem, groups, images, description)
-
-if recipename == "default:dirt" then
-return
-end
-
-local cylbox = {}
-local detail = technic_cnc_api.detail_level
-local sehne
-for i = 1, detail-1 do
-        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
-        cylbox[i]={(i/detail)-0.5, -0.5, -sehne, (i/detail)+(1/detail)-0.5, 0.5, sehne}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_cylinder", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = cylbox,
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_cylinder 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_cylinder_horizontal", ""},
-                        {"", "", ""},           
-                },
-        })
-
-end
-
-
--- Cylinder Horizontal
-----------------------
-function technic_cnc_api.register_cylinder_horizontal(recipeitem, groups, images, description)
-
-if recipename == "default:dirt" then
-       return
-end
-
-local cylbox_horizontal = {}
-local detail = technic_cnc_api.detail_level
-local sehne
-for i = 1, detail-1 do
-        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
-        cylbox_horizontal[i]={-0.5, (i/detail)-0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, sehne}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_cylinder_horizontal", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = cylbox_horizontal,
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_cylinder_horizontal 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_cylinder", ""},
-                        {"", "", ""},           
-                },
-        })
-end
-
-
--- Sphere
----------
-function technic_cnc_api.register_sphere(recipeitem, groups, images, description)
-
-if recipename == "default:dirt" then
-       return
-end
-
-local spherebox = {}
-local detail = technic_cnc_api.detail_level
-local sehne
-for i = 1, detail-1 do
-        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
-        spherebox[i]={-sehne, (i/detail)-0.5, -sehne, sehne, (i/detail)+(1/detail)-0.5, sehne}
-end
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_sphere", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = spherebox,
-        },
-        groups = groups,
-        })
-end
-
-
--- Element straight
--------------------
-function technic_cnc_api.register_element_straight(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_straight", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
-                        },
-        },
-        groups = groups,
-        })
-end
-
-
--- Element Edge
----------------
-function technic_cnc_api.register_element_edge(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_edge", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-end
-
-
--- Element T
-------------
-function technic_cnc_api.register_element_t(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_t", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        {0.3, -0.5, -0.3, 0.5, 0, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        {0.3, -0.5, -0.3, 0.5, 0, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-end
-
-
--- Element Cross
-----------------
-function technic_cnc_api.register_element_cross(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_cross", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {0.3, -0.5, -0.3, 0.5, 0, 0.3},
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {0.3, -0.5, -0.3, 0.5, 0, 0.3},
-                        {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
-                        {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-end
-
-
--- Element End
---------------
-function technic_cnc_api.register_element_end(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_end", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
-        },
-        groups = groups,
-        })
-end
+local cnc_cylinder_horizontal =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      local sehne
+      for i = 1, detail-1 do
+        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+        nodebox[i]={-0.5, (i/detail)-0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, sehne}
+      end
+      return nodebox
+   end
 
+local cnc_cylinder =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      local sehne
+      for i = 1, detail-1 do
+        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+        nodebox[i]={(i/detail)-0.5, -0.5, -sehne, (i/detail)+(1/detail)-0.5, 0.5, sehne}
+      end
+      return nodebox
+   end
 
--- Element straight DOUBLE
---------------------------
-function technic_cnc_api.register_element_straight_double(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_straight_double", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
-                        },
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_element_straight_double 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_element_straight", ""},
-                        {"", recipeitem .. "_technic_cnc_element_straight", ""},           
-                },
-        })
-end
+local cnc_twocurvededge =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level*2
+      local sehne
+      for i = (detail/2)-1, detail-1 do
+        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+        nodebox[i]={-sehne, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
+      end
+      return nodebox
+   end
 
+local cnc_onecurvededge =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level*2
+      local sehne
+      for i = (detail/2)-1, detail-1 do
+        sehne = math.sqrt(0.25 - (((i/detail)-0.5)^2))
+        nodebox[i]={-0.5, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5}
+      end 
+     return nodebox
+   end
 
--- Element Edge DOUBLE
-----------------------
-function technic_cnc_api.register_element_edge_double(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_edge_double", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_element_edge_double 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_element_edge", ""},
-                        {"", recipeitem .. "_technic_cnc_element_edge", ""},               
-                },
-        })
+local cnc_spike =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail)-0.5+(1/detail), 0.5-(i/detail/2)}
 end
+      return nodebox
+   end
 
+local cnc_pyramid =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level/2
+      for i = 0, detail-1 do
+        nodebox[i+1]={(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail/2)-0.5+(1/detail), 0.5-(i/detail/2)}
+      end
+      return nodebox
+   end
 
--- Element T DOUBLE
--------------------
-function technic_cnc_api.register_element_t_double(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_t_double", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_element_t_double 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_element_t", ""},
-                        {"", recipeitem .. "_technic_cnc_element_t", ""},          
-                },
-        })
-end
+local cnc_slope_inner_edge_upsdown =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={0.5-(i/detail)-(1/detail), (i/detail)-0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+        nodebox[i+detail+1]={-0.5, (i/detail)-0.5, 0.5-(i/detail)-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
+local cnc_slope_edge_upsdown =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={(-1*(i/detail))+0.5-(1/detail), (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
--- Element Cross Double
------------------------
-function technic_cnc_api.register_element_cross_double(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_cross_double", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {
-                        {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        },
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {
-                        {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
-                        {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
-                        {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
-                        },
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_element_cross_double 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_element_cross", ""},
-                        {"", recipeitem .. "_technic_cnc_element_cross", ""},              
-                        },
-        })
+local cnc_slope_inner_edge =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={(i/detail)-0.5, -0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+        nodebox[i+detail+1]={-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
-end
+local cnc_slope_edge =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
+local cnc_slope_upsdown =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={-0.5, (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
--- Element End Double
----------------------
-function technic_cnc_api.register_element_end_double(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_element_end_double", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_element_end_double 1",
-                recipe = {
-                        {"", "", ""},
-                        {"", recipeitem .. "_technic_cnc_element_end", ""},
-                        {"", recipeitem .. "_technic_cnc_element_end", ""},                
-                        },
-        })
-end
+local cnc_slope_lying =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={(i/detail)-0.5, -0.5, (i/detail)-0.5, (i/detail)-0.5+(1/detail), 0.5 , 0.5}
+      end
+      return nodebox
+   end
 
+local cnc_slope =
+   function()
+      local nodebox = {}
+      local detail = technic_cnc_api.detail_level
+      for i = 0, detail-1 do
+        nodebox[i+1]={-0.5, (i/detail)-0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5}
+      end
+      return nodebox
+   end
 
--- STICK
---------
-function technic_cnc_api.register_stick(recipeitem, groups, images, description)
-
-minetest.register_node(":" .. recipeitem .. "_technic_cnc_stick", {
-        description = description,
-        drawtype = "nodebox",
-        tiles = images,
-        paramtype = "light",
-        paramtype2 = "facedir",
-        walkable = true,
-        selection_box = {
-                type = "fixed",
-                fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
-        },
-        node_box = {
-                type = "fixed",
-                fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
-        },
-        groups = groups,
-        })
-        minetest.register_craft({
-                output = recipeitem .. "_technic_cnc_stick 8",
-                recipe = {
-                        {'default:stick', "", ""},
-                        {"", "", ""},
-                        {recipeitem, "", ""},           
-                },
-        })
+-- Define slope boxes for the various nodes
+-------------------------------------------
+technic_cnc_api.cnc_programs = {
+   {suffix  = "technic_cnc_stick",
+    nodebox = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
+    desc    = "Stick"},
+
+   {suffix  = "technic_cnc_element_end_double",
+    nodebox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
+    desc    = "Element End Double"},
+
+   {suffix  = "technic_cnc_element_cross_double",
+    nodebox = {
+       {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
+       {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+       {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
+    desc    = "Element Cross Double"},
+
+   {suffix  = "technic_cnc_element_t_double",
+    nodebox = {
+       {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+       {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
+       {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}},
+    desc    = "Element T Double"},
+
+   {suffix  = "technic_cnc_element_edge_double",
+    nodebox = {
+       {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
+       {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
+    desc    = "Element Edge Double"},
+
+   {suffix  = "technic_cnc_element_straight_double",
+    nodebox = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
+    desc    = "Element Straight Double"},
+
+   {suffix  = "technic_cnc_element_end",
+    nodebox = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
+    desc    = "Element End"},
+
+   {suffix  = "technic_cnc_element_cross",
+    nodebox = {
+       {0.3, -0.5, -0.3, 0.5, 0, 0.3},
+       {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+       {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
+    desc    = "Element Cross"},
+
+   {suffix  = "technic_cnc_element_t",
+    nodebox = {
+       {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+       {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
+       {0.3, -0.5, -0.3, 0.5, 0, 0.3}},
+    desc    = "Element T"},
+
+   {suffix  = "technic_cnc_element_edge",
+    nodebox = {
+       {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
+       {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
+    desc    = "Element Edge"},
+
+   {suffix  = "technic_cnc_element_straight",
+    nodebox = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
+    desc    = "Element Straight"},
+
+   {suffix  = "technic_cnc_sphere",
+    nodebox = cnc_sphere(),
+    desc    = "Sphere"},
+
+   {suffix  = "technic_cnc_cylinder_horizontal",
+    nodebox = cnc_cylinder_horizontal(),
+    desc    = "Cylinder Horizontal"},
+
+   {suffix  = "technic_cnc_cylinder",
+    nodebox = cnc_cylinder(),
+    desc    = ""},
+
+   {suffix  = "technic_cnc_twocurvededge",
+    nodebox = cnc_twocurvededge(),
+    desc    = "One Curved Edge Block"},
+
+   {suffix  = "technic_cnc_onecurvededge",
+    nodebox = cnc_onecurvededge(),
+    desc    = "Two Curved Edge Block"},
+
+   {suffix  = "technic_cnc_spike",
+    nodebox = cnc_spike(),
+    desc    = "Spike"},
+
+   {suffix  = "technic_cnc_pyramid",
+    nodebox = cnc_pyramid(),
+    desc    = "Pyramid"},
+
+   {suffix  = "technic_cnc_slope_inner_edge_upsdown",
+    nodebox = cnc_slope_inner_edge_upsdown(),
+    desc    = "Slope Upside Down Inner Edge"},
+
+   {suffix  = "technic_cnc_slope_edge_upsdown",
+    nodebox = cnc_slope_edge_upsdown(),
+    desc    = "Slope Upside Down Edge"},
+
+   {suffix  = "technic_cnc_slope_inner_edge",
+    nodebox = cnc_slope_inner_edge(),
+    desc    = "Slope Inner Edge"},
+
+   {suffix  = "technic_cnc_slope_edge",
+    nodebox = cnc_slope_edge(),
+    desc    = "Slope Edge"},
+
+   {suffix  = "technic_cnc_slope_upsdown",
+    nodebox = cnc_slope_upsdown(),
+    desc    = "Slope Upside Down"},
+
+   {suffix  = "technic_cnc_slope_lying",
+    nodebox = cnc_slope_lying(),
+    desc    = "Slope Lying"},
+
+   {suffix  = "technic_cnc_slope",
+    nodebox = cnc_slope(),
+    desc    = "Slope"},
+--   {suffix  = "",
+--    nodebox =},
+}
+
+-- Allow disabling certain programs for some node. Default is allowing all types for all nodes
+technic_cnc_api.cnc_programs_disable = {
+   -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
+   -- ...
+   ["default:dirt"] = {"technic_cnc_sphere", "technic_cnc_slope_upsdown", "technic_cnc_edge",
+                      "technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown", "technic_cnc_slope_inner_edge_upsdown",
+                      "technic_cnc_stick", "technic_cnc_cylinder_horizontal"}
+}
+
+-- Generic function for registering all the different node types
+function technic_cnc_api.register_cnc_program(recipeitem, suffix, nodebox, groups, images, description)
+   minetest.register_node(":" .. recipeitem .. "_" .. suffix, {
+                            description   = description,
+                            drawtype      = "nodebox",
+                            tiles         = images,
+                            paramtype     = "light",
+                            paramtype2    = "facedir",
+                            walkable      = true,
+                            selection_box = {
+                               type  = "fixed",
+                               fixed = nodebox
+                            },
+                            node_box      = {
+                               type  = "fixed",
+                               fixed = nodebox
+                            },
+                            groups        = groups,
+                         })
+end
+
+-- function to iterate over all the programs the CNC machine knows
+function technic_cnc_api.register_all(recipeitem, groups, images, description)
+   for _, data in ipairs(technic_cnc_api.cnc_programs) do
+      -- Disable node creation for disabled node types for some material
+      local do_register = true
+      if technic_cnc_api.cnc_programs_disable[recipeitem] ~= nil then
+        for __, disable in ipairs(technic_cnc_api.cnc_programs_disable[recipeitem]) do
+           if disable == data.suffix then
+              do_register = false
+           end
+        end
+      end
+      -- Create the node if it passes the test
+      if do_register then
+        technic_cnc_api.register_cnc_program(recipeitem, data.suffix, data.nodebox, groups, images, description.." "..data.desc)
+      end
+   end
 end
 
 
-
 -- REGISTER NEW TECHNIC_CNC_API's PART 2: technic_cnc_api.register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
 -----------------------------------------------------------------------------------------------------------------------
 function technic_cnc_api.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_sphere, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
index 2f375a57e027afeb645be408558eeb307a2349cc..df82385bca48762fb12207bffd37fb56a6671a33 100644 (file)
 -- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS:
 -----------------------------------------------------------
-
--- WOOD
--------
-technic_cnc_api.register_slope_edge_etc("default:wood",
-                {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
-                {"default_wood.png"},
-                "Wooden Slope",
-                "Wooden Slope Lying",
-                "Wooden Slope Upside Down",
-                "Wooden Slope Edge",
-                "Wooden Slope Inner Edge",
-                "Wooden Slope Upside Down Edge",
-                "Wooden Slope Upside Down Inner Edge",
-                "Wooden Pyramid",
-                "Wooden Spike",
-                "Wooden One Curved Edge Block",
-                "Wooden Two Curved Edge Block",
-                "Wooden Cylinder",
-                "Wooden Cylinder Horizontal",
-                "Wooden Sphere",
-                "Wooden Element Straight",
-                "Wooden Element Edge",
-                "Wooden Element T",
-                "Wooden Element Cross",
-                "Wooden Element End")
--- STONE
---------
-technic_cnc_api.register_slope_edge_etc("default:stone",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_stone.png"},
-                "Stone Slope",
-                "Stone Slope Lying",
-                "Stone Slope Upside Down",
-                "Stone Slope Edge",
-                "Stone Slope Inner Edge",
-                "Stone Slope Upside Down Edge",
-                "Stone Slope Upside Down Inner Edge",
-                "Stone Pyramid",
-                "Stone Spike",
-                "Stone One Curved Edge Block",
-                "Stone Two Curved Edge Block",
-                "Stone Cylinder",
-                "Stote Cylinder Horizontal",
-                "Stone Sphere",
-                "Stone Element Straight",
-                "Stone Element Edge",
-                "Stone Element T",
-                "Stone Element Cross",
-                "Stone Element End")
--- COBBLE
----------
-technic_cnc_api.register_slope_edge_etc("default:cobble",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_cobble.png"},
-                "Cobble Slope",
-                "Cobble Slope Lying",
-                "Cobble Slope Upside Down",
-                "Cobble Slope Edge",
-                "Cobble Slope Inner Edge",
-                "Cobble Slope Upside Down Edge",
-                "Cobble Slope Upside Down Inner Edge",
-                "Cobble Pyramid",
-                "Cobble Spike",
-                "Cobble One Curved Edge Block",
-                "Cobble Two Curved Edge Block",
-                "Cobble Cylinder",
-                "Cobble Cylinder Horizontal",
-                "Cobble Sphere",
-                "Cobble Element Straight",
-                "Cobble Element Edge",
-                "Cobble Element T",
-                "Cobble Element Cross",
-                "Cobble Element End")
--- BRICK
---------
-technic_cnc_api.register_slope_edge_etc("default:brick",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_brick.png"},
-                "Brick Slope",
-                "Brick Slope Upside Down",
-                "Brick Slope Edge",
-                "Brick Slope Inner Edge",
-                "Brick Slope Upside Down Edge",
-                "Brick Slope Upside Down Inner Edge",
-                "Brick Pyramid",
-                "Brick Spike",
-                "Brick One Curved Edge Block",
-                "Brick Two Curved Edge Block",
-                "Brick Cylinder",
-                "Brick Cylinder Horizontal",
-                "Brick Sphere",
-                "Brick Element Straight",
-                "Brick Element Edge",
-                "Brick Element T",
-                "Brick Element Cross",
-                "Brick Element End")
--- SANDSTONE
-------------
-technic_cnc_api.register_slope_edge_etc("default:sandstone",
-                {crumbly=2,cracky=2,not_in_creative_inventory=1},
-                {"default_sandstone.png"},
-                "Sandstone Slope",
-                "Sandstone Slope Lying",
-                "Sandstone Slope Upside Down",
-                "Sandstone Slope Edge",
-                "Sandstone Slope Inner Edge",
-                "Sandstone Slope Upside Down Edge",
-                "Sandstone Slope Upside Down Inner Edge",
-                "Sandstone Pyramid",
-                "Sandstone Spike",
-                "Sandstone One Curved Edge Block",
-                "Sandstone Two Curved Edge Block",
-                "Sandstone Cylinder",
-                "Sandstone Cylinder Horizontal",
-                "Sandstone Sphere",
-                "Sandstone Element Straight",
-                "Sandstone Element Edge",
-                "Sandstone Element T",
-                "Sandstone Element Cross",
-                "Sandstone Element End")
--- LEAVES
----------
-technic_cnc_api.register_slope_edge_etc("default:leaves",
-                {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
-                {"bucharest_tree.png"},
-                "Leaves Slope",
-                "Leaves Slope Lying",
-                "Leaves Slope Upside Down",
-                "Leaves Slope Edge",
-                "Leaves Slope Inner Edge",
-                "Leaves Slope Upside Down Edge",
-                "Leaves Slope Upside Down Inner Edge",
-                "Leaves Pyramid",
-                "Leaves Spike",
-                "Leaves One Curved Edge Block",
-                "Leaves Two Curved Edge Block",
-                "Leaves Cylinder",
-                "Leaves Cylinder Horizontal",
-                "Leaves Sphere",
-                "Leaves Element Straight",
-                "Leaves Element Edge",
-                "Leaves Element T",
-                "Leaves Element Cross",
-                "Leaves Element End")
 -- DIRT
 -------
-technic_cnc_api.register_slope_edge_etc("default:dirt",
+technic_cnc_api.register_all("default:dirt",
                 {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
                 {"default_grass.png", "default_dirt.png", "default_grass.png"},
-                "Dirt Slope",
-                "Dirt Slope Lying",
-                "Dirt Slope Upside Down",
-                "Dirt Slope Edge",
-                "Dirt Slope Inner Edge",
-                "Dirt Slope Upside Down Edge",
-                "Dirt Slope Upside Down Inner Edge",
-                "Dirt Pyramid",
-                "Dirt Spike",
-                "Dirt One Curved Edge Block",
-                "Dirt Two Curved Edge Block",
-                "Dirt Cylinder",
-                "Dirt Cylinder Horizontal",
-                "Dirt Sphere",
-                "Dirt Element Straight",
-                "Dirt Element Edge",
-                "Dirt Element T",
-                "Dirt Element Cross",
-                "Dirt Element End")
--- TREE
--------
-technic_cnc_api.register_slope_edge_etc("default:tree",
-                {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,not_in_creative_inventory=1},
-                {"default_tree.png"},
-                "Tree Slope",
-                "Tree Slope Lying",
-                "Tree Slope Upside Down",
-                "Tree Slope Edge",
-                "Tree Slope Inner Edge",
-                "Tree Slope Upside Down Edge",
-                "Tree Slope Upside Down Inner Edge",
-                "Tree Pyramid",
-                "Tree Spike",
-                "Tree One Curved Edge Block",
-                "Tree Two Curved Edge Block",
-                "Tree Cylinder",
-                "Tree Cylinder Horizontal",
-                "Tree Sphere",
-                "Tree Element Straight",
-                "Tree Element Edge",
-                "Tree Element T",
-                "Tree Element Cross",
-                "Tree Element End")
--- STEEL
---------
-technic_cnc_api.register_slope_edge_etc("default:steelblock",
-                {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
-                {"default_steel_block.png"},
-                "Steel Slope",
-                "Steel Slope Lying",
-                "Steel Slope Upside Down",
-                "Steel Slope Edge",
-                "Steel Slope Inner Edge",
-                "Steel Slope Upside Down Edge",
-                "Steel Slope Upside Down Inner Edge",
-                "Steel Pyramid",
-                "Steel Spike",
-                "Steel One Curved Edge Block",
-                "Steel Two Curved Edge Block",
-                "Steel Cylinder",
-                "Steel Cylinder Horizontal",
-                "Steel Sphere",
-                "Steel Element Straight",
-                "Steel Element Edge",
-                "Steel Element T",
-                "Steel Element Cross",
-                "Steel Element End")
-
--- REGISTER MATERIALS AND PROPERTIES FOR STICKS:
-------------------------------------------------
+                "Dirt")
+technic_cnc_api.cnc_programs_disable["default:dirt"] = {"technic_cnc_sphere", "technic_cnc_slope_upsdown",
+                                                       "technic_cnc_edge",   "technic_cnc_inner_edge",
+                                                       "technic_cnc_slope_edge_upsdown", "technic_cnc_slope_inner_edge_upsdown",
+                                                       "technic_cnc_stick", "technic_cnc_cylinder_horizontal"}
 
--- WOOD
--------
-technic_cnc_api.register_stick_etc("default:wood",
-                {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
-                {"default_wood.png"},
-                "Wooden Stick")
--- STONE
---------
-technic_cnc_api.register_stick_etc("default:stone",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_stone.png"},
-                "Stone Stick")
--- COBBLE
----------
-technic_cnc_api.register_stick_etc("default:cobble",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_cobble.png"},
-                "Cobble Stick")
--- BRICK
---------
-technic_cnc_api.register_stick_etc("default:brick",
-                {cracky=3,not_in_creative_inventory=1},
-                {"default_brick.png"},
-                "Brick Stick")
--- SANDSTONE
-------------
-technic_cnc_api.register_stick_etc("default:sandstone",
-                {crumbly=2,cracky=2,not_in_creative_inventory=1},
-                {"default_sandstone.png"},
-                "Sandstone Stick")
--- LEAVES
----------
-technic_cnc_api.register_stick_etc("default:leaves",
-                {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
-                {"bucharest_tree.png"},
-                "Leaves Stick")
 -- TREE
 -------
-technic_cnc_api.register_stick_etc("default:tree",
-                {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1,not_in_creative_inventory=1},
+technic_cnc_api.register_all("default:tree",
+                {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
                 {"default_tree.png"},
-                "Tree Stick")
--- STEEL
---------
-technic_cnc_api.register_stick_etc("default:steelblock",
-                {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
-                {"default_steel_block.png"},
-                "Steel Stick")
-
--- REGISTER MATERIALS AND PROPERTIES FOR HALF AND NORMAL HEIGHT ELEMENTS:
--------------------------------------------------------------------------
+                "Wooden")
 
 -- WOOD
 -------
-technic_cnc_api.register_elements("default:wood",
+technic_cnc_api.register_all("default:wood",
                 {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
                 {"default_wood.png"},
-                "Wooden Element Straight Double",
-                "Wooden Element Edge Double",
-                "Wooden Element T Double",
-                "Wooden Element Cross Double",
-                "Wooden Element End Double")
+                "Wooden")
 -- STONE
 --------
-technic_cnc_api.register_elements("default:stone",
+technic_cnc_api.register_all("default:stone",
                 {cracky=3,not_in_creative_inventory=1},
                 {"default_stone.png"},
-                "Stone Element Straight Double",
-                "Stone Element Edge Double",
-                "Stone Element T Double",
-                "Stone Element Cross Double",
-                "Stone Element End Double")
+                "Stone")
 -- COBBLE
 ---------
-technic_cnc_api.register_elements("default:cobble",
+technic_cnc_api.register_all("default:cobble",
                 {cracky=3,not_in_creative_inventory=1},
                 {"default_cobble.png"},
-                "Cobble Element Straight Double",
-                "Cobble Element Edge Double",
-                "Cobble Element T Double",
-                "Cobble Element Cross Double",
-                "Cobble Element End Double")
+                "Cobble")
 -- BRICK
 --------
-technic_cnc_api.register_elements("default:brick",
+technic_cnc_api.register_all("default:brick",
                 {cracky=3,not_in_creative_inventory=1},
                 {"default_brick.png"},
-                "Brick Element Straight Double",
-                "Brick Element Edge Double",
-                "Brick Element T Double",
-                "Brick Element Cross Double",
-                "Brick Element End Double")
+                "Brick")
+
 -- SANDSTONE
 ------------
-technic_cnc_api.register_elements("default:sandstone",
+technic_cnc_api.register_all("default:sandstone",
                 {crumbly=2,cracky=2,not_in_creative_inventory=1},
                 {"default_sandstone.png"},
-                "Sandstone Element Straight Double",
-                "Sandstone Element Edge Double",
-                "Sandstone Element T Double",
-                "Sandstone Element Cross Double",
-                "Sandstone Element End Double")
+                "Sandstone")
+
 -- LEAVES
 ---------
-technic_cnc_api.register_elements("default:leaves",
+technic_cnc_api.register_all("default:leaves",
                 {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
                 {"bucharest_tree.png"},
-                "Leaves Element Straight Double",
-                "Leaves Element Edge Double",
-                "Leaves Element T Double",
-                "Leaves Element Cross Double",
-                "Leaves Element End Double")
+                "Leaves")
 -- TREE
 -------
-technic_cnc_api.register_elements("default:tree",
+technic_cnc_api.register_all("default:tree",
                 {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1,not_in_creative_inventory=1},
                 {"default_tree.png"},
-                "Tree Element Straight Double",
-                "Tree Element Edge Double",
-                "Tree Element T Double",
-                "Tree Element Cross Double",
-                "Tree Element End Double")
+                "Tree")
 -- STEEL
 --------
-technic_cnc_api.register_elements("default:steel",
+technic_cnc_api.register_all("default:steel",
                 {snappy=1,bendy=2,cracky=1,melty=2,level=2,not_in_creative_inventory=1},
                 {"default_steel_block.png"},
-                "Steel Element Straight Double",
-                "Steel Element Edge Double",
-                "Steel Element T Double",
-                "Steel Element Cross Double",
-                "Steel Element End Double")
+                "Steel")