fix stairs and slabs

This commit is contained in:
HybridDog 2015-06-13 10:36:08 +02:00
parent acb5141cbe
commit de80a0910e
3 changed files with 199 additions and 219 deletions

View File

@ -50,7 +50,6 @@ http://github.com/Splizard/minetest-mod-snow/
-- Original init.lua File Broken into Smaller Files -- Original init.lua File Broken into Smaller Files
dofile(minetest.get_modpath("snow").."/src/abms.lua") dofile(minetest.get_modpath("snow").."/src/abms.lua")
dofile(minetest.get_modpath("snow").."/src/aliases.lua") dofile(minetest.get_modpath("snow").."/src/aliases.lua")
dofile(minetest.get_modpath("snow").."/src/basic_stairs_slabs.lua")
dofile(minetest.get_modpath("snow").."/src/crafting.lua") dofile(minetest.get_modpath("snow").."/src/crafting.lua")
dofile(minetest.get_modpath("snow").."/src/snowball.lua") dofile(minetest.get_modpath("snow").."/src/snowball.lua")
@ -63,6 +62,7 @@ dofile(minetest.get_modpath("snow").."/src/util.lua")
-- To get Xmas tree saplings, the "christmas_content", true or false, in "util.lua" has to be determined first. -- To get Xmas tree saplings, the "christmas_content", true or false, in "util.lua" has to be determined first.
-- That means "nodes.lua", where the saplings are controlled, has to come after "util.lua". ~ LazyJ -- That means "nodes.lua", where the saplings are controlled, has to come after "util.lua". ~ LazyJ
dofile(minetest.get_modpath("snow").."/src/nodes.lua") dofile(minetest.get_modpath("snow").."/src/nodes.lua")
dofile(minetest.get_modpath("snow").."/src/basic_stairs_slabs.lua")
dofile(minetest.get_modpath("snow").."/src/mapgen.lua") dofile(minetest.get_modpath("snow").."/src/mapgen.lua")
dofile(minetest.get_modpath("snow").."/src/sled.lua") dofile(minetest.get_modpath("snow").."/src/sled.lua")
dofile(minetest.get_modpath("snow").."/src/falling_snow.lua") dofile(minetest.get_modpath("snow").."/src/falling_snow.lua")

View File

@ -4,7 +4,7 @@ minetest.register_abm({
interval = 1, interval = 1,
chance = 1, chance = 1,
action = function(pos, node) action = function(pos, node)
minetest.add_node(pos,{name="default:snow"}) minetest.add_node(pos, {name="default:snow"})
minetest.set_node_level(pos, 7*(tonumber(node.name:sub(-1)))) minetest.set_node_level(pos, 7*(tonumber(node.name:sub(-1))))
end, end,
}) })
@ -42,15 +42,17 @@ minetest.register_abm({
minetest.register_abm({ minetest.register_abm({
nodenames = {"group:melts"}, nodenames = {"group:melts"},
neighbors = {"group:igniter","default:torch","default:furnace_active","group:hot"}, neighbors = {"group:igniter", "default:torch", "default:furnace_active", "group:hot"},
interval = 2, interval = 10,
chance = 2, chance = 2,
action = function(pos, node) action = function(pos, node)
local intensity = minetest.get_item_group(node.name,"melts") local intensity = minetest.get_item_group(node.name,"melts")
if intensity == 1 then if intensity == 1 then
minetest.add_node(pos,{name="default:water_source"}) minetest.set_node(pos, {name="default:water_source"})
elseif intensity == 2 then elseif intensity == 2 then
minetest.add_node(pos,{name="default:water_flowing", param2=7}) minetest.set_node(pos, {name="default:water_flowing", param2=7})
elseif intensity == 3 then
minetest.set_node(pos, {name="default:water_flowing", param2=3})
--[[ LazyJ, you need to add param2, which defines the amount of the flowing water ~ HybridDog 2015_03_06 --[[ LazyJ, you need to add param2, which defines the amount of the flowing water ~ HybridDog 2015_03_06
This was causing "melts=2" nodes to just disappear so I changed it to replace the This was causing "melts=2" nodes to just disappear so I changed it to replace the
node with a water_source for a couple seconds and then replace the water_source with node with a water_source for a couple seconds and then replace the water_source with
@ -76,6 +78,8 @@ minetest.register_abm({
end end
end) end)
--]] --]]
else
return
end end
nodeupdate(pos) nodeupdate(pos)
end, end,
@ -184,7 +188,7 @@ minetest.register_abm({
nodenames = {"snow:xmas_tree"}, nodenames = {"snow:xmas_tree"},
interval = 10, interval = 10,
chance = 50, chance = 50,
action = function(pos, node, active_object_count, active_object_count_wider) action = function(pos, node)
-- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ -- 'If' there is air in each of the 8 nodes dirctly above the sapling,... ~LazyJ
for i = 1,8 do for i = 1,8 do

View File

@ -6,23 +6,18 @@
-- ADD CHECK FOR MOREBLOCKS/SKIP IF NOT FOUND CODE STUFF HERE -- ADD CHECK FOR MOREBLOCKS/SKIP IF NOT FOUND CODE STUFF HERE
-- what of the recipeitem can be copied
local recipe_values = {
"description", "tiles", "groups", "sounds", "use_texture_alpha", "sunlight_propagates",
"freezemelt", "liquidtype", "sunlight_propagates",
"stair_desc", "slab_desc"
}
local stairdef = {
snow_stairs = {} -- This is a little trick. Without it Minetest will complain
-- "attempt to index global 'snow' (a nil value)" and
-- refuse to load. So a value without definition "={}"is assigned to snow.
-- Node will be called snow:stair_<subname>
function snow_stairs.register_stair(subname, recipeitem, groups, images, description, sounds)
minetest.register_node("snow:stair_" .. subname, {
description = description,
drawtype = "nodebox", drawtype = "nodebox",
tiles = images,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
is_ground_content = true, is_ground_content = true,
groups = groups,
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
footstep = {name="default_snow_footstep", gain=0.25}, footstep = {name="default_snow_footstep", gain=0.25},
dig = {name="default_dig_crumbly", gain=0.4}, dig = {name="default_dig_crumbly", gain=0.4},
@ -69,14 +64,28 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
on_construct = function(pos) on_construct = function(pos)
pos.y = pos.y - 1 pos.y = pos.y - 1
if minetest.get_node(pos).name == "default:dirt_with_grass" local node = minetest.get_node(pos)
if node.name == "default:dirt_with_grass"
-- Thinking in terms of layers, dirt_with_snow could also double as -- Thinking in terms of layers, dirt_with_snow could also double as
-- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04 -- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04
or minetest.get_node(pos).name == "default:dirt" then or node.name == "default:dirt" then
minetest.set_node(pos, {name="default:dirt_with_snow"}) node.name = "default:dirt_with_snow"
minetest.set_node(pos, node)
end end
end end
}) }
-- Node will be called snow:stair_<subname>
local function register_stair(subname, recipeitem, newdef)
local def = table.copy(stairdef)
for n,i in pairs(newdef) do
def[n] = i
end
local name = "snow:stair_" .. subname
minetest.register_node(name, def)
--[[ --[[
-- for replace ABM -- for replace ABM
minetest.register_node("snow:stair_" .. subname.."upside_down", { minetest.register_node("snow:stair_" .. subname.."upside_down", {
@ -85,7 +94,7 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
}) })
--]] --]]
minetest.register_craft({ minetest.register_craft({
output = 'snow:stair_' .. subname .. ' 6', output = name .. " 6",
recipe = { recipe = {
{recipeitem, "", ""}, {recipeitem, "", ""},
{recipeitem, recipeitem, ""}, {recipeitem, recipeitem, ""},
@ -95,7 +104,7 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
-- Flipped recipe -- Flipped recipe
minetest.register_craft({ minetest.register_craft({
output = 'snow:stair_' .. subname .. ' 6', output = name .. " 6",
recipe = { recipe = {
{"", "", recipeitem}, {"", "", recipeitem},
{"", recipeitem, recipeitem}, {"", recipeitem, recipeitem},
@ -104,48 +113,41 @@ function snow_stairs.register_stair(subname, recipeitem, groups, images, descrip
}) })
end end
-- Node will be called snow:slab_<subname>
function snow_stairs.register_slab(subname, recipeitem, groups, images, description, sounds) local slabdef = table.copy(stairdef)
minetest.register_node("snow:slab_" .. subname, { slabdef.node_box = {
description = description,
drawtype = "nodebox",
tiles = images,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = groups,
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_snow_footstep", gain=0.25},
dig = {name="default_dig_crumbly", gain=0.4},
dug = {name="default_snow_footstep", gain=0.75},
place = {name="default_place_node", gain=1.0}
}),
node_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
}, }
on_place = function(itemstack, placer, pointed_thing) slabdef.on_place = nil
-- Node will be called snow:slab_<subname>
local function register_slab(subname, recipeitem, newdef)
local def = table.copy(slabdef)
local name = "snow:slab_" .. subname
def.on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return itemstack return itemstack
end end
-- If it's being placed on an another similar one, replace it with -- If it's being placed on an another similar one, replace it with
-- a full block -- a full block
local slabpos = nil local slabpos, slabnode
local slabnode = nil
local p0 = pointed_thing.under local p0 = pointed_thing.under
local p1 = pointed_thing.above local p1 = pointed_thing.above
local n0 = minetest.get_node(p0) local n0 = minetest.get_node(p0)
local n1 = minetest.get_node(p1) local n1 = minetest.get_node(p1)
local param2 = 0
local n0_is_upside_down = (n0.name == "snow:slab_" .. subname and local n0_is_upside_down = (n0.name == name and
n0.param2 >= 20) n0.param2 >= 20)
if n0.name == "snow:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then if n0.name == name
and not n0_is_upside_down
and p0.y+1 == p1.y then
slabpos = p0 slabpos = p0
slabnode = n0 slabnode = n0
elseif n1.name == "snow:slab_" .. subname then elseif n1.name == name then
slabpos = p1 slabpos = p1
slabnode = n1 slabnode = n1
end end
@ -169,6 +171,7 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
return itemstack return itemstack
end end
local param2
-- Upside down slabs -- Upside down slabs
if p0.y-1 == p1.y then if p0.y-1 == p1.y then
-- Turn into full block if pointing at a existing slab -- Turn into full block if pointing at a existing slab
@ -194,27 +197,20 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
-- Place upside down slab -- Place upside down slab
param2 = 20 param2 = 20
end elseif n0_is_upside_down
and p0.y+1 ~= p1.y then
-- If pointing at the side of a upside down slab -- If pointing at the side of a upside down slab
if n0_is_upside_down and p0.y+1 ~= p1.y then
param2 = 20 param2 = 20
end end
return minetest.item_place(itemstack, placer, pointed_thing, param2) return minetest.item_place(itemstack, placer, pointed_thing, param2)
end,
on_construct = function(pos)
pos.y = pos.y - 1
if minetest.get_node(pos).name == "default:dirt_with_grass"
-- Thinking in terms of layers, dirt_with_snow could also double as
-- dirt_with_frost which adds subtlety to the winterscape. ~ LazyJ, 2014_04_04
or minetest.get_node(pos).name == "default:dirt" then
minetest.set_node(pos, {name="default:dirt_with_snow"})
end
end end
}) for n,i in pairs(newdef) do
def[n] = i
end
minetest.register_node(name, def)
--[[ --[[
-- for replace ABM -- for replace ABM
minetest.register_node("snow:slab_" .. subname.."upside_down", { minetest.register_node("snow:slab_" .. subname.."upside_down", {
@ -224,7 +220,7 @@ function snow_stairs.register_slab(subname, recipeitem, groups, images, descript
--]] --]]
minetest.register_craft({ minetest.register_craft({
output = 'snow:slab_' .. subname .. ' 6', output = name .. " 6",
recipe = { recipe = {
{recipeitem, recipeitem, recipeitem}, {recipeitem, recipeitem, recipeitem},
}, },
@ -259,9 +255,31 @@ minetest.register_abm({
-- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ -- features (freezing, melting, and how they change dirt and dirt_with_grass). ~ LazyJ
-- Nodes will be called snow:{stair,slab}_<subname> -- Nodes will be called snow:{stair,slab}_<subname>
function snow_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates) local function register_stair_and_slab(subname, recipeitem, def)
snow_stairs.register_stair(subname, recipeitem, groups, images, desc_stair, freezemelt, liquidtype, paramtype, sunlight_propagates) local recipedef = minetest.registered_nodes[recipeitem]
snow_stairs.register_slab(subname, recipeitem, groups, images, desc_slab, freezemelt, liquidtype, paramtype, sunlight_propagates) for _,i in pairs(recipe_values) do
if def[i] == nil
and recipedef[i] ~= nil then
def[i] = recipedef[i]
end
end
local groups = table.copy(def.groups)
groups.cooks_into_ice = nil
if groups.melts then
groups.melts = math.min(groups.melts+1, 3)
end
def.groups = groups
local stair_desc = def.stair_desc
def.stair_desc = nil
local slab_desc = def.slab_desc
def.slab_desc = nil
def.description = stair_desc
register_stair(subname, recipeitem, def)
def.description = slab_desc
register_slab(subname, recipeitem, def)
end end
@ -269,58 +287,16 @@ list_of_snow_stuff = {
--{"row[1] = first item in row", --{"row[1] = first item in row",
-- "row[2] = second item in row", -- "row[2] = second item in row",
-- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ -- "row[3] = third item in row", and so on, and so on...}, ~ LazyJ
{"ice", "default:ice", "default_ice.png", "Ice Stairs", "Ice Slabs"}, {"ice", "default:ice", "Ice Stairs", "Ice Slabs"},
{"snowblock", "default:snowblock", "default_snow.png", "Snowblock Stairs", "Snowblock Slabs"}, {"snowblock", "default:snowblock", "Snowblock Stairs", "Snowblock Slabs"},
{"snow_cobble", "snow:snow_cobble", "snow_snow_cobble.png", "Snow Cobble Stairs", "Snow Cobble Slabs"}, {"snow_cobble", "snow:snow_cobble", "Snow Cobble Stairs", "Snow Cobble Slabs"},
{"snow_brick", "snow:snow_brick", "snow_snow_brick.png", "Snow Brick Stair", "Snow Brick Slab"}, {"snow_brick", "snow:snow_brick", "Snow Brick Stair", "Snow Brick Slab"},
{"ice_brick", "snow:ice_brick", "Ice Brick Stair", "Ice Brick Slab"},
} }
for _, row in ipairs(list_of_snow_stuff) do for _, row in pairs(list_of_snow_stuff) do
local snow_subname = row[1] register_stair_and_slab(row[1], row[2], {
local snow_recipeitem = row[2] stair_desc = row[3],
local snow_images = row[3] slab_desc = row[4],
local snow_desc_stair = row[4] })
local snow_desc_slab = row[5] end
snow_stairs.register_stair_and_slab(snow_subname, snow_recipeitem,
{cracky=2, crumbly=2, choppy=2, oddly_breakable_by_hand=2, melts=1, icemaker=1},
{snow_images},
snow_desc_stair,
snow_desc_slab,
"default:water_source",
"none",
"light",
true
)
end -- End the "list of snow stuff" part of the above section. ~ LazyJ
-- Snow stairs and slabs should be easier to break than the more dense and
-- manufactured, other snow-type nodes in the list above. ~ lazyJ
minetest.override_item("snow:stair_snowblock", {
groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1},
})
minetest.override_item("snow:slab_snowblock", {
groups = {cracky=3, crumbly=3, choppy=3, oddly_breakable_by_hand=3, melts=2, icemaker=1},
})
-- Everything above is made of snow and uses snow sounds, ice, however, should sound more like glass
-- and be harder to dig. ~ LazyJ
minetest.override_item("snow:stair_ice", {
groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1},
use_texture_alpha = true,
sounds = default.node_sound_glass_defaults(),
})
minetest.override_item("snow:slab_ice", {
groups = {cracky=1, crumbly=1, choppy=1, oddly_breakable_by_hand=1, melts=2, icemaker=1},
use_texture_alpha = true,
sounds = default.node_sound_glass_defaults(),
})