forked from nalc/nalc_game
		
	flowers/mapgen.lua: Register flower decorations for mgv6
This commit is contained in:
		@@ -1,70 +1,35 @@
 | 
			
		||||
function flowers.mgv6ongen(minp, maxp, seed)
 | 
			
		||||
	if maxp.y >= 2 and minp.y <= 0 then
 | 
			
		||||
		-- Generate flowers
 | 
			
		||||
		local perlin1 = minetest.get_perlin(436, 3, 0.6, 100)
 | 
			
		||||
		-- Assume X and Z lengths are equal
 | 
			
		||||
		local divlen = 16
 | 
			
		||||
		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 flowers amount from perlin noise
 | 
			
		||||
			local grass_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 3 * 9)
 | 
			
		||||
			-- Find random positions for flowers based on this random
 | 
			
		||||
			local pr = PseudoRandom(seed+456)
 | 
			
		||||
			for i=0,grass_amount do
 | 
			
		||||
				local x = pr:next(x0, x1)
 | 
			
		||||
				local z = pr:next(z0, z1)
 | 
			
		||||
				-- Find ground level (0...15)
 | 
			
		||||
				local ground_y = nil
 | 
			
		||||
				for y=30,0,-1 do
 | 
			
		||||
					if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then
 | 
			
		||||
						ground_y = y
 | 
			
		||||
						break
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
local function register_flower(name)
 | 
			
		||||
	minetest.register_decoration({
 | 
			
		||||
		deco_type = "simple",
 | 
			
		||||
		place_on = {"default:dirt_with_grass"},
 | 
			
		||||
		sidelen = 16,
 | 
			
		||||
		noise_params = {
 | 
			
		||||
			offset = 0,
 | 
			
		||||
			scale = 0.006,
 | 
			
		||||
			spread = {x=100, y=100, z=100},
 | 
			
		||||
			seed = 436,
 | 
			
		||||
			octaves = 3,
 | 
			
		||||
			persist = 0.6
 | 
			
		||||
		},
 | 
			
		||||
		y_min = 1,
 | 
			
		||||
		y_max = 30,
 | 
			
		||||
		decoration = "flowers:"..name.."",
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
				if ground_y then
 | 
			
		||||
					local p = {x=x,y=ground_y+1,z=z}
 | 
			
		||||
					local nn = minetest.get_node(p).name
 | 
			
		||||
					-- Check if the node can be replaced
 | 
			
		||||
					if minetest.registered_nodes[nn] and
 | 
			
		||||
						minetest.registered_nodes[nn].buildable_to then
 | 
			
		||||
						nn = minetest.get_node({x=x,y=ground_y,z=z}).name
 | 
			
		||||
						if nn == "default:dirt_with_grass" then
 | 
			
		||||
							local flower_choice = pr:next(1, 6)
 | 
			
		||||
							local flower
 | 
			
		||||
							if flower_choice == 1 then
 | 
			
		||||
								flower = "flowers:tulip"
 | 
			
		||||
							elseif flower_choice == 2 then
 | 
			
		||||
								flower = "flowers:rose"
 | 
			
		||||
							elseif flower_choice == 3 then
 | 
			
		||||
								flower = "flowers:dandelion_yellow"
 | 
			
		||||
							elseif flower_choice == 4 then
 | 
			
		||||
								flower = "flowers:dandelion_white"
 | 
			
		||||
							elseif flower_choice == 5 then
 | 
			
		||||
								flower = "flowers:geranium"
 | 
			
		||||
							elseif flower_choice == 6 then
 | 
			
		||||
								flower = "flowers:viola"
 | 
			
		||||
							end
 | 
			
		||||
							minetest.set_node(p, {name=flower})
 | 
			
		||||
						end
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
function flowers.register_mgv6_decorations()
 | 
			
		||||
	register_flower("rose")
 | 
			
		||||
	register_flower("tulip")
 | 
			
		||||
	register_flower("dandelion_yellow")
 | 
			
		||||
	register_flower("geranium")
 | 
			
		||||
	register_flower("viola")
 | 
			
		||||
	register_flower("dandelion_white")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Enable in mapgen v6 only
 | 
			
		||||
 | 
			
		||||
minetest.register_on_mapgen_init(function(mg_params)
 | 
			
		||||
	if mg_params.mgname == "v6" then
 | 
			
		||||
		minetest.register_on_generated(flowers.mgv6ongen)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
local mg_params = minetest.get_mapgen_params()
 | 
			
		||||
if mg_params.mgname == "v6" then
 | 
			
		||||
	flowers.register_mgv6_decorations()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user