Stairs: Add inner and outer corner stairs
authorTumeniNodes <tumeninodes@gmail.com>
Wed, 5 Jul 2017 17:35:26 +0000 (13:35 -0400)
committerparamat <mat.gregory@virginmedia.com>
Sat, 8 Jul 2017 13:50:17 +0000 (14:50 +0100)
With thanks to MarkuBu for the original PR and GreenXenith for the stair models.

mods/stairs/README.txt
mods/stairs/init.lua
mods/stairs/license.txt
mods/stairs/models/stairs_stair_inner.obj [new file with mode: 0644]
mods/stairs/models/stairs_stair_outer.obj [new file with mode: 0644]

index d32cd71b94b43858e29d83fe7d639404f604bc0d..f2b5b74fac5a6f0bd665ccee00ca26ec41c3e076 100644 (file)
@@ -12,5 +12,7 @@ Authors of media (models)
 -------------------------
 Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> (CC BY-SA 3.0):
   stairs_stair.obj
+GreenXenith (CC BY-SA 3.0)
+  stairs_stair_inner.obj stairs_stair_outer.obj
 
 
index 787c04e04928142f266cdca85223bed326a7d4ef..99da619d3541b8e8291608d844f95cd2bf1b8b6b 100644 (file)
@@ -276,17 +276,170 @@ if replace then
        })
 end
 
+-- Register stairs.
+-- Node will be called stairs:stair_inner_<subname>
+
+function stairs.register_stair_inner(subname, recipeitem, groups, images, description, sounds)
+       local stair_images = {}
+       for i, image in ipairs(images) do
+               if type(image) == "string" then
+                       stair_images[i] = {
+                               name = image,
+                               backface_culling = true,
+                       }
+               elseif image.backface_culling == nil then -- override using any other value
+                       stair_images[i] = table.copy(image)
+                       stair_images[i].backface_culling = true
+               end
+       end
+       groups.stair = 1
+       minetest.register_node(":stairs:stair_inner_" .. subname, {
+               description = description .. " Inner",
+               drawtype = "mesh",
+               mesh = "stairs_stair_inner.obj",
+               tiles = stair_images,
+               paramtype = "light",
+               paramtype2 = "facedir",
+               is_ground_content = false,
+               groups = groups,
+               sounds = sounds,
+               selection_box = {
+                       type = "fixed",
+                       fixed = {
+                               {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+                               {-0.5, 0, 0, 0.5, 0.5, 0.5},
+                               {-0.5, 0, -0.5, 0, 0.5, 0},
+                       },
+               },
+               collision_box = {
+                       type = "fixed",
+                       fixed = {
+                               {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+                               {-0.5, 0, 0, 0.5, 0.5, 0.5},
+                               {-0.5, 0, -0.5, 0, 0.5, 0},
+                       },
+               },
+               on_place = function(itemstack, placer, pointed_thing)
+                       if pointed_thing.type ~= "node" then
+                               return itemstack
+                       end
+
+                       return rotate_and_place(itemstack, placer, pointed_thing)
+               end,
+       })
+
+       if recipeitem then
+               minetest.register_craft({
+                       output = 'stairs:stair_inner_' .. subname .. ' 7',
+                       recipe = {
+                               { "", recipeitem, ""},
+                               { recipeitem, "", recipeitem},
+                               {recipeitem, recipeitem, recipeitem},
+                       },
+               })
+
+               -- Fuel
+               local baseburntime = minetest.get_craft_result({
+                       method = "fuel",
+                       width = 1,
+                       items = {recipeitem}
+               }).time
+               if baseburntime > 0 then
+                       minetest.register_craft({
+                               type = "fuel",
+                               recipe = 'stairs:stair_inner_' .. subname,
+                               burntime = math.floor(baseburntime * 0.875),
+                       })
+               end
+       end
+end
+
+-- Register stairs.
+-- Node will be called stairs:stair_outer_<subname>
+
+function stairs.register_stair_outer(subname, recipeitem, groups, images, description, sounds)
+       local stair_images = {}
+       for i, image in ipairs(images) do
+               if type(image) == "string" then
+                       stair_images[i] = {
+                               name = image,
+                               backface_culling = true,
+                       }
+               elseif image.backface_culling == nil then -- override using any other value
+                       stair_images[i] = table.copy(image)
+                       stair_images[i].backface_culling = true
+               end
+       end
+       groups.stair = 1
+       minetest.register_node(":stairs:stair_outer_" .. subname, {
+               description = description .. " Outer",
+               drawtype = "mesh",
+               mesh = "stairs_stair_outer.obj",
+               tiles = stair_images,
+               paramtype = "light",
+               paramtype2 = "facedir",
+               is_ground_content = false,
+               groups = groups,
+               sounds = sounds,
+               selection_box = {
+                       type = "fixed",
+                       fixed = {
+                               {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+                               {-0.5, 0, 0, 0, 0.5, 0.5},
+                       },
+               },
+               collision_box = {
+                       type = "fixed",
+                       fixed = {
+                               {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+                               {-0.5, 0, 0, 0, 0.5, 0.5},
+                       },
+               },
+               on_place = function(itemstack, placer, pointed_thing)
+                       if pointed_thing.type ~= "node" then
+                               return itemstack
+                       end
+
+                       return rotate_and_place(itemstack, placer, pointed_thing)
+               end,
+       })
+
+       if recipeitem then
+               minetest.register_craft({
+                       output = 'stairs:stair_outer_' .. subname .. ' 6',
+                       recipe = {
+                               { "", "", ""},
+                               { "", recipeitem, ""},
+                               {recipeitem, recipeitem, recipeitem},
+                       },
+               })
+
+               -- Fuel
+               local baseburntime = minetest.get_craft_result({
+                       method = "fuel",
+                       width = 1,
+                       items = {recipeitem}
+               }).time
+               if baseburntime > 0 then
+                       minetest.register_craft({
+                               type = "fuel",
+                               recipe = 'stairs:stair_outer_' .. subname,
+                               burntime = math.floor(baseburntime * 0.625),
+                       })
+               end
+       end
+end
 
 -- Stair/slab registration function.
 -- Nodes will be called stairs:{stair,slab}_<subname>
 
-function stairs.register_stair_and_slab(subname, recipeitem,
-               groups, images, desc_stair, desc_slab, sounds)
+function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)
        stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds)
+       stairs.register_stair_inner(subname, recipeitem, groups, images, desc_stair, sounds)
+       stairs.register_stair_outer(subname, recipeitem, groups, images, desc_stair, sounds)
        stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds)
 end
 
-
 -- Register default stairs and slabs
 
 stairs.register_stair_and_slab(
index 8f16bbd7b8e8e21ccccc6e16cb6380fc32c3b96b..411823aed5441d4d09cb1f2a43d1c0bce68234f4 100644 (file)
@@ -21,6 +21,7 @@ Licenses of media (models)
 
 Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
 Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com>
+Copyright (C) 2017 GreenXenith
 
 You are free to:
 Share — copy and redistribute the material in any medium or format.
diff --git a/mods/stairs/models/stairs_stair_inner.obj b/mods/stairs/models/stairs_stair_inner.obj
new file mode 100644 (file)
index 0000000..5e4968e
--- /dev/null
@@ -0,0 +1,161 @@
+# Blender v2.78 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib stairs_inner_stair.mtl
+o stairs_back_right_stairs_back.001
+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.0000 0.0000
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.0000
+vn 0.0000 -0.0000 1.0000
+usemtl None.001
+s 1
+f 1/1/1 2/2/1 3/3/1 4/4/1
+o stairs_front_right_stairs_back.003
+v 0.000000 0.000000 -0.500000
+v 0.000000 0.000000 0.000000
+v 0.000000 0.500000 0.000000
+v 0.000000 0.500000 -0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 0.000000 0.000000
+v -0.500000 0.500000 0.500000
+v -0.500000 0.500000 0.000000
+v -0.500000 -0.500000 0.500000
+vt 0.0000 0.5000
+vt 0.5000 0.5000
+vt 0.5000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5000
+vt 0.0000 0.0000
+vt 0.5000 0.5000
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vt 1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+usemtl None
+s 1
+f 5/5/2 6/6/2 7/7/2 8/8/2
+f 9/9/2 10/10/2 11/11/2
+f 11/11/2 12/12/2 13/13/2
+f 10/10/2 14/14/2 11/11/2
+f 14/14/2 12/12/2 11/11/2
+o stairs_bottom
+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.0000 0.0000
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.0000
+vn 0.0000 -1.0000 -0.0000
+usemtl None
+s 1
+f 15/15/3 16/16/3 17/17/3 18/18/3
+o stairs_front_left_stairs_front.002
+v -0.500000 0.000000 0.000000
+v -0.500000 0.500000 0.000000
+v 0.000000 0.500000 0.000000
+v 0.000000 0.000000 0.000000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 0.000000 -0.500000
+v 0.500000 0.000000 -0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.000000 0.000000 -0.500000
+v 0.000000 0.500000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+vt 1.0000 0.5000
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vt 0.5000 0.5000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 0.0000 0.5000
+vt 0.0000 0.0000
+vt 0.5000 0.5000
+vt 0.5000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5000
+vn 0.0000 0.0000 -1.0000
+usemtl None
+s 1
+f 19/19/4 20/20/4 21/21/4 22/22/4
+f 23/23/4 24/24/4 25/25/4 26/26/4
+f 27/27/4 28/28/4 29/29/4 30/30/4
+o stairs_top_stairs_top.001
+v 0.000000 0.000000 -0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 0.000000 0.000000
+v 0.000000 0.000000 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.000000
+v -0.500000 0.500000 0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 0.500000 0.000000
+v -0.500000 0.500000 0.000000
+vt 0.5000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5000
+vt 0.5000 0.5000
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vt 0.5000 0.5000
+vt 1.0000 0.5000
+vt 0.0000 0.0000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 0.0000 0.5000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 31/31/5 32/32/5 33/33/5 34/34/5
+f 35/35/5 36/36/5 37/37/5 38/38/5
+f 39/39/5 40/40/5 41/41/5 42/42/5
+o stairs_back_left_stairs_back.005
+v 0.500000 0.000000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.000000
+v 0.500000 0.000000 0.000000
+v 0.500000 0.000000 0.000000
+v 0.500000 0.500000 0.000000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.000000 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.500000 -0.000000
+v 0.500000 -0.500000 -0.000000
+v 0.500000 0.000000 0.000000
+v 0.500000 -0.000000 0.500000
+v 0.500000 -0.500000 0.500000
+vt 0.5000 0.5000
+vt 0.5000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 0.5000 0.5000
+vt 0.5000 0.0000
+vt 0.5000 0.0000
+vt 0.5000 0.5000
+vt 0.0000 0.5000
+vt 0.0000 0.0000
+vt 1.0000 0.5000
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vt 0.5000 0.5000
+vn 1.0000 0.0000 0.0000
+usemtl None
+s 1
+f 47/43/6 48/44/6 49/45/6 50/46/6
+f 51/47/6 52/48/6 53/49/6 54/50/6
+f 55/51/6 56/52/6 57/53/6 58/54/6
+usemtl None.002
+f 43/55/6 44/56/6 45/57/6 46/58/6
diff --git a/mods/stairs/models/stairs_stair_outer.obj b/mods/stairs/models/stairs_stair_outer.obj
new file mode 100644 (file)
index 0000000..cc1975b
--- /dev/null
@@ -0,0 +1,136 @@
+# Blender v2.78 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib stairs_outer_stair.mtl
+o stairs_bottom
+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.0000 0.0000
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vt 0.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
+o stairs_back_left_stairs_left
+v 0.500000 0.000000 0.000000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+v 0.500000 0.500000 0.000000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+vt 0.5000 0.5000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 0.5000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+usemtl None
+s 1
+f 5/5/2 6/6/2 7/7/2
+f 5/5/2 8/8/2 9/9/2
+f 6/6/2 5/5/2 10/10/2
+f 5/5/2 9/9/2 10/10/2
+o stairs_back_right_stairs_back
+v 0.000000 -0.500000 0.500000
+v 0.000000 -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.000000 0.500000
+v 0.500000 0.500000 0.500000
+v 0.000000 0.500000 0.500000
+vt 0.5000 0.0000
+vt 0.5000 0.5000
+vt 0.0000 0.5000
+vt 0.0000 0.0000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vn 0.0000 -0.0000 1.0000
+usemtl None
+s 1
+f 11/11/3 12/12/3 13/13/3 14/14/3
+f 15/15/3 16/16/3 12/12/3 11/11/3
+f 16/16/3 17/17/3 18/18/3 12/12/3
+o stairs_top_stairs_top.001
+v 0.000000 0.500000 0.500000
+v 0.501689 0.500000 0.500000
+v 0.501689 0.500000 0.000000
+v 0.000000 0.500000 0.000000
+v -0.500000 -0.000000 0.500000
+v 0.001689 -0.000000 0.500000
+v 0.001689 0.000000 0.000000
+v -0.500000 0.000000 0.000000
+v 0.500000 0.000000 -0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 0.000000 0.000000
+v 0.500000 0.000000 0.000000
+vt 0.5000 0.0000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt 0.5000 0.5000
+vt 0.0000 0.0000
+vt 0.5000 0.0000
+vt 0.5000 0.5000
+vt 0.0000 0.5000
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5000
+vt 1.0000 0.5000
+vn 0.0000 1.0000 0.0000
+usemtl None
+s 1
+f 19/19/4 20/20/4 21/21/4 22/22/4
+usemtl None.004
+f 23/23/4 24/24/4 25/25/4 26/26/4
+f 27/27/4 28/28/4 29/29/4 30/30/4
+o stairs_front_left_stairs_front.000
+v -0.500000 -0.500000 -0.500000
+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.000000
+v 0.500000 0.000000 0.000000
+v 0.000000 0.000000 0.000000
+v 0.000000 0.500000 0.000000
+vt 1.0000 0.0000
+vt 1.0000 0.5000
+vt -0.0000 0.5000
+vt -0.0000 0.0000
+vt 0.5000 0.5000
+vt 0.5000 1.0000
+vt -0.0000 1.0000
+vt -0.0000 0.5000
+vn 0.0000 0.0000 -1.0000
+usemtl None.001
+s 1
+f 31/31/5 32/32/5 33/33/5 34/34/5
+usemtl None.003
+f 37/35/5 38/36/5 35/37/5 36/38/5
+o stairs_front_right_stairs_right.001_stairs_front_left_stairs_front.002
+v -0.500000 -0.500000 0.500000
+v -0.500000 0.000000 0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.000000 0.000000 0.500000
+v 0.000000 0.500000 0.500000
+v 0.000000 0.500000 -0.000000
+v -0.000000 0.000000 0.000000
+vt 1.0000 0.0000
+vt 1.0000 0.5021
+vt -0.0000 0.5021
+vt -0.0000 0.0000
+vt 1.0000 0.5021
+vt 1.0000 1.0000
+vt 0.5000 1.0000
+vt 0.5000 0.5021
+vn -1.0000 0.0000 0.0000
+usemtl None.002
+s 1
+f 39/39/6 40/40/6 41/41/6 42/42/6
+f 43/43/6 44/44/6 45/45/6 46/46/6