From d8703137d414ef386defe6685b48657348dd7c8b Mon Sep 17 00:00:00 2001 From: poikilos <7557867+poikilos@users.noreply.github.com> Date: Wed, 6 Feb 2019 13:55:15 -0500 Subject: [PATCH] first partially working version without Nether --- init.lua | 189 +------------------------------------------------------ 1 file changed, 1 insertion(+), 188 deletions(-) diff --git a/init.lua b/init.lua index 62fd038..76b3741 100644 --- a/init.lua +++ b/init.lua @@ -21,32 +21,6 @@ ]]-- --- Parameters - -local NETHER_DEPTH = -5000 -local TCAVE = 0.6 -local BLEND = 128 - - --- 3D noise - -local np_cave = { - offset = 0, - scale = 1, - spread = {x = 384, y = 128, z = 384}, -- squashed 3:1 - seed = 59033, - octaves = 5, - persist = 0.7, - lacunarity = 2.0, - --flags = "" -} - - --- Stuff - -local yblmax = NETHER_DEPTH - BLEND * 2 - - -- Functions local function build_portal(pos, target) @@ -98,49 +72,6 @@ local function volume_is_natural(minp, maxp) end -local function find_nether_target_y(target_x, target_z, start_y) - local nobj_cave_point = minetest.get_perlin(np_cave) - local air = 0 -- Consecutive air nodes found - - for y = start_y, start_y - 4096, -1 do - local nval_cave = nobj_cave_point:get3d({x = target_x, y = y, z = target_z}) - - if nval_cave > TCAVE then -- Cavern - air = air + 1 - else -- Not cavern, check if 4 nodes of space above - if air >= 4 then - -- Check volume for non-natural nodes - local minp = {x = target_x - 1, y = y - 1, z = target_z - 2} - local maxp = {x = target_x + 2, y = y + 3, z = target_z + 2} - if volume_is_natural(minp, maxp) then - return y + 2 - else -- Restart search a little lower - find_nether_target_y(target_x, target_z, y - 16) - end - else -- Not enough space, reset air to zero - air = 0 - end - end - end - - return start_y -- Fallback -end - - -local function find_surface_target_y(target_x, target_z, start_y) - for y = start_y, start_y - 256, -16 do - -- Check volume for non-natural nodes - local minp = {x = target_x - 1, y = y - 1, z = target_z - 2} - local maxp = {x = target_x + 2, y = y + 3, z = target_z + 2} - if volume_is_natural(minp, maxp) then - return y - end - end - - return start_y - 256 -- Fallback -end - - local function move_check(p1, max, dir) local p = {x = p1.x, y = p1.y, z = p1.z} local d = math.abs(max - p1[dir]) / (max - p1[dir]) @@ -231,13 +162,7 @@ local function make_portal(pos) end local target = {x = p1.x, y = p1.y, z = p1.z} - target.x = target.x + 1 - if target.y < NETHER_DEPTH then - target.y = find_surface_target_y(target.x, target.z, -16) - else - local start_y = NETHER_DEPTH - math.random(500, 1500) -- Search start - target.y = find_nether_target_y(target.x, target.z, start_y) - end + -- don't find nether, since nether-blocks not nether mod for d = 0, 3 do for y = p1.y, p2.y do @@ -289,12 +214,6 @@ minetest.register_abm({ local meta = minetest.get_meta(pos) local target = minetest.string_to_pos(meta:get_string("target")) if target then - -- force emerge of target area - minetest.get_voxel_manip():read_from_map(target, target) - if not minetest.get_node_or_nil(target) then - minetest.emerge_area( - vector.subtract(target, 4), vector.add(target, 4)) - end -- teleport the player minetest.after(3, function(o, p, t) local objpos = o:getpos() @@ -601,109 +520,3 @@ local c_nethersand = minetest.get_content_id("nether:sand") local c_netherbrick = minetest.get_content_id("nether:brick") local c_netherrack = minetest.get_content_id("nether:rack") - --- On-generated function - -minetest.register_on_generated(function(minp, maxp, seed) - if minp.y > NETHER_DEPTH then - return - end - - local x1 = maxp.x - local y1 = maxp.y - local z1 = maxp.z - local x0 = minp.x - local y0 = minp.y - local z0 = minp.z - - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} - local data = vm:get_data(dbuf) - - local x11 = emax.x -- Limits of mapchunk plus mapblock shell - local y11 = emax.y - local z11 = emax.z - local x00 = emin.x - local y00 = emin.y - local z00 = emin.z - - local ystride = x1 - x0 + 1 - local zstride = ystride * ystride - local chulens = {x = ystride, y = ystride, z = ystride} - local minposxyz = {x = x0, y = y0, z = z0} - - nobj_cave = nobj_cave or minetest.get_perlin_map(np_cave, chulens) - local nvals_cave = nobj_cave:get3dMap_flat(minposxyz, nbuf_cave) - - for y = y00, y11 do -- Y loop first to minimise tcave calculations - local tcave - local in_chunk_y = false - if y >= y0 and y <= y1 then - if y > yblmax then - tcave = TCAVE + ((y - yblmax) / BLEND) ^ 2 - else - tcave = TCAVE - end - in_chunk_y = true - end - - for z = z00, z11 do - local vi = area:index(x00, y, z) -- Initial voxelmanip index - local ni - local in_chunk_yz = in_chunk_y and z >= z0 and z <= z1 - - for x = x00, x11 do - if in_chunk_yz and x == x0 then - -- Initial noisemap index - ni = (z - z0) * zstride + (y - y0) * ystride + 1 - end - local in_chunk_yzx = in_chunk_yz and x >= x0 and x <= x1 -- In mapchunk - - local id = data[vi] -- Existing node - -- Cave air, cave liquids and dungeons are overgenerated, - -- convert these throughout mapchunk plus shell - if id == c_air or -- Air and liquids to air - id == c_lava_source or - id == c_lava_flowing or - id == c_water_source or - id == c_water_flowing then - data[vi] = c_air - -- Dungeons are preserved so we don't need - -- to check for cavern in the shell - elseif id == c_cobble or -- Dungeons (preserved) to netherbrick - id == c_mossycobble or - id == c_stair_cobble then - data[vi] = c_netherbrick - end - - if in_chunk_yzx then -- In mapchunk - if nvals_cave[ni] > tcave then -- Only excavate cavern in mapchunk - data[vi] = c_air - elseif id == c_mese then -- Mese block to lava - data[vi] = c_lava_source - elseif id == c_stone_with_gold or -- Precious ores to glowstone - id == c_stone_with_mese or - id == c_stone_with_diamond then - data[vi] = c_glowstone - elseif id == c_gravel or -- Blob ore to nethersand - id == c_dirt or - id == c_sand then - data[vi] = c_nethersand - else -- All else to netherstone - data[vi] = c_netherrack - end - - ni = ni + 1 -- Only increment noise index in mapchunk - end - - vi = vi + 1 - end - end - end - - vm:set_data(data) - vm:set_lighting({day = 0, night = 0}) - vm:calc_lighting() - vm:update_liquids() - vm:write_to_map() -end)