Merge 'torches' mod as default:torch.
authorAuke Kok <sofar@foo-projects.org>
Wed, 12 Oct 2016 04:05:10 +0000 (21:05 -0700)
committerAuke Kok <sofar+github@foo-projects.org>
Wed, 23 Nov 2016 23:29:53 +0000 (15:29 -0800)
This merges the current state of the well-maintained and tested
`torches` mod as I've maintained it for the last 6 months.

This started out as a thorough cleanup of 3D torches by blockmen,
where some of the initial code still remains.

The models were redone entirely from scratch and have been extensively
tested with dozens of animated textures converted with mcimport,
and look a lot better than the original 3D Torches mod.

The ceiling torch is retained and functional. The `wieldlight`
addition that the torches mod has was removed, since it relies
on wieldview to look decent. This can stay external mod code.

I've opted to move the torch nodes to a separate file. It's not
a lot of code but nodes.lua is already huge, and I wanted to
retain the copyright header and some of the readme.txt notes,
and this was the easiest way of doing it.

This code passes "default:torch" to nodes with on_rightclick,
fixing problems with itemframes. Essentially it has a more
elaborate item_place() routine to make sure we're not passing
the wall torch to nodes that may display it.

The ceiling torch is a separate model and not the same as the
floor model. That does mean that there are 3 models in this
mod.

mods/default/init.lua
mods/default/models/torch_ceiling.obj [new file with mode: 0644]
mods/default/models/torch_floor.obj [new file with mode: 0644]
mods/default/models/torch_wall.obj [new file with mode: 0644]
mods/default/nodes.lua
mods/default/torch.lua [new file with mode: 0644]

index 08e9efe4964017d5d677a077e02739db44ef2b78..7b5f62f39c4c8e2c9c6853165615687aaf7707fc 100644 (file)
@@ -41,6 +41,7 @@ dofile(default_path.."/functions.lua")
 dofile(default_path.."/trees.lua")
 dofile(default_path.."/nodes.lua")
 dofile(default_path.."/furnace.lua")
+dofile(default_path.."/torch.lua")
 dofile(default_path.."/tools.lua")
 dofile(default_path.."/item_entity.lua")
 dofile(default_path.."/craftitems.lua")
diff --git a/mods/default/models/torch_ceiling.obj b/mods/default/models/torch_ceiling.obj
new file mode 100644 (file)
index 0000000..ea51f3c
--- /dev/null
@@ -0,0 +1,58 @@
+# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend'
+# www.blender.org
+mtllib torch_ceiling.mtl
+o Cube_Cube.001
+v -0.062469 -0.047331 0.068152
+v -0.062469 -0.559515 -0.164388
+v -0.062469 0.004344 -0.045667
+v -0.062469 -0.507839 -0.278206
+v 0.062531 -0.047331 0.068152
+v 0.062531 -0.559515 -0.164388
+v 0.062531 0.004344 -0.045667
+v 0.062531 -0.507839 -0.278206
+v 0.353584 0.040000 0.363553
+v 0.353584 -0.397500 0.363553
+v -0.353522 0.040000 -0.343553
+v -0.353522 -0.397500 -0.343553
+v 0.353584 0.040000 -0.343553
+v -0.353522 0.040000 0.363553
+v 0.353584 -0.397500 -0.343553
+v -0.353522 -0.397500 0.363553
+vt 0.5625 0.5000
+vt 0.5625 0.6250
+vt 0.4375 0.6250
+vt 0.4375 0.5000
+vt 0.4375 0.0000
+vt 0.5625 0.0000
+vt 0.5625 0.1250
+vt 0.4375 0.1250
+vt 0.5625 0.6250
+vt 0.4375 0.6250
+vt 0.4375 0.6250
+vt 0.4375 0.0000
+vt 0.5625 0.6250
+vt 0.5625 0.0000
+vt 1.0000 0.5625
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vt 0.0000 0.5625
+vt 0.0000 0.5625
+vt 1.0000 0.5625
+vt 1.0000 1.0000
+vt 0.0000 1.0000
+vn 0.0000 0.9105 0.4134
+vn -0.0000 -0.4134 0.9105
+vn -1.0000 0.0000 0.0000
+vn 0.7071 0.0000 -0.7071
+vn 0.7071 0.0000 0.7071
+usemtl Material.001
+s off
+f 3/1/1 1/2/1 5/3/1 7/4/1
+f 8/5/1 4/6/1 2/7/1 6/8/1
+f 3/9/2 4/6/2 8/5/2 7/10/2
+f 1/11/3 3/9/3 4/6/3 2/12/3
+f 5/13/2 1/11/2 2/12/2 6/14/2
+f 7/10/3 8/5/3 6/14/3 5/13/3
+usemtl Material.002
+f 9/15/4 10/16/4 12/17/4 11/18/4
+f 13/19/5 14/20/5 16/21/5 15/22/5
diff --git a/mods/default/models/torch_floor.obj b/mods/default/models/torch_floor.obj
new file mode 100644 (file)
index 0000000..e2487ef
--- /dev/null
@@ -0,0 +1,50 @@
+# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend'
+# www.blender.org
+mtllib torch_floor.mtl
+o Cube_Cube.001
+v 0.062500 0.062500 -0.062500
+v 0.062500 -0.500000 -0.062500
+v 0.062500 0.062500 0.062500
+v 0.062500 -0.500000 0.062500
+v -0.062500 0.062500 -0.062500
+v -0.062500 -0.500000 -0.062500
+v -0.062500 0.062500 0.062500
+v -0.062500 -0.500000 0.062500
+v -0.353553 -0.500000 0.353553
+v -0.353553 0.500000 0.353553
+v 0.353553 -0.500000 -0.353553
+v 0.353553 0.500000 -0.353553
+v -0.353553 -0.500000 -0.353553
+v 0.353553 -0.500000 0.353553
+v -0.353553 0.500000 -0.353553
+v 0.353553 0.500000 0.353553
+vt 0.562500 0.500000
+vt 0.562500 0.625000
+vt 0.437500 0.625000
+vt 0.437500 0.500000
+vt 0.437500 0.000000
+vt 0.562500 0.000000
+vt 0.562500 0.125000
+vt 0.437500 0.125000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vn 0.000000 1.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn 1.000000 0.000000 0.000000
+vn -0.707100 0.000000 -0.707100
+vn -0.707100 -0.000000 0.707100
+g Cube_Cube.001_Cube_Cube.001_Material.001
+usemtl Material.001
+s off
+f 3/1/1 1/2/1 5/3/1 7/4/1
+f 8/5/1 4/6/1 2/7/1 6/8/1
+f 3/2/2 4/6/2 8/5/2 7/3/2
+f 1/3/3 3/2/3 4/6/3 2/5/3
+f 5/2/2 1/3/2 2/5/2 6/6/2
+f 7/3/3 8/5/3 6/6/3 5/2/3
+g Cube_Cube.001_Cube_Cube.001_Material.002
+usemtl Material.002
+f 9/9/4 10/10/4 12/11/4 11/12/4
+f 13/12/5 14/9/5 16/10/5 15/11/5
diff --git a/mods/default/models/torch_wall.obj b/mods/default/models/torch_wall.obj
new file mode 100644 (file)
index 0000000..57baa9e
--- /dev/null
@@ -0,0 +1,64 @@
+# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend'
+# www.blender.org
+mtllib torch_wall.mtl
+o Cube_Cube.001
+v 0.062469 -0.195248 0.023570
+v 0.062469 -0.476498 -0.463570
+v 0.062469 -0.303502 0.086070
+v 0.062469 -0.584752 -0.401070
+v -0.062531 -0.195248 0.023570
+v -0.062531 -0.476498 -0.463570
+v -0.062531 -0.303502 0.086070
+v -0.062531 -0.584752 -0.401070
+v -0.353584 -0.613553 0.022500
+v -0.353584 -0.613553 0.460000
+v 0.353522 0.093553 0.022500
+v 0.353522 0.093553 0.460000
+v -0.353584 0.093553 0.022500
+v 0.353522 -0.613553 0.022500
+v -0.353584 0.093553 0.460000
+v 0.353522 -0.613553 0.460000
+v 0.353553 0.056811 -0.121957
+v 0.353553 -0.224439 -0.609096
+v -0.353553 -0.555561 0.231596
+v -0.353553 -0.836811 -0.255543
+v -0.353553 0.056811 -0.121957
+v -0.353553 -0.224439 -0.609096
+v 0.353553 -0.555561 0.231596
+v 0.353553 -0.836811 -0.255543
+vt 0.562500 0.500000
+vt 0.562500 0.625000
+vt 0.437500 0.625000
+vt 0.437500 0.500000
+vt 0.437500 0.000000
+vt 0.562500 0.000000
+vt 0.562500 0.125000
+vt 0.437500 0.125000
+vt 0.000000 0.562500
+vt 0.000000 -0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.562500
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vn -0.000000 0.500000 0.866000
+vn -0.000000 0.866000 -0.500000
+vn 1.000000 0.000000 0.000000
+vn -0.707100 0.612400 -0.353600
+vn -0.707100 -0.612400 0.353600
+vn -0.707100 0.707100 -0.000000
+vn -0.707100 -0.707100 -0.000000
+g Cube_Cube.001_Cube_Cube.001_Material.001
+usemtl Material.001
+s off
+f 3/1/1 1/2/1 5/3/1 7/4/1
+f 8/5/1 4/6/1 2/7/1 6/8/1
+f 3/2/2 4/6/2 8/5/2 7/3/2
+f 1/3/3 3/2/3 4/6/3 2/5/3
+f 5/2/2 1/3/2 2/5/2 6/6/2
+f 7/3/3 8/5/3 6/6/3 5/2/3
+f 17/9/4 18/10/4 20/11/4 19/12/4
+f 21/9/5 22/10/5 24/11/5 23/12/5
+g Cube_Cube.001_Cube_Cube.001_Material.002
+usemtl Material.002
+f 9/12/6 10/13/6 12/14/6 11/9/6
+f 13/9/7 14/12/7 16/13/7 15/14/7
index 1dfc6644acc2cd6d622c0f8baab16ebf959902c2..9aa7af598ae81a7302005669db802416a2a02460 100644 (file)
@@ -159,8 +159,6 @@ default:lava_flowing
 Tools / "Advanced" crafting / Non-"natural"
 -------------------------------------------
 
-default:torch
-
 default:chest
 default:chest_locked
 
@@ -1592,58 +1590,6 @@ minetest.register_node("default:lava_flowing", {
 -- Tools / "Advanced" crafting / Non-"natural"
 --
 
-minetest.register_node("default:torch", {
-       description = "Torch",
-       drawtype = "torchlike",
-       tiles = {
-               {
-                       name = "default_torch_on_floor_animated.png",
-                       animation = {
-                               type = "vertical_frames",
-                               aspect_w = 16,
-                               aspect_h = 16,
-                               length = 3.0
-                       },
-               },
-               {
-                       name="default_torch_on_ceiling_animated.png",
-                       animation = {
-                               type = "vertical_frames",
-                               aspect_w = 16,
-                               aspect_h = 16,
-                               length = 3.0
-                       },
-               },
-               {
-                       name="default_torch_animated.png",
-                       animation = {
-                               type = "vertical_frames",
-                               aspect_w = 16,
-                               aspect_h = 16,
-                               length = 3.0
-                       },
-               },
-       },
-       inventory_image = "default_torch_on_floor.png",
-       wield_image = "default_torch_on_floor.png",
-       paramtype = "light",
-       paramtype2 = "wallmounted",
-       sunlight_propagates = true,
-       is_ground_content = false,
-       walkable = false,
-       light_source = default.LIGHT_MAX - 1,
-       selection_box = {
-               type = "wallmounted",
-               wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
-               wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
-               wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
-       },
-       groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
-       legacy_wallmounted = true,
-       sounds = default.node_sound_defaults(),
-})
-
-
 local chest_formspec =
        "size[8,9]" ..
        default.gui_bg ..
diff --git a/mods/default/torch.lua b/mods/default/torch.lua
new file mode 100644 (file)
index 0000000..0d3454b
--- /dev/null
@@ -0,0 +1,147 @@
+
+--[[
+
+Torch mod - formerly mod "Torches"
+======================
+
+(c) Copyright BlockMen (2013-2015)
+(C) Copyright sofar <sofar@foo-projects.org> (2016)
+
+This mod changes the default torch drawtype from "torchlike" to "mesh",
+giving the torch a three dimensional appearance. The mesh contains the
+proper pixel mapping to make the animation appear as a particle above
+the torch, while in fact the animation is just the texture of the mesh.
+
+
+License:
+~~~~~~~~
+(c) Copyright BlockMen (2013-2015)
+
+Textures and Meshes/Models:
+CC-BY 3.0 BlockMen
+Note that the models were entirely done from scratch by sofar.
+
+Code:
+Licensed under the GNU LGPL version 2.1 or higher.
+You can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License
+as published by the Free Software Foundation;
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt
+
+--]]
+
+minetest.register_node("default:torch", {
+       description = "Torch",
+       drawtype = "mesh",
+       mesh = "torch_floor.obj",
+       inventory_image = "default_torch_on_floor.png",
+       wield_image = "default_torch_on_floor.png",
+       tiles = {{
+                   name = "default_torch_on_floor_animated.png",
+                   animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
+       }},
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       sunlight_propagates = true,
+       walkable = false,
+       liquids_pointable = false,
+       light_source = 13,
+       groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1},
+       drop = "default:torch",
+       selection_box = {
+               type = "wallmounted",
+               wall_bottom = {-1/16, -0.5, -1/16, 1/16, 2/16, 1/16},
+       },
+       sounds = default.node_sound_wood_defaults(),
+       on_place = function(itemstack, placer, pointed_thing)
+               local under = pointed_thing.under
+               local node = minetest.get_node(under)
+               local def = minetest.registered_nodes[node.name]
+               if def and def.on_rightclick and
+                       ((not placer) or (placer and not placer:get_player_control().sneak)) then
+                       return def.on_rightclick(under, node, placer, itemstack,
+                               pointed_thing) or itemstack
+               end
+
+               local above = pointed_thing.above
+               local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
+               local fakestack = itemstack
+               if wdir == 0 then
+                       fakestack:set_name("default:torch_ceiling")
+               elseif wdir == 1 then
+                       fakestack:set_name("default:torch")
+               else
+                       fakestack:set_name("default:torch_wall")
+               end
+
+               itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
+               itemstack:set_name("default:torch")
+
+               return itemstack
+       end
+})
+
+minetest.register_node("default:torch_wall", {
+       drawtype = "mesh",
+       mesh = "torch_wall.obj",
+       tiles = {{
+                   name = "default_torch_on_floor_animated.png",
+                   animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
+       }},
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       sunlight_propagates = true,
+       walkable = false,
+       light_source = 13,
+       groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
+       drop = "default:torch",
+       selection_box = {
+               type = "wallmounted",
+               wall_side = {-0.5, -0.3, -0.1, -0.2, 0.3, 0.1},
+       },
+       sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_node("default:torch_ceiling", {
+       drawtype = "mesh",
+       mesh = "torch_ceiling.obj",
+       tiles = {{
+                   name = "default_torch_on_floor_animated.png",
+                   animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3}
+       }},
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       sunlight_propagates = true,
+       walkable = false,
+       light_source = 13,
+       groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1},
+       drop = "default:torch",
+       selection_box = {
+               type = "wallmounted",
+               wall_top = {-0.1, -0.1, -0.25, 0.1, 0.5, 0.1},
+       },
+       sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_lbm({
+       name = "default:3dtorch",
+       nodenames = {"default:torch", "torches:floor", "torches:wall"},
+       action = function(pos, node)
+               if node.param2 == 0 then
+                       minetest.set_node(pos, {name = "default:torch_ceiling",
+                               param2 = node.param2})
+               elseif node.param2 == 1 then
+                       minetest.set_node(pos, {name = "default:torch",
+                               param2 = node.param2})
+               else
+                       minetest.set_node(pos, {name = "default:torch_wall",
+                               param2 = node.param2})
+               end
+       end
+})
+