Skip to content

Commit 7e98206

Browse files
committed
Better grass and cactus generation
1 parent 9103bdb commit 7e98206

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

mods/default/mapgen.lua

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,12 @@ function default.make_nyancat(pos, facedir, length)
295295
elseif facedir == 3 then
296296
tailvec.x = -1
297297
else
298-
--print("default.make_nyancat(): Invalid facedir: "+dump(facedir))
299298
facedir = 0
300299
tailvec.z = 1
301300
end
302301
local p = {x=pos.x, y=pos.y, z=pos.z}
303302
minetest.set_node(p, {name="default:nyancat", param2=facedir})
304-
for i=1,length do
303+
for i=1, length do
305304
p.x = p.x + tailvec.x
306305
p.z = p.z + tailvec.z
307306
minetest.set_node(p, {name="default:nyancat_rainbow", param2=facedir})
@@ -314,20 +313,16 @@ function generate_nyancats(seed, minp, maxp)
314313
if maxp.y < height_min or minp.y > height_max then
315314
return
316315
end
317-
local y_min = math.max(minp.y, height_min)
318-
local y_max = math.min(maxp.y, height_max)
319-
local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
320316
local pr = PseudoRandom(seed + 9324342)
321-
local max_num_nyancats = math.floor(volume / (16*16*16))
322-
for i=1,max_num_nyancats do
323-
if pr:next(0, 1000) == 0 then
324-
local x0 = pr:next(minp.x, maxp.x)
325-
local y0 = pr:next(minp.y, maxp.y)
326-
local z0 = pr:next(minp.z, maxp.z)
327-
local p0 = {x=x0, y=y0, z=z0}
328-
default.make_nyancat(p0, pr:next(0,3), pr:next(3,15))
329-
end
317+
if pr:next(0, 1200) ~= 0 then
318+
return
330319
end
320+
321+
local x0 = pr:next(minp.x, maxp.x)
322+
local y0 = pr:next(minp.y, maxp.y)
323+
local z0 = pr:next(minp.z, maxp.z)
324+
local p0 = {x=x0, y=y0, z=z0}
325+
default.make_nyancat(p0, pr:next(0,3), pr:next(3,15))
331326
end
332327

333328
minetest.register_on_generated(function(minp, maxp, seed)
@@ -344,7 +339,6 @@ minetest.register_on_generated(function(minp, maxp, seed)
344339

345340
local n_papyrus = minetest.get_perlin(354, 3, 0.7, 100)
346341
local n_cactus = minetest.get_perlin(230, 3, 0.6, 100)
347-
local sidelen = maxp.x - minp.x + 1
348342

349343
local vm = minetest.get_voxel_manip()
350344
local emin, emax = vm:read_from_map(minp, maxp)
@@ -354,7 +348,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
354348
local rand = PseudoRandom(seed % 8000)
355349
for z = minp.z + 2, maxp.z - 2, 4 do
356350
for x = minp.x + 2, maxp.x - 2, 4 do
357-
local papyrus_amount = math.floor(n_papyrus:get2d({x=x, y=z}) * 9 - 3)
351+
local papyrus_amount = math.floor(n_papyrus:get2d({x=x, y=z}) * 6 - 2)
358352
for i = 1, papyrus_amount do
359353
local p_pos = {
360354
x = rand:next(x - 2, x + 2),
@@ -368,7 +362,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
368362
end
369363
end
370364

371-
local cactus_amount = math.floor(n_cactus:get2d({x=x, y=z}) * 4 - 2)
365+
local cactus_amount = math.floor(n_cactus:get2d({x=x, y=z}) * 3)
372366
for i = 1, cactus_amount do
373367
local p_pos = {
374368
x = rand:next(x - 2, x + 2),
@@ -391,7 +385,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
391385
if last == c_grass then
392386
minetest.set_node(p_pos, {name="default:grass_"..rand:next(1, 5)})
393387
elseif last == c_sand then
394-
if rand:next(1, 5) >= 3 then
388+
if rand:next(1, 5) >= 4 then
395389
default.make_cactus(p_pos, rand:next(3, 4))
396390
else
397391
minetest.set_node(p_pos, {name="default:dry_shrub"})

0 commit comments

Comments
 (0)