commit
7ebacfd25b
@ -63,7 +63,7 @@ minetest.register_entity("caverealms:falling_ice", {
|
||||
if obj:is_player() then
|
||||
obj:set_hp(obj:get_hp() - 8)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Note: walkable is in the node definition, not in item groups
|
||||
if not bcd or
|
||||
(bcd.walkable or
|
||||
@ -103,19 +103,19 @@ minetest.register_entity("caverealms:falling_ice", {
|
||||
-- remove entity
|
||||
--minetest.add_node(np, self.node)
|
||||
self.object:remove()
|
||||
nodeupdate(np)
|
||||
caverealms:nodeupdate(np)
|
||||
else
|
||||
-- Do nothing
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
function spawn_falling_node(p, node)
|
||||
function caverealms:spawn_falling_node(p, node)
|
||||
obj = minetest.add_entity(p, "caverealms:falling_ice")
|
||||
obj:get_luaentity():set_node(node)
|
||||
end
|
||||
|
||||
function drop_attached_node(p)
|
||||
function caverealms:drop_attached_node(p)
|
||||
local nn = minetest.get_node(p).name
|
||||
minetest.remove_node(p)
|
||||
for _,item in ipairs(minetest.get_node_drops(nn, "")) do
|
||||
@ -128,7 +128,7 @@ function drop_attached_node(p)
|
||||
end
|
||||
end
|
||||
|
||||
function check_attached_node(p, n)
|
||||
function caverealms:check_attached_node(p, n)
|
||||
local def = minetest.registered_nodes[n.name]
|
||||
local d = {x=0, y=0, z=0}
|
||||
if def.paramtype2 == "wallmounted" then
|
||||
@ -161,7 +161,7 @@ end
|
||||
-- Some common functions
|
||||
--
|
||||
|
||||
function nodeupdate_single(p, delay)
|
||||
function caverealms:nodeupdate_single(p, delay)
|
||||
n = minetest.get_node(p)
|
||||
if minetest.get_item_group(n.name, "falling_node") ~= 0 then
|
||||
p_bottom = {x=p.x, y=p.y-1, z=p.z}
|
||||
@ -175,25 +175,25 @@ function nodeupdate_single(p, delay)
|
||||
(not minetest.registered_nodes[n_bottom.name].walkable or
|
||||
minetest.registered_nodes[n_bottom.name].buildable_to) then
|
||||
if delay then
|
||||
minetest.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
|
||||
minetest.after(0.1, caverealms.nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
|
||||
else
|
||||
n.level = minetest.env:get_node_level(p)
|
||||
minetest.remove_node(p)
|
||||
spawn_falling_node(p, n)
|
||||
nodeupdate(p)
|
||||
caverealms:spawn_falling_node(p, n)
|
||||
caverealms:nodeupdate(p)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if minetest.get_item_group(n.name, "attached_node") ~= 0 then
|
||||
if not check_attached_node(p, n) then
|
||||
drop_attached_node(p)
|
||||
nodeupdate(p)
|
||||
caverealms:drop_attached_node(p)
|
||||
caverealms:nodeupdate(p)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function nodeupdate(p, delay)
|
||||
function caverealms:nodeupdate(p, delay)
|
||||
-- Round p to prevent falling entities to get stuck
|
||||
p.x = math.floor(p.x+0.5)
|
||||
p.y = math.floor(p.y+0.5)
|
||||
@ -202,7 +202,7 @@ function nodeupdate(p, delay)
|
||||
for x = -1,1 do
|
||||
for y = -1,1 do
|
||||
for z = -1,1 do
|
||||
nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
|
||||
caverealms:nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
38
init.lua
38
init.lua
@ -13,10 +13,14 @@ local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
--load companion lua files
|
||||
dofile(modpath.."/config.lua") --configuration file; holds various constants
|
||||
dofile(modpath.."/crafting.lua") --crafting recipes
|
||||
dofile(modpath.."/falling_ice.lua") --complicated function for falling icicles
|
||||
dofile(modpath.."/nodes.lua") --node definitions
|
||||
dofile(modpath.."/functions.lua") --function definitions
|
||||
|
||||
if caverealms.config.falling_icicles == true then
|
||||
dofile(modpath.."/falling_ice.lua") --complicated function for falling icicles
|
||||
print("[caverealms] falling icicles enabled.")
|
||||
end
|
||||
|
||||
-- Parameters
|
||||
|
||||
local YMIN = caverealms.config.ymin -- Approximate realm limits.
|
||||
@ -90,13 +94,13 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local x0 = minp.x
|
||||
local y0 = minp.y
|
||||
local z0 = minp.z
|
||||
|
||||
|
||||
print ("[caverealms] chunk minp ("..x0.." "..y0.." "..z0..")") --tell people you are generating a chunk
|
||||
|
||||
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
||||
local data = vm:get_data()
|
||||
|
||||
|
||||
--grab content IDs
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
@ -118,21 +122,21 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local c_worm = minetest.get_content_id("caverealms:glow_worm")
|
||||
local c_iciu = minetest.get_content_id("caverealms:icicle_up")
|
||||
local c_icid = minetest.get_content_id("caverealms:icicle_down")
|
||||
|
||||
|
||||
--mandatory values
|
||||
local sidelen = x1 - x0 + 1 --length of a mapblock
|
||||
local chulens = {x=sidelen, y=sidelen, z=sidelen} --table of chunk edges
|
||||
local minposxyz = {x=x0, y=y0, z=z0} --bottom corner
|
||||
local minposxz = {x=x0, y=z0} --2D bottom corner
|
||||
|
||||
|
||||
local nvals_cave = minetest.get_perlin_map(np_cave, chulens):get3dMap_flat(minposxyz) --cave noise for structure
|
||||
local nvals_wave = minetest.get_perlin_map(np_wave, chulens):get3dMap_flat(minposxyz) --wavy structure of cavern ceilings and floors
|
||||
local nvals_biome = minetest.get_perlin_map(np_biome, chulens):get2dMap_flat({x=x0+150, y=z0+50}) --2D noise for biomes (will be 3D humidity/temp later)
|
||||
|
||||
|
||||
local nixyz = 1 --3D node index
|
||||
local nixz = 1 --2D node index
|
||||
local nixyz2 = 1 --second 3D index for second loop
|
||||
|
||||
|
||||
for z = z0, z1 do -- for each xy plane progressing northwards
|
||||
--structure loop
|
||||
for y = y0, y1 do -- for each x row progressing upwards
|
||||
@ -155,7 +159,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--decoration loop
|
||||
for y = y0, y1 do -- for each x row progressing upwards
|
||||
local tcave --same as above
|
||||
@ -168,7 +172,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
end
|
||||
local vi = area:index(x0, y, z)
|
||||
for x = x0, x1 do -- for each node do
|
||||
|
||||
|
||||
--determine biome
|
||||
local biome = false --preliminary declaration
|
||||
n_biome = nvals_biome[nixz] --make an easier reference to the noise
|
||||
@ -186,14 +190,13 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
else
|
||||
biome = 3 --algae
|
||||
end
|
||||
|
||||
|
||||
if math.floor(((nvals_cave[nixyz2] + nvals_wave[nixyz2])/2)*100) == math.floor(tcave*100) then
|
||||
--ceiling
|
||||
local ai = area:index(x,y+1,z) --above index
|
||||
if data[ai] == c_stone and data[vi] == c_air then --ceiling
|
||||
if math.random() < ICICHA and (biome == 4 or biome == 5) then
|
||||
local bi = area:index(x,y-1,z)
|
||||
data[bi] = c_icid
|
||||
data[vi] = c_icid
|
||||
end
|
||||
if math.random() < WORMCHA then
|
||||
data[vi] = c_worm
|
||||
@ -259,7 +262,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
data[ai] = c_iciu
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if math.random() < STAGCHA then
|
||||
caverealms:stalagmite(x,y,z, area, data)
|
||||
end
|
||||
@ -267,7 +270,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
caverealms:crystal_stalagmite(x,y,z, area, data, biome)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
nixyz2 = nixyz2 + 1
|
||||
nixz = nixz + 1
|
||||
@ -277,7 +280,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
end
|
||||
nixz = nixz + sidelen --shift the 2D index up a layer
|
||||
end
|
||||
|
||||
|
||||
--send data back to voxelmanip
|
||||
vm:set_data(data)
|
||||
--calc lighting
|
||||
@ -289,3 +292,6 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
local chugent = math.ceil((os.clock() - t1) * 1000) --grab how long it took
|
||||
print ("[caverealms] "..chugent.." ms") --tell people how long
|
||||
end)
|
||||
|
||||
|
||||
print("[caverealms] loaded!")
|
||||
|
Loading…
x
Reference in New Issue
Block a user