From a6497392bd3dc93c9173ab1eb00969029f9cea4f Mon Sep 17 00:00:00 2001 From: Duane Date: Thu, 9 Jun 2016 04:20:45 -0500 Subject: [PATCH] Clean up and adjust poison water. --- decogen.lua | 49 +++++++----------- mapgen.lua | 41 +++++++++------ nodes.lua | 18 ++++--- textures/fun_caves_water_poison.png | Bin 524 -> 618 bytes ...un_caves_water_poison_flowing_animated.png | Bin 4159 -> 4842 bytes ...fun_caves_water_poison_source_animated.png | Bin 3114 -> 3343 bytes 6 files changed, 56 insertions(+), 52 deletions(-) diff --git a/decogen.lua b/decogen.lua index f9637bf..e95e472 100644 --- a/decogen.lua +++ b/decogen.lua @@ -153,27 +153,21 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi break end - local biome_val = biome_n[index3d] - local stone_type = "default:stone" - local stone_depth = 1 - - -- Compress biomes at the surface to avoid fluids. - if y > fluid_compression then - biome_val = biome_val / max(1, log(y - fluid_compression)) - end - ------------------- - --biome_val = -0.75 - ------------------- - local biome = nil - if underzone and y < (underzone.ceiling + underzone.floor) / 2 then + local biome + --if underzone and y < (underzone.ceiling + underzone.floor) / 2 then + if underzone then biome = underzone - stone_type = underzone.floor_node - stone_depth = 2 - elseif underzone then - biome = underzone - stone_type = underzone.ceiling_node - stone_depth = 2 else + local biome_val = biome_n[index3d] + + -- Compress biomes at the surface to avoid fluids. + if y > fluid_compression then + biome_val = biome_val / max(1, log(y - fluid_compression)) + end + ------------------- + --biome_val = -0.75 + ------------------- + for _, bi in pairs(fun_caves.cave_biomes) do if biome_val >= bi.biome_val_low and biome_val < bi.biome_val_high then biome = bi @@ -187,9 +181,6 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi if not biome or (y < undersea and not biome.underwater) then biome = fun_caves.cave_biomes['algae'] end - - stone_type = biome.stone_type - stone_depth = biome.stone_depth end @@ -213,7 +204,7 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi end local air_above = false - for i = 1, stone_depth do + for i = 1, biome.stone_depth do if data[ivm + area.ystride * i] == node["air"] or (y < undersea and data[ivm + area.ystride * i] == node["default:water_source"]) then air_above = true end @@ -225,20 +216,20 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi write = true break else - data[ivm] = node[stone_type] + data[ivm] = node[biome.floor_node] write = true break end end local air_below = false - for i = 1, stone_depth do + for i = 1, biome.stone_depth do if data[ivm - area.ystride * i] == node["air"] then air_below = true end end - if not air_above and stone_type == "default:sand" then + if not air_above and biome.floor_node == "default:sand" then data[ivm] = node["default:sandstone"] write = true break @@ -250,7 +241,7 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi write = true break else - data[ivm] = node[stone_type] + data[ivm] = node[biome.ceiling_node] write = true break end @@ -285,13 +276,13 @@ fun_caves.decogen = function(minp, maxp, data, p2data, area, node, heightmap, bi end -- fluids - if y > minp.y and biome and biome.fluid and node_below == node[stone_type] and rand(biome.fluid_chance) == 1 then + if y > minp.y and biome and biome.fluid and node_below == node[biome.floor_node] and rand(biome.fluid_chance) == 1 then data[ivm] = node[biome.fluid] write = true break -- standing up - elseif node_below == node[stone_type] and biome and biome.stalagmite and rand(biome.stalagmite_chance) == 1 then + elseif node_below == node[biome.floor_node] and biome and biome.stalagmite and rand(biome.stalagmite_chance) == 1 then if type(biome.stalagmite) == 'table' then data[ivm] = node[biome.stalagmite[rand(#biome.stalagmite)]] else diff --git a/mapgen.lua b/mapgen.lua index 0fcd11a..13fffe1 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -87,6 +87,7 @@ fun_caves.underzones = { regular_columns = false, stalactite = 'fun_caves:icicle_down', stalactite_chance = 12, + stone_depth = 2, upper_bound = -4832, vary = true, }, @@ -104,6 +105,7 @@ fun_caves.underzones = { lake_level = 5, lower_bound = -10032, regular_columns = false, + stone_depth = 1, upper_bound = -9872, vary = true, }, @@ -112,11 +114,11 @@ fun_caves.underzones = { ceiling = -14914, ceiling_node = 'fun_caves:hot_brass', column_node = 'default:steelblock', - column_node_rare = nil, floor = -14982, floor_node = 'fun_caves:hot_brass', lower_bound = -14992, regular_columns = true, + stone_depth = 1, upper_bound = -14912, vary = false, }, @@ -134,6 +136,7 @@ fun_caves.underzones = { lake_level = 10, lower_bound = -19952, regular_columns = false, + stone_depth = 2, upper_bound = -19792, vary = true, }, @@ -141,12 +144,11 @@ fun_caves.underzones = { name = 'Styx', ceiling = -29812, ceiling_node = 'default:dirt', - column_node = nil, - column_node_rare = nil, floor = -30012, floor_node = 'default:dirt', lower_bound = -30032, regular_columns = false, + stone_depth = 2, sealevel = -29842, upper_bound = -29792, vary = true, @@ -157,111 +159,120 @@ fun_caves.cave_biomes = { algae = { biome_val_low = 0, biome_val_high = 0.2, + ceiling_node = 'fun_caves:stone_with_algae', dirt = 'default:dirt', dirt_chance = 10, + floor_node = 'fun_caves:stone_with_algae', fungi = true, stalactite = 'fun_caves:stalactite_slimy', stalactite_chance = 12, stalagmite = 'fun_caves:stalagmite_slimy', stalagmite_chance = 12, - stone_type = 'fun_caves:stone_with_algae', stone_depth = 1, underwater = true, }, coal = { biome_val_low = 0.5, biome_val_high = 0.6, + ceiling_node = 'fun_caves:black_sand', deco = 'default:coalblock', deco_chance = 100, - fungi = nil, + floor_node = 'fun_caves:black_sand', stalagmite = 'fun_caves:constant_flame', stalagmite_chance = 50, - stone_type = 'fun_caves:black_sand', stone_depth = 2, underwater = false, }, hot = { biome_val_low = 0.6, biome_val_high = 99, + ceiling_node = 'fun_caves:hot_cobble', + floor_node = 'fun_caves:hot_cobble', fluid = 'default:lava_source', fluid_chance = 300, stalagmite = fun_caves.hot_spikes, stalagmite_chance = 50, - stone_type = 'fun_caves:hot_cobble', stone_depth = 1, underwater = false, }, ice = { biome_val_low = -99, biome_val_high = -0.6, + ceiling_node = 'default:ice', + floor_node = 'default:ice', stalactite = 'fun_caves:icicle_down', stalactite_chance = 12, stalagmite = 'fun_caves:icicle_up', stalagmite_chance = 12, - stone_type = 'default:ice', stone_depth = 2, underwater = true, }, ice_thin = { biome_val_low = -0.6, biome_val_high = -0.5, - stone_type = 'fun_caves:thin_ice', + ceiling_node = 'fun_caves:thin_ice', + floor_node = 'fun_caves:thin_ice', stone_depth = 2, underwater = true, }, lichen = { biome_val_low = -0.3, biome_val_high = 0, + ceiling_node = 'fun_caves:stone_with_lichen', dirt = 'default:dirt', dirt_chance = 10, + floor_node = 'fun_caves:stone_with_lichen', fungi = true, stalactite = 'fun_caves:stalactite', stalactite_chance = 12, stalagmite = 'fun_caves:stalagmite', stalagmite_chance = 12, - stone_type = 'fun_caves:stone_with_lichen', stone_depth = 1, underwater = true, }, lichen_dead = { biome_val_low = -0.6, biome_val_high = -0.5, + ceiling_node = 'fun_caves:stone_with_lichen', + floor_node = 'fun_caves:stone_with_lichen', stalactite = 'fun_caves:stalactite', stalactite_chance = 12, stalagmite = 'fun_caves:stalagmite', stalagmite_chance = 12, - stone_type = 'fun_caves:stone_with_lichen', stone_depth = 1, underwater = true, }, moss = { biome_val_low = -0.5, biome_val_high = -0.3, + ceiling_node = 'fun_caves:stone_with_moss', deco = 'fun_caves:glowing_fungal_stone', deco_chance = 50, + floor_node = 'fun_caves:stone_with_moss', fluid = 'default:water_source', fluid_chance = 300, stalactite = 'fun_caves:stalactite_mossy', stalactite_chance = 12, stalagmite = 'fun_caves:stalagmite_mossy', stalagmite_chance = 12, - stone_type = 'fun_caves:stone_with_moss', stone_depth = 1, underwater = true, }, salt = { biome_val_low = 0.2, biome_val_high = 0.35, + ceiling_node = 'fun_caves:stone_with_salt', deco = 'fun_caves:radioactive_ore', deco_chance = 500, - stone_type = 'fun_caves:stone_with_salt', + floor_node = 'fun_caves:stone_with_salt', stone_depth = 2, underwater = false, }, sand = { biome_val_low = 0.35, biome_val_high = 0.5, - stone_type = 'default:sand', + ceiling_node = 'default:sand', + floor_node = 'default:sand', stone_depth = 2, underwater = true, }, @@ -282,7 +293,7 @@ local function generate(p_minp, p_maxp, seed) local write = false local write_p2 = false - local underzone = nil + local underzone for _, uz in pairs(fun_caves.underzones) do local avg = (minp.y + maxp.y) / 2 if avg <= uz.upper_bound and avg >= uz.lower_bound then diff --git a/nodes.lua b/nodes.lua index ba9319c..17fbd9d 100644 --- a/nodes.lua +++ b/nodes.lua @@ -80,22 +80,24 @@ minetest.register_node("fun_caves:leaves_black", newnode) newnode = fun_caves.clone_node("default:water_source") newnode.description = "Poisonous Water" -newnode.tiles[1].name = "fun_caves_water_poison_source_animated.png" -newnode.special_tiles[1].name = "fun_caves_water_poison_source_animated.png" +newnode.groups.poison = 3 +newnode.light_source = 6 newnode.liquid_alternative_flowing = "fun_caves:water_poison_flowing" newnode.liquid_alternative_source = "fun_caves:water_poison_source" -newnode.light_source = 6 -newnode.groups.poison = 3 +newnode.post_effect_color = {a = 103, r = 108, g = 128, b = 64} +newnode.special_tiles[1].name = "fun_caves_water_poison_source_animated.png" +newnode.tiles[1].name = "fun_caves_water_poison_source_animated.png" minetest.register_node("fun_caves:water_poison_source", newnode) newnode = fun_caves.clone_node("default:water_flowing") newnode.description = "Poisonous Water" -newnode.tiles[1] = "fun_caves_water_poison.png" -newnode.special_tiles[1].name = "fun_caves_water_poison_flowing_animated.png" +newnode.groups.poison = 3 +newnode.light_source = 6 newnode.liquid_alternative_flowing = "fun_caves:water_poison_flowing" newnode.liquid_alternative_source = "fun_caves:water_poison_source" -newnode.light_source = 6 -newnode.groups.poison = 3 +newnode.post_effect_color = {a = 103, r = 108, g = 128, b = 64} +newnode.special_tiles[1].name = "fun_caves_water_poison_flowing_animated.png" +newnode.tiles[1] = "fun_caves_water_poison.png" minetest.register_node("fun_caves:water_poison_flowing", newnode) --minetest.register_node("fun_caves:bright_air", { diff --git a/textures/fun_caves_water_poison.png b/textures/fun_caves_water_poison.png index 58eaf97e9f8c073d22ea1cdfb4298cf451d739f5..c4197c9b2183e3775cf946436cb6b7d73e33d192 100644 GIT binary patch delta 546 zcmV+-0^R+L1nLBkQ-28w4Jt_-ha3O^0ryEnK~y-)U6b9e+At7=KWyg*0*wHrEtPnT zzF%LXcYQi^)QHdk20O7$FP!+C)>oExcRaH*Ui|p={U_7OOUbq==sQdB;Ko4kFPsbH zh2(JDaBelhL%EV%y8%&F5+N7lr3B#8TIyYa8v}VMC@VSRbAN6%^{!ys6b#mrmlBm1 z?+w9&kf5XjVBb{Su7R0DhGnlw6;6sCD-&DkU)SH)*Qbx)3Zj$i- zFo2K?1`}xCG=FXk2)Rh^U~&c zA^|+^Bdc|W^X}b+Ga9!$Mej3#8^b>@t4y$3XACBSlq*T!*|@~KkPIepX)Vpyip?ju zT@BrD6H{5p6s{Dw(=!6ksT!=0_IbypwYV{6LMg$z&XV_o3CXo<_d>)^^hyB&((ruD k!>3<5_Z#2)5$6Jb0YA=7o3*Po2LJ#707*qoM6N<$g0iXtasU7T delta 451 zcmV;!0X+Wd1dIfbQ-25r3>YbPdE5X10hvieK~y-)ZIelITQLkoA4h);v8uF5RW9Qr z_C0= zX{*=}?Fa_g*Fu~ek}Dxv`a8ff3vqJ19UQG{j5n46Y7LA5?|%&d$FpZ$1ncyiQzfT5 zn0jyUAv*T8jEcvz2Q=xr2q8LZ(RONS0Hjhd2C@b3y@7+$0=Rt(#z34LITgG&?DrOh zI`kO2EwhkQ9T(4l6%-VNgoPR9A*irqNk+G0dAt$Z=T*UW&)24l@fOgy|Q0>jBlD5j}JrF0y?JMI? z@8J$EBXfxAz~vedX{4=?)5FGnRU0qYh)r7|ZH436bNxMy%(d_m+;!^3TGRL8!ZHgY zO}!5m$#u}Kr9ohfIP||zR7C3xIaOMN(=SzeU4-pc?mS>KhHDJmSAG?-yCKrXX!qba t+2MU>94D*4k^ih7{IKisOCLIDYd^Z`CetO*ymSBn002ovPDHLkV1mPL-(3Iz diff --git a/textures/fun_caves_water_poison_flowing_animated.png b/textures/fun_caves_water_poison_flowing_animated.png index cd733c9403e2251d922cee32681c7b3375cb1351..15178ab123fbca58906df0051b018b73f51412f8 100644 GIT binary patch literal 4842 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 literal 4159 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