mirror of
https://github.com/minetest/minetest_game.git
synced 2024-12-23 15:20:19 +01:00
0bd2efcfc1
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.
148 lines
4.4 KiB
Lua
148 lines
4.4 KiB
Lua
|
|
--[[
|
|
|
|
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
|
|
})
|
|
|