From befc604af39a3d0adeec1657a10c694564894433 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 7 Apr 2012 15:37:31 +0300 Subject: [PATCH] Add cactus generation, desert_sand and desert_stone --- mods/default/init.lua | 19 ++++++++ mods/default/mapgen.lua | 46 +++++++++++++++++- mods/default/textures/default_cactus_side.png | Bin 279 -> 763 bytes mods/default/textures/default_cactus_top.png | Bin 236 -> 682 bytes mods/default/textures/default_desert_sand.png | Bin 0 -> 627 bytes .../default/textures/default_desert_stone.png | Bin 0 -> 517 bytes 6 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 mods/default/textures/default_desert_sand.png create mode 100644 mods/default/textures/default_desert_stone.png diff --git a/mods/default/init.lua b/mods/default/init.lua index 6f0ed21..3ff05e2 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -698,6 +698,16 @@ minetest.register_node("default:stone", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:desert_stone", { + description = "Desert stone", + tile_images = {"default_desert_stone.png"}, + is_ground_content = true, + groups = {cracky=3}, + drop = 'default:cobble', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + minetest.register_node("default:stone_with_coal", { description = "Stone with coal", tile_images = {"default_stone.png^default_mineral_coal.png"}, @@ -754,6 +764,14 @@ minetest.register_node("default:sand", { sounds = default.node_sound_sand_defaults(), }) +minetest.register_node("default:desert_sand", { + description = "Desert sand", + tile_images = {"default_desert_sand.png"}, + is_ground_content = true, + groups = {sand=1, crumbly=3}, + sounds = default.node_sound_sand_defaults(), +}) + minetest.register_node("default:gravel", { description = "Gravel", tile_images = {"default_gravel.png"}, @@ -1356,6 +1374,7 @@ end default.register_falling_node("default:sand", "default_sand.png") default.register_falling_node("default:gravel", "default_gravel.png") +default.register_falling_node("default:desert_sand", "default_desert_sand.png") -- -- Global callbacks diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index c6e7d24..e6e08c7 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -22,6 +22,8 @@ minetest.register_alias("mapgen_junglegrass", "default:junglegrass") minetest.register_alias("mapgen_stone_with_coal", "default:stone_with_coal") minetest.register_alias("mapgen_stone_with_iron", "default:stone_with_iron") minetest.register_alias("mapgen_mese", "default:mese") +minetest.register_alias("mapgen_desert_sand", "default:desert_sand") +minetest.register_alias("mapgen_desert_stone", "default:desert_stone") -- -- Ore generation @@ -68,13 +70,20 @@ local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, --print("generate_ore done") end -local function make_papyrus(pos, size) +function default.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 +function default.make_cactus(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:cactus"}) + 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) @@ -136,7 +145,40 @@ minetest.register_on_generated(function(minp, maxp, seed) 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)) + default.make_papyrus({x=x,y=2,z=z}, pr:next(2, 4)) + end + end + end + end + -- Generate cactuses + local perlin1 = minetest.env:get_perlin(230, 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 cactus amount from perlin noise + local cactus_amount = math.floor(perlin1:get2d({x=x0, y=z0}) * 6 - 5) + -- Find random positions for cactus based on this random + local pr = PseudoRandom(seed+1) + for i=0,cactus_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.env:get_node({x=x,y=y,z=z}).name ~= "air" then + ground_y = y + break + end + end + -- If desert sand, make cactus + if ground_y and minetest.env:get_node({x=x,y=ground_y,z=z}).name == "default:desert_sand" then + default.make_cactus({x=x,y=ground_y+1,z=z}, pr:next(3, 4)) end end end diff --git a/mods/default/textures/default_cactus_side.png b/mods/default/textures/default_cactus_side.png index fc479fde6f9dc859180035ee3974c1ffb198136c..395dd0d64ffde7c81d97de2282d412c8a7e9a4ca 100644 GIT binary patch delta 699 zcmbQv^qX~pPyHPhb{+-coAD)685o#)JzX3_EKa*#KARnzD!}&Pex-k2-n;a5+dDm@ zVj~I^n-=U4V(Gr1W)@bhQFo!M%UXQbi$kqkdM+%2uB&!%+)#^Z>Ym=j!S#;yKg&U- zYpq+S9+{O<^xpRQj*94A(rwRYRz90KbIs3&U+>%{{Aa`}&3{%uUw4+};@C|+ZtZua zeL{0=gy-JVX*n=;KF3+R$MrXB^i~}UNxqeShfRJvgnoR!o@e@vyNk*j49YnSotPW3UULW7FsplM{)9U#ttu|{lPru~7l(w(NOv`;ve6Q7B zmvc=1b#W(_1l zTg&IDoXkFbvBExgp{;_?#kv0OVZIU8Vq2?TiXF2~Is5x+H~%G>3BHAIjSe?+ez^Mi zV)t~e-kG!6ywlFfCcW3!o7d@-p|V)druO!X-r$KnQ~A5E{G4{M@t)1kv+)&QraFCl z%)e3ZoT$mSY`%Nbm;C$4eYo|@q3s;k>ykefR4qAKpA(<<_sg#TjJkWjOz-6KJ;A`h Oz~JfX=d#Wzp$PzC3RhtO delta 211 zcmey(I-O~PPyKCH8AfGxcixrn7#J8h7_(94+3fk~I6>ry1M%`S>?i_@% diff --git a/mods/default/textures/default_cactus_top.png b/mods/default/textures/default_cactus_top.png index f9e68df5114b04f48290dc277b9d73f49db941cc..60a193c4a811d0890d52ac24bbcc21f3784aba7d 100644 GIT binary patch delta 617 zcmaFExQcaxPyHPhb{++xbrCMi3=B**o-U3d7N>nDTW5zlinQ*ZY5aW7?-RZY7wug; z^&g9%ps2F4hPh&((!py^{~N=?wrO#Cdi1Oi-sm~`-v6YD3GbAj8}fJ8I&?P{r+tfC zv-R7pSEp((Juu?YbKJ)e#mwa)Ak`r^rA=a?UF%%;zK`ovRWs_<7Hplk=$p(f%O6rn z4FXU89rktqut0PMxC;rWC; zf5dGsXtPhNQE=VY^j6iqm~ElxD=*Jvrbh5`h#EWV`MRhnjHO>K zHD5bgvKVEgKg!FnS|zpVjeLdIhSKXB>ryn`7JNU(H@B26ZNhhl=S%@}ol2GDUc}t< zVSMc_7VNdRt}4UO){(C_!%uME-hvjcx;-UF#DW$WKiJRw;$LfDRD=I^*?;vhPG5d3 zR*i3Hf4`RHq;qs*e!}NI<)eJ>e@O>%2`x!eTIM)?AH(nD1CN8zbTxRQgHXuj$;Z~*f14C4koHyNR_71F=pVZtUid5=xu`j`{bl3J z!+mdkxSV#+J2h$Ik!BIsPiwD>#m?o}y4BfxBgaz?v%b`wNe#bznu6zgo%l9Abk44ofy`glX=O&z`$AH z5n0T@z%2~Ij105pNH8!ku$OrHy0YJ4VdqhnNjhtFoPmLf)zif>#NxE+#OO(n-FR3w zH{=D)y8f=^{1fA!TlO^_-e^2YW0Uk&`7Qht973o4`}f*^b@yHdXMSTD3tr|NXO>No zLf>SknI1TLT{&~7+U+ogEn#PvPJU^KSlD)BxnP?9$1NA~)DGU>nz23qvh|khZO@k^ z8o5YrTQ12Q7pI`a_+pj|e^ghl@xruUp&XO5l{&KyZWEop^v4gLU)e^7@9b0iTkE>^ z^ZE6Q(k@(cz2Vky{O0y~&0i-ueB3irvUPdI&zw7TvS$wKsBQ~%;dmwxvQRChxqDV~ zt;j@HVUsf-Yd4e?$DZN%@l$fk@yl!OdT<`+oR+Ay!^EO&a^^238QGgQx%ciL+2)*L zt6%+wQ0SlEtleB|*;spokG1ChnbE`i&i}`Sx^pjUjReb8?d@y4m}7(&CHScra&1$N zIQ(aa#FdqA7rd2xWBsSXJj8H*(kX*pA*H5d@ypNNG6g-Db>{h#I+nME#?#|+zCZcs zF>Pyvb&En&Q+Euj*^M6-lmF=N+Z(GO_$_7Uyh}DdF|9fQk7o6xCw8uUqOtkyhvQeb z@Hl!W*=x*Znx|ZOS1ro_^k44ofy`glX=O&z`$AH z5n0T@z%2~Ij105pNH8!ku$OrHy0YJ4Vds(L)xC1Whk=1{x~Gd{h{fsL$DOt{1P(fL-gluT=QQovhMGni|@J@hu!dU&FJZR^)r5H z62qQN3s--87%g;p#I^nSmC*kXRNcf7WQ);xPF`I!29E6OjbX3 zr!y42eYI`V=8EIT7ikT0g#=|@1)JxeLS(Zz8 zU5;8+7HD8x@yzJyyzAFfpXY=$wg_I07kP5a{5_+Rwf^tLts^;+g7Nn5ThyFbzWlpD{yg}=5+D={(M X^~=+p3~q}+(aYfJ>gTe~DWM4fi9zV! literal 0 HcmV?d00001