forked from nalc/nalc_game
		
	papyrus generation
This commit is contained in:
		@@ -68,13 +68,20 @@ local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume,
 | 
			
		||||
	--print("generate_ore done")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function make_papyrus(pos, size)
 | 
			
		||||
	for y=0,size-1 do
 | 
			
		||||
		local p = {x=pos.x, y=pos.y+y, z=pos.z}
 | 
			
		||||
		minetest.env:set_node(p, {name="default:papyrus"})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_generated(function(minp, maxp, seed)
 | 
			
		||||
	generate_ore("default:stone_with_coal", "default:stone", minp, maxp, seed,   1/8/8/8,    5, -31000,  64)
 | 
			
		||||
	generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+1, 1/16/16/16, 5,   -5,   7)
 | 
			
		||||
	generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+2, 1/12/12/12, 5, -16,   -5)
 | 
			
		||||
	generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+3, 1/9/9/9,    5, -31000, -17)
 | 
			
		||||
	-- Generate clay
 | 
			
		||||
	if maxp.y >= 2 and minp.y <= 0 then
 | 
			
		||||
		-- Generate clay
 | 
			
		||||
		-- Assume X and Z lengths are equal
 | 
			
		||||
		local divlen = 4
 | 
			
		||||
		local divs = (maxp.x-minp.x)/divlen+1;
 | 
			
		||||
@@ -109,6 +116,31 @@ minetest.register_on_generated(function(minp, maxp, seed)
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		end
 | 
			
		||||
		-- Generate papyrus
 | 
			
		||||
		local perlin1 = minetest.env:get_perlin(354, 3, 0.7, 100)
 | 
			
		||||
		-- Assume X and Z lengths are equal
 | 
			
		||||
		local divlen = 8
 | 
			
		||||
		local divs = (maxp.x-minp.x)/divlen+1;
 | 
			
		||||
		for divx=0,divs-1 do
 | 
			
		||||
		for divz=0,divs-1 do
 | 
			
		||||
			local x0 = minp.x + math.floor((divx+0)*divlen)
 | 
			
		||||
			local z0 = minp.z + math.floor((divz+0)*divlen)
 | 
			
		||||
			local x1 = minp.x + math.floor((divx+1)*divlen)
 | 
			
		||||
			local z1 = minp.z + math.floor((divz+1)*divlen)
 | 
			
		||||
			-- Determine papyrus amount from perlin noise
 | 
			
		||||
			local papyrus_amount = math.floor(perlin1:get2d({x=x0, y=z0}) * 45 - 20)
 | 
			
		||||
			-- Find random positions for papyrus based on this random
 | 
			
		||||
			local pr = PseudoRandom(seed+1)
 | 
			
		||||
			for i=0,papyrus_amount do
 | 
			
		||||
				local x = pr:next(x0, x1)
 | 
			
		||||
				local z = pr:next(z0, z1)
 | 
			
		||||
				if minetest.env:get_node({x=x,y=1,z=z}).name == "default:dirt_with_grass" and
 | 
			
		||||
						minetest.env:find_node_near({x=x,y=1,z=z}, 1, "default:water_source") then
 | 
			
		||||
					make_papyrus({x=x,y=2,z=z}, pr:next(2, 4))
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user