diff --git a/nether/init.lua b/nether/init.lua index 7eb2d0c..31f751c 100644 --- a/nether/init.lua +++ b/nether/init.lua @@ -98,6 +98,21 @@ NETHER_PORTAL = { --== END OF EDITABLE OPTIONS ==-- +local path = minetest.get_modpath("nether") +dofile(path.."/weird_mapgen_noise.lua") + +local function dif(z1, z2) + if z1 < 0 + and z2 < 0 then + z1,z2 = -z1,-z2 + end + return math.abs(z1-z2) +end + +local function pymg(x1, x2, z1, z2) + return math.max(dif(x1, x2), dif(z1, z2)) +end + local function r_area(manip, width, height, pos) local emerged_pos1, emerged_pos2 = manip:read_from_map( {x=pos.x-width, y=pos.y, z=pos.z-width}, @@ -278,7 +293,7 @@ minetest.register_node("nether:blood_stem", { sounds = default.node_sound_wood_defaults(), }) --- Nether leaves +--[[ Nether leaves minetest.register_node("nether:leaves", { description = "Nether Leaves", drawtype = "allfaces_optional", @@ -287,7 +302,7 @@ minetest.register_node("nether:leaves", { paramtype = "light", groups = {snappy=3, leafdecay=2}, sounds = default.node_sound_leaves_defaults(), -}) +})]] -- Nether apple minetest.register_node("nether:apple", { @@ -360,6 +375,7 @@ minetest.register_craftitem("nether:pearl", { local c_air = minetest.get_content_id("air") local c_netherrack = minetest.get_content_id("nether:netherrack") +local c_netherrack_brick = minetest.get_content_id("nether:netherrack_brick") local c_glowstone = minetest.get_content_id("glow:stone") --https://github.com/Zeg9/minetest-glow local c_lava = minetest.get_content_id("default:lava_source") local c_nether_shroom = minetest.get_content_id("riesenpilz:nether_shroom") @@ -395,15 +411,16 @@ minetest.register_on_generated(function(minp, maxp, seed) local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax} pr = PseudoRandom(seed+33) - local num = 1 - local tab = {} + local tab,num = {},1 + local num2 = 1 local perlin1 = minetest.get_perlin(13,3, 0.5, 50) --Get map specific perlin local perlin2 = minetest.get_perlin(133,3, 0.5, 10) local perlin3 = minetest.get_perlin(112,3, 0.5, 5) + local tab2 = nether_weird_noise(minp, pymg, 20, 8) - for x=minp.x, maxp.x, 1 do - for z=minp.z, maxp.z, 1 do + for z=minp.z, maxp.z do + for x=minp.x, maxp.x do local r_tree = pr:next(1,NETHER_TREE_FREQ) local r_shroom = pr:next(1,NETHER_SHROOM_FREQ) @@ -431,10 +448,18 @@ minetest.register_on_generated(function(minp, maxp, seed) local bottom = NETHER_BOTTOM+h local top = NETHER_DEPTH-pr:next(0,NETHER_RANDOM)+t + local py_h = tab2[num2].y + num2 = num2+1 + for y=minp.y, maxp.y, 1 do local p_addpos = area:index(x, y, z) - if data[p_addpos] ~= c_air then - local addpos = {x=x, y=y-1, z=z} + --if py_h >= maxp.y-4 then + if y == py_h then + data[p_addpos] = c_netherrack_brick + --[[else + data[p_addpos] = c_air + end]] + elseif data[p_addpos] ~= c_air then if y <= NETHER_BOTTOM then if y <= bottom then data[p_addpos] = return_nether_ore(1) @@ -443,7 +468,7 @@ minetest.register_on_generated(function(minp, maxp, seed) end elseif r_tree == 1 and y == bottom then - tab[num] = addpos + tab[num] = {x=x, y=y-1, z=z} num = num+1 elseif y <= bottom then if pr:next(1,LAVA_FREQ) == 1 then diff --git a/nether/weird_mapgen_noise.lua b/nether/weird_mapgen_noise.lua new file mode 100644 index 0000000..42540e3 --- /dev/null +++ b/nether/weird_mapgen_noise.lua @@ -0,0 +1,92 @@ +--V2 +local function get_random(a, b, seed) + return PseudoRandom(math.abs(a+b*5)+seed) +end + +local r_chs = {} + +function nether_weird_noise(minp, fct, s, seed, range) + if not r_chs[s] then + r_chs[s] = math.floor(s/3+0.5) + end + local r_ch = r_chs[s] + local maxp = vector.add(minp, 16) + + local tab,n = {},1 + local sm = range or (s+r_ch)*2 + for z = -sm, 16+sm do + local pz = z+minp.z + if pz%s == 0 then + for x = -sm, 16+sm do + local px = x+minp.x + if px%s == 0 then + local pr = get_random(px, pz, seed) + tab[n] = {x=px+pr:next(-r_ch, r_ch), y=0, z=pz+pr:next(-r_ch, r_ch)} + n = n+1 + end + end + end + end + + local tab2,n = {},1 + for z = minp.z, maxp.z do + for x = minp.x, maxp.x do + local h = sm + for _,i in ipairs(tab) do + --local dist = vector.distance(i, {x=x, y=0, z=z}) + h = math.min(h, fct(x, i.x, z, i.z)) + end + tab2[n] = {x=x, y=maxp.y-h, z=z} + n = n+1 + end + end + return tab2 +end + +--[[ +local function dif(z1, z2) + if z1 < 0 + and z2 < 0 then + z1,z2 = -z1,-z2 + end + return math.abs(z1-z2) +end + +local function pymg(x1, x2, z1, z2) + return math.max(dif(x1, x2), dif(z1, z2)) +end + +local function romg(x1, x2, z1, z2) + return math.hypot(dif(x1, x2), dif(z1, z2)) +end + +local function py2mg(x1, x2, z1, z2) + return dif(x1, x2) + dif(z1, z2) +end + +minetest.register_node("ac:wmg", { + description = "wmg", + tiles = {"ac_block.png"}, + groups = {snappy=1,bendy=2,cracky=1}, + sounds = default_stone_sounds, + on_construct = function(pos) + local minp = vector.chunkcorner(pos) + for _,p in ipairs(weird_noise(minp, pymg, 20, 8, 4)) do + local p2 = {x=p.x, y=p.y+1, z=p.z} + if p.y <= minp.y+7 then + local p2 = {x=p.x, y=minp.y+6, z=p.z} + local p3 = {x=p.x, y=p2.y+1, z=p.z} + if minetest.get_node(p2).name ~= "default:desert_stone" then + minetest.set_node(p2, {name="default:desert_stone"}) + end + if minetest.get_node(p3).name ~= "default:desert_sand" then + minetest.set_node(p3, {name="default:desert_sand"}) + end + else + if minetest.get_node(p).name ~= "default:desert_stone" then + minetest.set_node(p, {name="default:desert_stone"}) + end + end + end + end, +})]]