From 5d960139d3409241d3c1dbd236d7314c7b3b359f Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 2 Jan 2015 07:08:40 +0000 Subject: [PATCH] Underworld lux ore with light spread by ABM --- README.txt | 2 +- init.lua | 45 ++++++++++++++++++++++++++++++++++++- textures/levels_luxore.png | Bin 0 -> 311 bytes 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 textures/levels_luxore.png diff --git a/README.txt b/README.txt index c85be07..4c652bf 100644 --- a/README.txt +++ b/README.txt @@ -1,4 +1,4 @@ -levels 0.2.0 by paramat +levels 0.2.1 by paramat For Minetest 0.4.11 stable or later Depends default Licenses: Code WTFPL diff --git a/init.lua b/init.lua index 74de2e6..fda4111 100644 --- a/init.lua +++ b/init.lua @@ -12,6 +12,7 @@ local UNDERFAC = 0.0001 local UNDEROFF = -0.2 local YWAT = 1 local YLAVA = -528 +local LUXCHA = 1 / 9 ^ 3 -- Noise parameters @@ -28,6 +29,39 @@ local np_terrain = { --flags = "" } +-- Nodes + +-- Dummy lux ore so that lux ore light spread ABM only runs once per lux node +minetest.register_node("levels:luxoff", { + description = "Dark Lux Ore", + tiles = {"levels_luxore.png"}, + light_source = 14, + groups = {immortal=1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("levels:luxore", { + description = "Lux Ore", + tiles = {"levels_luxore.png"}, + light_source = 14, + groups = {cracky=3}, + sounds = default.node_sound_glass_defaults(), +}) + +-- ABM to spread lux ore light +-- Luxoff is only placed above stone to stop droop when replaced with luxore: +-- .. and data[(vi - ystride)] == c_stone then + +minetest.register_abm({ + nodenames = {"levels:luxoff"}, + interval = 7, + chance = 1, + action = function(pos, node) + minetest.remove_node(pos) + minetest.place_node(pos, {name="levels:luxore"}) + end, +}) + -- Stuff local floatper = math.pi / FLOATPER @@ -57,7 +91,11 @@ minetest.register_on_generated(function(minp, maxp, seed) local c_water = minetest.get_content_id("default:water_source") local c_lava = minetest.get_content_id("default:lava_source") + local c_luxoff = minetest.get_content_id("levels:luxoff") + local c_luxore = minetest.get_content_id("levels:luxore") + local sidelen = x1 - x0 + 1 + local ystride = sidelen + 32 local chulens3d = {x=sidelen, y=sidelen, z=sidelen} local minpos3d = {x=x0, y=y0, z=z0} @@ -86,7 +124,12 @@ minetest.register_on_generated(function(minp, maxp, seed) local density = n_terrain + grad if density > 0 then - data[vi] = c_stone + if math.random() < LUXCHA and y < YSURFMIN + and density < 0.01 and data[(vi - ystride)] == c_stone then + data[vi] = c_luxoff + else + data[vi] = c_stone + end elseif y > YSURFMIN and y <= YWAT then data[vi] = c_water elseif y <= YLAVA then diff --git a/textures/levels_luxore.png b/textures/levels_luxore.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc4830fa8a206ff854c82fcf0378a36b571f013 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfT~0YZF2&?sMj%s8db&7}+^pJ-xAX63eLl`7XMJM#B;J(Q)!*~7-u*hF$TGUb8uxfy1^uZ!0UNo!;ssx=dKu372Oa%ypp!7WRU zzI3(|S2G-aZnCR)W(mLddjIS8-47pS?%L$Ou)iq(n`Oo+(I4gOfSzLTboFyt=akR{ E087Dmt^fc4 literal 0 HcmV?d00001