From 765d8f2fb6c0e2bb55cb3c8cf1043641cf3640a9 Mon Sep 17 00:00:00 2001 From: Chris N Date: Tue, 24 Jun 2014 14:03:21 -1000 Subject: [PATCH] Fungus Biome Addition New crystal color and two more additions: lichen covered cobble and fungus. --- init.lua | 168 ++++++++++++++++++++--- textures/caverealms_fungi.png | Bin 0 -> 249 bytes textures/caverealms_glow_emerald.png | Bin 0 -> 714 bytes textures/caverealms_glow_emerald_ore.png | Bin 0 -> 686 bytes textures/caverealms_lichen.png | Bin 0 -> 925 bytes textures/caverealms_lichen_side.png | Bin 0 -> 533 bytes 6 files changed, 149 insertions(+), 19 deletions(-) create mode 100644 textures/caverealms_fungi.png create mode 100644 textures/caverealms_glow_emerald.png create mode 100644 textures/caverealms_glow_emerald_ore.png create mode 100644 textures/caverealms_lichen.png create mode 100644 textures/caverealms_lichen_side.png diff --git a/init.lua b/init.lua index 88b7797..44c4bcb 100644 --- a/init.lua +++ b/init.lua @@ -36,6 +36,7 @@ local CRYSTAL = 0.007 --chance of glow crystal formations local H_CRY = 9 --max height of glow crystals local H_CLAC = 13 --max height of glow crystal stalactites local GEMCHA = 0.03 --chance of small glow gems +local MUSHCHA = 0.04 --chance of mushrooms -- 3D noise for caverns @@ -71,6 +72,17 @@ local np_wave = { persist = 0.5 } +-- 2D noise for biome + +local np_biome = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 9130, + octaves = 3, + persist = 0.5 +} + -- Nodes --glowing crystal @@ -87,6 +99,20 @@ minetest.register_node("caverealms:glow_crystal", { sunlight_propagates = true, }) +--glowing emerald +minetest.register_node("caverealms:glow_emerald", { + description = "Glow Emerald", + tiles = {"caverealms_glow_emerald.png"}, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_glass_defaults(), + light_source = 13, + paramtype = "light", + use_texture_alpha = true, + drawtype = "glasslike", + sunlight_propagates = true, +}) + --embedded crystal minetest.register_node("caverealms:glow_ore", { description = "Glow Crystal Ore", @@ -98,7 +124,18 @@ minetest.register_node("caverealms:glow_ore", { paramtype = "light", }) ---glowing crystal +--embedded emerald +minetest.register_node("caverealms:glow_emerald_ore", { + description = "Glow Emerald Ore", + tiles = {"caverealms_glow_emerald_ore.png"}, + is_ground_content = true, + groups = {cracky=2}, + sounds = default.node_sound_glass_defaults(), + light_source = 10, + paramtype = "light", +}) + +--glowing crystal gem minetest.register_node("caverealms:glow_gem", { description = "Glow Gem", tiles = {"caverealms_glow_gem.png"}, @@ -118,6 +155,7 @@ minetest.register_node("caverealms:glow_gem", { fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, }) + --cave mossy cobble - bluish? minetest.register_node("caverealms:stone_with_moss", { description = "Cave Stone with Moss", @@ -130,8 +168,39 @@ minetest.register_node("caverealms:stone_with_moss", { }), }) +--cave lichen-covered cobble - purple-ish +minetest.register_node("caverealms:stone_with_lichen", { + description = "Cave Stone with Lichen", + tiles = {"default_cobble.png^caverealms_lichen.png", "default_cobble.png", "default_cobble.png^caverealms_lichen_side.png"}, + is_ground_content = true, + groups = {crumbly=3}, + drop = 'default:cobblestone', + sounds = default.node_sound_dirt_defaults({ + footstep = {name="default_grass_footstep", gain=0.25}, + }), +}) + --cave plants go here +--glowing fungi +minetest.register_node("caverealms:fungus", { + description = "Glowing Fungus", + tiles = {"caverealms_fungi.png"}, + inventory_image = "caverealms_fungi.png", + wield_image = "caverealms_fungi.png", + is_ground_content = true, + groups = {oddly_breakable_by_hand=3}, + light_source = 5, + paramtype = "light", + drawtype = "plantlike", + walkable = false, + buildable_to = true, + visual_scale = 1.0, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, +}) --FUNCTIONS-- @@ -202,11 +271,14 @@ function caverealms:stalactite(x,y,z, area, data) end --glowing crystal stalagmite spawner -function caverealms:crystal_stalagmite(x,y,z, area, data) +function caverealms:crystal_stalagmite(x,y,z, area, data, biome) --contest ids local c_stone = minetest.get_content_id("default:stone") local c_crystal = minetest.get_content_id("caverealms:glow_crystal") local c_crystore = minetest.get_content_id("caverealms:glow_ore") + local c_emerald = minetest.get_content_id("caverealms:glow_emerald") + local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore") + local top = math.random(5,H_CRY) --grab a random height for the stalagmite for j = 0, top do --y @@ -220,16 +292,28 @@ function caverealms:crystal_stalagmite(x,y,z, area, data) elseif j <= top/5 then if k*k + l*l <= 4 then local vi = area:index(x+k, y+j, z+l-3) - data[vi] = c_crystore + if biome == 1 then + data[vi] = c_crystore + elseif biome == 2 then + data[vi] = c_emore + end end elseif j <= top/5 * 3 then if k*k + l*l <= 1 then local vi = area:index(x+k, y+j, z+l-3) - data[vi] = c_crystal + if biome == 1 then + data[vi] = c_crystal + elseif biome == 2 then + data[vi] = c_emerald + end end else local vi = area:index(x, y+j, z-3) - data[vi] = c_crystal + if biome == 1 then + data[vi] = c_crystal + elseif biome == 2 then + data[vi] = c_emerald + end end end end @@ -237,11 +321,13 @@ function caverealms:crystal_stalagmite(x,y,z, area, data) end --crystal stalactite spawner -function caverealms:crystal_stalactite(x,y,z, area, data) +function caverealms:crystal_stalactite(x,y,z, area, data, biome) --contest ids local c_stone = minetest.get_content_id("default:stone") local c_crystore = minetest.get_content_id("caverealms:glow_ore") local c_crystal = minetest.get_content_id("caverealms:glow_crystal") + local c_emerald = minetest.get_content_id("caverealms:glow_emerald") + local c_emore = minetest.get_content_id("caverealms:glow_emerald_ore") local bot = math.random(-H_CLAC, -6) --grab a random height for the stalagmite for j = bot, 0 do --y @@ -255,16 +341,29 @@ function caverealms:crystal_stalactite(x,y,z, area, data) elseif j >= bot/5 then if k*k + l*l <= 4 then local vi = area:index(x+k, y+j, z+l-3) - data[vi] = c_crystore + if biome == 1 then + data[vi] = c_crystore + elseif biome == 2 then + data[vi] = c_emore + end end elseif j >= bot/5 * 3 then if k*k + l*l <= 1 then local vi = area:index(x+k, y+j, z+l-3) - data[vi] = c_crystal + if biome == 1 then + data[vi] = c_crystal + elseif biome == 2 then + data[vi] = c_emerald + end end else local vi = area:index(x, y+j, z-3) - data[vi] = c_crystal + local vi = area:index(x, y+j, z-3) + if biome == 1 then + data[vi] = c_crystal + elseif biome == 2 then + data[vi] = c_emerald + end end end end @@ -310,6 +409,8 @@ minetest.register_on_generated(function(minp, maxp, seed) local c_crystal = minetest.get_content_id("caverealms:glow_crystal") local c_gem = minetest.get_content_id("caverealms:glow_gem") local c_moss = minetest.get_content_id("caverealms:stone_with_moss") + local c_lichen = minetest.get_content_id("caverealms:stone_with_lichen") + local c_fungus = minetest.get_content_id("caverealms:fungus") --some mandatory values local sidelen = x1 - x0 + 1 --usually equals 80 with default mapgen values. Always a multiple of 16. @@ -318,10 +419,11 @@ minetest.register_on_generated(function(minp, maxp, seed) local minposxz = {x=x0, y=z0} --generate the all important perlin that makes nice terrains - local nvals_cave = minetest.get_perlin_map(np_cave, chulens):get3dMap_flat(minposxyz) - local nvals_cluster = minetest.get_perlin_map(np_cluster, chulens):get3dMap_flat(minposxyz) + local nvals_cave = minetest.get_perlin_map(np_cave, chulens):get3dMap_flat(minposxyz) --obviously for caves + local nvals_cluster = minetest.get_perlin_map(np_cluster, chulens):get3dMap_flat(minposxyz) --how large of clusters of caverns? - local nvals_wave = minetest.get_perlin_map(np_wave, chulens):get2dMap_flat(minposxz) + local nvals_wave = minetest.get_perlin_map(np_wave, chulens):get2dMap_flat(minposxz) --wavy structure of cavern ceilings and floors + local nvals_biome = minetest.get_perlin_map(np_biome, chulens):get2dMap_flat({x=x0+150, y=z0+50}) --2D noise for biomes (will be 3D humidity/temp later) --more values local nixyz = 1 --short for node index xyz @@ -373,21 +475,39 @@ minetest.register_on_generated(function(minp, maxp, seed) end elseif dirt[si] >= 1 then -- node above surface + --determine biome + local biome = false --preliminary declaration + n_biome = nvals_biome[nixz] --make an easier reference to the noise + if n_biome >= 0 then + biome = 1 + elseif n_biome < 0 then + biome = 2 + else + biome = 1 --not necessary, just to prevent bugs + end --place dirt on floor, add plants - data[vi] = c_moss + if biome == 1 then + data[vi] = c_moss + elseif biome == 2 then + data[vi] = c_lichen + end --on random chance, place glow crystal formations if math.random() <= CRYSTAL then - caverealms:crystal_stalagmite(x, y, z, area, data) + caverealms:crystal_stalagmite(x, y, z, area, data, biome) end --randomly place stalagmites if math.random() <= STAGCHA then - caverealms:stalagmite(x, y, z, area, data) + caverealms:stalagmite(x, y, z, area, data, biome) end --randomly place glow gems - if math.random() < GEMCHA then + if math.random() < GEMCHA and biome == 1 then local gi = area:index(x,y+1,z) data[gi] = c_gem end + if math.random() < MUSHCHA and biome == 2 then + local gi = area:index(x,y+1,z) + data[gi] = c_fungus + end dirt[si] = 0 else -- solid rock stable[si] = 0 @@ -421,17 +541,27 @@ minetest.register_on_generated(function(minp, maxp, seed) stable2[si] = stable2[si] + 1 end - elseif roof[si] >= 1 then --and stable2[si] >= 2 then -- node above surface + elseif roof[si] >= 1 then --and stable2[si] >= 2 then -- node at roof + --determine biome + local biome = false --preliminary declaration + n_biome = nvals_biome[nixz2] --make an easier reference to the noise + if n_biome >= 0 then + biome = 1 + elseif n_biome < 0 then + biome = 2 + else + biome = 1 --not necessary, just to prevent bugs + end if math.random() <= STALCHA then local ai = area:index(x,y+1,z) if data[ai] ~= c_air then - caverealms:stalactite(x, y, z, area, data) + caverealms:stalactite(x, y, z, area, data, biome) end end if math.random() <= CRYSTAL then local ai = area:index(x,y+1,z) if data[ai] ~= c_air then - caverealms:crystal_stalactite(x,y,z, area, data) + caverealms:crystal_stalactite(x,y,z, area, data, biome) end end roof[si] = 0 diff --git a/textures/caverealms_fungi.png b/textures/caverealms_fungi.png new file mode 100644 index 0000000000000000000000000000000000000000..27853088b4ba5e8c9565249bdb9d674ae5196cb1 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#9-D-yuu$1Ho;;usPi9C&iF1B#Zfaf$kjucZXWgcmK&rvh#WBRtP0i zN0Z;2n)6%!nBMGpJ)ye7cFgv3_O!xI>}_0E3n6#lO)?P9iL(~HOTn+`uX zwW$Ap>7yT#A6q$v%{*fmxwt2Hz=%03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00J&aL_t(I%Vm?zZqq;% zh0pvY@uX24L>DwlQIJ>^Rv?}rPr!rmO7IA55E8pAqExLEF}F=KwrB3dERr!U%w{C} z-sA7yb1Xi5x%rCovGW4KMX=}m2-@n?Jywh2)$nC-aiTA@e*E?HT@{Mt{+A#Lc#etpKRG~;3;e-;@?1GcYAKmcMtO7Ar zw>7lY7|aafKF-G1qmn&$V-05JBy^#vzHgjRg0!9}0B~oLZ-bdZa1q*S(9iu$C;GpCAxZo7!cyZ8n2am-!>?8FDZ)CnY0XCOMDu%vu0YBe@J`qP!QG ztvbe*Qk9%gf>M(@l3bXYv~GTfH2?%+(pH!38M2rU7lWArdq#MOl&a*CKT>K^N5Y@iZZ8m7z&hso%--Tx)dH$SEHB?J&HDn(tFRoA0Uu+hlfb@edCfp5!fp0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#9BuPX;R4C7FQax|e01$oW@7Rgsv{frLNI)eh3rI!K zACQ!8Nhvg;5ws1^m6iX%%7l;*5*@-F zGIa|j8xZ&GX6LaFfQT{+3INx20ldGv4Z!z(x=^Y7ImHoxbXf*q>Q=|K@oz;hWB_z? z>jr>ph3o4Zwc+u9clfzPSLw*D}BET%m@yyu_0C=7UKvmVug7WK0-!Kdb1%FZ> zwNkm9W)1Vi+S1rpXcz_&(UrATD)vp?+P(iRwgq4i^kqd=RW<#W(9|t^vn$L65;GIf zaqWC_hpU)gbQLEJ&_Tw}{0*kY!PkA2$>_{{f0-&jo3Atn0$>S4)-3SF=nHEjm z@&iw9YLX-g!dyT^RO~yA&}oDKI<9T^+OKZC`O^BDbO2DXPt4+sc`{ql{lHVEg|V3t zKkxu}Pa{Q^k6b+DZuhVwcHeo@XN^CJAfm-`NmW!P(oG zK~y-)JeHcN;lpTQ3)w?X@5x*itV5{A5c#R(uUgy2aeB%$loeQ=Kx$`A6{S=Y3WoIi^_cGhX9gddwEg=0Q?Z34yP?_sg14l zcHNX)IT!nV>sJqF)3wsn#roC?0KoMO{~taAN4TCLgn$BooHK^b8>Qu@5Mr~eP0)5S zmx`pZT9Xt~5Vrf)r<4-04{$vrh6E~W(@8}?6eDvhrS$u#v3_!T>9_Gp`F@J|*Q5P5 zAKYEQSUp?YYQ7|*Tl>4mC-d0?IcKQ8^}jTe>fM}?0X!^(cqxYTBN2T>Qe1F7pI2J` zy?f{2M%|R3nL<4#6}`z`Up$;02n7HsW(X1}Dua`SBLG*lQEw|PFBg?T-};+<-+mA{ zc12~*XrrQ%a9C%S+ElMYq|9tHnq^ z(6?C>MFDaB+9%l$A>We*AZ)1-Lqg6O>>{eMU<>(ChYZpkSmzTtWm%V9Hb%uNb4!AzRR(r$4RTkgZHo6v6`s($MoAq0bUj44)50`=aYqgd0#f1`KG(KA}4mE+# zw;x^+TdiH*wO;IrO1XLi2!SPF3J4&<9}B<^!0PMe;qO=}SF?ZZ{;yK5W`7;_?fa*n Xzm%vv1R-6N00000NkvXXu0mjfxAgFt literal 0 HcmV?d00001